命令行工具
first-fluke/oh-my-agent avatar
first-fluke/oh-my-agent

oh-my-agent:用机械检查替代智能体自述的验证型编排器

该项目围绕「first-fluke/oh-my-agent」构建,面向真实业务场景提供可复用的开源实践方案,支持稳定落地与可扩展的项目实践。

1,297 个 Star147 个 ForkTypeScriptMIT

秒懂

它是什么?
oh-my-agent 是一个厂商中立的智能体编排框架,核心卖点是让测试、lint、产物检查等机械手段来验证工作是否完成,而不是听信智能体的叙述。本文分析它的机制、使用方式、局限与适用场景。
适合谁用?
oh-my-agent 适合那些已经受够了智能体自说自话的团队,尤其是需要多人协作、跨厂商工具链、并且有明确 typecheck、test、lint 脚本和产物要求的项目。它不适合刚起步、还没有这些脚本的探索性项目,也不适合只想要一个聊天界面的用户。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

问题的核心:智能体叙述不可信

多智能体协作的难点不在并行启动,而在于如何确认它们真的完成了工作。一个智能体说「测试通过,所有标准都满足」是零成本的,同一会话内部没有任何东西能反驳它。oh-my-agent 的出发点就是让这种声明变得可证伪。它不依赖大模型来判断工作是否「看起来正确」,而是用命令退出码、文件是否存在、独立裁判的复验这类机械手段。这个定位很清晰,也决定了它的适用边界:只有那些能被机械检查的工作流才适合用它。

Stop hook 与 gate 命令:把验证嵌入会话生命周期

oh-my-agent 的核心机制之一是 Stop hook。它会在会话结束时拦截终止请求,如果存在持久工作流,就运行配置好的 gate 脚本,只有脚本退出码为 0 才允许结束。设计上只允许执行 typecheck、test、lint 这三个命令,智能体往状态文件里写任何其他命令都会被忽略,不会被运行。为了防止一个永远失败的 gate 把用户困住,reinforcement 次数被限制在 5 次。另一个机制是 gate 命令,比如 `oma ralph:verify --json`,它检查四个产物:phase 记录、计划 JSON、一个独立 QA 智能体的结果文件、一个独立重构智能体的结果文件。缺任一个就判定该阶段未运行,不管叙述怎么说。这种检查方式很粗暴,但有效。

独立裁判与事件日志:对抗回归和事后审计

除了 gate 命令,还有一个独立裁判机制。裁判以全新上下文启动,只被告知标准,不被告知实现者声称修复了什么。每一轮它都会重新验证所有标准,包括之前已经通过的,因为修复 C2 可能让 C1 静默回归。这个设计针对的是智能体只验证自己改过的地方、忽略其他部分的常见毛病。所有 gate 通过、失败和决策都会以 JSON 行追加到 `.agents/state/sessions/{sid}/events.jsonl`,带厂商和运行时会话 ID,追加写入,跨厂商可审计。这意味着运行结束后,你可以回放整个验证历史,而不是依赖智能体的总结。

安装与配置:一条命令,多种预设

安装很简单,macOS/Linux 用 `curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash`,Windows 用 PowerShell 的 `irm ... | iex`。脚本会自动安装 bun、uv 和 serena。手动安装则是 `bunx oh-my-agent@latest`。安装后可以选择预设,比如 Backend、Frontend、Fullstack、Research 等,每个预设包含一组智能体和技能。配置的核心是 `.agents/` 目录,这是单一事实来源,然后投影到各运行时的原生布局,比如 `.claude`、`.cursor`、`.codex`、`.opencode`、`.github`。切换厂商只是改配置,不是迁移。另外还支持通过 Microsoft 的 Agent Package Manager (APM) 安装技能,但注意 APM 只装技能,不装工作流和 CLI,两者要选一种方式,避免漂移。

预算控制:配额与墙钟时间

预算也是机械控制的。`session.quota_cap` 限制 token 数、spawn 次数和每厂商花费,超过任何一项,编排器就拒绝下一次 spawn。墙钟时间耗尽时,Stop hook 会如实停止,并在事件日志上记录部分状态,而不是假装完成。这个设计很务实,它承认智能体可能完不成任务,但至少不会撒谎。不过这也意味着,如果你的任务经常超出预算,你会频繁看到部分完成的记录,需要人工介入。

局限与适用边界

oh-my-agent 的机制强依赖项目自身的验证脚本。如果你的项目还没有 typecheck、test、lint 脚本,或者这些脚本本身不可靠,那么 Stop hook 和 gate 命令就形同虚设。另一个局限是,它只检查机械可验证的东西,比如文件存在、退出码、产物文件。对于代码质量、架构合理性这类主观标准,它无能为力,只能靠独立裁判用新的上下文重新读一遍,但裁判本身还是 LLM,仍然可能犯错。还有一点,README 提到 gate 脚本只允许 typecheck、test、lint,这意味着你无法自定义其他验证命令,比如安全扫描或性能测试,除非你改源码。这个限制是刻意的,但也是约束。

替代方案:从单一厂商到自建脚本

oh-my-agent 的替代方案不是另一个编排器,而是两类做法。第一类是直接用单一厂商的 agent 框架,比如 Claude Code 或 Cursor 自带的工作流和验证机制,它们通常更简单,但锁定在特定运行时,而且验证逻辑往往还是依赖 LLM 判断。第二类是自建一套 CI 脚本,用 shell 或 Makefile 在每次 agent 运行后执行测试和 lint,配合 git hooks 或 CI 流水线来阻止合并。这种做法完全可控,但需要自己处理多厂商适配和事件记录,相当于重造 oh-my-agent 的一部分。oh-my-agent 的价值在于把这类验证逻辑标准化、跨厂商化,代价是你得接受它的规则和目录结构。

维护与升级成本

项目采用 MIT 许可证,这意味着你可以自由使用、修改和分发,但需要保留版权声明。从仓库结构看,CLI 版本迭代频繁,最近有 cli-v12.8.0 和 web-v4.2.5 等多个发布,说明项目处于活跃开发状态,这带来两个影响:一是 bug 修复和新特性较快,二是升级可能引入破坏性变更,你需要关注 changelog。维护成本主要体现在 `.agents/` 目录的持续更新,因为技能和工作流定义会随版本演进。如果你的团队不习惯维护这类配置文件,可能会觉得负担重。另外,事件日志文件会持续增长,需要定期清理或归档,否则会占用磁盘空间。

编辑结论

oh-my-agent 适合那些已经受够了智能体自说自话的团队,尤其是需要多人协作、跨厂商工具链、并且有明确 typecheck、test、lint 脚本和产物要求的项目。它不适合刚起步、还没有这些脚本的探索性项目,也不适合只想要一个聊天界面的用户。在采用之前,先确认你的项目确实有可执行的验证命令,并且团队成员愿意接受 Stop hook 阻止会话结束的约束。你可以先用 `bunx oh-my-agent@latest` 跑一次默认预设,检查 `.agents/state/sessions/` 下的事件日志是否按预期生成。如果连基础验证都跑不通,这个框架的价值就无从谈起。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记