mcpField
D
DOS Kernel - trust substrate for agent fleets (stdio via PyPI)

DOS Kernel - trust substrate for agent fleets (stdio via PyPI)

本地服务
pypi.orgAI 与智能体202 天前更新

关于 DOS Kernel - trust substrate for agent fleets (stdio via PyPI)

DOS 是面向 AI Agent 集群的信任底座,通过读取 git 历史等外部证据来核验 Agent 声称完成的工作,而不是采信其自述。适合同时运行多个编码 Agent 的团队。

主要功能

  1. 01依据 git 提交核验“已完成”声明
  2. 02dos verify 返回 SHIPPED 或 NOT_SHIPPED 并给出退出码
  3. 03检测多个 Agent 之间的文件冲突
  4. 04通过 liveness 识别停滞或空转的运行
  5. 05基于 PyYAML 的单一运行时依赖

适用场景

  1. 01在 CI 中用退出码拦截未落地的“已完成”声明
  2. 02审查大量 Agent 提交时区分可验证的变更与需人工复核的声明
  3. 03为多 Agent 并行修改同一仓库提供冲突仲裁

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"dos-kernel": {
"command": "uvx",
"args": [
"dos-kernel"
],
"env": {
"DISPATCH_WORKSPACE": "<DISPATCH_WORKSPACE>"
}
}
}
}
启动命令uvx dos-kernel
需要配置的环境变量
DISPATCH_WORKSPACEPath of the git workspace the server should adjudicate (defaults to its working directory; every tool also takes a per-call `workspace` argument).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidos-kernel0.30.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

DOS — 调度操作系统

揭穿那些谎称已交付成果的 AI Agent。

PyPI Python versions CI verified by DOS commit-claims License: MIT

📊 查看它在真实代码仓库中的运行效果: 排行榜 为 15 个热门的 AI 构建代码仓库(roborev、open-interpreter、crewAI、autogen、……)评分: Agent 写了多少、哪些 Agent 写的,以及每次提交的声明是否有对应的差异作为依据。 为你的代码仓库评分:dos commit-audit --sweep --workspace . BASE..HEAD。

终端录下了谎言被揭穿的过程。Agent 报告:完成!已交付登录端点(AUTH1)和密码重置(AUTH2)。git log 显示只有一次提交——AUTH1:交付登录端点。dos verify AUTH AUTH1 返回 SHIPPED(退出码 0);dos verify AUTH AUTH2 通过 none 返回 NOT_SHIPPED(退出码 1)——谎言被揭穿。退出码就是判定结果:据此对 Agent 的“完成”状态设置门禁,就能阻止虚假声明进入代码库。
一段录屏,讲清 DOS 的核心:Agent 声称交付了两项功能,git 只为其中一项作证。 dos verify 根据提交给出答复,谎言以退出码 1 告终,而针对该退出码设置的门禁会拒绝虚假的“完成”声明。每一行都是实际 CLI 的原样输出—— scripts/build_caught_lie_cast.py 会在输出发生变化时重新录制。

两支 Agent 队伍并列展示。左侧没有裁判:Agent 全都报告“完成!”,每份报告都被相信,悄无声息的破坏(谎言、冲突、空转)不断累积,最终代码库“勉强能用”且无法修改。右侧由 DOS 裁定:dos verify 读取 git,运行流程分支为 SHIPPED(退出码 0,合入)或 NOT_SHIPPED(退出码 1,重新调度——谎言被揭穿),判定结果决定下一步。
让一支 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。

dos verify 的关键时刻。两个同样自信的 Agent 声明,都通过 git 进行核查。左侧是 Agent 的声明(可伪造):“已交付 AUTH1 — 登录端点已完成”和“AUTH2 也完成了 — 所有工作都已完成!”。右侧是 git 的实际记录:一条真实提交 e389e8b“AUTH1: ship the login endpoint”,没有任何提交提到 AUTH2。两个判定:dos verify AUTH AUTH1 在真实提交主题中找到该标记 → SHIPPED,退出码 0,通过 grep-subject;dos verify AUTH AUTH2 一处也没找到 → NOT_SHIPPED,退出码 1,通过 none。没有提交佐证的那一刻,自信满满的 AUTH2 声明就站不住脚了。
两个同样自信的声明,各有一个判定——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你的调度器/编排器已经使用 Pythonimport 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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。