犀牛鸟 2026 研究笔记 estelledc.github.io

Claude Code 多 Agent 编排:Subagent → Coordinator → Swarm → Workflow

一句话定位:Claude Code 的多 Agent 系统是四层递进架构——从最简单的一次性子 agent 委派,到中央协调器,到去中心化团队协作,再到 JS 脚本编排的 Dynamic Workflow。

调研时间:2026-06-22
依据版本:泄露源码包(2026-03-31)+ 官方文档(2026-06)
核心文件src/utils/swarm/(22 文件)、src/coordinator/src/tasks.tssrc/Task.tssrc/utils/task/framework.ts


证据等级汇总

结论 来源
7 种 TaskType 定义 [源码] Task.ts
Coordinator Mode 4 阶段工作流 [源码] coordinatorMode.ts
Swarm 三种执行后端(tmux/iTerm2/in-process) [源码] swarm/backends/
Leader-Worker 拓扑 + 文件邮箱通信 [源码] swarm/
进程内队友使用 AsyncLocalStorage 隔离 [源码] inProcessRunner.ts
权限委托:worker → leader UI [源码] leaderPermissionBridge.ts
Dynamic Workflow 使用 JS 编排脚本 [文档][引用]
Ultracode = xhigh + 自动 workflow 决策 [文档]
LocalWorkflowTask 实现缺失 [引用] tasks.ts stub

日常类比

把多 Agent 系统想象成建筑工地的组织形式

模式 类比 适用场景
Subagent 包工头派一个工人去搬砖,搬完回来汇报 单一独立任务
Coordinator 项目经理坐镇指挥,分配任务给各工种 复杂多步骤项目
Swarm 自组织施工队,队长和队员平等协作 持续性团队协作
Workflow 施工蓝图,预先规划好每步由谁做什么 可预测的标准流程

类比边界:真实系统中 Coordinator 和 Swarm 可以混合使用,且 Workflow 是最新加入的模式,与前三者并非互斥。


四层递进架构

graph TB
    subgraph L1["Layer 1: Subagent(最简单)"]
        AgentTool[AgentTool] --> |"spawn"| Worker1[一次性 Worker]
        Worker1 --> |"结果返回"| AgentTool
    end

    subgraph L2["Layer 2: Coordinator(中央调度)"]
        Coord[Coordinator] --> |"AgentTool"| W2A[Research Worker]
        Coord --> |"AgentTool"| W2B[Impl Worker]
        Coord --> |"SendMessage"| W2A
        Coord --> |"TaskStop"| W2B
    end

    subgraph L3["Layer 3: Swarm(去中心化)"]
        Leader[Team Lead] <--> |"mailbox"| T1[Teammate 1]
        Leader <--> |"mailbox"| T2[Teammate 2]
        T1 <--> |"mailbox"| T2
    end

    subgraph L4["Layer 4: Dynamic Workflow(JS 编排)"]
        Script[workflow.js] --> |"orchestrate"| A1[Agent A]
        Script --> |"orchestrate"| A2[Agent B]
        Script --> |"orchestrate"| A3[Agent C]
        A1 --> |"结果"| Script
        A2 --> |"结果"| Script
    end

    L1 --> |"复杂度增加"| L2
    L2 --> |"持续协作"| L3
    L3 --> |"可预测流程"| L4

Layer 1:Subagent(AgentTool)

最基础的多 Agent 模式——主 agent 通过 AgentTool 派生一个子 agent 执行独立任务 [源码]

执行流程

主 Agent 调用 AgentTool:
  input: { prompt, allowedTools?, model? }
  
AgentTool 内部:
  1. 创建新的 ToolUseContext (独立 abortController)
  2. 注册为 TaskType='local_agent' (ID: a/xxxxxxxx)
  3. 运行独立的 queryLoop
  4. 子 agent 有自己的 system prompt + 工具集
  5. 完成后返回结果给主 agent

关键约束:
  - 子 agent 看不到主 agent 的对话历史
  - 子 agent 的 prompt 必须自包含
  - 子 agent 有独立的 token 预算
  - 子 agent 的权限由 PermissionHandler 决定

Task 生命周期 [源码]

状态 含义
pending 已创建,等待执行
running 正在执行 queryLoop
completed 正常完成
failed 执行出错
killed 被 TaskStop 或用户中止

Layer 2:Coordinator Mode

通过 CLAUDE_CODE_COORDINATOR_MODE 环境变量激活 [源码],主 agent 变为纯调度角色:

可用工具(仅 3 个):

4 阶段工作流(Coordinator System Prompt 定义)[源码]

graph LR
    R[1. Research<br>并行调研] --> S[2. Synthesis<br>协调器综合]
    S --> I[3. Implementation<br>并行实现]
    I --> V[4. Verification<br>并行验证]

设计原则

与 CrewAI 对比

维度 Claude Code Coordinator CrewAI
调度 模型自主决策 预定义 Process(sequential/hierarchical)
Worker 定义 运行时动态 编译时 Agent 类
通信 task-notification XML 共享 memory + delegation
人机协同 Permission + Hook human_input=True

Layer 3:Swarm / Teams

最复杂的多 Agent 模式——持续性团队协作 [源码]

架构概览

