AI Agent 会改测试来让自己通过?用 Nomos 把 Git 合并变成可验证的事务
让编码 Agent 写出一段能编译的代码并不难,难的是确认它没有通过删测试、留空桩或直接污染主分支来制造“完成”的假象。Nomos 是一个放在编码 Agent 与 Git 仓库之间的治理层:它不替代 Claude Code、Cursor、OpenCode 等 Agent,而是试图把任务隔离、验证和合并流程交给仓库外部的确定性工具执行。
这类工具的价值不在于让模型更聪明,而在于让模型即使犯错,也不能轻易把未经验证的结果写进主分支。Nomos 仓库将其定位为事务式治理 harness,许可证为 Apache-2.0;其 README 描述了 Git worktree 隔离、规范与代码任务关联、质量门控及带验证收据的同步流程。下文依据项目当前 README,介绍其工作方式与适用边界;具体门控会随版本变化,使用前应查看项目文档。
先隔离任务,再讨论合并
Nomos 的起点是初始化仓库:
curl -fsSL https://sophialabs.ca/install | bash cd your-project nomos init
安装脚本来自项目 README;在真实环境执行远程脚本前,建议先审阅脚本内容,并按组织的软件供应链策略决定是否安装。README 说明 nomos init 会检测语言栈、生成 nomos.yaml、安装 Git 防护钩子,并放入供 Agent 使用的 AGENTS.md / CLAUDE.md 等协议文件。它的设计重点是把约束落实到仓库工具与钩子中,而不只是写一段容易被模型忽略的提示词。
任务通过 Nomos CLI 管理。README 给出的示例包括:
nomos task chore "Add TTL cache eviction" nomos verify -w worktrees/your-project-SUB-1 nomos task sync SUB-1 -F .tmp/walkthrough.md
这里展示的是项目文档中的工作流示意,不应不加检查地照搬到任意仓库:具体 task ID、工作树名称和 walkthrough 文件应以实际 nomos task 输出及当前版本 CLI 帮助为准。总体思路是让改动先进入隔离的 worktree,再由 nomos verify 执行检查,最后经 nomos task sync 同步,而非让 Agent 直接提交到 main。
验证门控解决什么问题
普通 lint 或 CI 往往是在代码已进入工作区、甚至提交之后才给出反馈。Nomos README 将其门控描述为在同步前运行:除 Go AST 和结构扫描外,还包括针对多种语言的工具链检查;项目列出的范围覆盖 Go、TypeScript、Python、Rust、C/C++、Java、Kotlin 与 C#。文档举例的风险包括空实现、被跳过的测试、复杂度或覆盖率变化,以及疑似绕过测试的改动。
这并不意味着“42 个门控”可以证明程序正确。静态规则只能检查被编码进规则的性质,编译与测试也受测试质量限制。它更适合作为一道可重复的最低限度防线:发现明显违规时阻止同步,并把文件、行号或修复建议交还 Agent;真正的需求正确性、业务安全审查和人工验收仍然不可省略。
另一个值得注意的设计是将意图/规范任务(README 中以 INT- 表示)与代码任务(SUB-)关联,避免实现者悄悄改写验收标准来让任务“通过”。项目还描述了本地 SQLite 记忆和 Git Notes 验证收据,用来记录经过验证的经验与发布来源。对团队而言,关键问题不是功能名听起来多完整,而是这些记录能否被审计、能否在仓库迁移或并发任务中保持一致。
什么时候值得试
如果团队已经大量使用编码 Agent,且常遇到工作树互相覆盖、测试被弱化、主分支出现未审查改动等问题,可以挑一个非关键仓库试点。先确认安装脚本、生成文件和 Git hooks 的具体变更,再用小任务验证失败门控是否真的会阻止同步、worktree 是否按预期隔离、恢复与卸载流程是否清晰。不要一开始就把它设成所有仓库的唯一发布通道。
对于个人项目,额外的任务生命周期可能显得繁重;对于已有严格 CI、分支保护和代码审查的团队,Nomos 更适合评估其本地隔离与 Agent 专用约束能否补上现有流程的空白,而不是简单叠加另一套“质量分数”。任何自动合并系统都应先测试失败路径:故意引入失败测试、越权改动和中断同步,确认系统拒绝操作且留下可追查记录。
最终,Agent 治理工具的标准不是 README 列了多少门控,而是它能否在模型输出不可信时守住仓库边界。Nomos 把这个问题落在 worktree、验证命令和 Git 同步事务上,概念值得关注;是否适合生产环境,则应通过版本固定、威胁建模和小范围演练来判断。