Skip to content

Commit d1b9e7b

Browse files
committed
docs: 审校 Agent 文档术语与架构描述准确性(docs/agent)
基于源码验证和官方文档对照,修正三份 Agent 文档的内容准确性: coordinator-and-swarm.mdx: - 对齐官方术语:Leader→Team Lead, teammate→Teammate, 引入 Mailbox 消息系统 - 修正 Swarm 门控为 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1(原文"默认启用"不准确) - 拓扑描述改为"星型+P2P混合"(官方有 Team Lead 角色,非纯网状) - 新增架构组件表、Mailbox 消息系统、Hook 事件(TeammateIdle/TaskCreated/TaskCompleted)、限制说明 - 新增持久化存储路径(~/.claude/teams/, ~/.claude/tasks/) - 移除虚构的"高水位标记"(claimTask 仅使用文件锁) - 修正 Scratchpad 描述(Workers 获得,非 Coordinator 拥有) - 修复引号不匹配 sub-agents.mdx: - 修正为三路径路由(命名 Agent / Fork / GP 回退),原文仅两种 - 补充 isForkSubagentEnabled() 三前提(feature flag + 非Coordinator + 非非交互式) - 新增模型解析优先级(4级链 + inherit 运行时解析) - 新增内置 Agent 表(Explore/Plan/GP/statusline-setup/claude-code-guide) - 新增 Hook 事件表(frontmatter + settings.json 双级别) - 补充异步生命周期完整链路(finalizeAgentTool → getWorktreeResult) - 补充 transcript 存储路径和结果格式细节 worktree-isolation.mdx: - 区分 createWorktreeForSession vs createAgentWorktree 两种函数 - 修正清理机制为 cleanupWorktreeIfNeeded(非 ExitWorktreeTool 手动操作) - 补充 usedSparsePaths 字段
1 parent 609e911 commit d1b9e7b

3 files changed

Lines changed: 166 additions & 55 deletions

File tree

docs/agent/coordinator-and-swarm.mdx

Lines changed: 79 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ keywords: ["协调者模式", "蜂群模式", "Agent Swarm", "多 Agent 协作",
1010

1111
| 维度 | Coordinator Mode | Agent Swarms |
1212
|------|-----------------|--------------|
13-
| **门控** | `feature('COORDINATOR_MODE')` + `CLAUDE_CODE_COORDINATOR_MODE=1` | 任务系统 V2(默认启用) |
14-
| **拓扑** | 星型:Coordinator 居中,Worker 外围 | 网状:对等 Agent 共享任务列表 |
15-
| **角色** | 明确分工:Coordinator 编排、Worker 执行 | 模糊:每个 Agent 自主认领任务 |
16-
| **通信** | `SendMessage` 定向通信 + `<task-notification>` | 任务文件系统 + 邮箱广播 |
17-
| **适用** | 需要集中决策的复杂任务 | 并行度高的独立子任务 |
13+
| **门控** | `feature('COORDINATOR_MODE')` + `CLAUDE_CODE_COORDINATOR_MODE=1` | `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 环境变量 |
14+
| **拓扑** | 星型:Coordinator 居中,Worker 外围 | 星型+P2P 混合:Team Lead 协调,Teammate 间可直接通信 |
15+
| **角色** | 明确分工:Coordinator 编排、Worker 执行 | Team Lead 协调 + Teammate 自主认领任务 |
16+
| **通信** | `SendMessage` 定向通信 + `<task-notification>` | Mailbox 消息系统(message / broadcast) |
17+
| **适用** | 需要集中决策的复杂任务 | 并行度高、需要 Teammate 间直接协作的任务 |
1818

19-
两者不是互斥的——Coordinator Mode 可以在 Swarm 架构之上运行将 Coordinator 作为特殊的 Leader Agent
19+
两者不是互斥的——理论上 Coordinator Mode 可以在 Agent Teams 架构之上运行(概念层叠加,非嵌套团队),将 Coordinator 作为特殊的 Team Lead,但这部分集成(`workerAgent.ts` 中的 `getCoordinatorAgents`)目前为 stub 实现,尚未完整落地
2020

2121
## Coordinator Mode:星型编排架构
2222

@@ -45,15 +45,15 @@ Coordinator 被剥夺了所有"动手"工具,只保留编排能力:
4545
| **TaskStop** | 中途停止走错方向的 Worker |
4646
| **subscribe_pr_activity** | 订阅 GitHub PR 事件(review comments、CI 结果) |
4747

48-
Coordinator **不写代码、不读文件、不执行命令**——它只做三件事:理解需求、分配任务、综合结果。
48+
Coordinator **不写代码、不读文件、不执行命令**——它的核心职责是:理解需求、分配任务、综合结果,以及在无需工具时直接回答用户问题
4949

5050
### Worker 的工具权限
5151

5252
Worker 的可用工具由 `getCoordinatorUserContext()``coordinatorMode.ts:80`)动态注入到 System Prompt:
5353

5454
```typescript
5555
// 简化模式下:只有 Bash + Read + Edit
56-
const workerTools = isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE')
56+
const workerTools = isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)
5757
? [BASH_TOOL_NAME, FILE_READ_TOOL_NAME, FILE_EDIT_TOOL_NAME]
5858
: Array.from(ASYNC_AGENT_ALLOWED_TOOLS)
5959
.filter(name => !INTERNAL_WORKER_TOOLS.has(name))
@@ -63,7 +63,7 @@ const workerTools = isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE')
6363

