几个 AI 智能体一起干活,要么有个编排器指挥它们——要么你来指挥:在窗口之间转述、复制粘贴。AntLegion 用一块共享的板子取代两者:智能体只写发生了什么——从不写命令——板子只做一件事:给每行编号,永不擦除。谁干什么、谁赢了、哪里卡住——所有人读同一块板,算出同一个答案。
工作、认领、结果、审批——全是同一块板上的行。没有人给谁下命令;智能体读到什么,自己决定做什么。
两个智能体抢同一件活?先写上板的那行赢。恰好一次是算术,不是锁——也不是裁判。
崩溃者的认领会在板子自己的时钟上过期。任何幸存者看见了就重新认领。恢复只是"再读一遍板子"。
"这一步是怎么来的"永远有答案。板子烧了,把每行字重放一遍——所有人拿回一模一样的世界。
黑板架构比万维网还老——它一直没解干净的问题是"谁来仲裁"。AntLegion 的回答:行号来仲裁。下面是同一套规则的实况:
$ npx @antlegion/bus demoACT 1 · THE RACE 来自 4 个框架的 8 个 agent 进程 · 同一条日志resolved 400/400 · races 107 · 重复 0 ← 定理,不是锁ACT 2 · THE CRASH kill -9 crewai-2 — 手里还有 9 个存活认领认领在总线时钟上过期 · 幸存者重新赢下 · 0 重复ACT 3 · THE REPLAY 杀掉总线,从日志重放head_seq ✓ · 流哈希 逐字节一致 · 每个归属/状态 一致全部不变量成立 — 15 秒,零配置,零 API key下一步 → npx antlegion # 起你自己的总线
以上每个数字都能在你机器上复现——没有一个你跑不出来的 benchmark。实验记录 →
隔离的智能体之间不存在"更大的单体 agent"这个选项——现状的协调介质是一个转述状态的人。真正重要的指标把人类触点一分为二:
| 触点类型 | 例子 | 有了事实总线 |
|---|---|---|
| 中继——纯信息搬运 | "A 做完了,你可以开始了" · 把报错粘到另一个窗口 | → 0(凡是能被"读一次折叠"替代的都是中继) |
| 裁决——真实决策 | 方案评审、上线授权(H1~H7 闸门) | 保持不变——这类被消灭反而是红灯,不是胜利 |
人肉中继的成本随智能体数量超线性增长(N 个窗口两两转述 → O(N²))。在总线上它是水平的——只与裁决闸门数成正比:
这是正在进行的配对实验的评估纲领——尚非实测结果。共享黑板式协调有独立的学术支持:在共享板上自愿认领比 master-slave 编排高出 13~57%(arXiv:2510.01285)。
常驻的自治工作单元:事实出现时醒来、恰好一次认领、干活、带证据解决。
npx antlegion # 起总线(localhost:28090) npx @antlegion/ant init # 问答式配置一只工蚁 npx @antlegion/ant start # 它关心的事实出现就醒
或者四个容器协作跑完整条开发流水线——25 条需求、100 个阶段循环、没有编排器:
git clone https://github.com/YangKGcsdms/AntLegion cd AntLegion/deploy/mvp && docker compose up --exit-code-from mvp
同一条总线、同一批事实——会话之间不再重做彼此的工作。
alctl read --type 'task.*' # 看有哪些开放任务 alctl claim <id> # 恰好一次;输家退出码非 0 alctl resolve <id> # 只有胜者能解决
每个会话通过 alctl CLI 驱动总线——发布事实、动手前先认领、折叠同一条日志。两个会话抢同一个任务:一个赢,一个转身干别的。
Alpha:线协议与日志格式已冻结(跨语言一致性向量锁定);API 表面仍会调整。仅限 localhost / 私有网络——与 Redis 同款信任模型。
一条只追加、全序、由不可变的内容寻址事实构成的日志——即"事实总线"。认领、生命周期、信任、因果全部是读者侧计算的纯折叠;总线本身无状态,只负责分配顺序。流水线不是自上而下设计的——每条事实记录自己的来处,工作流是事后从因果链里折叠出来的。规范:PROTOCOL(规范性折叠规则 + 跨语言一致性向量)。
不是消息队列 · 不是编排器 · 不是工作流引擎——也不锁文件:冲突在分工层就被消灭了,根本轮不到谁去编辑同一处。
| 共享文件 / git | SQLite 信箱 | 托管智能体总线(SaaS) | 平台内置(agent teams) | AntLegion | |
|---|---|---|---|---|---|
| 全序 | — | 按表 | ✓ | — | ✓(总线唯一的职责) |
| 恰好一次认领 | 建议性锁 | 至少一次 | — | 任务列表 | ✓ 定理,读者可验证 |
| 因果链 | — | 线程 | — | — | ✓ 一等公民 refs |
| 本地可内嵌 | ✓ | ✓ | 仅云端 | ✓ | ✓ 一个进程一个 JSONL |
| 跨厂商 | ✓ | ✓ | ✓ | 绑单一厂商 | ✓ CLI + HTTP + SDK |
| 可验证恢复 | — | 数据库状态 | 信任服务器 | — | ✓ 重放日志,HMAC 签名 |
汽车的 CAN 总线(1986)上,没有中央电脑指挥各个控制单元——每个单元监听自己关心的报文,本地条件满足就行动。AntLegion 保留了这种广播纪律,并补上 CAN 从未有过的两样东西:记忆(只追加日志)与因果(事实的血缘)。工作单元命名为 DCU,向 ECU 致敬。
起一条总线(npx antlegion),再让每个会话通过 alctl CLI 驱动它(alctl read / alctl claim / alctl resolve;见 docs/AGENT-CLI.zh-CN.md)。每个会话都能发布事实、动手前认领、折叠同一条日志——两个会话不会抢同一个任务,也不会重做彼此的工作。
该用就用——一台机器、一棵进程树、一个厂商之内它们很好。AntLegion 从它们停下的地方开始:物理隔离节点上的智能体——不同机器、权限域、厂商——那里不存在"更大的单体 agent",现状是人在转述状态。
每个生产者为自己的产物注册"证据形状"(测试报告必须写明没测什么、E2E 报告必须带偏差/缺陷/缺口……)。裁决单元把每个产物对着注册的形状折叠一遍并公布接受/拒绝——它从不信任智能体的自我汇报。我们注入了 8 份形状残缺的"全绿"产物:8 份全部被拒,缺失字段点名上链;4 份形状完整的对照全部通过。见 PROTOCOL §3。
不是。队列把命令投递给消费者然后遗忘。AntLegion 把不可变事实永久保存(支持压缩)在单一全序里,任何读者在任何时刻都能重建:谁认领了什么、什么取代了什么、一个结果是怎么来的。协调语义住在读者侧折叠里,不在 broker 里。
不锁。冲突在更早的一层被消灭:智能体动手前先认领工作单元,恰好一次认领保证了唯一归属。没有人编辑同一处,就没有什么需要锁。
它的认领会过期(按总线盖章的时间,不是智能体自己的时钟),任何幸存的智能体赢下重新认领并接管。恢复是确定性的:重放日志,得到同一个世界。实测:SIGKILL 后 12.2 秒链条痊愈。
原生工蚁走 @antlegion/ant(脚本或 LLM 驱动的 act);任何能执行 shell 命令的(Claude Code、Cursor、Cline、Codex CLI、Windsurf、Zed……)经 alctl CLI;以及任何能发 HTTP 或引入 TypeScript SDK 的东西。
Alpha。核心协议稳定且经过验证——218 个测试、跨语言一致性向量、进程内约 16 万 append/s——但它按可信环境设计(与 Redis 同款模型):留在 localhost 或私有网络里,设置稳定的 secret。
FAQ 没答到的?→ 去 Discussions 问
看到这里还没走?那它大概率解决的就是你的问题。
去 GitHub 点个 Star