news 2026/6/1 11:38:00

HoRain云--Claude Code 子代理(Subagent)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--Claude Code 子代理(Subagent)

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

为什么要使用子代理

子代理 vs 多代理

内置子代理

1、Explore(探索代理)

2、Plan(规划代理)

3、General-purpose(通用代理)

4、其他内部代理

创建你的第一个子代理

1、打开子代理管理界面

2、选择创建用户级子代理

3、描述代理的职责

4、配置工具权限与模型

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

6、使用刚创建的代理

子代理的作用范围

配置文件结构

实例

完整字段说明

tools 与 disallowedTools 的区别

实例

实例

权限模式

持久记忆(Memory)

实例

worktree 隔离模式

实例

后台运行(Background)

生命周期钩子(Hooks)

实例

禁用特定子代理

实例

如何调用子代理

1、自动委托

2、显式调用

典型使用模式

1、隔离高输出任务

2、并行研究

3、串联子代理流水线

4、并行代码审查

什么时候该用子代理

最佳实践


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

子代理运行在独立的上下文窗口中,每个子代理都可以拥有独立的系统提示、指定的模型、明确的工具访问权限、独立的权限模式,以及跨会话的持久记忆。当 Claude 判断你的请求符合某个子代理的描述时,会自动将任务委托给它,由子代理独立完成后返回结果。

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


为什么要使用子代理

子代理的核心价值在于隔离 + 专业化,主要体现在以下几个方面:

保留主对话上下文:把探索、日志分析等"重任务"放到子代理中,主对话只接收结论摘要,不被大量中间输出淹没。研究表明,并行运行三个子代理分析 5 万行项目约需 45 秒,而串行执行需要 3 分钟。

强制执行约束:通过工具白名单或黑名单限制子代理的能力,例如只读分析、禁止执行危险命令。

行为专业化:为特定领域(代码审查、调试、数据分析)设计专用 AI,在系统提示中明确指出代理的能力边界,避免不必要的调用。

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

跨项目复用:用户级子代理一次配置,所有项目可用。


子代理 vs 多代理

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

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

内置子代理

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

1、Explore(探索代理)

用于只读搜索与分析代码库。模型默认使用 Haiku(速度快、延迟低),只开放只读工具(不能 Edit / Write)。当 Claude 需要查看代码但不修改代码时,会自动使用 Explore 代理。支持不同探索深度:quickmediumvery thorough

2、Plan(规划代理)

在计划模式下收集代码库信息,帮助 Claude 理解项目结构,为后续方案制定积累上下文。只开放只读工具,在不产生嵌套代理的前提下安全地收集规划所需信息。

3、General-purpose(通用代理)

用于复杂、多步骤任务,开放全部工具,继承主对话的模型。适合"看 + 改 + 推理"的综合场景,以及需要多步骤代码修改的任务。

4、其他内部代理

代理名称说明
Bash在独立上下文中运行 Shell 命令
statusline-setup配置终端状态栏显示
Claude Code Guide解答 Claude Code 使用相关问题

创建你的第一个子代理

1、打开子代理管理界面

在 Claude Code 中执行以下命令,打开完整的子代理管理界面:

/agents

该界面提供所有子代理管理能力:查看全部可用代理(内置 / 用户级 / 项目级 / 插件)、创建新代理、编辑已有代理,以及在同名冲突时查看哪个版本实际生效。

2、选择创建用户级子代理

在界面中选择Create new agent:

然后选择Project (.claude/agents/),代理文件会保存到当前目录的 .claude/agents/ 目录下,如果选择~/.claude/agents/目录,则对所有项目生效:

使用 Claude 推荐的:

3、描述代理的职责

我们可以直接用自然语言告诉 Claude 这个代理要做什么,Claude 会自动生成系统提示和初始配置。例如:

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

生成完成后,按e键可以手动编辑所有配置内容。

4、配置工具权限与模型

直接选 Contiune 然后回车:

接下来的选默认回车就好。

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

6、使用刚创建的代理

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

代理会在独立上下文中运行,完成后将结果摘要返回给主对话。


子代理的作用范围

子代理本质上是带 YAML frontmatter 的 Markdown 文件,存放位置决定了它的作用范围和优先级:

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

当同名子代理在不同位置都存在时,优先级高的会覆盖低的。可通过/agents命令查看当前哪个版本实际生效。

