智能编码进化论

给AI建项目组:多会话与CI/CD实战

约 17 分钟驭光者首发于微信公众号「羲和Lab」

一个人干不过来就开分身——从单兵作战到项目组协同

阅读时长约14分钟 | 教程型 | 智能编码进化论 08/10


导读

前七篇我们给AI配齐了全套装备和安全体系。但还有一个现实问题:AI再强,同一时间也只能做一件事。你在让它重构代码,就没法让它同时跑测试;在让它调研方案,就没法让它同步修bug。

实际开发中,很多任务天然可以并行——前端和后端可以同时开发,代码审查和测试可以同时运行,调研和原型可以同时推进。如果你只有一个AI"员工",这些并行任务只能排队。

本文讲四种并行策略——Worktrees、多会话、GitHub Actions、Agent Teams——以及怎么选、怎么用、怎么控制成本。

阅读地图:四种并行策略怎么选

Claude Code提供四种并行工作方式,各有适用场景:

Worktrees:在同一台电脑上开多个独立工作目录,每个目录跑一个Claude会话。像给员工分配独立的工位,互不干扰。

Headless模式(claude -p):用命令行非交互运行Claude,适合脚本和CI/CD。像给员工发一条指令然后等结果。

GitHub Actions:把Claude集成到GitHub工作流,在PR或Issue中用@claude触发自动化。像在办公室里装了一个自动化工单系统。

Agent Teams:多个Claude实例组成团队,有lead协调、有teammate执行,可以互相通信。像组建了一个真正的项目组。

选择依据:需要文件隔离用Worktrees,需要自动化用Headless或GitHub Actions,需要多Agent协作用Agent Teams。

一、Worktrees:独立工位互不干扰

为什么需要Worktrees

你正在让AI重构认证模块,突然发现一个线上bug需要紧急修复。如果直接在当前会话切任务,重构的上下文会被打乱。如果开新终端跑claude,两个会话在同一个目录编辑文件,必然冲突。

Git worktree解决这个问题——为每个任务创建独立的文件副本,各改各的,互不影响。

使用方式

# 终端1:重构认证模块
claude --worktree feature-auth

# 终端2:修复线上bug
claude --worktree bugfix-123

# 终端3:写新功能
claude --worktree feature-dashboard

每个--worktree在.claude/worktrees/下创建一个独立目录,有自己的分支。三个终端三个AI,同时工作不冲突。

省略名称时Claude自动生成随机名(如bright-running-fox):

claude --worktree

配置细节

基础分支:默认从远程默认分支创建。设为head则从当前本地分支创建:

{
  "worktree": {
    "baseRef": "head"
  }
}

环境文件同步:Worktree是新checkout,.env等未追踪文件不会复制。添加.worktreeinclude文件解决:

.env
.env.local
config/secrets.json

只有被gitignore的文件才会被复制,已追踪文件不会重复。

清理:退出时,无改动的worktree自动删除;有改动的会提示你选择保留或删除。

适用场景

  • 同时开发多个独立功能
  • 紧急bug修复不能打断当前工作
  • 需要在不同分支上并行测试

二、Headless模式:脚本化批量执行

基本用法

claude -p是非交互模式,适合脚本和自动化:

# 单次执行
claude -p "修复auth.py中的Type Error"

# 管道输入
cat build-error.txt | claude -p "解释这个构建错误的根因"

# 获取JSON输出
claude -p "总结这个项目" --output-format json

Bare模式:加--bare跳过所有自动发现(hooks、skills、MCP),启动更快,结果可复现:

claude --bare -p "检查代码风格" --allowedTools "Read"

适用场景

  • CI/CD流水线中自动审查代码
  • 批量处理多个仓库的分析任务
  • 定时任务(每日报告、代码质量检查)

自动批准工具

CI/CD环境没有人在旁边点确认。用--allowedTools预批准:

claude -p "运行测试并修复失败" \
  --allowedTools "Bash,Read,Edit"

用--permission-mode dontAsk更严格:自动拒绝所有需要确认的工具调用,只允许预批准的操作和只读Bash命令。

结构化输出

--output-format json返回包含session_id和total_cost_usd的JSON,方便脚本解析:

# 提取纯文本结果
claude -p "分析这个模块" --output-format json | jq -r '.result'

