Dynamic and explicit orchestration
runTeam() builds a task DAG from a goal. runTasks() runs a graph you define, and runAgent() covers the single-agent case.
Both are TypeScript-native and actively developed; the real difference is surface area. Mastra is a batteries-included framework; open-multi-agent is a lean, goal-driven core.
You want an all-in-one TypeScript framework; graph-based workflows, built-in memory and RAG, evals, a dev playground; in one package.
You want a small core (three dependencies), goal-driven decomposition instead of hand-built workflow graphs, and a hard token-budget cap.
| Dimension | open-multi-agent | Mastra |
|---|---|---|
| Language / runtime | TypeScript-native; embeds in any Node.js 18+ backend | TypeScript-native; runs on Node.js |
| Orchestration model | Three modes: one agent, an explicit task DAG, or a goal decomposed by the coordinator at runtime | Agents plus graph-based workflows (.then / .branch / suspend), with built-in memory, RAG, and evals |
| Runtime dependencies | 3 direct (Anthropic SDK, OpenAI SDK, Zod); extra providers and MCP are opt-in peers | ~32 direct in @mastra/core; built on the Vercel AI SDK provider layer |
| Mixed-model teams | Yes; each agent can use its own cloud or local model in one team | Yes; per-agent model via the AI SDK model interface |
| Run-budget control | Token and estimated-USD ceilings through maxTokenBudget, or maxCostBudget with your estimateCost price table | No hard token cap; maxSteps limits agent steps |
| Observability | TraceRecord v2 + TraceStore, an optional first-party OTel adapter, and an offline post-run Run Viewer | OpenTelemetry tracing, plus a local dev playground for inspecting runs |
OMA is more than goal decomposition and a small dependency count. These are current framework capabilities documented in the project README.
runTeam() builds a task DAG from a goal. runTasks() runs a graph you define, and runAgent() covers the single-agent case.
Inspect and approve plans, freeze and replay them as data, validate outputs with Zod, stream per agent, cancel runs, or add a proposer and judge consensus loop.
The scheduler runs independent branches in parallel. Retries and checkpoints let an interrupted run resume without repeating completed tasks.
Bound work with turn, token, estimated-cost, timeout, context, and loop controls. Tools are default-deny, and trace payloads redact secrets by default.
Run in your Node.js backend, locally, offline, or air-gapped. Mix cloud and local models, connect MCP tools, and bring external agents through ACP or process backends.
Stable run identity, TraceStore, and the offline DAG and Waterfall Viewer work without a hosted service. An optional OTel adapter and EvalSets connect runs to production telemetry and CI gates.
Mastra bundles the whole design surface; agents, graph-based workflows you compose with .then()/.branch(), plus memory, RAG, and evals; into one framework. open-multi-agent keeps the core small and hands a coordinator a goal, which it decomposes into a task DAG at runtime and auto-parallelizes. Mastra is built on the Vercel AI SDK provider layer and carries ~32 direct dependencies in its core; OMA carries three, with extra providers and MCP loaded only when you opt in.
Mastra fits when you want one TypeScript stack that includes graph-based workflows with suspend and resume, human-in-the-loop controls, memory, RAG, evals, and a development playground. You author the workflow steps explicitly.
Mastra on GitHub↗open-multi-agent fits when you want to stay lean and let the plan be built for you. The coordinator decomposes a goal into a task DAG at runtime, so you describe the outcome instead of wiring a workflow graph; the core is three dependencies; and maxTokenBudget gives a hard spend ceiling that aborts the run; a guardrail Mastra doesn’t offer at the token level.
open-multi-agent is MIT-licensed and free to run yourself. When you need it delivered, integrated, or supported on a deadline, 元定义科技 (YuanASI) offers commercial delivery and support.