选择存放位置的建议:项目代理(.claude/agents/)可以跟随代码一起提交,让团队共享;用户代理(~/.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.
# 必填:决定 Claude 何时自动调用此代理,建议写成"何时调用 + 能做什么"
tools: Read, Grep, Glob # 工具白名单(只能使用这些工具)
model: sonnet # 指定模型:haiku / sonnet / opus / inherit
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 是否以及何时自动调用该代理完全依赖于此,务必写清楚使用场景
tools可选工具白名单;设置后只能使用列出的工具,MCP 工具也会被排除
disallowedTools可选工具黑名单;继承主对话全部工具,但排除列出的工具(MCP 工具保留)
model可选指定模型,可填haikusonnetopus、完整模型 ID,或inherit(默认,继承主对话)
permissionMode可选权限行为控制,见下方权限模式章节
memory可选持久记忆范围:user/project/local,见下方记忆章节
background可选设为true时,该代理始终以后台方式运行(不阻塞主对话)
isolation可选设为worktree时,在临时 git worktree 中运行,与主仓库完全隔离
skills可选在此代理启动时自动加载的 Skills 列表
hooks可选生命周期钩子:SubagentStart/SubagentStop/PreToolUse/PostToolUse

tools 与 disallowedTools 的区别

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

实例

# 示例一:只允许只读操作(使用 tools 白名单)
---
name: safe-researcher
description: Research agent with read-only access. Use when analyzing code without making changes.
tools: Read, Grep, Glob, Bash # 只开放这四个工具,Write 和 Edit 不在白名单内无法使用
---

实例

# 示例二:继承所有工具但禁止写文件(使用 disallowedTools 黑名单)
---
name: no-writes
description: Analysis agent that inherits all tools except file writes.
disallowedTools: Write, Edit # 保留 MCP 工具,仅排除 Write 和 Edit
---


权限模式

通过permissionMode字段控制子代理执行操作时的权限行为:

模式行为适用场景
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. Invoke when reviewing code changes.
memory: user # 用户级记忆:跨项目积累审查经验
---

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

在对话中控制记忆的使用方式:


worktree 隔离模式

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

实例

---
name: experimental-refactor
description: Tries refactoring approaches in an isolated worktree.
Use when exploring risky refactoring that shouldn't affect main branch.
isolation: worktree # 在临时 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.
Summarize what you changed and whether the approach was successful.


后台运行(Background)

子代理支持前台和后台两种运行方式,行为不同:

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

Claude 会根据任务特性自动判断使用前台还是后台。你也可以手动控制:

如需彻底禁用后台任务功能,设置以下环境变量:

export CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1

如需统一设置所有子代理使用的模型(例如主对话用 Opus 做复杂推理,子代理用 Sonnet 节省成本):

export CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4-6"

生命周期钩子(Hooks)

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

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

高级用法:通过PreToolUse钩子动态控制工具行为。例如,让数据库代理只允许执行只读 SQL 查询,任何写操作都被脚本拦截:

实例

---
name: db-analyst
description: Read-only database analysis agent. Use for querying and reporting, never for writes.
tools: Bash
# 在 .claude/settings.json 中配置钩子:
# PreToolUse on Bash -> validate-readonly-query.sh
# 脚本检测到非 SELECT 操作时以退出码 2 返回,阻止该命令执行
---

You are a database analyst. Only run SELECT queries.
Never run INSERT, UPDATE, DELETE, DROP, or any DDL statements.


禁用特定子代理

如果你不希望 Claude 自动调用某个内置子代理,可以在.claude/settings.json中将其加入禁用列表:

实例

{
"subagents": {
"deny": ["explore", "plan"] // 禁用 explore 和 plan 内置代理
// 禁用后 Claude 不会自动调用它们,但你仍可手动显式调用
}
}


如何调用子代理

1、自动委托

Claude 会根据description字段自动判断任务是否适合某个子代理,无需在提示中手动指定:

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

2、显式调用

在提示中明确指定要使用哪个代理:

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

典型使用模式

1、隔离高输出任务

将产生大量中间输出的任务(如运行测试、扫描日志)放到子代理中,主对话只接收精简的结论:

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

2、并行研究

同时启动多个子代理处理不同模块,大幅缩短分析时间:

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

3、串联子代理流水线

将复杂工作流拆分为多个专职代理,按顺序传递结果:

先用 code-reviewer 找出问题,再用 optimizer 子代理修复这些问题

串联工作流的设计原则:每个代理只做一件事,并通过清晰的"输入 → 处理 → 输出 → 交接信号"定义接口。以下是一个生产实践中的三段式流水线示例:

通过SubagentStop钩子监听状态文件,自动触发下一个代理,无需手动干预。

4、并行代码审查

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

什么时候该用子代理

适合用子代理的场景:

适合用主对话的场景:

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


最佳实践

description 怎么写

工具权限设计(最小权限原则)

单一职责

系统提示建议

并行 vs 串行的选择

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 11:30:41

智能电视观影新体验:用Jellyfin打造你的专属家庭影院

智能电视观影新体验&#xff1a;用Jellyfin打造你的专属家庭影院 【免费下载链接】jellyfin-androidtv Android TV Client for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-androidtv 你是否曾为电视上的媒体播放体验感到困扰&#xff1f;各种流媒体…

作者头像 李华
网站建设 2026/6/1 11:27:59

深度实战AMD硬件调试:SMUDebugTool完全指南

深度实战AMD硬件调试&#xff1a;SMUDebugTool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/6/1 11:24:37

OpencvSharp 算子学习教案之 - Cv2.SetNumThreads

OpencvSharp 算子学习教案之 - Cv2.SetNumThreads 大家好&#xff0c;Opencv在很多工程项目中都会用到&#xff0c;而OpencvSharp则是以C#开发与实现的Opencv操作库&#xff0c;对.NET开发人员友好&#xff0c;但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳&#x…

作者头像 李华
网站建设 2026/6/1 11:22:00

PHP与Redis缓存实践完整方案

PHP与Redis缓存实践完整方案 Redis在PHP项目里太常用了。缓存、队列、计数器、排行榜&#xff0c;各种场景都能用上。今天写一份完整的Redis实践指南。 先从最基础的连接和基本操作说起。 php // 连接Redis $redis new Redis(); $redis->connect(127.0.0.1, 6379); // 如…

作者头像 李华