# 提取结构化数据
claude -p "提取函数名" --output-format json \
  --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}}}' \
  | jq '.result'

三、GitHub Actions:@claude触发自动化

Headless模式是让Claude在命令行非交互运行,GitHub Actions是把它集成到GitHub工作流中,通过@claude评论或PR事件自动触发。两者可以组合——GitHub Actions的workflow内部调用的就是Headless模式。

30秒快速设置

在Claude Code中运行:

/install-github-app

这个命令引导你安装GitHub App、配置API Key、创建workflow文件。完成后在PR或Issue中@claude就能触发自动化。

最小配置

创建.github/workflows/claude.yml:

name: Claude Code
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
jobs:
  claude:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

安装完成后测试:在PR评论中输入@claude review this PR,Claude自动分析代码并回复。

实战:自动代码审查

每个新PR自动触发代码审查:

name: Code Review
on:
  pull_request:
    types: [opened, synchronize]
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: "/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"

定时任务

每天早上生成项目健康报告:

name: Daily Report
on:
  schedule:
    - cron: "0 9 * * *"
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: "总结昨天的commit和未关闭的issue"
          claude_args: "--model claude-sonnet-4-6"

常用触发方式

触发方式写法场景
PR评论@claude review this PR代码审查
Issue评论@claude implement this feature功能实现
自动触发workflow事件(push、schedule)定时任务
指令模式prompt参数批量自动化

安全要点

  • API Key存在GitHub Secrets中,绝不硬编码到workflow文件
  • Claude遵循仓库的CLAUDE.md规范——代码风格、审查标准、项目规则都会被读取
  • 用--max-turns限制最大轮次,防止消耗过多token
  • GitHub Actions运行在GitHub的runner上,代码不离开GitHub基础设施

四、Agent Teams:多Agent项目组协同

Teams vs Subagents

第6篇讲的Subagent是在一个会话内派"编外帮手"——分身从主Agent内部产生,做完事汇报结果就消失。Agent Teams是从"分身"到"团队"的范式升级:多个独立的Claude实例组成团队,有lead协调、有teammate执行,teammate之间可以直接通信。Subagent是单Agent的能力扩展,Agent Teams是多Agent的协作体系。

维度SubagentsAgent Teams
上下文独立窗口,结果返回调用者完全独立,各自维护
通信只能向主Agent汇报Teammate之间直接通信
协调主Agent管理共享任务列表,自协调
适用结果比过程重要需要讨论和协作
Token成本较低较高(每个teammate独立计费)

启用和创建

Agent Teams目前是实验性功能,需要手动启用:

{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}

创建团队只需要自然语言描述:

创建一个agent team来审查PR #142,三个reviewer分别关注:
安全性、性能、测试覆盖率。

Claude自动创建团队、分配角色、协调工作。

团队架构

Team Lead(协调者)
  ├── Teammate 1(安全审查)──┐
  ├── Teammate 2(性能分析)──┼── 共享任务列表
  └── Teammate 3(测试覆盖)──┘     + 直接通信

核心组件:

组件作用
Team Lead主会话,创建团队、分配任务、综合结果
Teammates独立Claude实例,执行分配的任务
Task List共享任务列表,teammate自认领
MailboxAgent间通信系统

任务管理

Lead创建任务,teammate自认领或被指派。任务有三种状态:pending → in_progress → completed。任务之间可以有依赖关系——前置任务完成后才解锁后续任务。

交互序列示例

以"审查PR #142"为例,一次完整的Agent Teams协作:

Lead: "审查PR #142,安全、性能、测试各一个teammate"
→ Teammate 1 认领安全审查任务,扫描SQL注入、XSS等风险
→ Teammate 2 认领性能分析任务,检查N+1查询和内存泄漏
→ Teammate 3 认领测试覆盖任务,分析未覆盖的关键路径
→ Teammate 1 发现SQL注入风险,通过Mailbox通知Lead
→ Lead 综合三份报告,输出汇总审查结果

这个过程中,三个teammate并行工作、互不阻塞,Lead通过共享任务列表跟踪进度、通过Mailbox接收发现。

