跳转至
AIOS
并行 coding agentgit worktree并发Agent Team状态隔离开发效率

并行 coding agent 不是免费的:Git worktree 隔离文件,隔离不了状态

并行 coding agent 不是免费的:Git worktree 隔离文件,隔离不了状态

快速回答: 本周 Hacker News 的帖子"Git worktrees are not an isolation boundary for coding agents"点中了大多数并行 agent 方案忽略的问题:worktree 隔离的是文件,不是状态。当多个 agent 共享同一份计划、激活存储、token 流和 evidence 日志时,你得到的是和多线程代码一样的竞态条件——丢失更新、双重消费、静默冲突。文件隔离必要但不充分;你还需要事务性状态和显式协调。

并行 agent 的 hype 撞上现实

并行 coding agent 现在到处都是:同时跑 Claude Code、Codex 和 OpenCode 的 tmux TUI、并行 agent 的本地 merge queue、每个 agent 一个 worktree 的团队。想法很简单——agent 便宜,那就多跑几个。

本周一个帖子给出了现实检验,核心观点是worktree 不是隔离边界。它说对了一件事:两个 agent 在两个 worktree 里不会破坏彼此的源文件,但绝对会破坏彼此的状态

worktree 隔离实际给了你什么

一个 git worktree 给每个 agent 独立的工作目录和分支。它保护:

  • 源文件——agent A 的编辑覆盖不了 agent B 的文件。
  • 分支——每个 agent 合自己的分支;冲突在合并时浮出水面。

保护:

  • 激活存储——哪个工作流处于激活状态、计划推进到哪个 token。
  • token 推进——两个 agent 都读到"当前 token = 3",都推进到 4。一步跑两次,另一步从没跑过。
  • evidence 和验证——agent A 的验证日志可能被 agent B 对同一检查的运行覆盖。
  • 共享缓存和锁——同一个锁文件、同一个注册表、同一个 .aios 状态目录。

如果你的 agent 共享以上任何一项,worktree 给你的只是隔离的错觉,而底层的状态机正在像有 bug 的多线程代码一样竞态:丢失更新、双重消费、静默冲突。

状态级隔离长什么样

三件事区分"能正常工作的并行 agent"和"互相破坏的并行 agent":

1. 事务性状态写入

状态更新必须原子且崩溃安全。如果 agent 写入中途崩溃,下一次运行要么回滚前滚,要么失败关闭——绝不信任半写的投影。AIOS v5.4.0 让激活写入事务化(写前事务、重启自动前滚、读侧一致性校验,不一致时 stale-activation-projection 失败)。

2. 共享 token 上的真锁

并行 agent 不能双重消费同一个 Command token。存储文件锁串行化推进:并发调用收到 AIOS_REX_STORE_BUSY 而不是静默竞态。这和 SELECT ... FOR UPDATE 是同一个纪律——串行化唯一不能并行化的东西:谁拥有下一步。

3. 显式协调,而不是隐式信任

并行需要协调层:带明确归属的独立工作包、监控(谁卡住了?)、安全恢复(worker 死了怎么办?)。AIOS 的 Agent Team 路由把工作拆成带验收标准的独立包并用 HUD 实时监控;Solo Harness 为单个长目标提供带 journal 和 stop/resume 的 worktree 隔离——两者是不同任务的不同工具。

经验法则

当工作能拆成状态独立的独立包时,用并行 agent。耦合变更保持串行——工作流策略本来就这么做(planned 路由,耦合变更留在同一个客户端)。如果两个 agent 必须触碰同一个激活、token 或 evidence,那你拥有的不是两个并行任务,而是一个带竞态条件的任务。

安全上手序列

aios init --all
aios doctor --native --verbose

阅读 Agent Team 指南了解独立工作包和 HUD 监控,Solo Harness 指南了解带 worktree 隔离的可恢复长任务,工作流策略了解何时耦合变更必须保持串行。

FAQ

那我应该停止用 worktree 吗?

不。worktree 是好的文件级隔离机制。重点是它不够:在上面加事务性状态和显式协调,否则并行会在文件冲突永远不会的地方咬你。

怎么知道我的 agent 是否共享状态?

检查它们在 worktree 之外写了什么:共享的 .aios 目录、锁文件、注册表,或任何记录"我们推进到哪一步"的东西。如果两个 agent 能读写同一个文件,它们就共享状态。

merge queue 不就是足够的协调吗?

merge queue 协调的是代码——分支何时合并。它不协调状态——谁推进计划 token、谁拥有验证。两者都需要。

细节在哪里看?

更新日志覆盖了 v5.4.0 的状态加固,发布文章工作流迭代 v2.1解释了被关闭的并发失败模式。

并行是乘数——对吞吐量如此,对破坏亦然。文件该隔离就隔离。状态也必须隔离,否则 agent 会替你隔离,以最糟糕的方式。