open-multi-agent is a free, open source monitoring & observability project written in TypeScript and released under MIT. It has 6,935 GitHub stars, 2,432 forks and 4 open issues, and was last pushed 9 hours ago. On this registry it ranks #58 of 97 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available.

What is open-multi-agent?

OMA (Open Multi-Agent) is a self-hosted TypeScript agent runtime for teams that need consequential agent actions to wait for durable, tamper-evident approvals and every run to leave a record that can be verified offline, byte for byte.

What it is

OMA is an MIT-licensed TypeScript runtime for building and running AI agents that an organization can own, approve, and audit. It runs single agents, explicit task pipelines, and goal-driven teams, and it reaches cloud and local models alike: hosted providers, OpenAI-compatible endpoints, AI SDK providers, and local servers such as Ollama, vLLM, and llama-server. It ships no telemetry and no hosted control plane, so keys, models, and environment stay with the operator. The runtime requires Node.js 20 or newer, with a maintained LTS release recommended for production.

The problem it solves is the gap between an agent that can act and an organization willing to let it. File writes and shell commands are the consequential operations, and a tool-call gate can return suspend so the run stops and waits for a human decision instead of proceeding silently. The pending request is stored beside the run checkpoint, so a restart does not lose the decision or repeat the action. This replaces the default posture of a hosted agent control plane, where orchestration, credentials, and run history live with the vendor and stop working when that vendor or its team does.

Key capabilities

  • Three execution modes: runAgent() runs one agent, runTasks() executes an explicit pipeline, and runTeam() plans from a goal.
  • Durable approvals: a plan, dispatch, or tool-call gate returns suspend, the request is persisted beside the checkpoint and bound to a SHA-256 hash of exactly what the reviewer saw, and the run resumes from that content after a restart.
  • Atomic, fail-closed decisions: a decision is first-wins, and a tampered request or a store without compare-and-set fails closed rather than guessing.
  • Verifiable journal: verifyRun() reads the record back cold and offline, checking that each block's named source event still reproduces it byte for byte; an evicted window is reported as inconclusive, not as a failure.
  • Governance floor: declaring governanceIntent: 'required' with requiredRoles applies that execution constraint to the run.
  • Provider and credential control through defaultProvider, defaultModel, and baseURL for local or OpenAI-compatible servers.
  • One-command scaffolding: npm create oma-app@latest my-oma selects a starter and runtime, installs dependencies, and runs a deterministic local demo that needs no API key and makes no model request.

Who uses it and how

  • Teams scaffolding a PR review agent, a security analysis agent, or a teaching DAG from the starter selection.
  • Existing backends that add @open-multi-agent/core and keep their own model keys and endpoints.
  • Organizations that require a named reviewer role before file writes or shell commands proceed, using the durable approval store.
  • Operators who need an offline audit trail, verifying the journal with verifyRun() without network access.
  • Environments running local models through Ollama, vLLM, or llama-server, where no telemetry and no hosted control plane are hard requirements.

Getting started

Scaffold a new project with npm create oma-app@latest my-oma, or install @open-multi-agent/core into an existing backend and set the provider credentials, for example OPENAI_API_KEY.

How it compares

No paid products and no comparable tools are named in the available facts, so OMA stands alone in this registry. Its differentiation rests on the claims it makes for itself: self-hosted operation, offline-verifiable run records, and durable human approval gates.

When to use it — and when not to

Pick OMA when the run record matters more than the shortest path to a demo, and accept the operations self-hosting brings: a checkpoint store such as FileStore('./.oma/run.json'), a journal backend, and provider credentials. It is a poor fit for anyone who wants a managed control plane, and verification carries a stated limit — it proves lineage and content, not that the file was never edited. Node.js 20 is upstream-EOL and retained only as a migration window, to be removed no earlier than 2026-10-31.

project readme (upstream, from github) — read inline


OMA

Agents your organization can own, approve, and audit.
OMA (Open Multi-Agent) is a self-hosted TypeScript agent runtime: consequential actions wait for durable, tamper-evident approvals, and every run leaves a record you can verify offline, byte for byte.

npm version Node.js version CI Supply chain audit codecov MIT License

Website · Docs · Examples · npm

English · 中文


No telemetry. No hosted control plane. Your keys, your models — cloud, local (Ollama, vLLM, llama-server), or Chinese providers — your environment. Nothing stops working when the people who built it leave.

Get started

Requires Node.js 20 or newer. For production, use a currently maintained Node.js LTS release. Node.js 20 is upstream-EOL and retained only as a migration compatibility window; OMA will remove it in the next major release, no earlier than 2026-10-31.

