// 开源自托管的 TypeScript Agent 运行时

Agent 的所有权、审批权与审计权,归于使用它的组织。

关键操作要等一条持久化、防篡改的审批,每次运行留下一份可离线逐字节核验的记录。

const oma = new OpenMultiAgent({ maxConcurrency: 3 })
const team = oma.createTeam('security-analysis-team', { agents: [
{ name: 'attack-surface-reviewer', systemPrompt: '…', maxTurns: 2 },
// … data-security-reviewer, supply-chain-reviewer, synthesizer
] })
const goal = '审查这个服务的安全漏洞,并产出一份分级报告。'
const result = await oma.runTeam(team, goal)
拆解为
并行 ×3
排队运行中完成#a8b881de攻击面审查:认证、暴露端点与信任边界attack-surface-reviewer7.7s
排队运行中完成#ee3fd6e7数据安全审查:注入、密钥处理与敏感数据data-security-reviewer18.7s
排队运行中完成#c6e9d69b供应链审查:依赖、配置与部署态势supply-chain-reviewer12.0s
排队运行中完成#c2f792343 个完成后综合去重并生成分级安全报告synthesizer37.8s
真实运行 · runTeam() · deepseek-v4-flash · 4 个任务 · 128s · run 30577564
01 为什么选 OMA

掌控这次运行,并留下证据。

让高影响操作等一条持久化的决定,用运行自己的事件回头核验它,声明它必须经过的角色——而这一切都跑在你自己的基础设施上。

01审批 → 挂起
让高影响操作等一条持久化的决定。

在各自的边界为计划、就绪任务或高影响工具调用设闸。返回 { action: 'suspend' },请求就与检查点一同持久化,并绑定到审阅者所见内容的哈希,直到另一个进程作出决定。

onPlanReady · onToolCall · { action: 'suspend' } · decideApproval · restore
02记录 → 核验
用运行自己的事件回头核验它。

开启运行事件日志后,模型看到的每个块、每次工具调用与结果、每次上下文重写都会被记录。verifyRun() 冷读、离线地把它读回来,核对每个块是否仍能从它指名的源事件逐字节复现;已被淘汰的窗口报告为 inconclusive,而不是失败。

RunJournal · verifyRun · inconclusive · EvalSet
03声明 → 治理
指名一次运行必须经过的角色。

用 governanceIntent: 'required' 配 requiredRoles 声明,运行就依据它的 execution receipt 受判定:哪些角色跑了、以什么顺序。这道闸从不读取智能体的答案文本,判定结论也不会改写 result.success——一次运行可以成功,同时报告 unsatisfied。

governanceIntent · requiredRoles · requiredOrder · governanceConclusion
04你的环境
跑在数据所在的地方。

不上报遥测,没有托管控制面:一个没有 OMA 后端、也没有账号的库。云端、本地或气隔模型,用你的凭证,只有三个运行时依赖。工具默认拒绝,出网策略约束内置适配器,Claude Code、Codex 或 Gemini CLI 通过 ACP 加入同一张 DAG。

工具默认拒绝 · egressPolicy · ShellExecutor · ACP
05规划 → 路由
图可以你自己写,也可以让它被规划出来。

runAgent() 跑单个智能体,runTasks() 执行你写好的任务图。若改为把目标交给 runTeam(),一个可选的协调器会规划出可审阅的任务 DAG;下游任务在依赖一完成就派发,没有轮次屏障。

runAgent · runTasks · runTeam · onTaskDispatch · requires
06恢复 → 修订
从最近的安全边界恢复,修订尚未执行的部分。

restore 从最近的安全边界恢复,回放已提交的工具结果而不是重跑。开启可修复模式后,经校验的 PlanPatch 会修订图中尚未执行的部分。

checkpoint · toolCallId · recovery.mode: 'repairable' · PlanPatch · maxCostBudget
运行证据

把整次运行离线读回来。

离线 Run Viewer 把一次已完成的运行变成可复查的证据,全程不涉及任何托管的 OMA 服务。开启运行事件日志后,verifyRun() 还能仅凭日志里的事件逐字节再核一遍同一次运行——对已被淘汰的窗口,它报告 inconclusive,而不是报告通过。

  • 任务 DAG 与承担者
  • 模型、提供方、token 与成本汇总
  • 工具调用、状态与安全证据详情
  • 记录日志的运行:每一次适配器调用与模型看到的每一块内容
打开可观测性参考→
// 被提及
A brilliant TypeScript-native multi-agent orchestration framework.
GithubAwesome · 58K subscribers · GitHub Trending Monthly #6
在 YouTube 观看 GithubAwesome 的 GitHub Trending Monthly #6,画面停在 open-multi-agent 的 GitHub 仓库(6k stars)。
04 常见问题

TypeScript 运行时如何表现。

最常被问到的问题,直接回答。完整参考在文档里。

05 开始上手

第一支团队,一条命令。本地运行,无需注册。

快速开始