关于 DOS Kernel - trust substrate for agent fleets (stdio via PyPI)
DOS 是面向 AI Agent 集群的信任底座,通过读取 git 历史等外部证据来核验 Agent 声称完成的工作,而不是采信其自述。适合同时运行多个编码 Agent 的团队。
主要功能
- 01依据 git 提交核验“已完成”声明
- 02dos verify 返回 SHIPPED 或 NOT_SHIPPED 并给出退出码
- 03检测多个 Agent 之间的文件冲突
- 04通过 liveness 识别停滞或空转的运行
- 05基于 PyYAML 的单一运行时依赖
适用场景
- 01在 CI 中用退出码拦截未落地的“已完成”声明
- 02审查大量 Agent 提交时区分可验证的变更与需人工复核的声明
- 03为多 Agent 并行修改同一仓库提供冲突仲裁
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
DOS — 调度操作系统
揭穿那些谎称已交付成果的 AI Agent。
📊 查看它在真实代码仓库中的运行效果: 排行榜 为 15 个热门的 AI 构建代码仓库(roborev、open-interpreter、crewAI、autogen、……)评分: Agent 写了多少、哪些 Agent 写的,以及每次提交的声明是否有对应的差异作为依据。 为你的代码仓库评分:
dos commit-audit --sweep --workspace . BASE..HEAD。
一段录屏,讲清 DOS 的核心:Agent 声称交付了两项功能,git 只为其中一项作证。
dos verify 根据提交给出答复,谎言以退出码 1 告终,而针对该退出码设置的门禁会拒绝虚假的“完成”声明。每一行都是实际 CLI 的原样输出——
scripts/build_caught_lie_cast.py 会在输出发生变化时重新录制。
让一支 Agent 队伍在同一个代码仓库中运行。左侧的循环看起来只是进展;右侧的循环则可以由你掌控。
唯一的区别在于,DOS 会从真实世界——这里是 git——读取判定结果,而绝不采信 Agent 的说法。
AI Agent 会告诉你它已经完成。DOS 不会轻信,而是检查真实世界——离你最近的真实世界证据就是 git 历史。
Agent 声称已经交付登录端点;它真的交付了吗?运行一条命令
dos verify,它会根据工作留下的产物作答,而不是根据 Agent 输入的内容:有提交支持该声明 → SHIPPED,退出码为 0;没有任何内容合入 → NOT_SHIPPED,退出码为 1。Agent 的说法完全不在考虑之列。(Git 只是 DOS 读取的第一项证据;文件树、时钟、CI 状态、测试环境自身的状态也都是证据——凡是 Agent 未编写的内容皆可。)
dos verify AUTH AUTH1 # → SHIPPED AUTH AUTH1 e62f74d (exit 0)
dos verify AUTH AUTH2 # → NOT_SHIPPED AUTH AUTH2 (exit 1)
这是最精简的版本。它也能扩展:让十几个 Agent 同时处理一个仓库——在 CI 中、在一组机器上,争抢同一批文件——DOS 也会告诉你哪些 Agent 互相干扰、哪个在原地打转,以及哪个“已完成”的声明是真的。每个答案都来自实际产物(git、文件树、时钟),而不是叙述。它无需任何配置就能在普通的 git 仓库中运行;你告诉它的信息越多,它就越智能,而你唯一需要安装的就是一个小型 Python 包。
设置 — 在你的仓库中使用 DOS
DOS 是一个 Python 包,你需要将它安装到 Agent 工作的现有 git 仓库中。除非你打算开发 DOS 本身,否则不需要克隆或分叉 DOS 源码。
cd path/to/your-repo
pip install dos-kernel
dos init --hooks auto # detects the agent runtime(s) already in this repo
dos doctor # shows exactly what this workspace is using
从此以后,除非工作确实已经落地,否则你的 Agent 不能告诉你**“已完成”**;两个 Agent 也不能悄无声息地覆盖彼此的文件;运行停滞时会收到标记,而不是悄悄原地打转。dos init 会打印它写入的配置和钩子条目;移除这些自动生成的条目即可撤销设置。如果未检测到运行时,它会明确说明并列出可选方案——绝不会自行猜测。
| 你的需求 | 从这里开始 |
|---|---|
| 在我的仓库中使用 DOS | 安装此包,然后在该仓库中运行 dos init --hooks auto(如上所述设置)。 |
| 观看 60 秒演示 | 运行 uvx --from dos-kernel dos quickstart;它会创建并移除一个临时仓库。 |
| 阅读或修改 DOS 本身 | 克隆此仓库并使用贡献者安装方式;大多数用户不需要克隆源码。 |
v0.30.0 · 5,600+ 项测试 · CI:Linux 上的 Python 3.11–3.13 + Windows 3.13 冒烟测试 · 唯一的运行时依赖是 PyYAML · MIT。
🧭 接下来阅读:缘由与证据(通俗易懂的介绍、20 行 bash 的方案、已验证的内容), 将它接入你的技术栈(MCP · 钩子 · 安装), 系统调用 + CLI 参考,或者,**如果你是 AI Agent 并正在阅读本文,**请看 AGENTS.md——用三行命令完成构建/测试/检查。完整导航见下方的路由索引。
🔤 本页其余部分会用到的五个词。 计划是一个有名称的目标 (
AUTH);阶段是其中一个可交付的步骤(AUTH1);工作区是一个 Agent 可以修改的文件树切片;裁决器是 DOS 中读取证据和规则的部分;标记是已交付阶段留在提交主题中的标记(AUTH1: …)——裁决器会搜索这个标记。 这就是全部术语。
通俗易懂的介绍
编码 Agent 完成工作后,会告诉你进展如何。通常它说的是真的;有时却会由一个什么都没交付的 Agent 兴高采烈地宣布*“所有工作都已完成!”。只有一个 Agent 时,你可以重新阅读它的输出来发现问题——这是一笔你已经在付出的真实成本。让二十个 Agent 同时工作时,这笔成本就再也付不起了:没人能读完所有内容,每个 Agent 都给自己的作业打分,而未经检查的问题则悄悄堆积起来,直到代码库勉强能用,却没人敢安全地修改它。DOS 是一个从不读叙述的裁判——它读取实际发生的事情(提交、文件、时钟),并给出不受任何叙述影响的判定。它大约只需一个下午即可接入,只有一个运行时依赖,而且只管自己的职责:它会告诉你发生了什么*,绝不会判断代码好不好——质量仍由你的测试和评审把关。(通俗易懂的完整介绍。)
有数据验证,而非空口断言
这里的每个数字都根据 Agent 无法伪造的事实评分(测试环境的数据库状态、git 历史记录)。一个 DOS 门控在两种模型的 258 项任务中识破了 15 次“我已完成”谎报,且零误报;同一裁判在一条共享记录上阻止了 8 次静默冲突中的 6 次;在恰当时机终止注定失败的运行,节省了 约 11% 的集群算力,且在 1,634 次成功运行中没有误杀一次;奖励集准入标签将验收精确率从 60% 提升至 100%,清除了自评式采集器会保留的有害数据。方法论、两个关键时刻的数字,以及预测与押注之间的诚实度梯度,都见于 已验证的内容与仍属押注的内容。
文档其余内容在哪里
本页保留了核心亮点、演示,以及它要解决的问题。更深入的内容都放在专门页面中——找到你正在寻找的问题,然后跳转:
| 你想了解…… | 前往 |
|---|---|
| “用通俗的话来说,这是什么?为什么我的团队应该关心?它是真的吗?” | 为什么需要裁判——通俗易懂的介绍、20 行 bash / Temporal 的解答,以及完整的已验证/押注证据 |
| “快速演示给我看。” | 可选演示,就在下方——在临时仓库中运行一条命令 |
| “我已经在运行 Agent——如何将裁决接入我的技术栈?” | 接入方式——MCP、运行时钩子、退出码层级、集群框架和安装矩阵 |
| “完整的命令/系统调用接口是什么?” | 系统调用 ABI 与 CLI 参考——每个动词、三个实时界面、裁决日志 |
| “我每天都运行一组 Agent——如何监控、分诊和调试?” | 运行 Agent 集群 + 调试卡住的集群 |
| “如何在不派生分支的情况下按组织需求调整它?” | 扩展方式——七个维度、文档索引、操作手册 |
| “哪些内容经过了实际验证?我能重新运行验证吗?” | 研究人员指南——声明 → 不变量 → 复现 |
| “我是一个正在熟悉此仓库的 AI Agent。” | AGENTS.md——用三行介绍 DOS、构建/测试/检查,以及值得阅读的约 5 个文件 |
| “哪些接口保持稳定?弃用窗口有多长?” | docs/STABILITY.md——兼容性承诺、版本号的含义,以及永远不会被破坏的内容 |
可选演示 — 60 秒上手
有终端吗?这会在临时仓库中运行整个流程——一条命令即可搭建环境、创建真实提交、验证并清理:
pip install dos-kernel # PyYAML is the only runtime dep
dos quickstart # → SHIPPED AUTH AUTH1 … then NOT_SHIPPED AUTH AUTH2
一个 SHIPPED,一个 NOT_SHIPPED:前者是 git 能够佐证的声明,后者则是没有任何成果落地的声明。这种对比就是产品的价值所在。演示最后会引导你前往现有的 Agent 运行环境——Claude Code / Cursor 标签页(dos init --hooks)、MCP 主机、CI 步骤或一组机器——让你的下一步只需一行命令,而不必翻文档。(添加 --keep ./demo 可保留仓库并进一步查看。不想安装也没关系?运行 uvx --from dos-kernel dos quickstart,即可临时运行相同的演示,不会留下任何文件。)手动操作的话,五行命令即可完成,详见 docs/QUICKSTART.md。
两个同样自信的声明,各有一个判定——git 能够佐证的那个为 SHIPPED,没有任何成果落地的那个为 NOT_SHIPPED。所有文本均为 examples/demo/verify_demo.sh 的原样输出。在本地逐步体验点击演示版(这是一个 HTML 文件——克隆仓库后在浏览器中打开;GitHub 显示的是源代码,而不是运行中的页面)。
最简单的实际用法:在 CI 步骤或调度循环中,将信任 Agent“已完成”的那一行替换为 dos verify PLAN PHASE,然后根据退出码分支(0 表示已交付 / 1 表示未交付)。无需解析、无需计划、无需配置——CI 集成操作指南会带你完整走一遍。要在与你的仓库结构相似的仓库中运行,请从10 分钟为仓库接入工具开始。
当提交涌入的速度超过任何人阅读的速度时,可将同一个见证工具指向审查队列。剩余项审查会将 commit-audit 的逐提交判定归纳为三个类别——CLEARED(差异佐证了声明,因此无需再花多少精力追问“它是否按声明完成了工作”)、RESIDUAL(git 无法佐证的声明——需要人工全程审查),以及其余未声明的部分。在本仓库最近 200 个提交中,171 个可核查声明里有 170 个通过了核查:这就是你可以跳过的重复审查,依据是 git,而不是模型的置信度分数。(CLEARED 表示更改的形态符合声明——不代表代码正确;所有提交仍需进行正确性审查。该类别只会要求投入更多注意力,不会减少审查。)
更进一步——将判定接入你自己的技术栈:接入指南。
一支 Agent 团队出了什么问题
同时运行一大群 Agent,却没人监督,情况就会变成这样: 每个工作者都汇报自己成功了,而你只能相信这些汇报,因为还能依据什么呢?未经核查的问题悄悄堆积——这里撒个谎,那里有两个 Agent 改坏同一个文件,再加上一点范围蔓延,还有一个工作者原地打转——最后代码库勉强能用,却没人敢安全地修改它。
问题在于,你启动了这些 Agent,然后让它们自己给自己的作业打分。DOS 补上了缺失的信号——依据真实情况给出判定——从而闭合了循环。下面是同一支 Agent 团队在两种机制下的表现:
两种机制的流程图——无人监督:相信叙述;DOS 裁决:根据判定来引导
flowchart LR
subgraph OPEN["NO REFEREE — you believe the narration"]
direction TB
A1["agent: 'done!'"] --> B1[["believed"]]
A2["agent: 'done!'"] --> B1
A3["agent: 'done!'"] --> B1
B1 --> C1["silent corruption piles up<br/>(lies · collisions · spin)"]
C1 --> D1["'sorta works' — can't be changed"]
end
subgraph CLOSED["DOS ADJUDICATES — you steer on a verdict"]
direction TB
A4["agent: 'done!'"] --> V{{"dos verify<br/>reads git"}}
V -->|in git ancestry| S["SHIPPED (exit 0)"]
V -->|found nowhere| N["NOT_SHIPPED (exit 1)"]
S --> L["land it"]
N --> R["re-dispatch / flag — caught"]
R -.verdict steers the loop.-> A4
end
以下列出 Agent 团队实际会出现的问题,每项旁边都是悄悄揭穿工作者说法的真实情况,以及 DOS 给出的判定:
| 某个工作者…… | ……但真实情况是 | DOS 判定 |
|---|---|---|
| 声称已交付一项工作 | 实际上从未提交任何更改 | verify → 发现谎言 |
| 尝试过,但提交悄然失败 | 实际上从未提交任何更改 | verify(这种偶发故障——没有 git 时无法与谎言区分) |
| 修改其他工作者负责的文件 | 两个 Agent 共用一个文件 | arbitrate → 拒绝第二个 Agent |
| 超出自己申报的文件范围 | 实际修改范围超出声明的目录树 | scope-gate → 拒绝(写入生效之前) |
| 报告“正在取得进展” | 0 次提交,只有刚更新的心跳 | liveness → 空转 |
第一行是最常见的情况。典型迹象是,一个几乎什么也没做的工作者乐呵呵地发来一句话:“所有工作均已完成!”。DOS 从不读取这句话;它读取真实情况,因此只要没有产物佐证,这种说法就会立刻站不住脚(详见
docs/108)。这也让它易于采用:verify 不需要计划、注册表或配置,退出代码就是判定结果——任何 shell 或 CI 步骤都能据此分支处理,无需解析任何文本。
更想看它运行起来? 这两种循环也可以作为独立动画逐帧播放——克隆代码库,然后在浏览器中打开
docs/assets/loop_visual.html。(这是一个
HTML 文件,所以 GitHub 显示的是源代码,而不是运行结果——请在本地打开。)
租约范围——目前仅限单个文件系统。 验证部分(verify、
commit-audit、liveness)可以在不同机器间自由运行,因为它读取 git
历史记录。准入部分(arbitrate、通道租约)仅支持本地文件系统:
WAL 位于一块磁盘上,不同机器上的工作者没有共享的序列化点。在一台机器上或同一个共享文件系统中运行所有工作者的 Agent 团队,均可得到完整支持;跨多台主机的 Agent 团队应将
dos arbitrate 视为建议(而非硬性互斥锁),直到远程租约驱动程序发布。设计说明见 docs/366。
你可以将它用到什么程度
它可以在完全没有配置的普通 git init 项目中运行,并且你提供的信息越多,它就越智能。你不必采用某个框架或选择一个等级;从浅处开始,随着深入探索,它会持续带来回报——始终使用同一个内核:
- 零配置。 将
dos verify PLAN PHASE指向一个普通的 git 仓库——无需计划、注册表或dos.toml。它只根据提交历史作答 (via grep-subject/via none)。完整内容见 QUICKSTART,以及上文提到的第一天即可在 CI 中获益的做法。 - 告诉它你的项目结构。
dos init会写入dos.toml(将泳道、路径、 ship 语法作为数据);添加计划文档后,dos plan会将每个阶段的 声明与判定器的结论并列呈现。这里有一个计划文件的具体示例(可直接复制,并且能通过内置读取器往返解析),以及四个完整的示例工作区。 - 教它识别你自己的类型。 声明自己的阻止原因、门禁判定、输出渲染器、准入谓词、由模型驱动的判定器、自定义计划方言,或完整的宿主驱动——全部作为工作区策略实现,无需分叉。请参阅**docs/HACKING.md**(七个扩展方向)和可直接复制的
examples/dos_ext/。
如何接入
配置的深度决定了这条路径能走多远。另一个维度是你如何调用裁判——选择与你现有工作方式相符的接入方式,而不是重构你的技术栈。下表中的每一行都能访问同一套内核判定,从最简单的方式开始:
| 接入方式 | 适用于…… | 接入方式 |
|---|---|---|
| MCP server | 你通过 MCP 主机驱动 Agent(Claude Desktop、Cursor、Cline、Agent-SDK 应用) | 在主机配置中添加一行({ "command": "dos-mcp" }),然后让 Agent 对自己最后一项声明运行 dos_verify——零代码。这是建议路径(由 Agent 发起)。参见给你的 Agent 配一个测谎仪。 |
| 运行时钩子 | 你运行 Agent 循环(Claude Code、Cursor、Codex CLI、Gemini CLI),并希望裁决结果能够采取行动,而不只是可供使用 | dos init --hooks <runtime> 会将裁决结果接入该主机自己的钩子配置——被拒绝的调用会在运行前遭到拒绝,虚假的“已完成”会被拒绝。这是强制执行路径(由主机拒绝)。一条命令,无需手动编辑 YAML。参见 QUICKSTART 和 docs/221。 |
| CLI 退出码 | 你使用任何可运行命令的环境——CI 步骤、pre-push 钩子,或像 aider 这样的 Agent CLI,其 lint/test-cmd 会信任“已完成” | 根据 dos 子命令的退出码分支处理(dos verify:0 表示已交付 / 1 表示未交付;dos commit-audit:0 表示无问题 / 1 表示夸大声明)——裁决结果就是退出码,无需钩子适配器,也无需 MCP 客户端。这是没有钩子的主机(Windsurf、Warp、Zed)的诚实接入方式。退出码接入指南。 |
| Python API | 你的调度器/编排器已经使用 Python | import dos 并调用纯系统调用(dos.oracle.is_shipped、dos.arbiter.arbitrate 等)——输入状态、输出裁决结果,无需子进程。Python 接入指南。 |
| Fleet 框架 | 你的 Fleet 已运行在 LangGraph、CrewAI、AutoGen 或 OpenAI/Claude Agents SDK 上 | 将裁判器接入框架自己的衔接点——裁判节点、仅 git 能满足的终止条件,或带有 git 触发器的输出护栏。一个函数,无需重写;每个衔接点都通过真实框架执行验证。Fleet 框架接入指南。 |
| Swarm 运行时 | 你的 Agent 运行在 Hermes、OpenClaw 或 SwarmClaw 风格的自主 Swarm 上——具有特权的工具、共享记忆文档 / 任务板,且两者都没有锁管理器 | 在工具执行循环中加入一个由两个函数组成的适配器:guard_action 会在任意执行命令运行前拒绝它;acquire_lease / release_lease 会包围每次共享状态写入,避免丢失的更新落地。无需 import dos——它会调用 CLI;Hermes 的 pre_tool_call 钩子也原生支持 DOS(dos hook pretool --dialect hermes)。可运行且经 A/B 测量的 Hermes / OpenClaw 实例 和 docs/278。 |
| 技能包 | 你在 Claude Code 中运行 Agent,并且想要的是工作流,而不只是裁决结果 | dos init --skills 会生成可编辑的 SKILL.md 脚本,将系统调用接入“快照 → 审计 → 闸门 → 选择路线”循环。参见 QUICKSTART §2。 |
| 驱动器 | 你的路线必须经计算得出,或你要添加一个由提供方支持的评判器 | 编写一个 dos/drivers/<host>.py(包含一个 LaneTaxonomy 和一个配置工厂),按名称加载,内核绝不导入。对应说明见 HACKING.md。 |
| 这两个维度彼此独立:零配置的代码库可以通过任意入口接入,而经过深度配置的代码库仍可通过同一套 CLI 和 MCP 工具响应。 | ||
| 从顶行开始——这是零成本即可尝试的选项。前两行也可以组合使用:MCP 提供建议(Agent 检查自己的工作),钩子负责强制执行(宿主阻止不当操作)——两者一起接入,即可形成完整闭环。 |
这些入口是价值链的上游——也就是谁来调用裁判。相同的裁决结果也会流向下游,交给据此采取行动的系统:每次裁决都会写入裁决日志,dos export 会将其导出到你的可观测性技术栈(Datadog / Honeycomb / Grafana —
docs/266);dos notify 会将需要人工处理的事项推送到 Slack;dos reward 会限定微调可使用的训练数据;dos attest 则会生成一份经过签名的回执,供无法访问循环的质疑者核验
(docs/246)。一个内核、一套裁决词汇,从 Agent 的工具调用一直贯通到你的仪表板。
再上一个层级——每天运行它:管理一组服务。
来自同一团队
DOS 是 Anthony Chaudhary 提供的三个开源工具之一,旨在让你能够真正信任 AI Agent——分别作用于三个不同阶段:
- fak — Agent 内核 — DOS 读取 Agent 已经做过的事(事后从 Git 和其他 Agent 无法伪造的见证中读取);
fak则在 Agent 行动时管理 Agent 获准执行的操作。这是一个独立的静态 Go 二进制文件,位于你的令牌引擎之前,并在边界处裁决每次工具调用——能力门控、工具结果隔离、审计跟踪——它是 DOS 循环外裁判的内联门控。go install github.com/anthony-chaudhary/fak/cmd/fak@latest· 文档。 - Diffgram — 面向人工监督 AI 数据(标注、工作流、目录)的 AI 数据存储。DOS 和
fak监督 Agent,而 Diffgram 监督它们学习和产出的 数据。
引用
这里的理念已写成一篇论文——《验证是你所需的一切——但不在你以为的地方》——探讨 Agent 集群的循环外裁判。已构建的 PDF 位于 paper/releases/;arXiv 预印本正在准备中。在 arXiv ID 发布之前,请引用此代码库:
@misc{dos_kernel,
title = {Verification Is All You Need --- But Not Where You Think},
author = {Chaudhary, Anthony},
howpublished = {\url{https://github.com/anthony-chaudhary/dos-kernel}},
note = {DOS --- the Dispatch Operating System; arXiv preprint in preparation},
year = {2026}
}
许可证
MIT — 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。