两种协作模式的架构差异
| 维度 | Coordinator Mode | Agent Swarms |
|---|---|---|
| 门控 | feature('COORDINATOR_MODE') + CLAUDE_CODE_COORDINATOR_MODE=1 | CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 环境变量 |
| 拓扑 | 星型:Coordinator 居中,Worker 外围 | 星型+P2P 混合:Team Lead 协调,Teammate 间可直接通信 |
| 角色 | 明确分工:Coordinator 编排、Worker 执行 | Team Lead 协调 + Teammate 自主认领任务 |
| 通信 | SendMessage 定向通信 + <task-notification> | Mailbox 消息系统(message / broadcast) |
| 适用 | 需要集中决策的复杂任务 | 并行度高、需要 Teammate 间直接协作的任务 |
workerAgent.ts 中的 getCoordinatorAgents)目前为 stub 实现,尚未完整落地。
Coordinator Mode:星型编排架构
激活机制
feature('COORDINATOR_MODE') 和运行时环境变量。matchSessionMode() 在会话恢复时自动同步模式状态——如果恢复的会话是 coordinator 模式,它会翻转环境变量以确保一致性。
Coordinator 的工具集
Coordinator 被剥夺了所有”动手”工具,只保留编排能力:| 工具 | 用途 |
|---|---|
| Agent | 启动新 Worker(subagent_type: "worker") |
| SendMessage | 向已有 Worker 发送后续指令 |
| TaskStop | 中途停止走错方向的 Worker |
| subscribe_pr_activity | 订阅 GitHub PR 事件(review comments、CI 结果) |
Worker 的工具权限
Worker 的可用工具由getCoordinatorUserContext()(coordinatorMode.ts:80)动态注入到 System Prompt:
INTERNAL_WORKER_TOOLS(TeamCreate、TeamDelete、SendMessage、SyntheticOutput)被显式排除——Worker 不能嵌套创建团队或发送消息,防止不可控的递归。
Scratchpad:跨 Worker 的共享知识库
当isScratchpadGateEnabled()(内部检查 tengu_scratch feature gate)启用时,Workers 获得一个 Scratchpad 目录,Coordinator 通过其系统上下文知晓该目录的存在:
<task-notification> 通信协议
Worker 完成后,Coordinator 收到 XML 格式的通知:
user-role message 形式送达,Coordinator 通过 <task-notification> 标签区分它和用户消息。<task-id> 用于 SendMessage 的 to 参数,实现定向续传。
Coordinator 的核心职责:综合(Synthesis)
Coordinator System Prompt(coordinatorMode.ts:111-369,约 260 行)明确要求 Coordinator 不能懒惰地委派理解:
Agent Teams (Swarm):蜂群式协作
Swarm 模式基于任务系统 V2(详见任务管理),核心机制是共享任务列表 + 竞争认领 + Mailbox 消息系统:团队初始化
架构组件
官方 Agent Teams 架构定义了四个核心组件:| 组件 | 角色 |
|---|---|
| Team Lead | 创建团队、分配任务、综合结果的主 Claude Code 会话 |
| Teammate | 独立的 Claude Code 实例,各自拥有独立的上下文窗口 |
| Task List | 共享的任务列表,Teammate 竞争认领和完成 |
| Mailbox | 消息系统,支持 Teammate 间直接通信 |
Mailbox 消息系统
官方架构中的 Mailbox 是 Teammate 间通信的核心原语,支持两种消息模式(broadcast 模式来自源码推断,官方文档未明确细分):
| 模式 | 作用 | 场景 |
|---|---|---|
| message | 定向发送给指定 Teammate | 传递具体指令、请求协作 |
| broadcast | 广播给所有 Teammate | 全局通知、状态同步 |
- 自动投递:消息自动送达目标 Teammate 的对话上下文
- 空闲通知(TeammateIdle):Teammate 完成当前任务进入空闲时,自动通过 Mailbox 通知 Team Lead
- 直接通信:与 Coordinator Mode 不同,Teammate 之间可以直接通信,无需经过 Lead 中转
Hook 事件
Agent Teams 提供三个关键 Hook 事件,用于在团队生命周期中注入自定义逻辑:| Hook | 触发时机 | 典型用途 |
|---|---|---|
| TaskCreated | 新任务添加到任务列表时 | 自动分配、优先级排序 |
| TaskCompleted | 任务标记为完成时 | 结果通知、依赖解锁 |
| TeammateIdle | Teammate 完成所有任务进入空闲时 | Lead 重新分配、动态扩缩容 |
限制
当前 Agent Teams 实现的限制:- 不支持嵌套团队:Teammate 不能再创建子团队
- 每 session 一个团队:一个会话只能属于一个团队
- Lead 固定:Team Lead 创建后不可更换
- 不支持 in-process Teammate 的会话恢复:进程重启后 in-process 类型 Teammate 的状态丢失
持久化存储
团队状态通过文件系统持久化,确保进程重启后可恢复:任务认领与竞争
claimTask() 是 Agent Teams 的核心并发原语:
Teammate 的生命周期管理
任务类型全景
支撑多 Agent 协作的是 7 种任务类型(src/tasks/types.ts):
| 任务类型 | 运行位置 | 状态管理 | 适用场景 |
|---|---|---|---|
| LocalAgentTask | 本地子进程 | LocalAgentTaskState | 标准子 Agent 任务 |
| LocalShellTask | 本地 shell | LocalShellTaskState | 后台 shell 命令 |
| InProcessTeammateTask | 同进程内 | InProcessTeammateTaskState | 轻量级进程内队友 |
| RemoteAgentTask | 远程服务器 | RemoteAgentTaskState | 分布式 Agent(CCR) |
| DreamTask | 后台静默 | DreamTaskState | 后台自主整理记忆 |
| LocalWorkflowTask | 本地 | LocalWorkflowTaskState | 工作流编排 |
| MonitorMcpTask | 本地 | MonitorMcpTaskState | MCP 监控任务 |
InProcessTeammateTask 与 LocalAgentTask 的关键差异:前者共享进程的内存空间和基础设施状态(如 MCP 连接池),但有独立的对话上下文和工具权限;后者是完全隔离的子进程,启动开销更大但更安全。
Coordinator vs Agent Teams 的选择
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| ”重构认证系统,需要多模块协调” | Coordinator | 需要集中决策,Worker 间有依赖 |
| ”修复 10 个独立的 lint 警告” | Agent Teams | 任务独立,Teammate 可完全并行 |
| ”研究方案 A 和方案 B,然后选一个实现” | Coordinator | 先并行研究,再集中决策 |
| ”在大仓库中搜索所有 TODO 并分类” | Agent Teams | 无依赖,各自领任务即可 |