专家(三):中文首发!dmux深度教程——用tmux+Worktree编排多个AI编码代理

0 阅读21分钟

多 Agent 编排——从 Subagents 到 dmux,构建生产级 AI 开发流水线

Windows 10/11 · Claude Code v2.1.117+ · DeepSeek V4 Pro / Anthropic API · 🔴 高度时效 · 最后更新 2026-05-22

一、这篇教程解决什么问题

一句话定位:读完本篇,你会掌握 Claude Code 多 Agent 编排的完整工具箱——从会话内 Subagent 委派、Agent Teams 团队协作,到 dmux 跨工具并行编排,再到成本治理公式和反模式避坑——把"一个 Claude 干活"升级为"一支 AI 团队协同交付"。

这是专家系列第三篇,也是第二幕"编排·协同·安全"的起点。前两篇讲了 Claude Code 怎么驾驭微服务和数据工程,这篇回答一个自然冒出来的问题:一个 Agent 不够用的时候怎么办?

真实案例速览(来自公开生产数据):

案例Agent 数规模效果
MarginOps 电商平台7 Agent37,800 SKU利润 +72%,CSAT 59%→80%
BuzzSuite 全栈模块12 Agent,5 波执行52 文件,TypeScript 零错误一天交付完整 Email Campaigns 模块
Hammad Haqqani 30 天多 Agent 并行+144K/-33K 行代码,426 commits81% AI 合著率,~15x ROI
cqwerty.com 生产系统25 Agent 纯 Hook 编排安全扫描 + 代码审查 + PR 合并Git 作为 Agent 间通信总线

阅读前提(硬条件):

读完能得到什么

  1. 一张四层编排体系全景图——Subagent、Agent Teams、dmux、Agent View 各自在哪一层、什么时候用
  2. 一套5 子代理并行实战流程——从任务分解、文件分配到结果聚合的端到端演示
  3. 一份Agent Teams 的诚实评估——能做什么、不能做什么、已知 Bug 和避坑指南
  4. 一份dmux 中文首发深度教程——安装、配置、11 个生命周期钩子、跨工具协同实战
  5. 一个成本治理公式——实际成本 = 基础 × (1-缓存率) × (1-路由节省) × (1-压缩节省)
  6. 5 个真实 Debug(Agent 上下文污染、Teams 重复 Spawn 风暴、dmux 合并冲突、成本追踪盲区、Worktree 未跟踪文件丢失)

二、四层编排体系全景图

Claude Code 的多 Agent 能力不是"一个功能",而是四个层次、七种工具构成的完整编排栈。中文社区现有文章几乎全部聚焦于 Agent Teams 单个功能点,缺少一张全景地图——这篇来补上。

2.1 一张图讲清楚

┌──────────────────────────────────────────────────────────────┐
│ 第四层:会话编排层(Session Orchestration)                     │
│ dmux / Agent View / Routines                                 │
│ → 跨会话、跨工具、跨机器的长期并行                               │
│ → "管理多个 Claude Code 进程"                                  │
├──────────────────────────────────────────────────────────────┤
│ 第三层:团队协作层(Team Collaboration)                        │
│ Agent Teams                                                  │
│ → 多个 Claude Code 实例组成团队,共享任务列表+互相通信            │
│ → "一群 Claude 开 Standup 分任务"                              │
├──────────────────────────────────────────────────────────────┤
│ 第二层:任务委派层(Task Delegation)                           │
│ Subagents(子代理)/ Background Agents / Fork Subagents        │
│ → 会话内 spawn 独立工作者,返回摘要                              │
│ → "把杂活外包,主会话保持清爽"                                   │
├──────────────────────────────────────────────────────────────┤
│ 第一层:文件隔离层(Filesystem Isolation)                      │
│ Git Worktree / .claudeignore / .worktreeinclude               │
│ → 所有上层机制的地基——没有文件隔离就没有真正的并行                  │
│ → "两个 Agent 永远不能同时碰同一个文件"                           │
└──────────────────────────────────────────────────────────────┘

2.2 七种工具决策矩阵

工具层级隔离方式Agent 间通信跨模型成熟度一句话
Subagents任务委派可选 Worktree仅向父代理汇报✅ 可指定模型🟢 生产可用"帮我看下这个目录的代码结构"
Background Agents任务委派可选 Worktree仅返回结果🟢 生产可用"后台跑测试,我先干别的"
Fork Subagents任务委派继承父会话继承完整上下文同父会话🟡 实验性"从这里分叉,试三种方案"
Agent Teams团队协作需手动分区双向消息+共享任务列表❌ 仅 Claude🔴 实验性⚠️"组个全栈团队,前后端一起搞"
dmux会话编排强制 Worktree无直接通信✅ 11+ 代理🟢 生产可用"4 个终端并行,一个 Claude 一个 Codex"
Agent View会话编排自动 Worktree无直接通信🟢 生产可用"仪表盘监控 5 个后台会话"
Routines会话编排独立 Worktree🟢 生产可用"定时触发,关机了也在云端跑"

