Model or dataset
open-multi-agent/open-multi-agent avatar
open-multi-agent/open-multi-agent

Open Multi-Agent: A TypeScript Orchestrator That Builds Its Own Task DAG at Runtime

TypeScript AI agent orchestration framework with dynamic workflows. Describe the goal, not the graph: a coordinator plans the task DAG at runtime and runs it on any LLM (Claude, ChatGPT, Gemini, DeepSeek, or local models).

6,922 stars2,432 forksTypeScriptMIT

At a glance

What is it?
Open Multi-Agent is a TypeScript framework that turns a single goal into a dynamic task DAG, then executes it across a team of LLM agents. It targets Node.js backends that need inspectable, resumable, and replayable multi-agent runs without hand-wiring a graph.
Who is it for?
Adopt Open Multi-Agent if you are building a TypeScript backend that needs multi-agent orchestration with dynamic planning, checkpoint-based resume, and built-in observability, and if you want to run on your own credentials or offline. Do not adopt it if you require a fixed, statically declared graph with no runtime drift, or if you cannot accept the coordinator's planning step as an extra failure point.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Open Multi-Agent Solves

Multi-agent systems in production often fail because the orchestration graph is hard-coded. You design a flowchart, wire it to agents, and then every change to the workflow means editing code. Open Multi-Agent addresses this by moving the graph construction to runtime. Instead of declaring a task DAG, you give the framework a goal, and a coordinator builds the DAG dynamically. This is for TypeScript backend developers who want to embed AI agents into a Node.js application without maintaining a static pipeline. The README's tagline, 'Describe the goal, not the graph,' captures the core value. It also targets teams that need control: preview, approve, and suspend plans, plus replay and resume. The intended user is an engineer who wants the flexibility of dynamic planning but also needs the reliability of checkpoints and budgets.

How the Coordinator Plans and Executes

The mechanism is visible in the API. You create an OpenMultiAgent instance with a default provider and model, then create a team with named agents and system prompts. When you call runTeam(team, goal), the coordinator takes the goal, plans a task DAG, assigns work to the agents, and synthesizes a result. The README stresses that 'Nothing above declares a task graph,' meaning the planning is entirely internal. A deterministic scheduler then executes the DAG across the team. The framework supports three modes: runTeam for goal-driven planning, runAgent for a single agent, and runTasks for an explicit pipeline. This gives you a spectrum: full dynamic planning, single-agent execution, or a fixed pipeline when you need deterministic topology. The coordinator is itself an agent in the team, since the example reads result.agentResults.get('coordinator')?.output. That means the planner is not a separate system but one of the agents, which is a design choice worth noting.

Getting Started: Commands and Configuration

The quickest path is the scaffolder. Run 'npm create oma-app@latest my-oma' and it selects a starter, installs dependencies, and runs a deterministic local demo. That demo needs no API key; scripted model responses drive the real scheduler, so you can see the orchestration without spending tokens. For an existing backend, install the core package with 'npm install @open-multi-agent/core'. The minimal setup creates an OpenMultiAgent with defaultProvider: 'openai' and defaultModel: 'gpt-5.4', then creates a team with agents and sharedMemory: true. You set OPENAI_API_KEY to run it. The README mentions a full example with DAG readback, token usage, and model overrides, and it points to a providers doc covering hosted models, local servers, OpenAI-compatible endpoints, and AI SDK providers. There is also a fallback parser for local models that emit tool calls as text, which is a concrete configuration detail for offline use.

Reliability and Recovery Mechanisms

The framework includes several mechanisms to keep runs bounded and recoverable. Retries, timeouts, loop detection, and token and cost budgets are listed as built-in controls. Interrupted runs can be resumed from checkpoints, and there is an option for append-only plan repair at task outcome barriers. This addresses a real failure mode in long-running agent loops: a crash or a model call failure can otherwise invalidate the whole run. The README also mentions previewing, approving, or durably suspending plans, task dispatches, and tool calls. Approved plans can be frozen for replay. These features suggest a design where human oversight is a first-class concern, not an afterthought. However, the material does not specify how checkpoints are stored or how the resume API looks, so you would need to consult the docs to verify the exact mechanism.