Scaffold a PR review agent, security analysis agent, or teaching DAG:

npm create oma-app@latest my-oma

In an interactive terminal, that one command selects a starter and runtime, installs dependencies, and runs a deterministic local demo. The demo needs no API key and makes no model request: scripted model responses drive the real OMA scheduler, result aggregation, and offline dashboard.

Or add OMA to an existing backend:

npm install @open-multi-agent/core
import { FileStore, OpenMultiAgent } from '@open-multi-agent/core'

// Your keys and your endpoint: a hosted provider, or a local server through baseURL.
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' }],
})

// The checkpoint store keeps the run and its pending approvals durable.
const result = await oma.runTeam(team, 'Find overdue invoices and draft the reminders.', {
  checkpoint: { store: new FileStore('./.oma/run.json') },
})

// result.status?.code === 'suspended' until a reviewer decides result.pendingApprovals,
// each bound to a hash of exactly what the reviewer was shown.

Set OPENAI_API_KEY to run this example. Providers covers other hosted models, local servers, OpenAI-compatible endpoints, and AI SDK providers.

runAgent() runs a single agent, runTasks() executes an explicit pipeline, and runTeam() plans from a goal. The Core package guide walks through all three modes, provider and credential setup, and the production checklist. The example index lists every runnable example across basics, cookbook workflows, patterns, providers, and integrations.

Durable approvals

A plan, task dispatch, or tool-call gate can return suspend. The request is stored beside the checkpoint, bound to a SHA-256 hash of exactly what the reviewer saw, and the run resumes from that content after a restart. A decision is atomic and first-wins; a tampered request or a store without compare-and-set fails closed.

approval/durable.ts · durable-approval.test.ts (16 cases) · durable-approval-validation.test.ts (7 cases) · Guide

Verifiable journal

Attach a journal backend and the run records every block the model saw, every tool call and result, and every context rewrite. verifyRun() reads it back cold, offline, and checks that each block's named source event still reproduces it byte for byte; an evicted window is reported as inconclusive, not as a failure. It proves lineage and content, not that the file was never edited.

journal/verify.ts · journal/hash.ts · verify-run.test.ts (11 cases) · Guide

Governance floor

Declare governanceIntent: 'required' with requiredRoles, and the run is judged on an execution receipt: which roles ran, in what order, with which dependency edges, and whether an independent review happened. The evaluator never sees agent output text, and a run can succeed and still report unsatisfied.

orchestrator/governance.ts · observability/execution-receipt.ts · governance-floor.test.ts (16 cases) · Guide · Receipts

Runs where you run

  • No telemetry, no hosted control plane. A library with no OMA backend or account, and none planned. It makes no analytics, license, update, or phone-home request. Self-hosting
  • Your keys, your models. Built-in adapters for Anthropic, OpenAI, Azure OpenAI, Bedrock, Gemini, Grok, and Copilot, and for DeepSeek, Doubao, Hunyuan, MiniMax, MiMo, and Qiniu; Ollama, vLLM, and llama-server through baseURL; any OpenAI-compatible endpoint and Vercel AI SDK providers. Providers
  • Egress policy. offline or allowlist, checked before a built-in adapter connects. A child policy can only tighten its parent, an unenforceable transport fails closed, and process and ACP backends sit outside it. LLM egress policy

Built with OMA

open-multi-agent launched 2026-04-01 under MIT. Known users and integrations to date:

  • temodar-agent by Ali Sünbül. WordPress security analysis platform running OMA's built-in tools (bash, file_*, grep) inside a Docker runtime. Confirmed production use. (~60 stars)
  • Mark Galyan runs OMA fully offline on local quantized models, using the coordinator and context compaction to keep autonomous agent loops alive under tight VRAM limits. Contributor since the framework's first month.
  • Engram: "Git for AI memory." Syncs knowledge across agents instantly and flags conflicts. (repo, ~80 stars)
More users and integrations

Users

  • PR-Copilot by kidoom. AI pull-request review assistant running an OMA review team, with defineTool repo-context tools and a custom ContextStrategy for token-aware diff compression.
  • StuFlow by znc15. Terminal AI coding assistant on OMA's orchestration core, driving runAgent / `runTasks

readme truncated — read the full docs on github

Frequently asked questions

Is open-multi-agent free to use?

open-multi-agent is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does open-multi-agent do?

Self-hosted TypeScript agent runtime with durable approvals and verifiable run records. Own it, approve it, audit it.

What is open-multi-agent written in?

open-multi-agent is primarily written in TypeScript. Its source is publicly available at https://github.com/open-multi-agent/open-multi-agent, and it has 6,935 GitHub stars.