Git 官方文档说明:一个仓库可以有 1 个主 worktree,并连接 0 个或多个 linked worktree。这意味着你不需要复制整套项目,就能为不同任务准备独立工作目录。(git-scm.com)
症状:多个 AI Agent 同时改代码,却频繁冲突、重复返工、没人知道哪个结果能合并。
最快解法:先画任务依赖图,再用 Git worktree 或沙箱隔离工作区,最后用统一测试门禁收敛结果。Parallel AI Coding 指南的核心不是“开更多 Agent”,而是让每个 Agent 在明确边界内交付可验收产物。
这篇文章适合三类人:
- 想从单 Agent 升级为并行开发的独立开发者;
- 需要缩短功能交付周期的小型研发团队;
- 正在规划并行 Agent 运行环境、权限和资源容量的平台工程师。
启动前:先判断项目是否值得并行
并行编码最容易犯的错误,是把一个本质上串行的任务拆成多个窗口。比如数据库模型尚未确定,前端、接口层和测试 Agent 却同时开始修改同一组类型文件,最后得到的不是更快交付,而是更多冲突。
你可以先把需求画成简单的依赖图:
数据模型 → API 契约 → 服务实现 → 前端调用
↘ 自动化测试
只有处于同一层、互相不等待输入的工作包,才适合交给不同的 AI Coding Agent。典型可并行任务包括:
- Agent A:编写不依赖新接口的单元测试;
- Agent B:实现独立的前端页面;
- Agent C:补充文档、示例和静态检查规则;
- Agent D:对现有实现做安全审查或性能分析。
如果所有任务都依赖同一个核心文件,或者产品需求仍在变化,应先由一个 Agent 或人工完成基础层。否则每个分支都会基于不同假设工作,合并时需要重新设计。
任务拆分时,怎样判断一个工作包是否足够独立?
建议采用“一个任务、一个产物、一个验收条件”的拆法,而不是按“让 Agent 自由发挥”分配工作。每个任务至少写清楚以下内容:
- 目标:要解决什么用户问题;
- 修改范围:允许修改哪些目录和文件;
- 禁止区域:不得触碰哪些配置、密钥、数据库迁移或公共接口;
- 输入接口:依赖哪个分支、文档或已确认的类型定义;
- 测试命令:完成后必须运行什么命令;
- 完成定义:什么结果才算交付;
- 交接产物:提交、补丁、测试报告或接口说明放在哪里。
这份任务契约不要只留在聊天窗口里。建议把它放入仓库的任务目录、Issue 或版本化项目文档中,并与代码一起评审。这样即使 Agent 中途退出,其他人也能根据记录恢复上下文。
启动阶段:建立统一契约与隔离目录
Git worktree 的价值在于:不同工作目录可以连接到同一个仓库,同时拥有各自的 HEAD、索引和工作文件。Git 官方文档也明确列出了 add、list、remove、prune 等管理命令。(git-scm.com)
一个基础的本地流程可以这样执行:
git fetch origin
git switch main
git pull --ff-only
git worktree add ../project-api -b agent/api-contract main
git worktree add ../project-ui -b agent/ui-screen main
git worktree add ../project-test -b agent/test-coverage main
git worktree list
每个目录启动一个 Agent:
cd ../project-api
claude
cd ../project-ui
claude
cd ../project-test
claude
具体 CLI 参数和权限模式要以对应工具的官方文档为准。Claude Code 当前文档提供了 --permission-mode、--max-budget-usd 等控制项,也支持后台会话、日志和恢复操作;不要因为要追求无人值守,就直接给所有 Agent 永久开启最高权限。(docs.anthropic.com)
| 工作方式 | 隔离对象 | 适合场景 | 主要风险 |
|---|---|---|---|
| Git worktree | 分支、工作目录、索引 | 同一仓库的独立代码任务 | 依赖、端口和外部服务仍可能冲突 |
| 容器沙箱 | 文件系统、进程、运行环境 | 需要执行未知脚本或多项目并发 | 启动、镜像和挂载配置更复杂 |
| 远程工作区 | 机器、环境、会话 | 本地资源不足或需要持续运行 | 权限、密钥、网络和成本管理 |
| 多终端共享目录 | 几乎没有真正隔离 | 临时查看、只读分析 | 极易覆盖文件和污染测试状态 |
独立机器不是硬性要求,但独立运行边界是。
不一定需要独立机器,但至少要有独立的工作目录、分支和运行状态。只使用 Git worktree 时,代码修改可以隔离,但数据库、缓存、端口、临时文件和 .env 仍可能共享。
如果 Agent 要运行安装脚本、启动服务、执行迁移或处理不可信代码,建议进一步使用容器或远程沙箱。OpenHands 的官方运行时文档将 Docker 容器作为隔离执行环境,用于控制代码执行对宿主机的影响,并支持绑定挂载、命名卷和覆盖层。(docs.openhands.dev)
密钥也必须单独处理:
- 不要把生产密钥直接复制到每个 worktree;
- 使用最小权限的测试凭证;
- 对数据库、云资源和删除命令设置额外审批;
- 检查
.env、SSH 密钥和凭证文件是否被 Agent 读取; - 对需要联网的任务记录访问目标和输出位置。
⚠️ Git worktree 只隔离代码工作树,不等于安全沙箱。它不能阻止 Agent 访问宿主机上的其他目录,也不能自动隔离端口、网络、密钥或外部服务。
并行执行:控制依赖、上下文与通信
多个 AI Coding Agent 同时工作时,最常见的隐性成本不是代码冲突,而是上下文漂移。一个 Agent 根据旧接口开发,另一个 Agent 已经修改了类型定义,第三个 Agent 又按照聊天记录中的过期要求补测试,最终每个分支单独看都像是完成的,放在一起却无法运行。
建议为每个任务规定固定的状态格式:
任务:实现用户资料 API
状态:进行中 / 等待输入 / 待验收 / 阻塞
基线提交:abc123
允许修改:src/api/profile、test/profile
依赖:接口契约 v2
测试命令:npm test -- profile
产物:分支 agent/api-profile
阻塞原因:等待数据库字段确认
状态应写入项目记录,而不是只存在于 Agent 对话中。你还可以要求每个 Agent 在每次交付时返回:
- 修改文件列表;
- 设计决策;
- 已运行的命令;
- 测试结果;
- 未解决的问题;
- 下一位 Agent 需要知道的上下文。
如果使用专门的并行编排工具,仍然要检查它的隔离模型。Orca 官方文档描述的工作方式是每个任务使用独立 Git worktree、独立 Agent 终端和独立浏览器标签,并支持通过 SSH 或受控远程环境运行。(onorca.dev) 这类工具适合减少窗口管理和分支切换,但不能替代任务拆分与代码评审。
文件所有权怎样设计,才能降低覆盖风险?
最稳妥的方式不是依赖 Agent 自觉,而是提前建立“文件所有权”:
- 公共接口文件:由一个 Agent 负责,其他 Agent 只能读取;
- 数据库迁移:单独排队,禁止多个 Agent 同时创建;
- 配置文件:指定维护者,其他分支提交修改建议;
- 测试目录:可以并行新增,但不得随意重写共享测试工具;
- 锁文件:如依赖管理文件发生冲突,必须在底层变更合并后重新生成。
当两个任务确实需要改同一个文件时,不要强行并发。可以把任务拆成“先提供接口”“再接入调用”两个阶段,让后一个 Agent 等待前一个提交稳定后再启动。
首轮验收:把测试门禁前置
并行开发不能等到最终合并时才发现问题。每个分支完成首轮工作后,至少执行以下验收:
git diff --check
npm test
npm run lint
npm run build
具体命令按项目语言和工具链替换。对于涉及依赖升级、文件上传、身份认证、命令执行或外部 API 的任务,还应增加安全扫描和权限检查。
怎样用同一套标准检查不同 Agent 的产物?
你需要使用同一套验收标准,而不是根据某个 Agent 的回答质量判断。可以按以下顺序处理:
- 检查是否修改了禁区文件;
- 检查提交是否基于正确的基线;
- 执行格式检查和静态分析;
- 执行单元测试;
- 执行构建或类型检查;
- 执行必要的安全扫描;
- 对接口、错误处理和日志进行人工评审;
- 记录失败原因,不通过的分支先修复。
Claude Code 的命令行文档提供了非交互执行、结构化输出和预算上限等能力,适合接入自动化任务,但这些参数只解决“如何运行 Agent”,不代表生成代码天然通过测试。(docs.anthropic.com)
OpenHands 的运行时文档还提到,容器运行时会在沙箱内执行 shell、文件操作和代码操作,并通过客户端与执行服务传递动作和观察结果。(docs.openhands.dev) 这对需要运行未知脚本的团队很重要:代码验收和环境隔离是两道不同的门,不能互相替代。
合并阶段:按依赖顺序收敛结果
合并不要按照“哪个 Agent 代码最多”来决定。更可靠的顺序是:
- 先合并数据模型和接口契约;
- 再合并服务层或公共模块;
- 更新其他分支到最新基线;
- 重新运行测试、构建和静态检查;
- 最后合并前端、文档和非关键优化;
- 对多个候选实现进行统一评分。
评分可以包含以下维度:
- 是否满足需求;
- 是否通过自动测试;
- 是否引入额外依赖;
- 是否修改了不必要的文件;
- 是否容易维护;
- 是否符合现有项目风格;
- 是否留下难以验证的隐性行为。
合并后不要继续使用旧 worktree。确认分支已提交、结果已合并后,可以执行:
git worktree remove ../project-api
git worktree remove ../project-ui
git worktree remove ../project-test
git worktree prune
Git 官方文档说明,手动删除工作目录后可能留下过期的管理信息,应该使用 git worktree remove 或在必要时执行 prune 清理。(git-scm.com)
第一周:用数据调整并行度
并发 Agent 数量不应凭感觉增加。你应记录以下指标:
- Agent 等待输入的时间;
- 分支之间发生冲突的次数;
- 因接口变化产生的返工次数;
- 测试失败的主要原因;
- 人工评审每个分支所需的时间;
- 环境启动、依赖安装和端口配置耗时;
- 最终被合并的候选比例。
如果大多数 Agent 都在等待同一个接口,瓶颈是任务拆分,不是算力。若冲突集中在配置、数据库迁移或公共类型文件,应该先重新划分文件所有权。若任务本身独立,但本地机器经常卡在依赖安装、构建或多个服务同时运行,再考虑长期在线的远程 Mac 工作区。
哪些信号说明并发方式已经开始拖慢项目?
通常有以下几种情况:
- 任务依赖没有画清楚,Agent 反复等待;
- 多个分支修改同一批公共文件;
- 每个 Agent 都重新安装依赖和建立环境;
- 没有统一测试命令,人工逐个判断结果;
- 代码生成速度超过了评审和合并速度;
- Agent 权限过高,导致额外的安全审查;
- 失败分支没有及时停止,持续消耗模型调用和机器资源。
你可以使用这份可勾选清单决定是否扩大并发:
- [ ] 每个任务都有独立目标和明确完成定义;
- [ ] 任务之间的输入、输出和依赖关系已经画出;
- [ ] 每个 Agent 都有独立 worktree、分支或沙箱;
- [ ] 公共文件、数据库迁移和配置文件已经指定负责人;
- [ ] 测试、静态检查和构建命令已经写入任务契约;
- [ ] Agent 使用的是测试密钥,而不是生产凭证;
- [ ] 每个分支都有状态、失败原因和产物记录;
- [ ] 首轮验收通过后,才允许进入合并队列;
- [ ] 你有时间评审所有候选实现;
- [ ] 新增 Agent 前,已经确认瓶颈确实来自执行资源。
如果有 2 项以上无法勾选,先不要增加 Agent。先修复契约、隔离或验收流程,通常比继续堆并发更有效。
本地、临时租用与长期远程环境
完成任务依赖图后,再决定运行环境,而不是先购买高配设备。一个小型、短周期、依赖本地 Xcode 或物理设备接口的任务,更适合本地 Mac;需要临时启动多个独立工作区的项目,可以考虑按需租用;如果团队每天都要运行持续构建、远程评审和后台 Agent,则应评估长期远程环境的稳定性、权限和总成本。
你可以先阅读 Kvmzen 的帮助中心,确认远程 Mac 的连接、环境管理和使用边界;如果需要对比本地购买与云端使用,也可以查看 Mac mini 价格与方案信息。
当前方案如果只是“多开终端加共享目录”,通常有 3 个真实缺点:文件修改边界不清晰、依赖和端口容易互相污染、电脑休眠或网络中断后任务难以持续。对需要临时并发、远程协作或短期测试的团队,直接租用 Kvmzen 的 Mac 环境,可以先按任务依赖和并发规模验证工作流,避免先买下高配设备,再发现项目根本无法有效并行。若你的任务是长期稳定重负载、必须连接特定物理设备,或需要完全控制本地硬件,那么自购 Mac 仍可能更合适。
