如果您需要多个代理并行工作并相互通信,请参阅 agent teams。Subagents 在单个会话中工作;agent teams 跨多个会话进行协调。
- 保留上下文,通过将探索和实现保持在主对话之外
- 强制约束,通过限制 subagent 可以使用的工具
- 跨项目重用配置,使用用户级 subagents
- 专门化行为,为特定领域使用专注的系统提示
- 控制成本,通过将任务路由到更快、更便宜的模型(如 Haiku)
内置 subagents
Claude Code 包括内置 subagents,Claude 在适当时会自动使用。每个都继承父对话的权限,并有额外的工具限制。- Explore
- Plan
- General-purpose
- Other
一个快速的、只读的代理,针对搜索和分析代码库进行了优化。
- 模型:Haiku(快速、低延迟)
- 工具:只读工具(拒绝访问 Write 和 Edit 工具)
- 目的:文件发现、代码搜索、代码库探索
快速入门:创建您的第一个 subagent
Subagents 在带有 YAML frontmatter 的 Markdown 文件中定义。您可以 手动创建它们 或使用/agents 命令。
本演练指导您使用 /agent 命令创建用户级 subagent。该 subagent 审查代码并为代码库建议改进。
1
打开 subagents 界面
在 Claude Code 中,运行:
2
创建新的用户级代理
选择 Create new agent,然后选择 User-level。这会将 subagent 保存到
~/.claude/agents/,以便在所有项目中可用。3
使用 Claude 生成
选择 Generate with Claude。出现提示时,描述 subagent:Claude 生成系统提示和配置。按
e 在编辑器中打开它,如果您想自定义它。4
选择工具
对于只读审查者,取消选择除 Read-only tools 之外的所有内容。如果您保持所有工具被选中,subagent 会继承主对话可用的所有工具。
5
选择模型
选择 subagent 使用的模型。对于此示例代理,选择 Sonnet,它在分析代码模式的能力和速度之间取得平衡。
6
选择颜色
为 subagent 选择背景颜色。这有助于您在 UI 中识别哪个 subagent 正在运行。
7
保存并尝试
保存 subagent。它立即可用(无需重启)。尝试它:Claude 委托给您的新 subagent,它扫描代码库并返回改进建议。
配置 subagents
使用 /agents 命令
/agents 命令提供了一个交互式界面来管理 subagents。运行 /agents 来:
- 查看所有可用的 subagents(内置、用户、项目和插件)
- 使用引导式设置或 Claude 生成创建新 subagents
- 编辑现有 subagent 配置和工具访问
- 删除自定义 subagents
- 查看当存在重复项时哪些 subagents 处于活动状态
选择 subagent 范围
Subagents 是带有 YAML frontmatter 的 Markdown 文件。根据范围将它们存储在不同的位置。当多个 subagents 共享相同的名称时,优先级较高的位置获胜。
项目 subagents(
.claude/agents/)非常适合特定于代码库的 subagents。将它们检入版本控制,以便您的团队可以协作使用和改进它们。
用户 subagents(~/.claude/agents/)是在所有项目中可用的个人 subagents。
CLI 定义的 subagents 在启动 Claude Code 时作为 JSON 传递。它们仅存在于该会话中,不会保存到磁盘,使其对快速测试或自动化脚本很有用:
--agents 标志接受与 frontmatter 相同字段的 JSON。对系统提示使用 prompt(等同于基于文件的 subagents 中的 markdown 正文)。有关完整 JSON 格式,请参阅 CLI 参考。
插件 subagents 来自您已安装的 plugins。它们与您的自定义 subagents 一起出现在 /agents 中。有关创建插件 subagents 的详细信息,请参阅 插件组件参考。
编写 subagent 文件
Subagent 文件使用 YAML frontmatter 进行配置,然后是 Markdown 中的系统提示:Subagents 在会话启动时加载。如果您通过手动添加文件来创建 subagent,请重启您的会话或使用
/agents 立即加载它。支持的 frontmatter 字段
以下字段可以在 YAML frontmatter 中使用。仅name 和 description 是必需的。
选择模型
model 字段控制 subagent 使用的 AI 模型:
- 模型别名:使用可用的别名之一:
sonnet、opus或haiku - inherit:使用与主对话相同的模型
- 省略:如果未指定,默认为
inherit(使用与主对话相同的模型)
控制 subagent 能力
您可以通过工具访问、权限模式和条件规则来控制 subagents 可以做什么。可用工具
Subagents 可以使用 Claude Code 的任何 内部工具。默认情况下,subagents 继承主对话的所有工具,包括 MCP 工具。 要限制工具,使用tools 字段(允许列表)或 disallowedTools 字段(拒绝列表):
权限模式
permissionMode 字段控制 subagent 如何处理权限提示。Subagents 继承主对话的权限上下文,但可以覆盖模式。
如果父级使用
bypassPermissions,这将优先并且无法被覆盖。
将 skills 预加载到 subagents
使用skills 字段在启动时将 skill 内容注入到 subagent 的上下文中。这为 subagent 提供领域知识,而无需在执行期间发现和加载 skills。
这与 在 subagent 中运行 skill 相反。使用 subagent 中的
skills,subagent 控制系统提示并加载 skill 内容。使用 skill 中的 context: fork,skill 内容被注入到您指定的代理中。两者都使用相同的底层系统。启用持久内存
memory 字段为 subagent 提供了一个在对话之间存活的持久目录。Subagent 使用此目录随时间积累知识,例如代码库模式、调试见解和架构决策。
启用内存时:
- Subagent 的系统提示包括读取和写入内存目录的说明。
- Subagent 的系统提示还包括内存目录中
MEMORY.md的前 200 行,以及如果超过 200 行则策划MEMORY.md的说明。 - Read、Write 和 Edit 工具会自动启用,以便 subagent 可以管理其内存文件。
持久内存提示
-
user是推荐的默认范围。当 subagent 的知识仅与特定代码库相关时,使用project或local。 - 要求 subagent 在开始工作前查阅其内存:“Review this PR, and check your memory for patterns you’ve seen before.”
- 要求 subagent 在完成任务后更新其内存:“Now that you’re done, save what you learned to your memory.” 随着时间的推移,这会构建一个知识库,使 subagent 更有效。
-
直接在 subagent 的 markdown 文件中包含内存说明,以便它主动维护自己的知识库:
使用 hooks 的条件规则
为了更动态地控制工具使用,使用PreToolUse hooks 在执行前验证操作。当您需要允许工具的某些操作同时阻止其他操作时,这很有用。
此示例创建一个仅允许只读数据库查询的 subagent。PreToolUse hook 在每个 Bash 命令执行前运行 command 中指定的脚本:
禁用特定 subagents
您可以通过将 subagents 添加到您的 settings 中的deny 数组来防止 Claude 使用特定 subagents。使用格式 Task(subagent-name),其中 subagent-name 与 subagent 的 name 字段匹配。
--disallowedTools CLI 标志:
为 subagents 定义 hooks
Subagents 可以定义在 subagent 生命周期期间运行的 hooks。有两种方式配置 hooks:- 在 subagent 的 frontmatter 中:定义仅在该 subagent 活动时运行的 hooks
- 在
settings.json中:定义在 subagents 启动或停止时在主会话中运行的 hooks
Subagent frontmatter 中的 Hooks
直接在 subagent 的 markdown 文件中定义 hooks。这些 hooks 仅在该特定 subagent 活动时运行,并在其完成时清理。 支持所有 hook 事件。subagents 最常见的事件是:
此示例使用
PreToolUse hook 验证 Bash 命令,并使用 PostToolUse 在文件编辑后运行 linter:
Stop hooks 会自动转换为 SubagentStop 事件。
用于 subagent 事件的项目级 hooks
在settings.json 中配置 hooks,以响应主会话中的 subagent 生命周期事件。
SubagentStart 支持匹配器按名称针对特定代理类型。SubagentStop 对所有 subagent 完成触发,无论匹配器值如何。此示例仅在 db-agent subagent 启动时运行设置脚本,并在任何 subagent 停止时运行清理脚本:
使用 subagents
理解自动委托
Claude 根据您请求中的任务描述、subagent 配置中的description 字段和当前上下文自动委托任务。为了鼓励主动委托,在您的 subagent 的 description 字段中包含”use proactively”之类的短语。
您也可以明确请求特定的 subagent:
在前台或后台运行 subagents
Subagents 可以在前台(阻塞)或后台(并发)运行:- 前台 subagents 阻塞主对话直到完成。权限提示和澄清问题(如
AskUserQuestion)会传递给您。 - 后台 subagents 在您继续工作时并发运行。启动前,Claude Code 会提示您输入 subagent 需要的任何工具权限,确保它具有必要的批准。一旦运行,subagent 继承这些权限并自动拒绝任何未预先批准的内容。如果后台 subagent 需要提出澄清问题,该工具调用会失败,但 subagent 继续。MCP 工具在后台 subagents 中不可用。
- 要求 Claude “run this in the background”
- 按 Ctrl+B 将运行中的任务放在后台
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS 环境变量设置为 1。请参阅 环境变量。
常见模式
隔离高容量操作
subagents 最有效的用途之一是隔离产生大量输出的操作。运行测试、获取文档或处理日志文件可能会消耗大量上下文。通过将这些委托给 subagent,详细输出保留在 subagent 的上下文中,而只有相关摘要返回到您的主对话。运行并行研究
对于独立的调查,生成多个 subagents 同时工作:链接 subagents
对于多步骤工作流,要求 Claude 按顺序使用 subagents。每个 subagent 完成其任务并将结果返回给 Claude,然后将相关上下文传递给下一个 subagent。在 subagents 和主对话之间选择
在以下情况下使用 主对话:- 任务需要频繁的来回或迭代细化
- 多个阶段共享重要上下文(规划 → 实现 → 测试)
- 您正在进行快速、有针对性的更改
- 延迟很重要。Subagents 从头开始,可能需要时间来收集上下文
- 任务产生您不需要在主上下文中的详细输出
- 您想强制执行特定的工具限制或权限
- 工作是自包含的,可以返回摘要
Subagents 无法生成其他 subagents。如果您的工作流需要嵌套委托,请使用 Skills 或从主对话 链接 subagents。
管理 subagent 上下文
恢复 subagents
每个 subagent 调用都会创建一个具有新鲜上下文的新实例。要继续现有 subagent 的工作而不是重新开始,要求 Claude 恢复它。 恢复的 subagents 保留其完整的对话历史,包括所有以前的工具调用、结果和推理。Subagent 从停止的地方继续,而不是从头开始。 当 subagent 完成时,Claude 接收其代理 ID。要恢复 subagent,要求 Claude 继续之前的工作:~/.claude/projects/{project}/{sessionId}/subagents/ 的成绩单文件中找到 ID。每个成绩单存储为 agent-{agentId}.jsonl。
Subagent 成绩单独立于主对话持久化:
- 主对话压缩:当主对话压缩时,subagent 成绩单不受影响。它们存储在单独的文件中。
- 会话持久化:Subagent 成绩单在其会话中持久化。您可以通过恢复相同会话来在重启 Claude Code 后 恢复 subagent。
- 自动清理:成绩单根据
cleanupPeriodDays设置进行清理(默认:30 天)。
自动压缩
Subagents 支持使用与主对话相同的逻辑进行自动压缩。默认情况下,自动压缩在大约 95% 容量时触发。要更早触发压缩,请将CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 设置为较低的百分比(例如,50)。有关详细信息,请参阅 环境变量。
压缩事件记录在 subagent 成绩单文件中:
preTokens 值显示压缩发生前使用了多少令牌。
示例 subagents
这些示例演示了构建 subagents 的有效模式。将它们用作起点,或使用 Claude 生成自定义版本。代码审查者
一个只读 subagent,审查代码而不修改它。此示例展示了如何设计一个具有有限工具访问权限(无 Edit 或 Write)和详细提示的专注 subagent,该提示明确指定要查找的内容以及如何格式化输出。调试器
一个既可以分析又可以修复问题的 subagent。与代码审查者不同,这个包括 Edit,因为修复错误需要修改代码。提示提供了从诊断到验证的清晰工作流。数据科学家
一个用于数据分析工作的特定领域 subagent。此示例展示了如何为典型编码任务之外的专门工作流创建 subagents。它明确设置model: sonnet 以获得更强大的分析。
数据库查询验证器
一个允许 Bash 访问但验证命令以仅允许只读 SQL 查询的 subagent。此示例展示了当您需要比tools 字段提供的更精细的控制时,如何使用 PreToolUse hooks。
command 字段匹配:
tool_input.command 中。退出代码 2 阻止操作并将错误消息反馈给 Claude。有关退出代码和 Hook 输入 的完整输入架构的详细信息,请参阅 Hooks。
后续步骤
现在您了解了 subagents,请探索这些相关功能:- 使用插件分发 subagents 以在团队或项目中共享 subagents
- 以编程方式运行 Claude Code 使用 Agent SDK 进行 CI/CD 和自动化
- 使用 MCP servers 为 subagents 提供对外部工具和数据的访问