TypeScriptMITCreated Mar 31, 2026Last push 2d agoLatest release v1.21.0+18 stars this week+112 this month
Quick answers
What is open-multi-agent?
TypeScript orchestration framework that dynamically plans and executes tasks using multiple AI agents locally.
What does open-multi-agent do?
Open Multi-Agent shifts away from rigid, pre-defined execution graphs by utilizing a dynamic coordinator that plans task sequences at runtime based on high-level user goals. Written entirely in TypeScript, it acts as an orchestration layer that connects specialized AI agents to collaborate seamlessly. The framework is highly model-agnostic, supporting integration with external APIs like Claude and Gemini, as well as local execution via Ollama. This architecture allows developers to define what needs to be accomplished rather than explicitly hardcoding the entire execution path. It ensures privacy and full developer control by running complex multi-agent workflows locally.
Who is open-multi-agent for?
TypeScript developers and AI engineers building complex, goal-driven applications that require dynamic planning. It demands a solid understanding of language model capabilities and Node.js backend development.
How do I get started with open-multi-agent?
npm install @open-multi-agent/core
How popular is open-multi-agent on GitHub?
open-multi-agent/open-multi-agent has 6,972 stars and 2,434 forks on GitHub, and gained 18 stars in the last 7 days.
What license does open-multi-agent use?
open-multi-agent/open-multi-agent is released under the MIT license.
Star history
since Jul 28, 2026
7K stars as of Oct 3, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.
Update history
1 recorded
Oct 4, 2026Previously tracked as JackChen-me/open-multi-agent; its 1 daily snapshot and 3 trending appearances were merged into this profile. Stars: 6,669 on 2026-07-28 under the old name, 6,972 on 2026-10-03 (+303).
Contribution activity
commits per day, last 52 weeks
525 commits in the last yearLessMore
Signals and awards
derived from tracked data
Very active
525 commits in 52 weeks
Well documented
High community health score
Permissive license
MIT
Continuous integration
Automated checks passing
Repeat trending
3 trending appearances
What open-multi-agent does
Open Multi-Agent shifts away from rigid, pre-defined execution graphs by utilizing a dynamic coordinator that plans task sequences at runtime based on high-level user goals. Written entirely in TypeScript, it acts as an orchestration layer that connects specialized AI agents to collaborate seamlessly. The framework is highly model-agnostic, supporting integration with external APIs like Claude and Gemini, as well as local execution via Ollama. This architecture allows developers to define what needs to be accomplished rather than explicitly hardcoding the entire execution path. It ensures privacy and full developer control by running complex multi-agent workflows locally.
TypeScript developers and AI engineers building complex, goal-driven applications that require dynamic planning. It demands a solid understanding of language model capabilities and Node.js backend development.
Dynamic execution planning: Automatically generates Directed Acyclic Graphs at runtime based on high-level goal descriptions.
Model-agnostic orchestration: Supports seamless integration with diverse language models including Claude, Gemini, and local Ollama.
Local privacy processing: Runs the entire multi-agent orchestration layer directly within the user's secure environment.
TypeScript architecture: Provides a robust, strongly-typed codebase for easy integration into existing Node.js backend services.
Specialized agent coordination: Manages state, communication, and tool access between disparate agents working on complex tasks.
Where teams use it
Dynamic workflow generation
Systems handle unpredictable user requests by mapping out custom execution steps on the fly without rigid programming.
Privacy-first processing
Enterprises run sensitive data analysis workflows entirely on local hardware using Ollama to ensure data protection.
Self-healing code pipelines
Developers deploy agents that can write code, run tests, and dynamically adjust their approach if errors occur.
Automated data synthesis
Users coordinate a swarm of specialized agents to independently gather and summarize information from multiple sources.
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.
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.constoma=newOpenMultiAgent({defaultProvider: 'openai',defaultModel: 'gpt-5.4',// Consequential tool calls (file writes, shell) pause for a human decision.onToolCall: ({ consequential })=>(consequential ? {action: 'suspend'} : {action: 'allow'}),})constteam=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.constresult=awaitoma.runTeam(team,'Find overdue invoices and draft the reminders.',{checkpoint: {store: newFileStore('./.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.
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.
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.
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 / runTeam with a custom coordinator, paired with DeepSeek.
Reports to Charts Studio. Turns documents and research tables into slide-ready charts, using a five-role extraction council with structured outputs and deterministic validation.
Integrations
@agentsonar/oma: Sidecar detecting cross-run delegation cycles, repetition, and rate bursts.
CodingScaffold: Agentic-coding scaffold that lists OMA as an optional orchestration backend, with a runTeam workflow template.
baize-oma: HTTP adapter exposing OMA runAgent() and runTeam() as Baize slot capabilities.
We build customer-owned systems on OMA for organizations that need one. Email jack@yuanasi.com.
Sponsors
Paid sponsors supporting open-multi-agent. Sponsorship does not affect technical decisions or model recommendations.
Providers
Atlas Cloud: Full-modal AI inference platform giving one API for video, image, and LLM across 300+ curated models. $5 credit vouchers for OMA users, first come first served. See the Atlas Cloud setup guide.
Optional coordinator
runTeam() decomposes a goal into a task graph across agents. One model call turns the goal into task specs with assignees and dependencies, a deterministic scheduler executes them, and a second call writes the final answer from the completed task outputs. The coordinator is never consulted mid-run, and the finished run is data you can read back. Use runAgent() or runTasks() when you already know the work.
import{OpenMultiAgent}from'@open-multi-agent/core'constoma=newOpenMultiAgent({defaultProvider: 'openai',defaultModel: 'gpt-5.4'})constteam=oma.createTeam('research-team',{name: 'research-team',agents: [{name: 'researcher',systemPrompt: 'Find the relevant facts.'},{name: 'analyst',systemPrompt: 'Compare evidence and identify tradeoffs.'},],sharedMemory: true,})constresult=awaitoma.runTeam(team,'Compare three approaches and recommend one.')// Nothing above declares a task graph. The coordinator planned one at runtime,// and the finished run is data you can read back.for(consttaskofresult.tasks??[]){console.log(`[${task.status}] ${task.title} → ${task.assignee??'unassigned'}`,task.dependsOn)}console.log(result.agentResults.get('coordinator')?.output)console.log(result.totalTokenUsage)
The offline Run Viewer replaying a real run from the trace store: task DAG, span waterfall, and per-task evidence, with no hosted service involved.
Coordinator covers what it decides and what it is allowed to see. Plan replay freezes an approved plan, Consensus verifies outputs with independent judges, and External agents puts Claude Code, Gemini CLI, and Codex on the same task graph through process and ACP backends.
Packages
@open-multi-agent/core: Runtime, tools, memory, checkpoints, approvals, journal, traces, CLI, and offline Run Viewer.
@open-multi-agent/otel: Optional OpenTelemetry adapter for teams with a centralized OpenTelemetry stack.
create-oma-app: Scaffolder behind npm create oma-app; starter templates with a no-key local demo.
Core users can store traces locally and inspect them with the offline Run Viewer. Install the OTel package only when OMA traces should appear in the same monitoring system as the rest of your application.
### Added
- Added runImage() for image generation and editing across an ordered chain of image models, with per-model retries that honor Retry-After, fallback on non-retryable failures, an optional validate check on each returned image, and a record of every provider call through result.attempts and onAttempt.
- Added the ImageModelAdapter interface and four built-in adapters that call provider HTTP APIs directly and honor egressPolicy: OpenAIImageAdapter (OpenAI Images API and OpenAI-compatible endpoints), SeedreamImageAdapter (Seedream on Volcengine Ark), OpenRouterImageAdapter (OpenRouter /images, sending input images as input_references), and BlackForestLabsImageAdapter (FLUX models, submit/poll/download).
- Added ImageModelError with normalized ImageModelErrorType values; isRetryableError() returns its retryable flag, its optional params carries details of already-accepted provider work such as a task ID and cost into the failed attempt record, and ImageCallOptions.maxRetryAfterMs tells an adapter that waits internally the longest Retry-After runImage() allows.
- Image adapters classify safety or moderation rejections, including upstream rejections forwarded in error.metadata
### Added
- Added an optional positive-integer GateThreshold minSamples guard. A threshold below the minimum reports insufficient_samples with the observed count as actual and the configured minimum as limit; score metrics compare against the selected aggregate scoredCount, passRate compares against passSampleCount, and tag-scoped thresholds use the tag aggregate own counts.
- Added ScorerAggregate passSampleCount, the number of scored records that define pass. It is emitted whenever passRate is emitted, including on tag aggregates.
### Changed
- Baseline regression comparisons are skipped with a warning when either the current or baseline aggregate holds fewer than minSamples samples; this can turn a previously reported regression failure into a warning.
- A report or baseline written before passSampleCount existed fails closed at zero samples for passRate guards rather than skipping the guard.
- Updated the shipped README and npm package description to lead with OMA as the project name and reposition around owning, approving, and auditing.
### Compatibility
- Omitting minSamples preserves previous threshold and regression behavior, and the report schema version remains uncha
### Added
- Added an opt-in authoritative run store through `OrchestratorConfig.runStore` and `RunTasksOptions.runStore`; it gives a logical run a durable lifecycle record, an execution lease, and a monotonically increasing fencing token so one worker at a time advances the run and a worker that was taken over cannot write after the takeover.
- Added the `RunStore` interface, the `MemoryStoreRunStore` adapter over any `MemoryStore` with compare-and-set, and the `RunLedger` and `RunLeaseHandle` surface for reading, cancelling, and resuming a run from outside its worker.
### Changed
- `TeamConfig.maxConcurrency` now bounds the agent pool for that team's runs instead of being accepted and ignored. It intersects with `OrchestratorConfig.maxConcurrency`, and the smaller value wins, so a team can narrow its own pool but never widen it past the orchestrator ceiling. A team that set a cap below the orchestrator's was previously running at the orchestrator value and now runs at its own lower value; raise or remove the team cap to keep the previous throughput. A cap that is not an integer of at least 1 is reported as an `INVALID_TEAM_MAX_CONCURRENCY` warning on `onProgress` and the orches
### Added
- Added VideoBlock with base64 or absolute HTTP(S) URL sources to the public content-block API, serialized as an OpenAI-compatible video_url part for MiniMax-compatible chat.
- Added UnsupportedContentBlockError for adapters that cannot represent a content block; unsupported video input is terminal and excluded from retry classification.
- Tool input and output are now recorded on execute_tool v2 spans as oma.tool.input and oma.tool.output when the trace capture policy opts in.
- Added contentCapture: { mode: 'upstream-policy' } to @open-multi-agent/otel 0.1.3, forwarding core's opt-in tool input/output attributes.
- Evaluation judgePrompt can now return per-judge structured LLMMessage[] input in addition to the existing plain-text form.
### Changed
- Context-summary preparation now strips video blocks like image blocks, and token estimation sizes inline video as rich media so compaction triggers correctly.
- The @open-multi-agent/otel contentCapture option is widened from only 'disabled' to 'disabled' or 'upstream-policy'; default behavior is unchanged.
- Evaluation judgePrompt is now invoked once per judge instead of once per score() call, so a quorum calls it once f
### Added
- Added an opt-in append-only run event journal (RunEvent vocabulary, InMemoryRunJournal, JsonlRunJournal) that records every adapter call and the per-block lineage of what the model saw.
- Added verifyRun() to cold-verify a finished run journal, proving model-visible blocks are reproducible from the events they name.
- Added journal-watermarked checkpoint schema v5 for journaled runs; v1–v4 snapshots keep loading and unjournaled runs keep writing byte-identical v4 snapshots.
- Added JournalLineageError and the enforceLineage switch; built-in context strategies now emit context/replace events for every persistent rewrite.
- Added per-call journal options to runAgent/runTasks options and OrchestratorConfig, off by default with best-effort appends that never fail the run.
### Changed
- Journaled restores now replay the journal tail after the stalest per-task watermark, re-anchoring in-flight state and replaying committed tool results that reached the journal but not the checkpoint.
### Fixed
- Aligned JSON Schema required fields with Zod validation.
### Compatibility
- Run journaling and checkpoint v5 are opt-in and additive: no public export was removed or narrowed,
Code frequency
additions and deletions
+274.2K lines added, -113.5K removed over the last year.
Commits per week
last 52 weeks
525 commits in the last 52 weeks.
When work happens
weekday and hour
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.