Overview
Open Multi-Agent (OMA) is a self-hosted TypeScript runtime for teams of agents, built around a governance question rather than a capability one: who approved the action, and can you prove afterwards what the model actually saw. It runs on your own infrastructure with your own keys and endpoints, whether a hosted provider, an OpenAI-compatible server or a local model reached through `baseURL`.
Its two distinguishing mechanisms are durable approvals and a verifiable journal. A plan, task dispatch or tool-call gate can return `suspend`; the request is stored beside the run checkpoint and bound to a SHA-256 hash of exactly what the reviewer was shown, so the run survives a restart and resumes from that content. Decisions are atomic and first-wins, and a tampered request — or a store without compare-and-set — fails closed rather than quietly proceeding.
The journal records every block the model saw, every tool call and result, and every context rewrite. `verifyRun()` reads it back cold and offline and checks that each block's named source event still reproduces it byte for byte. The project is precise about what this proves: lineage and content, not that the file was never edited, and an evicted context window is reported as inconclusive rather than as a failure. Three execution modes are exposed — `runAgent()` for a single agent, `runTasks()` for an explicit pipeline, and `runTeam()` to plan from a goal.
What it does
- Durable approvals: consequential tool calls suspend and wait for a human decision that survives a restart
- Approval requests bound to a SHA-256 hash of exactly what the reviewer saw; tampering fails closed
- Verifiable journal with `verifyRun()`, replayed cold and offline to check each block byte for byte
- Three execution modes: `runAgent()`, `runTasks()` for explicit pipelines, and `runTeam()` to plan from a goal
- Checkpoint stores (such as `FileStore`) keep runs and pending approvals durable
- Bring your own provider and endpoint — hosted, OpenAI-compatible, local servers or AI SDK providers
Getting started
The scaffolder is the fastest path: in an interactive terminal it picks a starter and runtime, installs dependencies and runs a deterministic local demo that needs no API key and makes no model request — scripted responses drive the real scheduler, aggregation and offline dashboard.
Scaffold a project
Creates a starter such as a PR review agent, a security analysis agent or a teaching DAG.
npm create oma-app@latest my-omaOr add OMA to an existing backend
Install the core package into a project you already have.
npm install @open-multi-agent/coreGate consequential tool calls and run a team
`onToolCall` decides what pauses. The checkpoint store keeps the run and its pending approvals durable across restarts. Set OPENAI_API_KEY to run this example.
import { FileStore, OpenMultiAgent } from '@open-multi-agent/core'
const oma = new OpenMultiAgent({
defaultProvider: 'openai',
defaultModel: 'gpt-5.4',
// Consequential tool calls (file writes, shell) pause for a human decision.
onToolCall: ({ consequential }) => (consequential ? { action: 'suspend' } : { action: 'allow' }),
})
const team = oma.createTeam('ops', {
name: 'ops',
agents: [{ name: 'operator', systemPrompt: 'Reconcile overdue invoices.', toolPreset: 'readwrite' }],
})
const result = await oma.runTeam(team, 'Find overdue invoices and draft the reminders.', {
checkpoint: { store: new FileStore('./.oma/run.json') },
})Resolve the pending approvals
`result.status?.code` stays `'suspended'` until a reviewer decides `result.pendingApprovals` — each one bound to a hash of what that reviewer was shown.
Commands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Run agents that touch production systems where every consequential action needs a named human approver
- Satisfy an audit by replaying offline exactly which context a model saw before it acted
- Keep an agent workflow entirely on your own infrastructure and model endpoints
- Build a review or analysis pipeline where tasks are an explicit DAG rather than an open-ended loop
How Open Multi-Agent compares
Open Multi-Agent alongside other open-source multi-agent systems tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| Paperclip | ★ 106k | A self-hosted control plane that runs a team of AI agents like a company, with an org chart, tasks, budgets and approvals. |
| Ruflo | ★ 78.5k | Agent meta-harness that wraps Claude Code and Codex with 100+ specialized agents, swarm coordination, vector memory, background workers and cross-machine agent federation. |
| MetaGPT | ★ 71k | A multi-agent framework that models a software company, assigning roles like product manager, architect, and engineer to generate code from a single prompt. |
| AutoGen | ★ 61.5k | Microsoft Research's framework for building applications where multiple agents converse with each other and with tools to solve tasks. |
| CrewAI | ★ 60k | A framework for assembling teams ('crews') of role-playing agents that divide tasks and collaborate to complete a goal. |
| AgentScope | ★ 33.7k | A framework for building multi-agent applications with message passing, visual debugging tools, and distributed execution. |
| OpenAI Agents SDK | ★ 30.2k | OpenAI's lightweight Python SDK for building multi-agent workflows using explicit handoffs, tools, and guardrails. |
| Open Multi-Agent | ★ 7k | Self-hosted agent runtime with durable approvals and verifiable runs |