现在位置: 首页 > Claude Code 教程 > 正文

Claude Code 子代理(Subagent)

在 Claude Code 中,你可以创建专门的 AI 子代理(Subagent),用于处理特定类型的任务,从而获得更好的上下文管理、更强的约束控制和更高的执行效率。

子代理是运行在独立上下文窗口中的专用 AI 助手。每个子代理都可以拥有:

  • 独立的系统提示(System Prompt)
  • 独立的上下文(不污染主对话)
  • 指定的模型(Sonnet / Haiku / Opus)
  • 明确的工具访问权限
  • 独立的权限模式
  • 生命周期钩子(Hooks)
  • 跨会话持久记忆(Memory)

当 Claude 判断你的请求符合某个子代理的描述(description)时,就会自动将任务委托给该子代理,由它独立完成并返回结果。

重要:子代理只接收自身的系统提示和基础环境信息(如工作目录),不会继承完整的 Claude Code 系统提示。这保证了行为的纯净和可控。


为什么要使用子代理?

子代理的核心价值在于隔离 + 专业化。它可以帮助你:

保留主对话上下文

  • 把探索、扫描、日志分析等"重任务"放到子代理中,主对话只接收结论摘要
  • 研究表明,并行运行三个子代理分析 5 万行项目约需 45 秒,而串行执行需要 3 分钟

强制执行约束

  • 例如:只读分析、禁止写文件、禁止执行危险命令

跨项目复用

  • 用户级子代理一次配置,所有项目可用

行为专业化

  • 为特定领域(代码审查、调试、数据分析)设计专用 AI
  • 在系统提示中明确指出该代理的弱点和边界,避免不必要的调用

控制成本

  • 将简单任务交给 Haiku,将复杂分析交给 Sonnet
  • 通过环境变量 CLAUDE_CODE_SUBAGENT_MODEL 统一设置所有子代理使用的模型

子代理 = 专门干某一类事的 AI 工具人


子代理 vs 多代理(Multi-agent)

这两个概念容易混淆,区别在于任务粒度和运行范围:

对比项 子代理(Subagent) 多代理(Multi-agent)
运行范围 在单个 Claude Code 会话内启动,处理子任务后返回结果 多个 Claude Code 会话并行或串行运行,通常由编排器管理
上下文 独立上下文窗口,与主对话隔离 各会话上下文完全独立
嵌套 子代理不能再创建子代理(需嵌套时使用 Skills) 可由编排器协调多层级任务
适用场景 聚焦子任务、大量输出隔离、专业分析 全功能开发流水线(设计→实现→测试→发布)

Claude Code 内置的子代理

Claude Code 已内置多种子代理,通常会自动使用,你不需要手动配置。

1、Explore(探索代理)

用途:只读搜索与分析代码库

  • 模型:Haiku(速度快、延迟低)
  • 工具:只读工具(不能 Edit / Write)
  • 场景:搜索文件、理解代码结构、查找定义和引用

Claude 会在需要看代码但不改代码时自动使用 Explore。支持不同探索深度:quick / medium / very thorough

2、Plan(规划代理)

用途:计划模式下的代码库研究

  • 模型:继承主对话
  • 工具:只读工具
  • 场景:在 Plan 模式中理解项目,为后续方案制定收集上下文

在不产生嵌套代理的前提下,安全收集规划所需信息。

3、General-purpose(通用代理)

用途:复杂、多步骤任务

  • 模型:继承主对话
  • 工具:全部工具
  • 场景:需要"看 + 改 + 推理"、多步骤代码修改、综合分析后给出结论

4、其他内部代理(无需手动使用)

代理 说明
Bash 在独立上下文中运行命令
statusline-setup 配置状态栏
Claude Code Guide 解答 Claude Code 使用问题

快速入门:创建你的第一个子代理

推荐方式:使用 /agents 命令

1、打开子代理管理界面

/agents

/agents 命令提供完整的子代理管理能力:查看所有可用子代理(内置/用户级/项目级/插件)、创建、编辑、查看同名冲突时哪个生效。

2、创建用户级子代理

  • 选择 Create new agent
  • 选择 User-level
  • 保存位置:~/.claude/agents/(所有项目可用)

3、使用 Claude 自动生成

示例描述:

一个代码改进代理,扫描项目文件,
针对可读性、性能和最佳实践提出建议,
并给出改进示例。

Claude 会生成系统提示和初始配置,你可以按 e 手动编辑。

4、选择工具权限

  • 只做代码审查 → 仅勾选只读工具
  • 需要改代码 → 保留 Edit / Write

5、选择模型

推荐:Sonnet(分析能力与速度平衡)

6、选择记忆范围(可选)

  • 选择 User:在 ~/.claude/agent-memory/ 建立持久记忆,跨所有项目积累经验
  • 选择 None:不保留学习成果,每次从零开始

7、保存并使用

使用 code-improver 子代理为此项目提出改进建议

子代理会独立运行并返回结果。


子代理的作用范围

子代理本质是带 YAML frontmatter 的 Markdown 文件,不同位置代表不同作用范围。

位置 范围 优先级
CLI --agents 标志 当前会话 最高
.claude/agents/ 当前项目
~/.claude/agents/ 所有项目
插件 agents 插件作用域 最低

当同名子代理存在冲突时,优先级高的会覆盖低的。可通过 /agents 查看当前哪个版本生效。

使用建议

项目子代理(.claude/agents/

  • 跟代码一起提交,团队共享
  • 可引用项目专属工具和领域知识
  • 自动继承项目 CLAUDE.md 中的编码规范和架构规则

用户子代理(~/.claude/agents/

  • 个人习惯与通用工具,跨项目生效

CLI 子代理(--agents

  • 临时测试 / 自动化脚本,不保留到磁盘

子代理配置文件结构

配置文件由两部分组成:YAML frontmatter(元数据与配置)+ Markdown 正文(系统提示)。

---
name: code-reviewer
description: Reviews code for quality, best practices, and security issues.
             Invoke when the user asks to review, audit, or check code quality.
tools: Read, Grep, Glob
model: sonnet
permissionMode: default
memory: project
---

You are a senior code reviewer.
Analyze code and provide actionable feedback organized by severity: Critical / Major / Minor.

Update your agent memory with recurring patterns, conventions, and known issues you discover.

必填字段

  • name:唯一标识(小写 + 连字符,如 code-reviewer
  • description最重要的字段,Claude 是否以及何时调用该代理完全依赖于此;建议写成"何时调用 + 能做什么"的动作式描述

完整字段说明

字段 类型 说明
name string(必填) 唯一标识,也是显式调用时的名称
description string(必填) 决定 Claude 何时自动调用此代理,务必写清楚使用场景
tools string 工具白名单;设置后只能使用列出的工具,MCP 工具也会被排除
disallowedTools string 工具黑名单;继承主对话全部工具,但排除列出的工具(含 MCP)
model string haiku / sonnet / opus / 完整模型 ID / inherit(默认,继承主对话)
permissionMode enum 权限行为控制(见权限模式章节)
memory enum 持久记忆范围:user / project / local(见记忆章节)
background bool true 时始终以后台方式运行
isolation string 设为 worktree 时在临时 git worktree 中运行,完全隔离主仓库
skills list 声明在此代理启动时自动加载的 Skills 列表
hooks object 生命周期钩子(SubagentStart / SubagentStop / PreToolUse / PostToolUse)

tools 与 disallowedTools 的区别

配置方式 行为 典型场景
两者均不设置 继承主对话全部工具,含 MCP 工具 通用代理,不需要限制
仅设置 tools 只能使用白名单内的工具,MCP 工具被排除 只读分析代理、严格约束场景
仅设置 disallowedTools 继承全部工具,但排除黑名单内的工具(MCP 工具保留) 保留 MCP 能力但禁止写操作
两者同时设置 先应用 disallowedTools,再从剩余工具中按 tools 筛选 精细控制

示例:只允许只读操作

---
name: safe-researcher
description: Research agent with read-only access
tools: Read, Grep, Glob, Bash
---

示例:继承所有工具但禁止写文件

---
name: no-writes
description: Inherits every tool except file writes
disallowedTools: Write, Edit
---

权限模式(务必理解)

模式 行为 适用场景
default 正常权限提示,每次操作前询问 通用场景
acceptEdits 自动接受文件编辑,无需每次确认 频繁改动文件的代理
dontAsk 自动拒绝未授权操作,不中断流程 严格只读场景
bypassPermissions 跳过所有权限检查 仅限完全可信、受控环境
plan 只读规划模式,不执行任何写操作 方案制定、架构分析

注意:bypassPermissions 只适合完全可信的子代理。另外,子代理会继承父会话的权限模式——如果主会话开启了 bypass,所有子代理也会跟着 bypass。


持久记忆(Memory)

通过 memory 字段,子代理可以在会话之间积累知识,例如代码库规律、调试经验、架构决策等,无需每次重新探索。

范围值 存储位置 适用场景
user ~/.claude/agent-memory/<name>/ 代理的知识适用于所有项目(如通用代码审查规范)
project .claude/agent-memory/<name>/ 知识与项目绑定且可 git 共享(推荐默认值)
local .claude/agent-memory-local/<name>/ 知识与项目绑定但不提交 git(个人本地经验)

配置示例:

---
name: code-reviewer
description: Reviews code for quality and best practices
memory: user
---

You are a code reviewer.
As you review code, update your agent memory with patterns,
conventions, and recurring issues you discover.

使用技巧:

  • 开始任务时:请先查阅你的记忆,再开始审查
  • 任务结束时:任务完成后,把你发现的规律保存到记忆中
  • 也可直接在系统提示里写入"主动维护记忆"的指令,让代理自动执行

worktree 隔离模式

设置 isolation: worktree 后,子代理会在临时 git worktree 中运行,与主仓库完全隔离。适合以下场景:

  • 需要大量文件修改但不确定结果的探索性任务
  • 并行跑多个方案对比,互不干扰
  • 自动化测试、CI 验证等需要干净环境的操作
---
name: experimental-refactor
description: Tries refactoring approaches in an isolated worktree
isolation: worktree
tools: Read, Write, Edit, Bash
---

You are a refactoring agent working in an isolated environment.
Feel free to make changes—they won't affect the main branch.

后台运行(Background)

前台 vs 后台

运行方式 行为 限制
前台(Foreground) 阻塞主对话直到完成,权限提示和澄清问题会透传给你 无特殊限制
后台(Background) 并行执行,不打断主对话;启动前会预先确认所需权限 无 MCP、无交互式澄清;权限不足时任务失败而非暂停

Claude 会根据任务特性自动决定前台还是后台。你也可以主动控制:

  • Ctrl + B:将当前运行的子代理切换到后台
  • Ctrl + F(按两次确认):终止所有后台代理
  • 在 frontmatter 中设置 background: true:该代理始终以后台方式运行
  • 消息开头加 &:将该任务作为后台任务发送给 claude.ai 网页端
  • 通过 /tasks 命令随时查看后台任务进度

如需彻底禁用后台任务功能:

export CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1

如需统一设置所有子代理的模型:

# 主对话用 Opus 做复杂推理,子代理用 Sonnet 节省成本
export CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4-6"

禁用特定子代理

如果你不希望 Claude 调用某个特定的子代理,可以在 .claude/settings.json 中将其加入 deny 列表:

{
  "subagents": {
    "deny": ["explore", "plan"]
  }
}

生命周期钩子(Hooks)

子代理支持以下钩子事件,可用于日志、验证、通知等自动化场景:

钩子事件 触发时机 典型用途
SubagentStart 子代理启动时 记录启动日志、初始化环境
SubagentStop 子代理完成时 记录结果、触发下游任务、发送通知;字段含 agent_idagent_transcript_path
PreToolUse 工具调用前 校验操作合法性,退出码 2 可阻止执行
PostToolUse 工具调用后 格式化输出、生成变更记录

钩子高级用法——通过 PreToolUse 动态控制工具行为。例如,让代理只允许只读 SQL 查询:

---
name: db-analyst
description: Read-only database analysis agent
tools: Bash
---

You are a database analyst. Only run SELECT queries.

# hooks defined in .claude/settings.json:
# PreToolUse on Bash -> validate-readonly-query.sh
# Script exits with code 2 to block write operations

如何使用子代理

自动委托

Claude 会根据 description 字段自动判断,无需你手动指定:

帮我检查最近的代码改动质量

显式调用

在提示中明确指定代理名称:

让 code-reviewer 子代理检查最近的改动

典型使用模式

1、隔离高输出任务

使用子代理运行测试,只返回失败的测试和根因分析

2、并行研究

并行使用子代理分别分析认证模块、数据库模块和 API 模块,汇总后给出整体架构建议

3、串联子代理(流水线)

先用 code-reviewer 找问题,再用 optimizer 修复问题

串联工作流的设计原则:每个代理只做一件事,通过清晰的"输入 → 处理 → 输出 → 交接规则"定义接口。

完整流水线示例(来自 PubNub 的生产实践):

  • pm-spec:读取需求,生成工作规格,确认后标记 READY_FOR_ARCH
  • architect-review:验证设计约束,产出架构决策记录(ADR),标记 READY_FOR_BUILD
  • implementer-tester:实现代码和测试,更新文档,标记 DONE

通过 SubagentStop 钩子监听队列文件,自动触发下一个代理。

4、并行代码审查

同时启动 style-checker、security-scanner、test-coverage 三个子代理并行审查,
将审查时间从数分钟压缩到数十秒

子代理上下文与恢复

  • 每次调用 = 新子代理实例(无法感知之前的调用)
  • 子代理上下文独立存储,不污染主对话
  • 中间工具调用和结果只留在子代理内部,主对话只收到最终摘要
  • 可通过 session ID 和 agent ID 恢复继续执行(SDK 场景)

会话继续示例:

继续刚才的 code-reviewer 分析,重点看授权逻辑部分

存储位置示例:

~/.claude/projects/{project}/{sessionId}/subagents/

什么时候该用子代理?

用主对话,当:

  • 需要频繁来回调整,交互性强
  • 多阶段任务有强依赖关系,上下文需要连续
  • 快速、小改动,启动代理的开销不值得
  • 实际经验:超过 3~4 个子代理后,管理成本可能反而降低效率

用子代理,当:

  • 任务自包含,可以给出明确的输入和期望输出
  • 输出量很大,会显著占用主对话上下文
  • 需要强约束(只读、隔离 worktree 等)
  • 同类任务会重复出现,值得固化为代理
  • 涉及多个独立子域,可以并行处理

注意:子代理不能再创建子代理(防止无限嵌套)。如需嵌套逻辑,请使用 Skills


最佳实践

description 怎么写

  • 用动作式描述:当用户要求审查/分析/检查代码质量时调用
  • 说明前置条件:在规格文档确认后使用,产出架构决策记录
  • 写清楚代理的边界和不擅长的场景,防止被错误调用

工具权限设计

  • 只读代理(审查、审计):Read, Grep, Glob
  • 研究代理(信息收集):Read, Grep, Glob, WebFetch, WebSearch
  • 实现代理(写代码):Read, Write, Edit, Bash, Glob, Grep
  • 遵循最小权限原则,只给代理完成任务所需的工具

单一职责

  • 每个代理只做一件事,给出清晰的输入/输出/交接规则
  • 不要试图用一个代理包办所有事情

system prompt 建议

  • 在系统提示中明确代理的性格:请保持批判性,不要只说好话
  • 指出代理的弱点和局限,避免过度自信
  • 如果启用了记忆,在系统提示里写入"主动维护记忆"的指令

并行 vs 串行

  • 域之间相互独立 → 并行,节省时间
  • 下一步依赖上一步结果 → 串行,保证质量
  • 避免为了并行而并行:10 个并行代理处理简单任务反而浪费 token 和协调成本