A self-organizing team of AI agents, in an environment you control.
Every seam, an interface. Every run, a record. Describe the goal; the coordinator plans the rest, and every step stays in your hands.
const oma = new OpenMultiAgent({ maxConcurrency: 3 })const team = oma.createTeam('security-analysis-team', { agents: [{ name: 'attack-surface-reviewer', systemPrompt: '…', maxTurns: 2 },// … data-security-reviewer, supply-chain-reviewer, synthesizer] })const goal = 'Review this service for security vulnerabilities…'const result = await oma.runTeam(team, goal)
#4f90f545Attack surface review: authentication, endpoints, and trust boundariesattack-surface-reviewer10.7s#b47191e7Data security review: injection, secret handling, and sensitive datadata-security-reviewer34.8s#d1c1ab67Supply chain review: dependencies, configuration, and deploymentsupply-chain-reviewer40.8s#168862baafter 3Synthesize severity-ranked security reportsynthesizer51.3sFrom intent to a controlled, inspectable run.
Choose the topology, move ready work, gate or suspend at the right boundary, recover and revise, and keep evidence you can verify.
Give runTeam() a goal and get a reviewable task DAG, or hand runTasks() the graph you wrote. Mode, governance, or an ExecutionRouter decides single agent or team.
runTeam · runTasks · mode · strategy: 'hybrid'Downstream tasks start the moment their dependencies finish, with no round barriers. Approve each dispatch, and a task no agent can satisfy is rejected before it runs.
event-driven · onTaskDispatch · requires · taskResultsGate the plan, a ready task, or a consequential tool call, each at its own boundary. Return { action: 'suspend' } and the decision waits in the checkpoint store until another process makes it.
onPlanReady · onToolCall · { action: 'suspend' } · decideApproval · restoreRestore resumes from the last safe boundary and replays committed tool results instead of re-running them. In repairable mode, a validated PlanPatch revises the part of the graph that has not run.
checkpoint · toolCallId · recovery.mode: 'repairable' · PlanPatch · maxCostBudgetReceipts, traces, and the offline Run Viewer show what each run did. Turn on the run journal and verifyRun() proves what the model saw from the events alone; the same records feed EvalSets and CI gates.
receipt · TraceStore · RunJournal · verifyRun · EvalSetCloud, local, or air-gapped models on your credentials, with three runtime dependencies. Tools are default-deny, egress policy bounds the built-in adapters, and Claude Code, Codex, or Gemini CLI join the DAG over ACP.
default-deny tools · egressPolicy · ShellExecutor · ACPInspect what happened after every run.
The offline Run Viewer turns a completed run into reviewable evidence, without sending it to a hosted OMA service. With the run journal on, verifyRun() checks the same run again from its own events.
- Task DAG and assignees
- Model, provider, token, and cost rollups
- Tool calls, status, and safe evidence details
- Journaled runs: every adapter call and every block the model saw
Three workflows, three orchestration choices.
Pick the outcome, open the recipe, run it.
goal-driven · runTeam()A coordinator picks the specialists a shipping or billing escalation needs and synthesizes their evidence.
explicit DAG · runTasks()Extract clauses once, check compliance and summarize in parallel, then notify.
explicit DAG · runTasks()Three investigations run in parallel, then feed a root-cause hypothesis and the postmortem.
Open source, live from the repo.
Repository numbers and three real projects, each one checkable.
WordPress security analysis platform. Runs OMA's built-in bash, file, and grep tools inside Docker.
AI pull-request reviewer. A coordinator plus scoped reviewer agents, with custom tools and token-aware diff compression.
Terminal coding assistant. Drives an OMA team through runAgent, runTasks, and runTeam with a custom coordinator, on DeepSeek.
How the TypeScript runtime behaves.
Straight answers to the questions that come up most. The full reference lives in the docs.
