open-multi-agent/open-multi-agent
Open Multi-Agent 是 TypeScript multi-agent 编排框架,npm 包为 @open-multi-agent/core,Node.js >=18。它通过 coordinator 将目标拆解为 task DAG,支持并行任务、10 个内置 providers、Tools + MCP、streaming、Zod structured output、observability 和可插拔 shared memory,采用 MIT 协议。
open-multi-agent 是面向 TypeScript 后端的 multi-agent 编排框架。给它一个目标;coordinator agent 会将其拆解为 task DAG,并行化独立任务,并综合结果。三个 runtime dependencies,可接入任何 Node.js 后端。
**Package 更新:**官方 npm package 现在是
@open-multi-agent/core。 之前的 package@jackchen_me/open-multi-agent在迁移窗口期仍会继续支持。
你的工程师描述目标,而不是描述图。
快速开始
需要 Node.js >= 18。
在你的项目中使用
npm install @open-multi-agent/core
import { OpenMultiAgent, type AgentConfig } from '@open-multi-agent/core'
const agents: AgentConfig[] = [
{ name: 'architect', model: 'claude-sonnet-4-6', systemPrompt: 'Design clean API contracts.', tools: ['file_write'] },
{ name: 'developer', model: 'claude-sonnet-4-6', systemPrompt: 'Implement runnable TypeScript.', tools: ['bash', 'file_read', 'file_write', 'file_edit'] },
{ name: 'reviewer', model: 'claude-sonnet-4-6', systemPrompt: 'Review correctness and security.', tools: ['file_read', 'grep'] },
]
const orchestrator = new OpenMultiAgent({
defaultModel: 'claude-sonnet-4-6',
onProgress: (event) => console.log(event.type, event.task ?? event.agent ?? ''),
})
const team = orchestrator.createTeam('api-team', { name: 'api-team', agents, sharedMemory: true })
const result = await orchestrator.runTeam(team, 'Create a REST API for a todo list in /tmp/todo-api/')
console.log(result.success, result.totalTokenUsage.output_tokens)
在本地运行一个示例
git clone https://github.com/open-multi-agent/open-multi-agent && cd open-multi-agent
npm install
export ANTHROPIC_API_KEY=sk-...
npx tsx examples/basics/team-collaboration.ts
三个 agent 协作开发一个 REST API,同时 onProgress 流式输出 coordinator 的 task DAG:
agent_start coordinator
task_start design-api
task_complete design-api
task_start implement-handlers
task_start scaffold-tests // independent tasks run in parallel
task_complete scaffold-tests
task_complete implement-handlers
task_start review-code // unblocked after implementation
task_complete review-code
agent_complete coordinator // synthesizes final result
Success: true
Tokens: 12847 output tokens
通过 Ollama 使用本地模型不需要 API key,见 providers/ollama。对于托管 provider(OPENAI_API_KEY、GEMINI_API_KEY 等),见 支持的 Providers。
三种运行方式
| 模式 | 方法 | 适用场景 | 示例 |
|---|---|---|---|
| 单个 agent | runAgent() |
一个 agent,一个 prompt | basics/single-agent |
| 自动编排的团队 | runTeam() |
给出目标,让 coordinator 规划并执行 | basics/team-collaboration |
| 显式 pipeline | runTasks() |
你定义任务图和分配关系 | basics/task-pipeline |
预览 coordinator 的 task DAG,而不执行 agent:
const plan = await orchestrator.runTeam(team, goal, { planOnly: true })
对于没有任务依赖的 MapReduce 风格 fan-out,直接使用 AgentPool.runParallel()。见 patterns/fan-out-aggregate。
对于 shell 和 CI,使用 JSON-first 的 oma binary。见 docs/cli.md。
功能
| 能力 | 你将获得 |
|---|---|
| 目标驱动的 coordinator | 一次 runTeam(team, goal) 调用。coordinator 将目标拆解为 task DAG,并行化独立任务,并综合结果。 |
| 在一个团队中混用 providers | 内置 10 个:Anthropic、OpenAI、Azure、Bedrock、Gemini、Grok、DeepSeek、MiniMax、Qiniu、Copilot。通过 OpenAI-compatible 支持 Ollama / vLLM / LM Studio / OpenRouter / Groq。(完整设置) |
| Tools + MCP | 6 个内置工具(bash、file_*、grep、glob),可选择启用的 delegate_to_agent,通过 defineTool() + Zod 定义自定义 tools,通过 connectMCPTools() 连接 stdio MCP servers。(tool 配置) |
| Streaming + structured output | 每个 adapter 都支持逐 token streaming;最终答案由 Zod 验证,解析失败时自动重试。(structured-output) |
| Observability | onProgress events、onTrace spans、运行后 HTML dashboard,用于渲染已执行的 task DAG。(observability 指南) |
| 可插拔 shared memory | 默认进程内 KV;通过实现 MemoryStore,可替换为 Redis / Postgres / 你自己的后端。(shared memory) |
生产控制(context strategies、带 backoff 的任务 retry、loop detection、tool output 截断/压缩)见 Production Checklist。
示例
examples/ 按类别组织:basics、cookbook、patterns、providers、integrations 和 production。完整索引见 examples/README.md。
真实工作流(cookbook/)
你今天就可以运行的端到端场景。每个都是完整且有明确取向的工作流。
contract-review-dag:用于合同审查的四任务 DAG,包含并行分支和失败时的步骤级 retry。meeting-summarizer:三个专门 agent 对会议 transcript 进行 fan out,aggregator 将它们合并为一份 Markdown 报告,包含 action items 和 sentiment。competitive-monitoring:三个并行 source agents 从 feeds 中提取 claims;aggregator 交叉核对并标记矛盾。translation-backtranslation:使用一个 provider 将英文翻译为目标语言,再用另一个 provider 回译,并标记语义漂移。
Patterns 和 integrations
basics/team-collaboration:runTeam()coordinator pattern。patterns/structured-output:任意 agent 返回经 Zod 验证的 JSON。patterns/fan-out-aggregate:通过AgentPool.runParallel()实现 MapReduce 风格 fan-out。patterns/agent-handoff:通过delegate_to_agent进行同步 sub-agent 委派。integrations/trace-observability:为 LLM 调用、tools 和 tasks 提供onTracespans。integrations/mcp-github:通过connectMCPTools()将 MCP server 的 tools 暴露给 agent。integrations/with-vercel-ai-sdk:Next.js app,将 OMArunTeam()与 AI SDKuseChatstreaming 结合。- Provider 示例:
examples/providers/下的脚本覆盖托管 providers、OpenAI-compatible endpoints 和本地模型。
使用 npx tsx examples/<path>.ts 运行任意脚本。
这和 X 有什么不同?
一个快速路由。下面是机制拆解。
| 如果你需要 | 选择 |
|---|---|
| 具备成熟 checkpointing 的固定生产拓扑 | LangGraph JS |
| 显式 Supervisor + 手工串接的 workflows | Mastra |
| 具备成熟 multi-agent 生态的 Python stack | CrewAI |
| 具备广泛模型 provider 支持的 AI app toolkit | Vercel AI SDK |
| TypeScript,从目标到结果并自动任务拆解 | open-multi-agent |
vs. LangGraph JS。 LangGraph 将声明式 graph(nodes、edges、conditional routing)编译为可调用对象。open-multi-agent 运行一个 Coordinator,在 runtime 将目标拆解为 task DAG,然后自动并行化独立任务。目标相同(编排执行),方向相反:LangGraph 是 graph-first,OMA 是 goal-first。
vs. Mastra。 两者都是 TypeScript-native。Mastra 的 Supervisor pattern 要求你手工串接 agents 和 workflows;OMA 的 Coordinator 会在 runtime 根据目标字符串完成串接。如果 workflow 预先已知,Mastra 的显式性会带来好处。如果你不想枚举每一步,OMA 的 runTeam(team, goal) 只需一次调用。
vs. CrewAI。 CrewAI 是 Python 中成熟的 multi-agent 选项。OMA 面向 TypeScript 后端,只有三个 runtime dependencies,并可直接嵌入 Node.js。编排能力大致可比;选择取决于语言栈。
vs. Vercel AI SDK。 AI SDK 提供 LLM 调用层——provider 抽象、streaming、tool calls 和 structured outputs。它不编排目标驱动的 multi-agent teams。两者互补:AI SDK 用于 app 表层和 single-agent 调用,需要团队时使用 OMA。
生态
open-multi-agent 于 2026-04-01 以 MIT 协议发布。迄今已知用户和 integrations:
生产环境中
- temodar-agent(约 60 stars)。由 Ali Sünbül 开发的 WordPress 安全分析平台。直接在 Docker runtime 内使用我们的内置 tools(
bash、file_*、grep)。已确认用于生产环境。 - Cybersecurity SOC(home lab)。 一个私有部署,通过 Ollama 完全离线运行 Qwen 2.5 + DeepSeek Coder,在 Wazuh + Proxmox 上构建自主 SOC pipeline。早期用户,尚未公开。
正在生产环境或个人项目中使用 open-multi-agent?发起 discussion,我们会在这里列出。
Integrations
- Engram — “Git for AI memory”。在 agents 之间即时同步知识,并标记冲突。(repo)
- @agentsonar/oma — Sidecar,用于检测跨运行的 delegation cycles、重复和速率突增。
构建了 integration?发起 discussion 以便被列出。
Featured partner
面向与 open-multi-agent 深度集成的产品和平台。条款和申请方式见 Featured partner program。
架构
┌─────────────────────────────────────────────────────────────────┐
│ OpenMultiAgent (Orchestrator) │
│ │
│ createTeam() runTeam() runTasks() runAgent() getStatus() │
└──────────────────────┬──────────────────────────────────────────┘
│
┌──────────▼──────────┐
│ Team │
│ - AgentConfig[] │
│ - MessageBus │
│ - TaskQueue │
│ - SharedMemory │
└──────────┬──────────┘
│
┌─────────────┴─────────────┐
│ │
┌────────▼──────────┐ ┌───────────▼───────────┐
│ AgentPool │ │ TaskQueue │
│ - Semaphore │ │ - dependency graph │
│ - runParallel() │ │ - auto unblock │
└────────┬──────────┘ │ - cascade failure │
│ └───────────────────────┘
┌────────▼──────────┐
│ Agent │
│ - run() │ ┌────────────────────────┐
│ - prompt() │───►│ LLMAdapter │
│ - stream() │ │ - AnthropicAdapter │
└────────┬──────────┘ │ - OpenAIAdapter │
│ │ - AzureOpenAIAdapter │
│ │ - BedrockAdapter │
│ │ - CopilotAdapter │
│ │ - GeminiAdapter │
│ │ - GrokAdapter │
│ │ - MiniMaxAdapter │
│ │ - DeepSeekAdapter │
│ │ - QiniuAdapter │
│ └────────────────────────┘
┌────────▼──────────┐
│ AgentRunner │ ┌──────────────────────┐
│ - conversation │───►│ ToolRegistry │
│ loop │ │ - defineTool() │
│ - tool dispatch │ │ - 6 built-in tools │
└───────────────────┘ │ + delegate (opt-in) │
└──────────────────────┘
核心概念
- Tools + MCP。 内置工具覆盖
bash、file_read、file_write、file_edit、grep和glob;自定义 tools 使用defineTool()+ Zod;stdio MCP servers 通过connectMCPTools()连接。见 tool configuration。 - Observability。 接入
onProgress获取实时生命周期 events,接入onTrace获取结构化 spans,使用renderTeamRunDashboard(result)生成静态 DAG dashboard。见 observability。 - Shared memory。 使用默认进程内 KV,或带上 Redis、Postgres、Engram,或任何
MemoryStore。见 shared memory。 - Context management。 对长时间运行的 agents 使用 sliding windows、summarization、rule-based compaction 或自定义 compressor。见 context management。
支持的 Providers
修改 provider、model,并设置环境变量。agent config 的形状保持不变。
const agent: AgentConfig = {
name: 'my-agent',
provider: 'anthropic',
model: 'claude-sonnet-4-6',
systemPrompt: 'You are a helpful assistant.',
}
| 类型 | 如何配置 | 服务 |
|---|---|---|
| 内置 shortcuts | 将 provider 设置为 anthropic、gemini、openai、azure-openai、copilot、grok、deepseek、minimax、qiniu 或 bedrock;框架会提供 endpoint。 |
Anthropic、Gemini、OpenAI、Azure OpenAI、GitHub Copilot、xAI Grok、DeepSeek、MiniMax、Qiniu、AWS Bedrock |
| OpenAI-compatible endpoints | 设置 provider: 'openai',并根据需要设置 baseURL 和 apiKey。 |
Ollama、vLLM、LM Studio、llama.cpp server、OpenRouter、Groq、Mistral |
环境变量、模型示例、本地 tool-calling、timeouts 和 troubleshooting 见 docs/providers.md。
Production Checklist
上线前,请接入这些控制项,用于保护 token 开销、从失败中恢复,并便于调试。
| 关注点 | 开关 | 所在位置 |
|---|---|---|
| 限定 conversation | 每个 agent 的 maxTurns + contextStrategy(sliding-window / summarize / compact / custom) |
AgentConfig |
| 限制 tool output | maxToolOutputChars(或每个 tool 的 maxOutputChars)+ compressToolResults: true |
AgentConfig 和 defineTool() |
| 从失败中恢复 | 每个 task 的 maxRetries、retryDelayMs、retryBackoff(指数 multiplier) |
通过 runTasks() 使用的 task config |
| 硬性限制开销 | orchestrator 上的 maxTokenBudget |
OrchestratorConfig |
| 捕获卡住的 agents | loopDetection 搭配 onLoopDetected: 'terminate'(或自定义 handler) |
AgentConfig |
| Trace 和审计 | 将 onTrace 接入你的 tracing backend;持久化 renderTeamRunDashboard(result) |
OrchestratorConfig |
贡献
欢迎提交 issues、feature requests 和 PRs。以下领域的贡献尤其有价值:
- Production examples。 真实世界的端到端 workflows。验收标准和提交格式见
examples/production/README.md。 - Documentation。 指南、教程和 API docs。
- Translations。 帮助将此 README 翻译成其他语言。提交 PR。
贡献者
框架功能
- @ibrahimkzmv(token budget、context strategy、dependency-scoped context、tool presets、glob、MCP integration、configurable coordinator、CLI、dashboard rendering、trace event types)
- @apollo-mg(context compaction fix、sampling parameters)
- @tizerluo(onPlanReady、onAgentStream)
- @CodingBangboo(planOnly mode)
- @Xin-Mai(output schema validation)
- @JasonOA888(AbortSignal support)
- @EchoOfZion(coordinator skip for simple goals)
- @voidborne-d(OpenAI mixed content fix)
- @NamelessNATM(agent delegation base implementation)
- @MyPrototypeWhat(reasoning blocks、reasoning_effort、sampling parity、trace input/output)
- @SiMinus(streaming reasoning events)
Provider integrations
- @ibrahimkzmv(Gemini)
- @hkalex(DeepSeek、MiniMax)
- @marceloceccon(Grok)
- @Klarline(Azure OpenAI)
- @Deathwing(GitHub Copilot)
- @JackChiang233(Qiniu)
- @CodingBangboo(AWS Bedrock)
Examples & cookbook
- @mvanhorn(research aggregation、code review、meeting summarizer、Groq example、Mistral example)
- @Kinoo0(code review upgrade)
- @Optimisttt(research aggregation upgrade)
- @Agentscreator(Engram memory integration)
- @fault-segment(contract-review DAG)
- @HuXiangyu123(cost-tiered example)
- @zouhh22333-beep(translation/backtranslation)
- @pei-pei45(competitive monitoring)
- @mmjwxbc(interview simulator)
- @binghuaren96(incident postmortem DAG)
- @DaiMao-UT(paper replication triage)
- @oooooowoooooo(rare disease information triage)
- @CodingBangboo(Express customer support pipeline)
Docs & tests
- @tmchow(llama.cpp docs)
- @kenrogers(OpenRouter docs)
- @jadegold55(LLM adapter test coverage)
Star History
License
MIT