给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的协作体系。
| 维度 | Subagents | Agent 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自认领 |
| Mailbox | Agent间通信系统 |
任务管理
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 | 单次自动化任务 |
| Subagent | 1.5-3x | 辅助任务 |
| 2个Worktree | 2x | 并行功能开发 |
| Agent Teams(3人) | 4-6x | 复杂协作 |
| Agent Teams(5人) | 8-12x | 大规模调研 |
粗略估算公式:
并行总成本 ≈ 单会话成本 × Agent数量 × 任务复杂度系数
任务复杂度系数:简单查询约0.5,代码修改约1.5,全项目分析约3。
省钱策略
- 优先用Subagent(替代Agent Teams):不需要Agent间通信的场景,Subagent更便宜
- 限制最大轮次(Headless和Agent Teams):
--max-turns 5防止无限循环 - 用更小的模型(Agent Teams的teammate):teammate可以用Sonnet,lead用Opus
- 精确的prompt(所有方式):任务描述越精确,浪费的轮次越少
- 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工具输出结果仅供参考,关键业务决策请结合人工判断。
本文由AI辅助创作,经人工审核编辑后发布。
本文首发于微信公众号「羲和Lab」,公众号内可留言交流
阅读公众号原文