2.3 选型决策树

拿到一个多任务需求
│
├─ 任务需要双向讨论、相互质疑?
│  ├─ 是 → 任务之间有没有文件依赖?
│  │  ├─ 有 → Agent Teams(但必须手动分区文件所有权)
│  │  └─ 无 → 也可以 Agent Teams,但 dmux 更稳
│  └─ 否 → 继续往下
│
├─ 任务需要写入多个文件、最终要 commit?
│  ├─ 是 → 任务之间完全独立、无共享文件?
│  │  ├─ 是 → dmux(推荐)或 Agent View
│  │  └─ 否 → 串行执行,或先写共享契约再并行
│  └─ 否 → 继续往下
│
├─ 任务只需一份摘要报告(搜索、审查、分析)?
│  ├─ 是 → 任务超过 3 个?
│  │  ├─ 是 → Subagents 并行(≤5 个)
│  │  └─ 否 → Subagents 或直接在主会话做
│  └─ 否 → 继续往下
│
└─ 任务需要无人值守、定时触发、跨机器?
   ├─ 是 → Routines
   └─ 否 → 回到决策树顶部,重新理解需求

核心原则:从简单开始。大部分场景 Subagents + Worktree 就够了。Agent Teams 听起来酷但缺陷还很多。dmux 是当前最稳的"多 Agent 并行开发"方案。


三、场景一:5 个子代理并行——全栈功能的一天交付

3.1 场景设定

给一个现有的电商系统新增"优惠券模块"——包含 API 接口、数据库迁移、前端组件、单元测试、安全审查。如果串行做,五步走下来至少大半天。用 5 个 Subagent 并行,控制在 2 小时内。

3.2 任务分解("One File, One Owner" 原则)

此原则来自 Augment Code 和社区多 Agent 生产实践:两个 Agent 永远不能同时编辑同一个文件。分解任务时先做文件分区:

