DOS 实战:当 AI 编程 Agent 说「做完了」,让 Git 来验证而不是相信它
AI 编程 Agent 越来越强大,但有一个问题始终存在:Agent 会告诉你它做完了,但你真的能相信吗?
这不是一个理论问题。使用 Claude Code、Cursor 或 Codex CLI 的开发者都遇到过类似场景:Agent 返回一条充满自信的「All work completed!」,但你检查代码时发现——提交记录里根本没有对应的工作。在 258 个任务的实验中,DOS 检测到了 15 次「我完成了」的谎报,零误报。当同时运行多个 Agent 时,问题更严重——每个 Agent 给自己的作业打分,没人能读遍所有输出。
DOS(Dispatch Operating System) 是一个开源的 AI Agent 裁判系统。它不读取 Agent 的叙述——它读取实际发生了什么(Git 历史、文件系统、时钟),然后给出一个 Agent 无法伪造的裁决。
核心思路:不信叙述,信证据
DOS 的核心思想非常简洁:当 Agent 声称「完成了 AUTH1(登录功能)」时,DOS 不解析它的输出——而是直接查询 Git 历史:
dos verify AUTH AUTH1 # → SHIPPED 有对应提交 (exit 0) dos verify AUTH AUTH2 # → NOT_SHIPPED 无对应提交 (exit 1)
SHIPPED = 有真实提交佐证,NOT_SHIPPED = 没有。 出口码就是裁决——任何 CI 工具或 shell 脚本都可以基于它做分支判断,无需解析文字。
安装与快速上手
DOS 是一个纯 Python 包,唯一运行时依赖是 PyYAML:
pip install dos-kernel
安装后,60 秒就能体验完整流程:
dos quickstart
这条命令会创建一个临时仓库、生成一次真实提交、然后做两次验证——一次 SHIPPED(有提交),一次 NOT_SHIPPED(没有)。整个体验就是 DOS 的产品核心。
在自己的仓库中启用 DOS 也非常简单:
cd your-repo dos init --hooks auto
它会自动检测你使用的 Agent 运行时(Claude Code、Cursor、Codex CLI 等),把验证钩子接入运行流程。从此,Agent 不能告诉你「做完了」除非工作真的落地了。
三种核心能力
1. 提交验证(dos verify)
这是 DOS 最基础也最常用的功能。Agent 声称完成了一个工作单元,你让它验证:
dos verify AUTH AUTH1 # 审计模块的登录功能完成了吗? dos commit-audit --sweep --workspace . BASE..HEAD
验证逻辑非常直观:在 Git 提交信息中搜索 AUTH1: 之类的印记(stamp),找到了就是 SHIPPED(出口码 0),找不到就是 NOT_SHIPPED(出口码 1)。
2. 工作区仲裁(dos arbitrate)
当多个 Agent 并行工作时,它们可能同时编辑同一个文件。DOS 提供工作区仲裁:
dos scope-gate --path src/auth/ --claim AUTH1 dos arbitrate --path src/auth/ --claim AUTH2
3. 存活检测(dos liveness)
Agent 可能报告「正在推进」但实际上没有任何产出:
dos liveness --workspace .
四种集成方式
DOS 提供了多层集成通路,从零代码到深度定制:
| 集成方式 | 适用场景 | 一句话操作 |
|---|---|---|
| MCP Server | 通过 MCP 主机驱动 Agent(Claude Desktop、Cursor、Cline) | 加一行 { "command": "dos-mcp" } 到主机配置 |
| Runtime Hooks | 运行 Agent 循环(Claude Code、Cursor、Codex CLI、Gemini CLI) | dos init --hooks 一键接入 |
| CLI Exit-Code | CI 步骤、pre-push 钩子、aider 等 Agentic CLI | dos verify 的出口码即为裁决 |
| Python API | 自建编排器/分发器 | import dos; dos.oracle.is_shipped(...) |
以 MCP 方式集成为例,只需在 Claude Desktop 配置中添加:
{
"mcpServers": {
"dos": {
"command": "dos-mcp"
}
}
}
之后可以直接问 Claude:「用 DOS 验证刚刚这个提交是否真的完成了 AUTH1」,Claude 会调用 dos_verify 工具检查 Git 历史。
高级功能:残差审查(Residual Review)
当提交累积速度超过人工审查速度时,DOS 的残差审查功能非常实用。commit-audit 的每条裁决分为三档:
- CLEARED(已清理):提交的变更内容与声称一致,可跳过重新审查。在此仓库最近 200 个提交中,DOS 清理了 171 个可检查声明中的 170 个。
- RESIDUAL(残留):Git 无法背书的声明——需要人工 100% 关注
- 无声明:普通提交,按正常流程审查
⚠️ CLEARED 仅代表变更的「形态」与声明匹配,不代表代码正确性——正确性审查仍需应用于每个提交。残差审查只能要求更多的关注,而非减少。
实测数据
DOS 自带可复现的基准测试。在两次独立实验中:
| 指标 | 数值 |
|---|---|
| 258 个任务中检测到的谎报 | 15 次(零误报) |
| 阻止的静默冲突 | 6/8 次 |
| 因及时终止空转运行节省的计算量 | ~11% |
| 设置奖励准入标签后接受精度提升 | 60% → 100% |
论文 「Verification Is All You Need — But Not Where You Think」 已发布在仓库的 paper/releases/ 目录下,arXiv 预印本正在准备中。
注意事项
- 验证跨机器可用:
verify、commit-audit、liveness基于 Git 历史,可在不同机器间自由使用 - 仲裁目前单机限定:
arbitrate的工作区租约基于本地文件系统的 WAL,跨主机场景为 advisory 模式(非硬互斥)——远程租约驱动正在开发中 - 零配置入门,深度配置扩展:
dos verify在纯git init上可直接使用;随着需求深入,可通过dos.toml配置文件定义船道(lane)、路径和提交语法
总结
DOS 解决的是一个被广泛忽视但非常普遍的问题:AI Agent 说自己做完了,但它真的做了吗? 不依赖 Agent 的自我报告,而是从 Git 历史、文件系统和时钟中读取不可伪造的证据——这种「不信叙述,信证据」的思路,是多 Agent 并行时代必不可少的基础设施。
对于使用多个 AI 编程 Agent 的团队,DOS 可以作为 CI 流程中的一道验证门禁——在 Agent 的「Done」到达你之前,先让 Git 告诉你是真是假。