子智能体启动时知道什么,最后交回什么
你问 Claude 一个牵涉整个代码库的问题,它会主动把搜索交给 Explore。Explore 在自己的上下文窗口里读文件,读完把摘要放进你的对话。它打开过的文件、跑过的命令,都不会进来。
子智能体看不到你们之前的对话,也看不到你调用过的技能和 Claude 已经读过的文件。它的工具和权限单独设定。系统提示词由这个智能体自己的提示词和 Claude Code 附上的环境信息组成,不是 Claude Code 本身的系统提示词(见 Anthropic 的子智能体文档)。
CLAUDE.md 文件倒是会跟着加载,一起带上的还有一份 git status 快照,以及它预载技能的全文。所以 CLAUDE.md 写得越长,每个自定义子智能体启动时重复加载的内容就越多,占用的上下文也越多。内置的 Explore 和 Plan 不加载 CLAUDE.md,也不带 git 快照。
Claude 拿你的请求对照每个子智能体的描述和当前上下文
新的上下文窗口打开,里面是这个智能体自己的提示词和工具
子智能体在后台运行
这期间你可以接着忙。它需要权限时,提示会出现在你的主会话里,并写明是哪个子智能体在请求。
来源:Claude Code 文档:创建自定义子智能体 (2026年11月3日 查阅)
| 子智能体 | Claude 用它做什么 | 工具 |
|---|---|---|
| Explore | 搜索和分析代码库,不做任何修改 | 只读:禁用 Write 和 Edit |
| Plan | 在计划模式下先收集背景,再给出计划 | 只读:禁用 Write 和 Edit |
| General-purpose | 既要探索又要修改,或者步骤环环相扣的任务 | 子智能体能用的全部工具 |
动手做一个:示例智能体文件
整个定义就是一个文件。顶部的 YAML 写名称、描述,以及工具、模型这类限制,下面的 Markdown 正文就是子智能体的系统提示词。必填的只有 name 和 description。其余可选字段,从 maxTurns、skills 到 memory、isolation,字段说明里都列了。
下面的示例是我们为这篇文章写的,用来检查 docs 文件夹里的链接,正是 Anthropic 建议交给 Haiku 的那种简单任务。它的 tools 一行只列了 Read、Grep 和 Glob,改文件这件事由 Claude Code 直接挡住。要是只在提示词里写一句“不要修改任何文件”,那只是请求,不算限制。
---
name: docs-link-checker
description: Checks relative links and anchors in Markdown files under docs/ and reports broken ones. Use proactively after editing files in docs/.
tools: Read, Grep, Glob
model: haiku
---
You check links in the Markdown files you are given, or in docs/ if none are named.
1. Find every relative link and every #anchor.
2. Confirm each target file exists and each anchor matches a heading in it.
3. Skip links that start with http:// or https://.
Reply with one line per broken link: file, line, target and the reason.
If every link resolves, reply "All links resolve" and nothing else.
name是 Claude 和钩子看到的标识,不能有冒号,也不必和文件名一致。tools是允许清单。不写这一项,子智能体会继承子智能体能用的全部工具。model可以填sonnet、opus、haiku、fable、完整的模型 ID,也可以填inherit,表示沿用主对话的模型。
- 团队共用的智能体,放进项目里的
.claude/agents/文件夹。想在所有项目里都能用,就放进~/.claude/agents/。 - 把示例存进去,文件名叫
docs-link-checker.md。 - 点名使用,比如说“对 docs/ 使用 docs-link-checker 子智能体”。
智能体文件放在哪里,出了问题先查什么
输入 /agents 只看到一行提醒,没有弹出菜单,这不是出了故障。在当前版本里,这个命令只会提醒你去找 Claude,或者直接编辑 .claude/agents/ 和 ~/.claude/agents/。原来那个交互向导,只存在于 v2.1.197 及更早的版本。
让 Claude 来写,也是文档快速上手里走的路。说清楚要什么样的智能体、存在哪里,比如放在 ~/.claude/agents/、只读、用 Sonnet 的代码改进助手。写好之后打开文件,看文件头和你的要求是否一致,包括模型选得对不对。
Claude Code 会从五个地方读取智能体文件,两个定义重名时,优先级高的位置胜出。同一个 .claude/agents/ 文件夹及其子文件夹里,就没有这种排序了:两个文件声明了同一个名字,Claude Code 只加载其中一个,挑哪个取决于文件系统返回的顺序。名字别重复。
字段拼错了,不会有任何提示。字段名用驼峰写法,Claude Code 碰到不认识的字段会直接忽略,也不报错。maxTurns 或 permissionMode 好像不起作用时,先查拼写。
插件能把智能体连同技能、钩子和 MCP 服务器一起带到别的团队,但插件里的智能体还有一处要注意。出于安全考虑,它们会忽略 hooks、mcpServers 和 permissionMode 三个字段,写在这几项里的设置不会生效。
2025 年那条发布帖在 X 官方嵌入卡片里的截图,拍摄于 2026 年 11 月 3 日,时间为美国太平洋时间,没有收入帖子里的视频。点击截图可到 X 上打开原帖。
Claude 怎样挑子智能体,你又怎样自己挑
Claude 决定交给哪个子智能体时会看几样东西,其中只有 description 是你事先写好的。像示例那样,在描述末尾写上“Use proactively”和适用场景,Claude 就更可能主动用它。
描述还是要写短。所有子智能体的描述加起来超过 15,000 个 token,Claude Code 启动时就会警告,不过照样全部加载。
- 直接说:“用 test-runner 子智能体修复失败的测试”。Claude 通常会照办,但用不用还是由它决定。
- 输入
@,从联想列表里选中它,跟引用文件一样。这样运行的一定是你选的那个,不过整条消息仍然交给 Claude,任务提示词也由 Claude 来写。 - 用
claude --agent code-reviewer启动会话,主线程就变成这个智能体,套用它的工具限制和模型。在.claude/settings.json里设置agent,就能把它设成项目的默认值。
用子智能体还是技能,子智能体什么时候值得用
技能会加载进你当前的对话,占用这段对话的上下文。技能是可以反复使用的内容,比如操作说明或参考资料。
子智能体的 skills 字段会预先载入所列技能的全文,设了 context: fork 的技能则会放到子智能体里运行。
互不依赖、可以同时进行的几件事,适合交给子智能体。整轮测试这类很长的输出也一样,交出去就不会堆进你的对话。代码评审是另一种用法:没写这段代码的智能体,不会带着你们对话里的那些预设去看它。
每个子智能体都单独发请求,和主对话共用同一份用量上限,所以主要开销是 token。新的子智能体还得重新收集主对话已经有的背景,比如把读过的文件再读一遍,所以可能比直接在主对话里做更慢。答案也不会更好:默认情况下,它就是同一个模型,或者更小的模型,在做同一件事。
要是你每次改完文档都派一个子智能体去查链接,交代的话也都一样,就把它存成示例那样的智能体文件。
| 主对话 | 子智能体 | |
|---|---|---|
| 需要频繁来回沟通,或者反复打磨 | 是 | 否 |
| 几个阶段共享大量上下文,比如规划、实现和测试 | 是 | 否 |
| 改动小而明确 | 是 | 否 |
| 在意延迟 | 是 | 否 |
| 会产生大量输出,而你的对话里不需要它们 | 否 | 是 |
| 需要自己的工具限制或权限 | 否 | 是 |
| 任务自成一体,能以摘要的形式交回 | 否 | 是 |
来源:Claude Code 文档:创建自定义子智能体 (2026年11月3日 查阅)
参考:智能体文件从哪里加载,以及默认上限
| 位置 | 范围 | 优先级 |
|---|---|---|
| 组织托管设置 | 整个组织 | 1,最高 |
--agents 参数,以 JSON 传入 | 只限当前会话,不会存到磁盘 | 2 |
.claude/agents/ | 当前项目 | 3 |
~/.claude/agents/ | 你的所有项目 | 4 |
插件的 agents/ 文件夹 | 启用了该插件的地方 | 5,最低 |
这里的每个事实都来自下方来源里列出的 Anthropic 页面,阅读日期为 2026 年 11 月 2 日和 3 日。本文是对官方文档的解读,不是实际测试,Claude Code 的字段、默认值和命令也会随版本变化。
常见问题
子智能体能再启动自己的子智能体吗?
能,默认最多到主对话以下三层。到了这个深度,除了分叉(fork),Claude Code 会收回所有子智能体的 Agent 工具。最深的那一个只能自己完成任务,交回一份摘要。层数可以用 CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH 来改。数量另有上限:一个会话里已有 20 个子智能体在跑时,第 21 个会启动失败。
添加子智能体之后,要重启 Claude Code 吗?
一般不用。Claude Code 会监视 .claude/agents/ 和 ~/.claude/agents/,新建或修改的文件几秒钟内就会被发现,下一次委派任务时就能用上。要重启的情况只有三种:会话启动时还没有 agents 文件夹,智能体放在用 --add-dir 添加的目录下,或者会话是用 --disable-slash-commands 启动的。
子智能体和分叉(fork)有什么区别?
分叉会继承到目前为止的整段对话,普通子智能体则按自己的定义从零开始。分叉和主会话共用系统提示词、工具和模型,还能复用主会话的提示词缓存。需要相同背景的任务,交给分叉比交给新的子智能体更省。想自己开一个,输入 /subtask 再跟上任务。分叉不能再分叉。
怎样禁止 Claude 使用某个子智能体?
在权限设置的 deny 列表里加上 Agent(name),比如 Agent(Explore)。内置和自定义的子智能体都适用。旧的 Task(...) 写法也照样有效:Claude Code v2.1.63 把 Task 工具改名为 Agent,旧名字留作别名。
子智能体能在不同会话之间记住东西吗?
能,在文件头里加一行,打开持久记忆就行。设为 memory: user,笔记存在 ~/.claude/agent-memory/ 下,所有项目通用。设为 project,笔记存在 .claude/agent-memory/ 下,可以提交进仓库。设为 local,则存在 .claude/agent-memory-local/ 下,不进版本控制。这和你自己的自动记忆是两回事,普通子智能体不会加载它。
不写 model 字段,子智能体用哪个模型?
默认沿用主对话的模型。如果设置了 CLAUDE_CODE_SUBAGENT_MODEL 环境变量,就用它。Claude 针对某一次调用传入的模型别名,优先级比这两者都高。想让所有子智能体都用同一个模型,再加上 CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1。这个变量要 Claude Code v2.1.257 或更高版本才支持。
资料来源
- Claude Code 文档:创建自定义子智能体 https://code.claude.com/docs/en/sub-agents
- Claude Code 文档:最佳实践 https://code.claude.com/docs/en/best-practices
- Claude Code 文档:扩展 Claude Code https://code.claude.com/docs/en/features-overview
- Claude Code 文档:用技能扩展 Claude https://code.claude.com/docs/en/skills
- Claude Code 文档:Claude 如何记住你的项目 https://code.claude.com/docs/en/memory