6464
### Scratchpad:跨 Worker 的共享知识库
6565

66-
`tengu_scratch` feature flag 启用时,Coordinator 拥有一个 Scratchpad 目录:
66+
`isScratchpadGateEnabled()`(内部检查 `tengu_scratch` feature gate)启用时,Workers 获得一个 Scratchpad 目录,Coordinator 通过其系统上下文知晓该目录的存在
6767

6868
```
6969
Scratchpad 目录:
@@ -113,40 +113,92 @@ Coordinator System Prompt(`coordinatorMode.ts:111-369`,约 260 行)明确
113113

114114
这是 Coordinator Mode 最核心的设计约束:Coordinator 必须先理解,再分配。
115115

116-
## Agent Swarms:蜂群式协作
116+
## Agent Teams (Swarm):蜂群式协作
117117

118-
Swarm 模式基于任务系统 V2(详见[任务管理](../tools/task-management.mdx)),核心机制是**共享任务列表 + 竞争认领**:
118+
Swarm 模式基于任务系统 V2(详见[任务管理](../tools/task-management.mdx)),核心机制是**共享任务列表 + 竞争认领 + Mailbox 消息系统**
119119

120120
### 团队初始化
121121

122122
```
123-
Leader 创建团队(TeamCreateTool
123+
Team Lead 创建团队(TeamCreateTool)
124124
125125
设置 teamName → setLeaderTeamName()
126126
127-
所有 teammate 自动获得相同的 taskListId
127+
所有 Teammate 自动获得相同的 taskListId
128128
129-
teammate 启动时:
129+
Teammate 启动时:
130130
1. CLAUDE_CODE_TASK_LIST_ID 环境变量(显式覆盖)
131-
2. teammate 上下文的 teamName(共享 leader 的任务列表)
131+
2. Teammate 上下文的 teamName(共享 Lead 的任务列表)
132132
3. CLAUDE_CODE_TEAM_NAME 环境变量
133-
4. leader 设置的 teamName
133+
4. Lead 设置的 teamName
134134
5. getSessionId()(兜底)
135135
```
136136

137-
多级优先级确保了 Leader 和所有 Teammate 指向同一个任务列表,无需额外协调。
137+
多级优先级确保了 Team Lead 和所有 Teammate 指向同一个任务列表,无需额外协调。
138+
139+
### 架构组件
140+
141+
官方 Agent Teams 架构定义了四个核心组件:
142+
143+
| 组件 | 角色 |
144+
|------|------|
145+
| **Team Lead** | 创建团队、分配任务、综合结果的主 Claude Code 会话 |
146+
| **Teammate** | 独立的 Claude Code 实例,各自拥有独立的上下文窗口 |
147+
| **Task List** | 共享的任务列表,Teammate 竞争认领和完成 |
148+
| **Mailbox** | 消息系统,支持 Teammate 间直接通信 |
149+
150+
### Mailbox 消息系统
151+
152+
官方架构中的 Mailbox 是 Teammate 间通信的核心原语,支持两种消息模式(`broadcast` 模式来自源码推断,官方文档未明确细分):
153+
154+
| 模式 | 作用 | 场景 |
155+
|------|------|------|
156+
| **message** | 定向发送给指定 Teammate | 传递具体指令、请求协作 |
157+
| **broadcast** | 广播给所有 Teammate | 全局通知、状态同步 |
158+
159+
Mailbox 的关键特性:
160+
- **自动投递**:消息自动送达目标 Teammate 的对话上下文
161+
- **空闲通知**(TeammateIdle):Teammate 完成当前任务进入空闲时,自动通过 Mailbox 通知 Team Lead
162+
- **直接通信**:与 Coordinator Mode 不同,Teammate 之间可以直接通信,无需经过 Lead 中转
163+
164+
### Hook 事件
165+
166+
Agent Teams 提供三个关键 Hook 事件,用于在团队生命周期中注入自定义逻辑:
167+
168+
| Hook | 触发时机 | 典型用途 |
169+
|------|---------|---------|
170+
| **TaskCreated** | 新任务添加到任务列表时 | 自动分配、优先级排序 |
171+
| **TaskCompleted** | 任务标记为完成时 | 结果通知、依赖解锁 |
172+
| **TeammateIdle** | Teammate 完成所有任务进入空闲时 | Lead 重新分配、动态扩缩容 |
173+
174+
### 限制
175+
176+
当前 Agent Teams 实现的限制:
177+
- **不支持嵌套团队**:Teammate 不能再创建子团队
178+
- **每 session 一个团队**:一个会话只能属于一个团队
179+
- **Lead 固定**:Team Lead 创建后不可更换
180+
- **不支持 in-process Teammate 的会话恢复**:进程重启后 in-process 类型 Teammate 的状态丢失
181+
182+
### 持久化存储
183+
184+
团队状态通过文件系统持久化,确保进程重启后可恢复:
185+
186+
```
187+
~/.claude/teams/{team-name}/config.json ← 团队配置
188+
~/.claude/tasks/{team-name}/ ← 共享任务列表(文件锁保护)
189+
```
138190

139191
### 任务认领与竞争
140192

141-
`claimTask()`Swarm 的核心并发原语:
193+
`claimTask()`Agent Teams 的核心并发原语:
142194

143195
```
144196
Teammate A 调用 TaskList → 发现 task #3 是 pending
145197
Teammate B 同时发现 task #3 是 pending
146198
147199
两者同时尝试 TaskUpdate(task #3, {status: "in_progress"})
148200
149-
文件锁 + 高水位标记保证原子性
201+
文件锁保证原子性
150202
- 第一个写入者获得 owner 锁定
151203
- 第二个写入者收到 already_claimed 错误
152204
@@ -166,8 +218,11 @@ unassignTeammateTasks()
166218
→ 扫描任务列表,找到 owner === teammateName 的未完成任务
167219
→ 重置为 pending + owner=undefined
168220
169-
Leader 通过 mailbox 收到通知
170-
→ 重新分配或创建新 Teammate
221+
Team Lead 感知途径:
222+
1. 任务状态变化(pending 重置)—— 通过共享任务列表
223+
2. Mailbox 空闲通知(TeammateIdle hook)—— Teammate 停止时自动通知 Lead
224+
225+
Team Lead 重新分配任务或创建新 Teammate
171226
```
172227

173228
## 任务类型全景
@@ -186,11 +241,11 @@ Leader 通过 mailbox 收到通知
186241

187242
`InProcessTeammateTask``LocalAgentTask` 的关键差异:前者共享进程的内存空间和基础设施状态(如 MCP 连接池),但有独立的对话上下文和工具权限;后者是完全隔离的子进程,启动开销更大但更安全。
188243

189-
## Coordinator vs Swarm 的选择
244+
## Coordinator vs Agent Teams 的选择
190245

191246
| 场景 | 推荐模式 | 原因 |
192247
|------|---------|------|
193248
| "重构认证系统,需要多模块协调" | Coordinator | 需要集中决策,Worker 间有依赖 |
194-
| "修复 10 个独立的 lint 警告" | Swarm | 任务独立,可完全并行 |
249+
| "修复 10 个独立的 lint 警告" | Agent Teams | 任务独立,Teammate 可完全并行 |
195250
| "研究方案 A 和方案 B,然后选一个实现" | Coordinator | 先并行研究,再集中决策 |
196-
| "在大仓库中搜索所有 TODO 并分类" | Swarm | 无依赖,各自领任务即可 |
251+
| "在大仓库中搜索所有 TODO 并分类" | Agent Teams | 无依赖,各自领任务即可 |

0 commit comments

Comments
 (0)