graph TB
    subgraph "Team Lead (主进程)"
        Leader[Leader Agent]
        UI[Permission UI]
        TaskList[Task List]
    end

    subgraph "Backend: in-process"
        T1[Teammate 1<br>AsyncLocalStorage]
        T2[Teammate 2<br>AsyncLocalStorage]
    end

    subgraph "Backend: tmux"
        T3[Teammate 3<br>tmux pane]
    end

    Leader <-->|"file mailbox"| T1
    Leader <-->|"file mailbox"| T2
    Leader <-->|"file mailbox"| T3
    T1 -->|"permission bridge"| UI
    T2 -->|"permission bridge"| UI
    TaskList -->|"auto-claim"| T1
    TaskList -->|"auto-claim"| T2

三种执行后端 [源码]

后端 隔离方式 优势 劣势
in-process AsyncLocalStorage 零启动开销、共享内存 单进程故障域
tmux 独立进程 + tmux pane 进程隔离、可观察 启动慢、IPC 开销
iterm2 iTerm2 split pane 原生 macOS 体验 平台限定

通信机制:文件邮箱 [源码]

通信协议:
  writeToMailbox(targetId, message) → 写入 JSON 文件
  readMailbox(selfId) → 读取并消费消息

消息优先级:
  leader 消息 > peer 消息 > shutdown 请求

消息类型:
  - prompt: 新任务指令
  - task-notification: 任务完成/失败通知
  - shutdown: 终止信号

进程内队友执行循环 [源码]

spawnInProcessTeammate(config):
  1. 注册 TaskType='in_process_teammate' (ID: t/xxxxxxxx)
  2. 创建独立 ToolUseContext
  3. 进入 runInProcessTeammate 循环:
     while (!shutdown):
       a. 执行当前 prompt (queryLoop)
       b. 进入 idle 状态
       c. 等待: 新邮件 / task-list 认领 / shutdown
       d. 收到新任务 → 回到 a
  4. 支持 auto-compact (token 超阈值时)
  5. 支持 per-turn abort (Escape 停当前工作)

上下文隔离:
  runWithTeammateContext() 使用 AsyncLocalStorage
  每个 teammate 有独立的:
    - agentId
    - abortController
    - readFileState (文件缓存)
    - 颜色标识 (UI 区分)

权限委托 [源码]

Worker 需要权限时的处理:

  1. UI Bridge 可用:通过 leaderPermissionBridge 将权限请求转发到 leader 的 UI,显示 “worker badge” 标识哪个 agent 在请求
  2. UI Bridge 不可用:通过 mailbox 发送权限请求,leader 处理后回复
  3. 后台 workershouldAvoidPermissionPrompts=true,自动拒绝所有权限请求

Layer 4:Dynamic Workflow

编排逻辑从 model context 外置到 JS 脚本 [文档][引用]

源码中的痕迹 [引用]

// src/tasks.ts — 条件加载
const LocalWorkflowTask = feature('WORKFLOW_SCRIPTS')
  ? require('./tasks/LocalWorkflowTask.js')
  : null

// src/Task.ts — 类型定义
type TaskType = '...' | 'local_workflow'  // ID 前缀: w/

泄露包中 LocalWorkflowTask 的实现文件缺失——被 WORKFLOW_SCRIPTS feature flag 守护,外部 build 中被 DCE 剔除。

官方文档描述 [文档]

Dynamic Workflow 是 2026-05-28 发布的功能,核心设计:

Ultracode [文档]

Ultracode 不是独立功能,而是一个设置组合

用户视角:
  claude --model opus --effort xhigh  (即 "ultracode" 模式)

内部行为:
  1. 模型收到任务
  2. 判断: 这个任务适合 workflow 吗?
     - 是 → 生成 workflow.js → 执行
     - 否 → 正常 turn-loop
  3. xhigh effort 让模型在每步都深度思考

Task 框架:统一管理

src/utils/task/framework.ts(309 行)提供任务的统一生命周期管理 [源码]

机制 说明
registerTask() 注册到 AppState,发 SDK 事件
evictTerminalTask() 完成/失败/killed 后 GC(30s grace)
generateTaskAttachments() 轮询运行中任务的输出增量
pollTasks() 1s 间隔轮询所有任务状态
enqueueTaskNotification() 格式化 XML 通知注入消息链

Task 通知格式

<task-notification task_id="a/x7k2m9p1" status="completed">
  Worker completed: Implemented authentication module.
  Files changed: src/auth.ts, src/middleware.ts
</task-notification>

编排模式对比矩阵

维度 Subagent Coordinator Swarm Workflow
拓扑 1:1 1:N 星型 N:N 网状 脚本定义
生命周期 一次性 任务级 会话级 脚本级
通信 返回值 task-notification 文件邮箱 JS 变量
并行度 模型决策 自然并行 脚本定义
状态共享 Scratchpad 目录 团队记忆 JS 作用域
权限 继承主 agent worker 独立 leader 委托 继承
Token 成本 低(单任务) 高(协调开销) 中(邮箱精简) 低(编排外置)
适用场景 独立子任务 复杂项目 持续协作 标准流程

与开源框架对比

vs LangGraph

维度 Claude Code LangGraph
编排范式 Turn loop + 运行时决策 编译时有向图
多 Agent 4 层递进(运行时选择) Subgraph 嵌套
状态 AppState + Task + Mailbox Channel + Checkpoint
人机协同 Permission + Hook + UI Bridge GraphInterrupt
可观测 Background Tasks 面板 + Analytics LangSmith

vs tRPC-Agent

维度 Claude Code tRPC-Agent
通信 文件邮箱 / 进程内 RPC 调用
服务发现 硬编码 + AgentDefinition tRPC router
隔离 AsyncLocalStorage / tmux 微服务进程
扩展 单机多 agent 分布式

局限性


下一步