Claude Code Sub-Agents 指南
Subagents 是 Claude Code 中处理特定类型任务的专门 AI 助手。每个 subagent 在自己独立的 context window 中运行,具有自定义系统提示、特定的工具访问权限和独立的权限控制。当 Claude 遇到与 subagent 描述相匹配的任务时,它会委托给该 subagent,subagent 独立工作后返回结果。
本文将从创建方法、使用场景和最佳实践三个维度,全面介绍 Claude Code Sub-Agents 的使用。
一、如何创建 Sub-Agent
1.1 使用 /agents 命令(推荐方式)
/agents 命令提供了交互式界面来管理 subagents,这是推荐的创建方式:
1 | /agents |
在交互界面中可以:
- 查看所有可用的 subagents(内置、用户、项目和插件)
- 使用引导式设置或 Claude 生成创建新的 subagents
- 编辑现有 subagent 配置和工具访问权限
- 删除自定义 subagents
创建步骤示例:
选择 Create new agent
选择范围:User-level(用户级)或 Project-level(项目级)
选择 Generate with Claude 让 Claude 自动生成配置
描述你的 subagent,例如:
1
2A code improvement agent that scans files and suggests improvements
for readability, performance, and best practices.选择工具权限(只读审查者只需选择 Read-only tools)
选择模型(Sonnet 平衡能力和速度,Haiku 更快更便宜)
保存后立即可用,无需重启
1.2 手动创建 YAML Frontmatter 文件
Subagent 文件使用 YAML frontmatter 进行配置,后跟 Markdown 格式的系统提示:
1 | --- |
1.3 文件存储位置与优先级
| 位置 | 范围 | 优先级 | 说明 |
|---|---|---|---|
--agents CLI 标志 |
当前会话 | 1(最高) | 启动时传递 JSON |
.claude/agents/ |
当前项目 | 2 | 提交到版本控制,团队共享 |
~/.claude/agents/ |
所有项目 | 3 | 个人 subagents,跨项目可用 |
插件的 agents/ 目录 |
插件启用处 | 4(最低) | 随插件安装 |
项目级 subagents(.claude/agents/)适合特定于代码库的 subagents,建议提交到版本控制让团队协作使用。
用户级 subagents(~/.claude/agents/)适合个人在所有项目中复用的 subagents。
1.4 完整配置字段说明
以下是 YAML frontmatter 支持的所有字段:
| 字段 | 必需 | 说明 |
|---|---|---|
name |
✅ | 唯一标识符,使用小写字母和连字符 |
description |
✅ | 描述何时应该委托给此 subagent |
model |
❌ | 使用的模型:sonnet、opus、haiku、完整模型 ID 或 inherit(默认) |
tools |
❌ | 允许使用的工具列表。省略则继承所有工具 |
disallowedTools |
❌ | 禁用的工具列表 |
permissionMode |
❌ | 权限模式:default、acceptEdits、dontAsk、bypassPermissions、plan |
maxTurns |
❌ | subagent 停止前最大执行轮数 |
skills |
❌ | 启动时加载到上下文的技能 |
mcpServers |
❌ | 此 subagent 可用的 MCP 服务器 |
hooks |
❌ | 生命周期钩子 |
memory |
❌ | 持久化内存范围:user、project、local |
background |
❌ | 设为 true 总是作为后台任务运行 |
effort |
❌ | 努力级别:low、medium、high、max |
isolation |
❌ | 设为 worktree 在隔离的 git worktree 中运行 |
1.5 模型选择策略
- Haiku:快速、低延迟,适合只读探索、代码搜索
- Sonnet:平衡能力和速度,适合大多数分析任务
- Opus:最强能力,适合复杂推理任务
- inherit:继承主对话的模型(默认)
1.6 工具控制
使用 tools 字段(白名单):
1 | tools: |
使用 disallowedTools 字段(黑名单):
1 | disallowedTools: |
优先级:先应用 disallowedTools,再解析 tools。
1.7 持久化内存
通过 memory 字段启用跨会话的知识积累:
1 | memory: project |
| 范围 | 位置 | 适用场景 |
|---|---|---|
user |
~/.claude/agent-memory/<name>/ |
跨项目的通用知识 |
project |
.claude/agent-memory/<name>/ |
项目特定知识,可版本控制 |
local |
.claude/agent-memory-local/<name>/ |
项目特定但不应提交的知识 |
二、Sub-Agent 使用场景
2.1 内置 Subagents
Claude Code 包含以下内置 subagents:
Explore Agent
- 模型:Haiku(快速、低延迟)
- 工具:只读工具(拒绝 Write 和 Edit)
- 用途:文件发现、代码搜索、代码库探索
- 调用方式:Claude 自动委托,支持三种彻底程度:
quick、medium、very thorough
Plan Agent
- 模型:继承主对话
- 工具:只读工具
- 用途:Plan mode 下收集上下文的研究代理
General-purpose Agent
- 模型:继承主对话
- 工具:所有工具
- 用途:复杂研究、多步骤操作、代码修改
2.2 典型使用场景
场景一:隔离大量输出的操作
运行测试、获取文档、处理日志文件等操作会产生大量输出,消耗大量上下文。通过委托给 subagent,冗长的输出保留在 subagent 的上下文中,只有相关摘要返回到主对话。
1 | Run the test suite in the background and report any failures |
场景二:并行研究
对于独立的调查任务,可以同时启动多个 subagents:
1 | In parallel: |
场景三:链式工作流
对于多步骤工作流,可以按顺序使用 subagents:
1 | 1. Use code-reviewer to review the changes in src/auth/ |
场景四:强制执行约束
通过限制 subagent 可用的工具来强制执行特定约束:
1 |
|
场景五:成本控制
将任务路由到更快、更便宜的模型:
1 |
|
2.3 调用方式
自动委托
Claude 根据任务描述和 subagent 的 description 字段自动决定是否委托。在描述中包含 “use proactively” 等短语可鼓励主动委托。
自然语言调用
1 | Use the code-reviewer agent to review this PR |
@-mention 调用
1 | @code-reviewer review the changes in src/ |
会话级启动
1 | claude --agent code-reviewer |
或在 .claude/settings.json 中设置默认:
1 | { |
2.4 前台与后台运行
- 前台 subagents:阻塞主对话直到完成,权限提示和澄清问题会传递给你
- 后台 subagents:并发运行,你可以继续工作
启动后台任务的方式:
- 请求 Claude “run this in the background”
- 按 Ctrl+B 将运行中的任务放入后台
三、最佳实践
3.1 编写清晰的描述
Claude 使用 description 字段决定何时委托任务。描述应该清晰、具体:
1 | # 好的描述 |
3.2 选择合适的范围
- 项目级:特定于代码库的 subagents,如了解项目架构的审查者
- 用户级:跨项目复用的通用 subagents,如通用的代码风格审查者
- CLI 定义:快速测试或自动化脚本
3.3 限制工具访问
遵循最小权限原则:
1 | # 只读审查者 |
3.4 利用持久化内存
在 subagent 的系统提示中包含内存维护指令:
1 | --- |
3.5 使用 Hooks 进行条件验证
当需要比 tools 字段更细粒度的控制时,使用 PreToolUse hooks:
1 |
|
验证脚本示例:
1 |
|
3.6 选择模型的经济性
| 任务类型 | 推荐模型 | 原因 |
|---|---|---|
| 代码搜索、文件发现 | Haiku | 快速、低成本 |
| 代码审查、分析 | Sonnet | 平衡能力和速度 |
| 复杂推理、架构设计 | Opus | 最强推理能力 |
3.7 何时使用 Subagent vs 主对话
使用主对话:
- 任务需要频繁的来回交互或迭代优化
- 多个阶段共享大量上下文(规划 → 实现 → 测试)
- 做快速、针对性的更改
- 延迟很重要(subagents 需要时间收集上下文)
使用 Subagent:
- 任务产生大量你不需要在主上下文中的输出
- 想强制执行特定的工具限制或权限
- 工作是独立的,可以返回摘要
3.8 禁用特定 Subagents
在 settings.json 中:
1 | { |
四、示例 Subagents
4.1 代码审查者
1 | --- |
4.2 调试者
1 | --- |
4.3 数据科学家
1 | --- |
五、总结
Subagents 是 Claude Code 的强大特性,通过以下方式提升开发效率:
- 上下文隔离:将探索和实现保持在主对话之外,保留宝贵的上下文空间
- 约束执行:通过限制工具访问强制执行安全边界
- 配置复用:通过用户级 subagents 跨项目共享配置
- 行为专业化:为特定领域使用专注的系统提示
- 成本控制:将任务路由到更便宜的模型如 Haiku
创建 subagent 时,记住:
- 编写清晰的
description让 Claude 知道何时使用 - 根据任务选择合适的工具权限
- 利用
memory字段实现跨会话学习 - 使用 hooks 实现细粒度的条件控制
通过合理使用 subagents,你可以让 Claude Code 成为一个更加高效、安全的编程助手。