Observability: Run Viewer and OpenTelemetry

Every run produces stable identity, execution receipts, and traces. The built-in Run Viewer is an offline dashboard that replays a real run, showing the task DAG and a span waterfall. This is a practical answer to the 'black box' problem in multi-agent systems. You can inspect what the coordinator planned and how each agent executed. There is also an optional OpenTelemetry adapter for exporting traces to external systems. The same records feed versioned EvalSets, offline reports, CI gates, and production sampling. This means the framework is designed for evaluation as a continuous process, not just a one-off demo. The README shows a dashboard image, but since I have not run the tool, I can only confirm that the documentation describes these features.

Safety and Privacy Controls

Tools are default-deny, meaning no tool is available unless explicitly enabled. Individual tool calls are gated, which fits a security-conscious deployment. The README mentions explicit privacy controls for telemetry and persisted state. This is a meaningful differentiator compared to frameworks that assume all tools are available. For a production system, default-deny is a safer starting point. The framework also supports process and ACP backends for Claude Code, Gemini CLI, and Codex, putting those tools on the same task DAG and budgets as LLM agents. That blurs the line between pure LLM calls and external process execution, which raises the stakes for the gating mechanism. The material does not detail how the gating is configured, so you would need to check the docs for the exact API.

Limitations and When It Is the Wrong Tool

The main limitation is the dynamic planning itself. If your workflow requires a fixed, auditable graph that cannot change, the coordinator's runtime planning introduces unpredictability. The README offers a countermeasure: you can 'declare required roles and order when topology cannot drift,' but that implies you must opt into static constraints. Another limitation is the dependency on the coordinator's planning quality. If the coordinator fails to produce a correct DAG, the whole run fails. The fallback parser for text-based tool calls helps with local models, but it is a workaround, not a guarantee. Also, the framework is TypeScript-only and requires Node.js 20 or newer, so it is not suitable for Python or other language backends. The README lists known users, including offline VRAM-constrained use, but that is anecdotal, not a benchmark. For a simple two-step pipeline, runTasks might be overkill, and a direct LLM call would be simpler.

Alternatives and How They Differ

A common alternative is a static orchestration framework like LangGraph (Python or JS) where you define the graph explicitly as a state machine. The difference is fundamental: LangGraph requires you to declare nodes and edges upfront, while Open Multi-Agent generates them at runtime from the goal. LangGraph gives you full control over the topology and is easier to reason about for fixed workflows, but it demands manual maintenance when the workflow changes. Another alternative is a simple loop in your own code that calls an LLM and parses responses, which is fine for trivial cases but lacks the scheduler, checkpoints, and observability. The README does not compare itself to any competitor, so the choice depends on whether you value dynamic planning or static control. If you need deterministic behavior for compliance, a static graph is safer; if you need to handle novel goals, dynamic planning wins.

Maintenance and License Considerations

The project is MIT-licensed, which means you can use it in commercial products with minimal restrictions, though you should review the license text for any specific clauses. The repository shows active maintenance with recent releases: v1.17.0 on 2026-08-28, v1.16.1 on 2026-08-21, and v1.16.0 on 2026-08-16. That cadence suggests regular updates, which is a positive sign for bug fixes and provider compatibility. The README mentions a production checklist in the Core package guide, which implies you need to configure things like budgets and privacy controls before going live. The upgrade cost is not documented, but with a versioned API on npm, you would need to watch for breaking changes between minor versions. The dynamic planning model also means that provider changes could affect the coordinator's behavior, so you should test after updating the core package.

Editorial conclusion

Adopt Open Multi-Agent if you are building a TypeScript backend that needs multi-agent orchestration with dynamic planning, checkpoint-based resume, and built-in observability, and if you want to run on your own credentials or offline. Do not adopt it if you require a fixed, statically declared graph with no runtime drift, or if you cannot accept the coordinator's planning step as an extra failure point. Before committing, verify that your target LLM's tool-calling format works with the fallback parser, and test the checkpoint resume on a real interrupted run. The project is actively maintained with recent releases, but its dynamic planning model is the core trade-off: you trade graph control for flexibility, so confirm that the coordinator's runtime decisions match your domain's constraints.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes