Claude Code 子代理是什么?Explore/Plan 模式一文讲清
Claude Code 子代理是什么?Explore/Plan 模式一文讲清
Prorise第五章. 子代理(Subagents)
本章摘要:Claude Code 默认是一个 “全能选手”,但有时候你需要 “专家”——专门做代码审查的、专门跑测试的、专门分析数据的。子代理(Subagents)让你可以创建这些 “专家”,它们有独立的上下文、专属的工具权限、定制的系统提示词。
本章学习路径
| 阶段 | 内容 | 解锁能力 |
|---|---|---|
| 第一阶段 | 内置子代理解析 | 理解 Claude Code 自带的三个专家 |
| 第二阶段 | 自定义子代理 | 掌握创建专属 AI 助手的方法 |
| 第三阶段 | 实战创建 | 完成一个代码审查子代理的配置 |
5.1. 内置子代理解析
在学习如何创建自定义子代理之前,我们先来看看 Claude Code 自带的三个内置子代理。理解它们的设计思路,有助于我们创建更好的自定义子代理。
5.1.1. Explore 子代理:只读探索专家
“我想让 Claude 帮我找一下项目里所有处理用户认证的代码,但不要改任何东西。”
这种 “只看不摸” 的需求,就是 Explore 子代理的专长。
核心特点:
| 特性 | 值 |
|---|---|
| 模型 | Haiku(快速响应) |
| 模式 | 严格只读 |
| 可用工具 | Glob, Grep, Read, Bash(仅只读命令) |
允许的 Bash 命令:
Explore 子代理只能执行这些只读命令:
ls—— 列出文件git status/git log/git diff—— 查看 Git 状态find—— 查找文件cat/head/tail—— 查看文件内容
触发方式:
Claude 会自动判断何时使用 Explore 子代理。当你的请求是 “查找”、“搜索”、“分析” 类型时,它会自动委派给 Explore。
你也可以显式指定:
1 | › 用 Explore 子代理帮我找一下所有包含 "TODO" 的文件 |
5.1.2. Plan 子代理:规划模式助手
“我想让 Claude 先分析一下这个重构任务,给我一个方案,但先别动手。”,在旧版本中通过 Shift + Tab 在不同的 权限模式 之间 循环 切换
但现在 claude 简化了这个规则,只要语义中与“规划”,“Plan”相关都可以进入规划模式
核心特点:
| 特性 | 值 |
|---|---|
| 模型 | Sonnet(均衡能力) |
| 模式 | 只读分析 |
| 可用工具 | Read, Glob, Grep, Bash(只读) |
工作流程:
- 你切换到
plan模式 - 你提出一个任务(如 “重构用户模块”)
- Claude 委派给 Plan 子代理进行代码分析
- Plan 子代理返回分析结果
- Claude 基于分析结果给你一个重构方案
5.1.3. General-purpose 子代理:通用任务执行者
“这个任务比较复杂,需要先搜索代码、再修改文件、最后运行测试。”
General-purpose 子代理是一个 “全能型” 助手,可以执行复杂的多步骤任务。
核心特点:
| 特性 | 值 |
|---|---|
| 模型 | Sonnet |
| 模式 | 可读可写 |
| 可用工具 | 所有工具 |
与主 Claude 的区别:
General-purpose 子代理运行在 独立的上下文 中。这意味着:
- 它不会污染主对话的上下文
- 它可以进行大量的探索和尝试,而不会让主对话变得冗长
- 任务完成后,只有结果会返回给主对话
5.1.4. 本节小结
三个内置子代理的定位:
| 子代理 | 模型 | 能力 | 适用场景 |
|---|---|---|---|
| Explore | Haiku | 只读 | 快速搜索、代码探索 |
| Plan | Sonnet | 只读 | 规划模式下的分析 |
| General-purpose | Sonnet | 读写 | 复杂多步骤任务 |
5.2. 自定义子代理
内置子代理覆盖了通用场景,但你可能有更专业的需求:
- “我想要一个专门做代码审查的子代理,它知道我们团队的代码规范”
- “我想要一个专门写测试的子代理,它熟悉我们的测试框架”
- “我想要一个专门分析数据的子代理,它会用 SQL 和 Python”
这就需要创建 自定义子代理。
5.2.1. 文件格式与存放位置
子代理配置是一个 Markdown 文件,包含 YAML 前置元数据和系统提示词。
存放位置:
| 位置 | 路径 | 作用范围 |
|---|---|---|
| 项目级 | .claude/agents/ | 当前项目 |
| 用户级 | ~/.claude/agents/ | 所有项目 |
优先级:项目级 > 用户级。如果两个位置有同名子代理,项目级的会覆盖用户级的。
文件命名:
文件名就是子代理的名称。例如 code-reviewer.md 创建的子代理名为 code-reviewer。
5.2.2. 配置字段详解
一个完整的子代理配置文件结构如下:
1 | --- |
字段说明:
| 字段 | 必填 | 说明 |
|---|---|---|
name | 是 | 子代理名称,只能用小写字母、数字和连字符 |
description | 是 | 描述用途,Claude 根据这个决定何时使用 |
tools | 否 | 允许使用的工具列表,不填则继承所有工具 |
model | 否 | 使用的模型(sonnet/opus/haiku/inherit) |
permissionMode | 否 | 权限模式(default/acceptEdits/plan/bypassPermissions) |
skills | 否 | 自动加载的 Skills 列表 |
5.2.3. 工具权限控制
tools 字段决定了子代理能使用哪些工具。这是一个重要的安全机制。
示例 1:只读子代理
1 | tools: Read, Grep, Glob, Bash |
注意:即使列出了 Bash,子代理也只能执行只读命令(如 ls、cat),因为写入类命令需要 Write 或 Edit 工具。
示例 2:代码修改子代理
1 | tools: Read, Edit, Write,Grep, Glob, Bash |
这个子代理可以读取、修改文件,也可以执行命令。
示例 3:数据分析子代理
1 | tools: Read, Bash, Write |
只给它读取数据、执行分析脚本、输出结果的能力,不给它修改源代码的能力。
5.2.4. 本节小结
自定义子代理的核心配置:
| 配置项 | 作用 | 默认值 |
|---|---|---|
name | 子代理名称 | 必填 |
description | 触发条件描述 | 必填 |
tools | 可用工具列表 | 继承所有 |
model | 使用的模型 | sonnet |
permissionMode | 权限模式 | default |
5.3. 实战:创建代码审查子代理
理论讲完了,现在来实战创建一个专门做代码审查的子代理。
5.3.1. 需求分析
我们想要一个子代理,它能够:
- 自动检查最近的代码变更(
git diff) - 按照团队的代码规范进行审查
- 输出结构化的审查报告(分为 “必须修复”、“建议修复”、“可选优化”)
- 只读不写——它只负责发现问题,不负责修复
5.3.2. 编写配置文件
步骤 1:创建目录(项目级)
1 | mkdir -p .claude/agents |
步骤 2:创建配置文件
创建文件 .claude/agents/code-reviewer.md:
1 | --- |
5.3.3. 测试与调优
步骤 1:验证子代理已加载
1 | › /agents |
你应该能在列表中看到 code-reviewer。
步骤 2:显式调用测试
1 | › 用 code-reviewer 子代理审查一下我最近的代码变更 |
步骤 3:观察输出
Claude 会委派任务给 code-reviewer 子代理,子代理会:
- 执行
git diff获取变更 - 分析每个修改的文件
- 输出结构化的审查报告
步骤 4:根据实际效果调优
如果发现子代理的输出不符合预期,可以调整配置文件中的系统提示词。常见的调优方向:
- 审查清单不够全面 → 补充更多检查项
- 输出格式不够清晰 → 调整输出格式模板
- 漏掉了某类问题 → 在提示词中强调该类问题
5.3.4. 本节小结
创建自定义子代理的流程:
| 步骤 | 操作 | 产出 |
|---|---|---|
| 需求分析 | 明确子代理的职责和边界 | 功能清单 |
| 编写配置 | 创建 .claude/agents/xxx.md | 配置文件 |
| 测试验证 | /agents 查看 + 显式调用 | 确认可用 |
| 迭代调优 | 根据输出效果调整提示词 | 最终版本 |
5.4. 本章总结与子代理速查
本章我们学习了子代理(Subagents)机制——创建专门的 “专家” 来处理特定类型的任务。核心思想是:让专业的人做专业的事,同时保持主对话的上下文清洁。
5.4.1. 场景速查:遇到这些情况,直接用
场景 1:创建只读探索子代理
创建 .claude/agents/explorer.md:
1 | --- |
场景 2:创建测试运行子代理
创建 .claude/agents/test-runner.md:
1 | --- |
场景 3:创建文档生成子代理
创建 .claude/agents/doc-writer.md:
1 | --- |
场景 4:查看所有可用子代理
1 | › /agents |
场景 5:显式调用特定子代理
1 | › 用 code-reviewer 子代理审查这段代码 |








