如何并行运行多个 Claude Code 智能体
同时运行多个 Claude Code(或 Codex)会话的三种方式,从普通终端到协同工作的团队,以及如何避免它们互相干扰。
为什么要运行多个 Claude Code 会话?
一个 Claude Code 会话会一步一步地完成任务。当一次改动包含相互独立的部分(一个 API、它的测试、一次迁移、文档)时,为每个部分各运行一个会话,能更快完成整体工作,并让每个会话的上下文专注于一件事。第二个会话也天然适合担任第一个会话的审查者。
你马上会遇到的两个问题是冲突(两个会话编辑同一批文件)和协调(由你在它们之间传递工作和结果)。下面每种方法处理这两个问题的方式各不相同。
方法 1:在同一个检出目录中开多个终端
最简单的做法是在同一个仓库中打开两三个终端标签页(或 tmux 窗格),并在每个里面启动 claude。它不需要任何新工具,当这些会话只读代码或只改动明显互不相干的文件时,这样做没有问题。
但它很快就会出问题。每个会话都在编辑同一个工作目录,于是一个会话改到一半的内容,就会变成另一个会话眼中令人困惑的状态;而在某个窗格里执行一次 git checkout,会改变所有会话脚下的文件。你还是这些会话之间共享任何东西的唯一途径:你从一个标签页复制计划,再粘贴到另一个标签页。
方法 2:每个会话一个 Git 工作树
Git 工作树解决了冲突问题。工作树是同一个仓库的第二个工作目录,位于它自己的分支上,因此每个 Claude Code 会话都有属于自己的文件:
git worktree add ../myapp-api -b agent/api
git worktree add ../myapp-tests -b agent/tests
cd ../myapp-api && claude # session 1
cd ../myapp-tests && claude # session 2现在每个会话都提交到自己的分支,完成后由你合并这些分支。分支合并之后,用 git worktree remove ../myapp-api 删除它的工作树。
工作树解决了文件问题,却没有解决协调问题:这些会话仍然无法互相询问任何事,你仍然要记住哪个终端在做什么、哪个在等你。
方法 3:在一个会话内使用子智能体
Claude Code 也可以在单个会话内启动子智能体,让它们处理任务的一部分并汇报结果。这样一切都保留在同一段对话中,很适合调研或聚焦的子任务。不过,它仍局限于一家提供商和一个会话:你无法把 Codex 或 Gemini 智能体带进来,而长时间运行的并行编辑依然需要独立的分支。
方法 4:画布上的协同团队
MAO 把上面这些部分整合到一个地方。每个 Claude Code 会话(或 Codex、Gemini CLI、Grok、OpenCode 会话)都是画布上的一个真实终端,而以下三点让它们成为一个团队:
- 图层就是工作树。把智能体放到一个图层上,它就会在自己的分支、自己的工作目录中工作,这些都会为你自动创建。你在画布上查看差异(diff),并在准备好时将其合入。
- 连线让智能体互相交流。连接两个会话后,它们就能用
mao命令互相发送任务并取回结果,这样审查者可以直接联系作者,而不用经过你。 - 需要关注的事会来找你。当某个会话完成、失败或等待批准时,它的节点会显示出来,你也会收到通知,因此你再也不用在标签页之间翻找。
智能体在自己的终端里询问与它相连的审查者:
mao ask reviewer "Check the new /sessions endpoint for missing tests"由于每个节点都是智能体自己的 CLI,每个会话都保留自己的登录、订阅和模型。你可以并排运行两个使用不同账号的 Claude Code 会话。
你应该用哪种方法?
如何避免并行智能体相互冲突
- 每个要改代码的智能体一个分支。仅这一条规则就能避免大多数问题。
- 按边界拆分,而不是按行拆分。给智能体分配完整的文件或模块,而不是同一个文件的不同部分。
- 把计划一次写下来。一份共享的规格说明笔记能让每个智能体遵循同一套接口,而不是各自发明一套。
- 让一个智能体担任审查者。它会在你合并之前阅读每个分支,让矛盾尽早暴露。
- 经常合并。短期分支比长期分支偏离得更少。
常见问题
可以。每个终端都能运行自己的 Claude Code 会话。为了避免它们编辑同一批文件,给每个会话分配自己的 Git 工作树,或者在 MAO 中把每个会话放到各自的图层上,MAO 会为你创建工作树。
在各自的终端中运行它们。在 MAO 中,放置一个 Claude Code 节点和一个 Codex 节点并把它们连接起来,它们就能通过 mao 命令互相发送任务和结果。
不会,每个会话都有自己的上下文。可以通过一条公共笔记(例如每个智能体都能读取的规格说明或进度日志)来共享它们需要的内容,或者把一个智能体的结果发送给另一个智能体。
在 MAO 中可以:每个节点都能用不同的账号运行智能体,因此两个 Claude Code 会话可以并排使用两份订阅。
有问题?可以在 Discord 提问,或发邮件到 hello@miguer.com。