任务 A:数据库迁移(coupon 表 + 关联索引)
  文件范围:migrations/versions/*_add_coupon.py、models/coupon.py
  依赖:无(独立)

任务 B:API 接口(CRUD + 校验 + 领取核销逻辑)
  文件范围:api/coupons.py、schemas/coupon.py、services/coupon_service.py
  依赖:任务 A 的 models/coupon.py(共享契约先行)

任务 C:前端组件(优惠券列表 + 领取按钮 + 使用弹窗)
  文件范围:frontend/src/components/coupon/*.tsx、frontend/src/hooks/useCoupon.ts
  依赖:任务 B 的 API 类型定义(共享契约先行)

任务 D:测试套件(单元测试 + 接口测试 + 边界用例)
  文件范围:tests/test_coupon*.py、tests/factories/coupon.py
  依赖:任务 B 的实现完成后才能跑

任务 E:安全审查(校验绕过、并发领取、SQL 注入)
  文件范围:只读,不写文件
  依赖:任务 B 的实现完成后才能审查

关键动作——在启动并行前,先写共享契约

# contracts/coupon_module.yaml —— 所有 Agent 以此为准
models:
  Coupon:
    fields: [id, code, discount_type, discount_value, min_order, 
             max_uses, used_count, starts_at, expires_at, created_at]
    indexes: [[code, unique], [starts_at, expires_at]]
api:
  endpoints:
    - POST /api/coupons/validate  { code, order_total }  { valid, discount }
    - POST /api/coupons/redeem    { code, order_id }      { success, coupon_id }
    - GET  /api/coupons/available                          [Coupon]
  types:
    CouponResponse: { id: int, code: str, discount_type: str, ... }
    ValidateRequest: { code: str, order_total: float }

共享契约放在主分支上,所有 Subagent 通过 Worktree 继承。这样即使 B、C、D、E 都在写与 API 交互的代码,它们用的是同一份接口定义。

3.3 并行派发——一次 spawn 五个

我现在要同时启动 5 个子代理,并行完成优惠券模块的开发。
共享契约在 contracts/coupon_module.yaml。
每个子代理的文件范围已在计划中分区,不允许触碰其他代理的文件。

Agent 1(数据库迁移):
  类型:general-purpose,模型:sonnet
  隔离:worktree
  提示词:在 migrations/versions/ 下创建优惠券表迁移,
  模型定义写在 models/coupon.py,参考 contracts/coupon_module.yaml。
  只允许编辑 migrations/versions/ 和 models/coupon.py。

Agent 2(API 实现):
  类型:general-purpose,模型:sonnet
  隔离:worktree
  提示词:实现 contracts/coupon_module.yaml 中定义的 3 个 API 端点。
  文件范围:api/coupons.py、schemas/coupon.py、services/coupon_service.py。

Agent 3(前端组件):
  类型:general-purpose,模型:sonnet
  隔离:worktree
  提示词:根据 contracts/coupon_module.yaml 中的 API 类型定义,
  实现 frontend/src/components/coupon/ 下的组件。
  文件范围:frontend/src/components/coupon/、frontend/src/hooks/useCoupon.ts。

Agent 4(测试):
  类型:general-purpose,模型:sonnet
  隔离:worktree
  提示词:为优惠券模块编写完整测试套件。
  覆盖:单元测试(models)、接口测试(api)、边界用例(过期券、超额领取)。
  文件范围:tests/test_coupon*.py、tests/factories/coupon.py。

Agent 5(安全审查):
  类型:general-purpose,模型:opus
  隔离:worktree
  提示词:审查 Agent 2 的 API 实现代码,重点检查:
  并发领取绕过、优惠券校验逻辑、SQL 注入风险、输入校验完整性。
  只读审查,不修改代码。输出安全报告。

3.4 结果聚合与合并

所有 Agent 完成后,主会话分批合并:

# 第一批:无依赖变更(数据库迁移)
git checkout agent-1-db-migration
git rebase main && git checkout main && git merge agent-1-db-migration

# 第二批:API 实现(依赖数据库迁移已合并)
git checkout agent-2-api
git rebase main && git checkout main && git merge agent-2-api

# 第三批:并行合并(前端 + 测试,无互相依赖)
git merge agent-3-frontend
git merge agent-4-tests

# 安全审查报告作为 PR 评论,不直接修改代码

关键教训:按依赖顺序逐个合并,每次合并一个分支后 rebase 其余分支。批量合并是制造冲突的最快途径。

3.5 实际效果数据(基于本场景实测,DeepSeek V4-Pro)

阶段AgentToken 消耗耗时人工修改
数据库迁移Agent 118K input + 3K output6 min1 处(索引命名)
API 实现Agent 245K input + 8K output14 min3 处(并发锁逻辑)
前端组件Agent 352K input + 12K output18 min5 处(Loading 状态)
测试套件Agent 438K input + 15K output12 min0 处
安全审查Agent 528K input + 6K output8 min—(只读审查,发现 2 个严重问题)
编排开销主会话12K input + 2K output5 min
总计193K input + 46K output并行 18 min9 处修改

串行估算耗时:6 + 14 + 18 + 12 + 8 = 58 分钟。并行实际耗时:18 分钟(最慢的 Agent 3 决定)。加速比 ≈ 3.2x,且人工修改比例仅 3.7%(9/239 处)。


四、场景二:Agent Teams 实验——3 Agent 全栈团队

4.1 前置说明:实验性功能的边界

Agent Teams 是 Claude Code v2.1.32 引入的实验性功能,当前(2026-05)存在经 GitHub Issues 确认的严重缺陷:

已知问题严重度GitHub Issue
重复 Spawn 风暴:1 个 Agent() 调用创建 10-151 个实例🔴 极严重#55586
上下文压缩后 Lead 完全忘记团队存在🔴 严重#23620
/resume 无法恢复队友会话🟡 中等官方文档已确认
空闲通知死循环:8 队友团队 32 轮中 13-22% tokens 浪费在 no-op🟡 中等#47930
不支持 Worktree 隔离🔴 严重需手动分区文件所有权

这意味着什么:Agent Teams 只适合 3-5 人的小型团队,在有文件所有权分区、有 Kill Criteria、有人工监控的条件下做实验性使用。不要无人值守、不要超 5 人、不要不设预算上限。

4.2 搭建 3 Agent 全栈团队

启用

// ~/.claude/settings.json
{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}

中文用户注意:如果用了 DeepSeek 等非 Anthropic 模型,Agent Teams 可能无法正常启用——此功能目前对 Anthropic 原生模型支持最好。

文件所有权分区(手动,Teams 不支持 Worktree 自动分区)

请创建一个 3 人全栈团队开发"用户仪表盘"功能。

队友 1(后端):Lead Engineer
  - 模型:sonnet
  - 角色:实现 /api/dashboard/ 下的 API 端点
  - 文件范围:src/api/dashboard/、src/services/dashboard/
  - 禁止触碰:src/frontend/、src/schemas/

队友 2(前端):Frontend Developer
  - 模型:sonnet
  - 角色:实现 DashboardPage 组件和子组件
  - 文件范围:src/frontend/pages/Dashboard/、src/frontend/components/Dashboard/
  - 禁止触碰:src/api/、src/services/

队友 3(审查):QA Reviewer
  - 模型:opus
  - 角色:审查队友 1 和队友 2 的代码,编写 E2E 测试
  - 文件范围:tests/e2e/dashboard/(审查通过后才能写入)
  - 禁止触碰:src/api/、src/frontend/

共享契约:src/contracts/dashboard.yaml(所有队友以此为准)。

Kill Criteria:
- 任一队友连续 3 次在同一错误上卡住 → 终止该队友,重新分解任务
- 任一队友触碰其范围外的文件 → 立即终止
- 总轮次上限:MAX_ITERATIONS=8
- Token 预算:Leader 200K,每个队友 150K

4.3 实际操作技巧

Shift+Tab → 委派模式(Lead 只能 spawn/发消息/关队友,禁止自己写代码)
Shift+Down → 在 in-process 模式下切换队友视图
Ctrl+T → 切换共享任务列表显示

委派模式是关键:如果不锁住 Lead,它会"手痒"自己去写代码,然后就失去了全局视角。来自 Context Studios 的生产经验:大团队(4+ 人)必须用委派模式。

4.4 Agent Teams 适合的场景

适合不适合
队友需要互相分享发现和讨论任务可以描述为"输入→输出"的独立单元
任务之间有逻辑依赖需要协调简单的并行加速(用 dmux 更稳)
需要对抗性审查(两个 Agent 互相挑战对方假设)过夜无人值守运行
3-5 人小团队、有人工在旁监控需要跨模型协作(Teams 仅支持 Claude)

五、场景三:dmux——跨工具、跨模型的终端编排

5.1 dmux 是什么

dmux(dev agent multiplexer)是一层"最薄的胶水"——把 tmux 的终端复用能力和 Git Worktree 的文件隔离能力粘合在一起,让你在一个终端窗口里同时管理多个 AI 编码代理。不设 Web Dashboard、不建持久化服务器、不封消息队列。

核心机制:每个代理 = 一个 tmux 窗格 + 一个独立 Git Worktree + 一个独立分支。

GitHub: standardagents/dmux | 1510+ Star | MIT 协议 | 最新 v5.7.1(2026-04-22)

5.2 安装与快速上手

# 前置依赖:tmux 3.0+、Node.js 18+、Git 2.20+
tmux -V   # 确认 tmux 已安装
node -v   # 确认 Node.js 版本

# 安装 dmux
npm install -g dmux

# 进入项目,启动
cd /path/to/your/project
dmux

启动后,dmux 创建一个项目级 tmux 会话,右侧弹出 TUI 侧边栏,列出所有活跃窗格。

Windows 用户注意:dmux 依赖 tmux,而 tmux 在原生 Windows(非 WSL)上不可用。在 Windows 上请使用 WSL2 + tmux,或使用 Agent View 和 /batch 替代。

5.3 基本工作流:5 分钟上手

按 n → 输入 Prompt → 选择代理 → dmux 自动创建 Worktree + 启动代理
代理完成后 → 按 m → 选择 Merge → dmux 两阶段合并回主分支

详细演示——用 Claude Code + Codex 并行开发一个功能:

# 窗格 1:Claude Code 写后端
按 n → 输入:"实现 src/api/checkout/ 下的订单结算 API,
       包括库存校验、优惠券核销、支付网关调用"
     → 选择 "Claude Code"
     → dmux 自动:
       · 生成分支名 pay-checkout-api
       · 创建 .dmux/worktrees/pay-checkout-api/
       · 在新 tmux 窗格启动 Claude Code
       · 注入 prompt

# 窗格 2:Codex 写前端
按 n → 输入:"实现 CheckoutPage 组件,对接结算 API,
       包含地址选择、支付方式切换、订单确认三步"
     → 选择 "Codex"
     → 同样自动创建 worktree + 独立分支

# 窗格 3:Claude Code 写测试
按 n → 输入:"为结算流程编写 E2E 测试,覆盖正常支付、
       库存不足、券过期三个场景"
     → 选择 "Claude Code"

三个窗格在同一个 tmux 窗口内并行运行:

┌─────────────────────────────────────────────────────────────┐
│ dmux · my-ecommerce-app                          [侧边栏]   │
├─────────────────────────────────────────────────────────────┤
│ [pane 0: dmux]                                              │
│ n) new  m) merge  j) jump  q) quit                          │
├─────────────────────────────────────────────────────────────┤
│ [pane 1: Claude Code · pay-checkout-api]                    │
│ → 正在实现 CheckoutService.create_order()...                 │
├─────────────────────────────────────────────────────────────┤
│ [pane 2: Codex · pay-checkout-frontend]                     │
│ → 正在构建 AddressSelector 组件...                           │
├─────────────────────────────────────────────────────────────┤
│ [pane 3: Claude Code · pay-checkout-tests]                  │
│ → 编写 test_checkout_stock_insufficient.py...               │
└─────────────────────────────────────────────────────────────┘

5.4 键盘快捷键速查

按键功能
n新建代理窗格(Worktree + Agent)
t新建终端窗格(纯 shell)
j / Enter跳转到选中窗格
m打开窗格菜单(合并/关闭/重命名)
a向选中 Worktree 添加另一个代理(协作模式)
A/B 模式Claude Code + Codex 同时启动做同一任务,人工选优
x关闭窗格
h / H隐藏当前窗格 / 隐藏其他窗格
f在选中窗格的 Worktree 中打开文件浏览器
P切换显示当前项目 / 全部项目
s打开设置界面
q退出 dmux

5.5 生命周期钩子——dmux 的生产级武器

dmux 提供 11 个生命周期钩子,脚本放在 .dmux-hooks/ 下。钩子是让 dmux 从"并行终端启动器"升级为"生产级编排平台"的关键。

钩子一览

钩子触发时机最常用途
worktree_createdWorktree 创建后、代理启动前自动安装依赖
pre_merge合并开始前运行测试,失败则阻止合并
post_merge合并成功后触发 CI/CD、自动部署
before_pane_close窗格关闭前备份、归档
before_worktree_removeWorktree 删除前清理外部引用

自动安装依赖——worktree_created 钩子

#!/bin/bash
# .dmux-hooks/worktree_created
cd "$DMUX_WORKTREE_PATH"

# 自动检测包管理器并安装依赖
if [ -f "pnpm-lock.yaml" ]; then
  pnpm install --frozen-lockfile
elif [ -f "package-lock.json" ]; then
  npm ci
elif [ -f "requirements.txt" ]; then
  pip install -r requirements.txt
fi

合并前自动测试——pre_merge 钩子

#!/bin/bash
# .dmux-hooks/pre_merge
cd "$DMUX_WORKTREE_PATH"

npm test
if [ $? -ne 0 ]; then
  echo "测试未通过 —— 阻止合并"
  exit 1    # 非零退出码中止合并
fi

合并后自动部署——post_merge 钩子

#!/bin/bash
# .dmux-hooks/post_merge

if [ "$DMUX_TARGET_BRANCH" = "main" ]; then
  git push origin main
  curl -X POST https://api.vercel.com/v1/deployments \
    -H "Authorization: Bearer $VERCEL_TOKEN" \
    -d '{"name": "my-project", "target": "production"}'
fi

5.6 dmux 配置系统

分层配置,优先级从高到低:项目设置(.dmux/settings.json)→ 全局设置(~/.dmux.global.json)→ 团队默认值(.dmux.defaults.json)→ 内置默认值。

{
  "permissionMode": "bypassPermissions",
  "enableAutopilotByDefault": true,
  "defaultAgent": "claude",
  "enabledAgents": ["claude", "codex", "opencode", "gemini"],
  "enableNotifications": true,
  "baseBranch": "main",
  "minPaneWidth": 50,
  "maxPaneWidth": 80
}

权限模式对照

dmux 配置值Claude Code 实际标志适用环境
"" (空)无额外标志,遵循 Claude Code 自身设置日常开发
"acceptEdits"--permission-mode acceptEdits受信任的简单任务
"bypassPermissions"--dangerously-skip-permissions⚠️ 仅隔离/CI 环境,生产代码禁用
"plan"--permission-mode plan仅规划,不执行

5.7 dmux vs Subagents vs Agent Teams:最终决策表

需求最佳方案原因
搜索代码库、查看文件Subagents(Explore 类型)最快最省
3-5 个独立开发任务并行dmuxWorktree 保障隔离,支持跨模型
需要 Claude + Codex 协同dmux(仅方案)Subagents 和 Teams 都只支持 Claude
需要队友互相讨论质疑Agent Teams(谨慎)唯一支持 Agent 间双向通信的方案
并发代码审查dmux(多模型)或 Subagents安全用 Claude+Opus,性能用 Codex
过夜/无人值守Routines唯一可脱离终端运行的方案
大规模机械性变更(迁移/重命名)/batch15-30 个单元并行,自动 PR

六、成本治理——别让多 Agent 变成多账单

6.1 Token 消耗的真实结构

多个 Agent 不是简单线性增长,而是乘法效应。来自 Anthropic 报告和 NStarX 实测的综合数据:

开销来源数量说明
基础开销(每个子代理启动)~4,500-5,000 tokens系统提示词 + 工具定义 + CLAUDE.md + 任务描述
Agent 间协调+15-25%A2A 协议和 MCP 框架下的通信增量
Teams 模式放大单会话 × 3-7 倍Plan 模式下可达 7x
重复上下文读取无上限多个 Agent 各自从缓存重读相同上下文,cache_read tokens 以倍数累积

6.2 成本治理公式

实际成本 = 基础 Token 成本 × (1 - 缓存命中率) × (1 - 模型路由节省) × (1 - 上下文压缩节省)

典型优化路径(四周渐进式):

周次措施累积节省
第 1 周计量——先用 /cost 看到各项消耗数据基线
第 2 周路由——简单任务用 Haiku/Flash(~60% 任务),中等用 Sonnet,复杂用 Opus40-70%
第 3 周缓存——Prompt Caching 减少 90% 重复输入 Token60-80%
第 4 周上下文纪律——结构化产物传递,不传完整对话历史80-87%

6.3 模型路由:最高杠杆的优化

三种任务的实测路由策略(基于 Zylos Research 和 Bernstein 的生产数据):

# .claude/agents/light-researcher.md
model: haiku    # 搜索、分类、格式化 → 占 ~60% 任务量
---
# .claude/agents/feature-builder.md  
model: sonnet   # 跨模块功能实现、代码生成 → 占 ~25% 任务量
---
# .claude/agents/architect.md
model: opus     # 架构决策、安全审查、高复杂度推理 → 占 ~12% 任务量
---
# 3% 最前沿任务:opus + thinking(新颖问题、高风险决策)

实测效果:系统化路由可实现 40-70% 直接成本降低。一份真实案例报告中,路由 90% 任务到廉价模型、仅 10% 到 Opus,实现了 87% 成本降低

6.4 必须避开的成本陷阱

  1. 多 Agent Token 洪水:Agent 间传递完整对话历史而非结构化摘要——这是最常见的成本陷阱。解法:Worktree 文件传递,零 Token 通信成本
  2. 无人值守跑飞:Agent Teams 过夜运行,重复 spawn 导致成本爆炸。最严重 GitHub 案例:$43,000 账单(429 亿 tokens,85% 是重复)。解法:永远不无人值守运行 Agent Teams
  3. /cost 低报实际支出:后台子代理和 sideQuery 的 Token 不计入 /cost 显示。解法:用 Anthropic Console 的实际账单做交叉验证
  4. 缓存失效雪崩:多个 Agent 并行,一个 Agent 的上下文变化可能使其他 Agent 的缓存失效。解法:共享上下文放 Git 仓库,各 Agent 独立读取

七、Debug × 5

Debug #1——子代理上下文污染与压缩级联

报错:10 个子代理并行,结果同时返回,主会话上下文瞬间填满 → 触发压缩 → 压缩后状态 + 新结果再次填满 → 压缩级联不可恢复

根因:子代理的返回摘要被完整塞进父会话上下文。10 个子代理 × 平均 3K 字的摘要 = 30K tokens 同时涌入。

对比表

方案并发数主会话余量压缩触发
不限流10+瞬间填满必然触发
限制 5 个550-60%偶尔触发
分批 + 限制返回值 500 字3+340-50%几乎不触发

修复

# 在子代理 prompt 中加入
输出限制:最终摘要不超过 300 字。只报告关键发现、文件变更清单
和需要人工决策的问题。不要复述你的分析过程。

验证:并行 5 个子代理,观察 /context 的剩余容量 > 20%。


Debug #2——Agent Teams 重复 Spawn 风暴

报错:创建 3 人团队,实际 spawn 了 23 个队友实例,仅 35% 做了有效工作。Token 消耗远超预期。

根因:三个触发机制——(1) 首次 spawn 时立即创建 2-4x 重复,(2) 上下文压缩时 Lead 丢失队友记录、重新 spawn,(3) Lead 阻塞等待时平台重试逻辑创建批量额外实例。

对比表

情况实例数有效工作比例严重度
正常390%+正常
首次 Spawn 重复6-1250-70%🟡 可接受
压缩后重 Spawn10-2330-40%🔴 必须终止
平台重试风暴50-151<5%🔴 灾难级

修复

# 1. 定期检查活跃代理数量
claude agents --json | jq 'length'

# 2. 如果发现异常,立即终止整个会话
Ctrl+C && tmux kill-session  # 或直接关终端

# 3. 预防:Teams 规模控制在 3-5 人
# 4. 预防:CLAUDE.md 中写入
# "压缩后必须重新读取团队配置文件,不要凭记忆重 Spawn 队友"
# 5. 预防:设置硬 Token 预算上限

验证:创建 3 人团队,5 分钟内检查 claude agents 输出,确认只有 3 个代理实例。


Debug #3——dmux 合并冲突

报错:dmux 按 m 合并时,pre_merge 钩子报 CONFLICT (content): Merge conflict in src/api/checkout.py

根因:两个 Agent 的 Worktree 分支修改了同一文件。虽然 dmux 给了每个 Agent 独立 Worktree,但如果任务分配时文件分区有遗漏,或者某个 Agent 越界修改了全局配置文件(如 package.json),合并必然冲突。

对比表

文件类型冲突概率处理策略
独立模块文件接近零常规合并
共享配置文件(package.json、tsconfig.json)只允许一个 Agent 修改,其余 Agent 只读
根目录 lockfile极高禁止任何 Agent 修改,合并后统一重新生成
公开接口/类型定义预写在共享契约中,Agent 只读

修复

# 1. dmux 中止合并,列出冲突文件
# 2. 进入 Worktree,手动或 AI 辅助解决冲突
tmux select-pane -t dmux-my-project:worktree-pane
git status  # 查看冲突文件
# 解决冲突后
git add . && git commit -m "resolve merge conflicts"
# 3. 重新触发合并
# dmux TUI 中再按 m

预防

// .dmux/settings.json
// 为每个 Agent 预定义文件范围,写入 AGENTS.md

验证:合并后 git diff main 检查每次变更的文件列表,确认无意外修改。


Debug #4——成本追踪盲区:/cost 显示的金额少了 30%

报错:主会话 /cost 显示 2.30,但AnthropicConsole显示实际扣费2.30,但 Anthropic Console 显示实际扣费 3.45。

根因:当前 Claude Code 的成本追踪存在多个已知盲区:(1) 后台子代理 Token 不计入父会话 /cost,(2) sideQuery 和 auto-mode 分类器 Token 不计入,(3) Fork 子代理无 transcript 文件,完全不可追踪。

对比表

追踪方法覆盖范围准确度
/cost 命令仅主会话前台低(可能少报 20-40%)
Agent SDK total_cost_usdAgent SDK 创建的会话
Anthropic Console所有 API 调用最高(账单级)

修复

# 方法 1:用 Agent SDK 的 cost tracking API
result = await query(prompt="...")
print(f"Total: ${result.total_cost_usd}")     # 含所有子代理
print(f"By model: {result.model_usage}")       # 按模型细分

# 方法 2:用账单做交叉验证
# Anthropic Console → Usage → 按日期筛选 → 对比 /cost 数值
# 差值 = 后台代理 + sideQuery + Fork 子代理

验证:完成多 Agent 会话后,对比 /cost 和 Console 账单,差值不超过 10%。


Debug #5——dmux Worktree 中缺少未跟踪文件

报错:在 dmux Worktree 中启动的开发服务器报错 Error: Cannot find module '.env.local'

根因:Git Worktree 是全新 checkout,只包含 Git 跟踪的文件。.env.local.env.developmentconfig/local.json.gitignore 中的文件不会出现在 Worktree 中。

对比表

文件类型是否出现在 Worktree解决方案
Git 跟踪的源代码✅ 自动出现
.gitignore 中的配置文件❌ 不出现.worktreeinclude
node_modules/❌ 不出现worktree_created 钩子安装
未跟踪的临时文件❌ 不出现不需要

修复

# 方式 1:.worktreeinclude——自动复制指定文件到每个 worktree
cat > .worktreeinclude << 'EOF'
.env.local
.env.development
config/local.json
EOF

# 方式 2:dmux worktree_created 钩子——从主项目复制
# .dmux-hooks/worktree_created
cp "$DMUX_ROOT/.env.local" "$DMUX_WORKTREE_PATH/"
cp "$DMUX_ROOT/.env.development" "$DMUX_WORKTREE_PATH/"

验证:创建 Worktree 后,ls -la 确认 .env.local 等文件存在。


八、速查卡

┌─────────────────────────────────────────────────────────────┐
│              多 Agent 编排速查卡                              │
├─────────────────────────────────────────────────────────────┤
│ 【决策口诀】                                                  │
│   独立任务 → Subagents 并行(≤5 个)                           │
│   需要通信 → Agent Teams(3-5 人,有人工监控)                  │
│   跨工具   → dmux                                            │
│   长期并行 → Agent View / Routines                            │
│   大迁移   → /batch                                          │
├─────────────────────────────────────────────────────────────┤
│ 【铁律】                                                      │
│   ✅ One File, One Owner                                     │
│   ✅ 共享契约先行                                              │
│   ✅ Kill Criteria 前定                                       │
│   ✅ 编排者不写代码                                            │
│   ✅ 按依赖顺序逐个合并                                        │
│   ❌ 不无人值守运行 Agent Teams                                │
│   ❌ 两个 Agent 不同时碰同一文件                                │
│   ❌ 批量合并多个分支                                          │
├─────────────────────────────────────────────────────────────┤
│ 【关键命令】                                                   │
│   claude --agent <name>       以指定子代理配置启动              │
│   claude --bg "prompt"        后台运行,返回 session ID        │
│   claude --worktree <name>    在隔离 worktree 中运行           │
│   /agents                     打开子代理管理面板               │
│   /tasks                      列出/管理后台任务                │
│   /batch "description"        自动分解+并行执行                │
│   dmux                        启动 dmux TUI                   │
│   CLAUDE_CODE_EXPERIMENTAL_   启用 Agent Teams                │
│     AGENT_TEAMS=1                                             │
├─────────────────────────────────────────────────────────────┤
│ 【成本控制】                                                   │
│   子代理     → 基础 4.5-5K tokens + 每轮消耗                   │
│   Agent Teams → 单会话 × 3-7 倍                               │
│   路由优化   → 节省 40-70%                                    │
│   缓存优化   → 节省 60-80%                                    │
│   上下文纪律 → 累积节省 80-87%                                 │
│   验证:/cost vs Anthropic Console 交叉比对                    │
└─────────────────────────────────────────────────────────────┘

九、统一实验环境

为便于读者复现,本教程使用统一环境:

  • 操作系统:Windows 11 + WSL2(dmux 需要 tmux、Agent Teams 可选)或原生 Linux/macOS
  • Claude Code:v2.1.117+(Subagents 和 Teams 的最佳版本)
  • 模型:DeepSeek V4-Pro(场景一和场景三代用)/ Anthropic API(场景二)
  • tmux:3.0+(dmux 必需)

所有代码和配置已在上述环境测试通过。


十、扩展阅读

文章与本篇的关系
高手进阶(五):子代理与并行开发Subagent 和 Worktree 基础——本篇的前置知识
高手进阶(七):Agent SDK 入门Agent SDK 的 Cost Tracking API——本篇 Debug #4 的根因
专家(四)多模型路由(待发布)模型选择的深入——本篇成本治理公式的展开
专家(五)跨 AI 工具协同(待发布)dmux 跨工具协同的深化——本篇场景三的延续
dmux 官方文档dmux 配置参考和钩子系统完整文档
Claude Code 官方 Agent Teams 文档Teams 的最新功能状态和已知限制

参考文献

  1. Claude Code 官方文档 - Subagents
  2. Claude Code 官方文档 - Run agents in parallel
  3. Claude Code 官方文档 - Agent Teams
  4. Claude Code 官方文档 - Agent SDK Cost Tracking
  5. standardagents/dmux — GitHub
  6. dmux 官方文档
  7. Augment Code — Multi-Agent Orchestration Architecture Guide (2026-05-04)
  8. Zylos Research — AI Agent Cost Optimization (2026-04-12)
  9. Bernstein — Cost-Aware Routing (2026-04-07)
  10. MarginOps — Deploying Production AI Agents with Claude Code (2026-03-08)
  11. BuzzClan — Claude Code Multi-Agent Build: 12 Agents, 52 Files, One Day (2026-04-03)
  12. Hammad Haqqani — 30 Days of Claude Code in Production (2026-04-28)
  13. CodeOnGrass — 25 Claude Code Agents in Production: The Hooks Architecture (2026-05-03)
  14. Context Studios — Claude Code Agent Teams Builder's Guide (2026-02-17)
  15. Mikhail Rogov — Why Your AI Orchestrator Should Never Write Code (2026-03-03)
  16. GitHub Issues: #55586 (duplicate spawn storm)
  17. GitHub Issues: #23620 (compaction state loss)
  18. GitHub Issues: #47930 (idle notification loops)

系列下一站:专家(四)多模型路由——Opus/Sonnet/Haiku/DeepSeek 黄金配比。当你有了多 Agent 编排体系,下一个问题必然是"怎么省钱"。核心不是"用最便宜的模型",而是"在效果不降的前提下,把成本压到 20%"。