Skip to content

09 — Agent / Swarm / Task

概述

Claude Code 支持三个层次的并行/协作能力:

  1. Agent (子代理) — 主会话可以分叉出独立的子代理,每个子代理有自己的对话循环和受限工具集
  2. Task (后台任务) — 长时间运行的工作单元,可以在后台执行
  3. Swarm (Teammate) — 多个 Claude Code 实例协作,分布在不同终端窗口/Tmux Pane 中

它们的关系是:Agent 是 同进程 的轻量级并行;Task 是 Agent 的 状态管理封装;Swarm 是 跨进程 的重量级协作。

Agent 系统 (tools/AgentTool/)

核心概念

Agent(子代理)是一个独立的 query() 循环,运行在与主会话相同的进程中。它有:

  • 自己的 System Prompt(来自 Agent 定义)
  • 受限的 工具集(如 Explore Agent 只有只读工具)
  • 隔离的 ToolUseContextsetAppState 是 no-op,见 03-State
  • 自己的 agentId 和颜色(UI 中通过颜色区分不同 Agent)

Agent 启动流程

内置 Agent 类型

每个内置 Agent 定义了自己可用的工具集,这是安全隔离的关键:

Agent工具集不可用的工具设计意图
general-purpose全部最强能力,用于复杂任务
ExploreGlob, Grep, Read, Bash(只读), WebFetch, WebSearchEdit, Write, Agent纯探索,不修改代码
Plan同 ExploreEdit, Write, Agent纯规划,不执行
claude-code-guideGlob, Grep, Read, WebFetch, WebSearchBash, Edit, Write, Agent查文档,不执行代码
verification配置文件定义自定义验证流程

自定义 Agent

用户可以在 ~/.claude/agents/.claude/agents/ 目录下放置 Markdown 文件来定义自定义 Agent:

markdown
name: my-reviewer
description: Code review specialist
model: sonnet
allowedTools: ["Read", "Glob", "Grep", "Bash"]

You are a code review specialist. Focus on...

loadAgentsDir.ts 会从这些目录加载定义,合并到 AgentDefinitionsResult 中。

Agent 恢复 (resumeAgent.ts)

SendMessageTool 可以向已存在的子代理发送新消息。通过 agentNameRegistry 找到 Agent,恢复其上下文继续对话。这允许主会话与子代理之间进行多轮交互。

Task 系统 (src/tasks/)

Task 是 Agent 的运行时封装——它给 Agent 加上了生命周期管理、状态追踪和 UI 展示。

Task 类型

Task 类型文件运行位置说明
LocalAgentTasktasks/LocalAgentTask/同进程本地 Agent 包装为 Task
RemoteAgentTasktasks/RemoteAgentTask/远程远程服务器上的 Agent
LocalShellTasktasks/LocalShellTask/同进程Shell 命令任务
InProcessTeammateTasktasks/InProcessTeammateTask/同进程进程内 Teammate
DreamTasktasks/DreamTask/同进程Dream (后台知识整理)
LocalMainSessionTasktasks/LocalMainSessionTask.ts同进程主会话的 Task 表示

Task 生命周期

Task 工具

模型通过 Task 相关的 Tool 管理任务:

工具说明与 Task 生命周期的关系
TaskCreateTool创建任务Queued → Running
TaskGetTool查询状态读取 TaskState
TaskUpdateTool更新进度/描述修改 TaskState
TaskListTool列出所有任务读取 tasks Map
TaskStopTool停止任务Running → Stopped
TaskOutputTool获取输出读取 Task 输出流

Task 状态存储在 AppState.tasks 中(这是 AppState 中少数 可变 的字段,不受 DeepImmutable 约束)。

Swarm / Teammate 系统 (utils/swarm/)

Swarm 是最重量级的协作模式。它允许启动多个 Claude Code 进程,分布在不同的终端窗口中,由一个 Leader 协调。

架构

后端选择

Leader 根据终端环境自动选择最佳后端:

后端条件UI 表现
TmuxBackend在 Tmux 会话中新的 Tmux Pane
ITermBackend在 iTerm2 中新的 iTerm2 Tab/Split
InProcessBackend其他(或 Feature Flag)无独立窗口,进程内运行

detection.ts 负责检测当前终端环境,registry.ts 管理后端注册。

权限同步

Swarm Worker 没有自己的终端 UI 来显示权限弹窗。权限请求通过 Mailbox 机制转发给 Leader:

这种基于文件系统的 Mailbox 机制确保了跨进程通信的可靠性,即使 Worker 和 Leader 在不同的 Tmux 窗格中。

关键文件

文件说明
teammateInit.tsTeammate 初始化流程
teammateModel.tsTeammate 模型选择(可能使用更快的模型)
teammatePromptAddendum.ts注入 Teammate 角色描述到 System Prompt
teammateLayoutManager.ts管理 Tmux/iTerm 窗格布局
spawnUtils.ts / spawnInProcess.ts启动 Worker 进程
inProcessRunner.ts进程内 Worker 运行器
permissionSync.ts权限同步(Leader ↔ Worker)
leaderPermissionBridge.tsLeader 端权限桥
reconnection.tsWorker 断线重连
teamHelpers.ts团队状态辅助函数
constants.tsSwarm 常量

三者关系总结

  • Agent: 需要隔离上下文的快速子任务(如探索代码库、规划方案)
  • Task: 需要跟踪状态的长时间 Agent(如后台运行测试、构建)
  • Swarm: 需要真正的多进程并行(如同时修改多个文件、并行开发多个功能)