适用场景

  • 并行代码审查:安全、性能、测试三个视角同时审查
  • 竞猜式调试:多个Agent各持一个假设,互相挑战,找真正的根因
  • 跨层开发:前端、后端、测试各一个Agent同时推进
  • 调研+原型:一个调研方案,一个写原型代码

注意事项

  • Agent Teams是实验性功能,有已知限制
  • Token消耗显著——每个teammate都是独立的Claude实例
  • 3-5个teammate是最佳范围,超过5个协调成本超过收益
  • Teammate不继承lead的对话历史,需要在spawn prompt中提供足够上下文
  • 避免两个teammate编辑同一文件

五、成本估算:并行不便宜

Token消耗对比

方式Token消耗适用规模
单会话1x日常开发
Headless模式1x单次自动化任务
Subagent1.5-3x辅助任务
2个Worktree2x并行功能开发
Agent Teams(3人)4-6x复杂协作
Agent Teams(5人)8-12x大规模调研

粗略估算公式:

并行总成本 ≈ 单会话成本 × Agent数量 × 任务复杂度系数

任务复杂度系数:简单查询约0.5,代码修改约1.5,全项目分析约3。

省钱策略

  1. 优先用Subagent(替代Agent Teams):不需要Agent间通信的场景,Subagent更便宜
  2. 限制最大轮次(Headless和Agent Teams):--max-turns 5防止无限循环
  3. 用更小的模型(Agent Teams的teammate):teammate可以用Sonnet,lead用Opus
  4. 精确的prompt(所有方式):任务描述越精确,浪费的轮次越少
  5. GitHub Actions加超时(GitHub Actions):workflow级别设timeout,防止runaway job

六、避坑指南

坑一:Worktree忘记加.gitignore

.claude/worktrees/目录下的文件会出现在主仓库的untracked中。在.gitignore中添加:

.claude/worktrees/

坑二:Headless模式加载了不相关的配置

本地的hooks、MCP、skills在CI环境可能不存在或行为不同。用--bare跳过所有本地配置,只依赖显式传入的参数。

坑三:GitHub Actions的API Key泄露

ANTHROPIC_API_KEY必须存在GitHub Secrets中,用${{ secrets.ANTHROPIC_API_KEY }}引用。绝不要直接写在yaml文件里。

坑四:Agent Teams的文件冲突

两个teammate编辑同一文件会导致覆盖。分配任务时明确文件归属——"teammate A负责src/auth/,teammate B负责src/api/"。

坑五:并行成本失控

Agent Teams的token消耗是线性的。5个teammate跑10分钟,成本是单会话的5-8倍。开始前估算成本,用--max-turns设上限。

结语

八篇文章下来,AI"员工"的能力边界不断扩展:

  • 单兵作战(1-3篇):岗位说明书、任务管理、工具箱
  • 外部协作(4-6篇):外线电话、编外帮手、专业顾问
  • 规则治理(7篇):门禁、监控、自动化流程
  • 项目组协同(8篇):分身并行、自动化流水线、团队协作

四个关键要点:

Worktrees解决文件冲突——每个任务独立目录,多终端同时工作互不干扰。

Headless模式是自动化基石——claude -p让Claude融入脚本和CI/CD,配合--bare确保可复现。

GitHub Actions实现@claude自动化——在PR中@claude触发代码审查、功能实现、bug修复,代码不离开GitHub。

Agent Teams适合复杂协作——多Agent团队直接通信、共享任务列表,但Token成本显著更高,3-5人团队是最佳范围。

下一篇,我们回顾编码成熟之路——工作流体系与自评清单。十篇系列走到这里,是时候把所有知识串成一条完整的成长路径了。

互动话题

你的项目中,哪种并行策略最有用?是Worktrees隔离多个功能分支、GitHub Actions自动审查PR,还是Agent Teams组建AI项目组?来评论区分享你的并行开发经验。


智能编码进化论 | 第8篇/共10篇

上一篇:给AI定规矩:Hooks与权限工程

下一篇:编码成熟之路:工作流体系与自评清单


本文内容仅供学习交流,所述方法需结合实际场景灵活运用。 AI工具输出结果仅供参考,关键业务决策请结合人工判断。

本文由AI辅助创作,经人工审核编辑后发布。

本文首发于微信公众号「羲和Lab」,公众号内可留言交流

阅读公众号原文