子代理:任务隔离与主会话上下文保护
把「要读一大堆东西」的活派出去,回来的只有结论。这是省上下文最有效的一招,也是最容易用错的一个。
子代理的核心价值只有一个:
它有自己独立的上下文空间。读了多少材料、跑了多少命令,全都不占你这边——回来的只有最后那段结论。
什么时候该派出去
| 场景 | 派不派 |
|---|---|
| 「把这 30 份访谈过一遍,找出提到价格的段落」 | 派——过程你不需要看 |
| 「这个目录里都有什么,大概是干什么的」 | 派——探查过程全是噪音 |
| 「帮我改一下这一段」 | 不派——一步就完了 |
| 「我们一起把这份报告改到满意」 | 不派——需要反复来回 |
| 「跑一下测试看哪里错了」(要连着改) | 不派——共享上下文才好接着做 |
一个简单的判断:
你会不会去看它的中间过程?
不会看 → 派出去。会看 → 留在主会话。
最省事的用法:直接说
不需要建任何文件。
派一个子代理,把 interviews/ 下面所有文件都读一遍, 列出每份里提到「价格」「预算」「成本」的段落, 按访谈编号整理成一张表给我。
复制为纯文本,换行与缩进原样保留,可直接粘贴进对话框。
它会自己开一个,做完把表给你。
内置的几个
不用你定义,已经有的:
| 名字 | 干什么 | 特点 |
|---|---|---|
| Explore | 找文件、搜内容、摸清情况 | 只读,不能改文件 |
| Plan | 做方案时的调研 | 只读 |
| general-purpose | 复杂研究、多步操作、要动手改的活 | 全部工具 |
Explore 是最常用的一个。 它只读,所以派出去很安全——最坏的结果是它没找到,不会是它改坏了什么。
调用 Explore 时可以指定彻底程度:快速定点、均衡、或者全面分析。你直接说「彻底一点」就行。
Explore 和 Plan 有一个特殊之处:它们不加载
CLAUDE.md。 这是为了让它们跑得更快更便宜。实际含义是:你在
CLAUDE.md里写的那些约定,Explore 不知道。要它遵守什么,得写在你派活的那句话里。
做一个自己的
放在 .claude/agents/ 或 ~/.claude/agents/,一个 .md 文件:
---
name: interview-scanner
description: 扫描访谈转写稿并提取指定主题的段落。
需要从多份材料中批量找内容时使用。
tools: Read, Grep, Glob
model: sonnet
---
你负责从访谈转写稿中提取内容。
工作方式:
1. 用 Glob 找出目标目录下所有转写稿
2. 用 Grep 定位包含关键词的位置
3. 用 Read 读取上下文,摘出完整的段落
4. 原话逐字保留,不要改写
输出格式:
| 访谈编号 | 关键词 | 原话段落 |
找不到的访谈也要列出来,标注「无相关内容」。
只有 name 和 description 是必填的。
name里不能有冒号,那是留给插件用的。文件名不必和
name一致,起作用的是name这个字段。
几个值得知道的配置项
| 字段 | 做什么 |
|---|---|
tools |
只给这些工具。不写就是继承全部 |
disallowedTools |
从继承的里面去掉某几个 |
model |
sonnet / opus / haiku / fable,默认继承主会话 |
effort |
覆盖会话档位 |
permissionMode |
它自己的权限模式 |
skills |
启动时预加载哪些技能(注入完整内容,不只是描述) |
memory |
让它跨会话记住东西 |
isolation: worktree |
在一份隔离的仓库副本里干活 |
两个实用的搭配:
① 便宜的批处理 —— model: haiku 加只读工具。三百条记录逐条打标签这类活,用 Haiku 又快又省。
② 保险的探查 —— tools: Read, Grep, Glob。给它只读工具,它就绝对改不了你的东西,哪怕理解错了任务。
三件必须知道的事
① 它拿不到你的对话历史
这是最常见的误解来源。
子代理是全新开始的。它看不到你和主会话之前聊了什么、读过哪些文件、调用过哪些技能。
它启动时拿到的是:
- 它自己的那段说明(定义文件的正文)
- 你派活时写的那段任务描述
CLAUDE.md(Explore 和 Plan 除外)- 预加载的技能(如果配了)
所以派活时要把背景说全。 「按我们刚才说的那样处理」这句话对子代理是无效的——它不知道你们刚才说了什么。
② 它默认在后台跑
做完之后,结果作为一条通知回到你的对话里。
几个后果:
- 你问它「好了吗」,它会说还在跑——真的还在跑,不是敷衍
- 后台子代理的可用工具比前台少。基本的读写、执行、搜索都在,但一些辅助工具不在
- 它要权限时,提示会出现在你的主会话里,并注明是哪个子代理在问
想让它在前台跑完再继续,在定义里写 background: false。
③ 它改的东西,回退救不了
子代理的文件改动落在你这个会话的检查点之外。双
Esc回退不了它。
要撤销只能用 Git。 见面向非技术用户的 Git 基础。
这一条是给它只读工具的最好理由。
派活的时候怎么说
因为它拿不到你的历史,派活的说明质量决定一切。
回到任务交办的六个要素那六条,对子代理要求更严:
派一个 Explore 子代理做这件事:
背景:interviews/ 下有 30 份市场研究访谈的转写稿,
文件名格式是「组别-编号.txt」,开头两行是元信息。
任务:找出每份里受访者谈到价格敏感度的段落。
输出:一张表,列是「访谈编号 | 段落原文 | 所在行号」。
原文逐字摘录,不要改写。
没有相关内容的访谈也要列出来,标注「无」。
要彻底一点,不要只搜「价格」这一个词。复制为纯文本,换行与缩进原样保留,可直接粘贴进对话框。
注意最后那句「不要只搜价格这一个词」。 子代理不知道你的领域常识,该展开的同义词你得提醒它。
几个上限
| 默认值 | |
|---|---|
| 嵌套层数(子代理再开子代理) | 3 层 |
| 每个会话最多开多少个 | 200 个 |
| 同时在跑的最多几个 | 20 个 |
日常碰不到这些。 列出来是因为如果你撞上了,说明思路可能有问题——开两百个子代理通常不是正确的做法。
一个安全机制值得知道
子代理返回的结果,在交给主会话之前会被扫描一遍。
扫描不删改任何内容,只做两件事:
- 在那些冒充系统提示格式的文本里插入转义符
- 在返回内容提到权限设置、或模仿系统标签时,在最前面加一行标记
这防的是什么:子代理读到的材料里如果藏着写给它看的指令,那些指令可能被原样带回主会话,看起来像是系统在说话。
但要清楚它的边界:扫描不判断内容是不是恶意的,也不改变那些指令能做什么——报告里引导它做的工具调用,仍然要过权限检查。
真正的防线还是「限制子代理能碰到什么」。
一个常见的错误用法
「派五个子代理同时改这五个文件。」
能跑,但通常不该这么做:
- 你看不到中间过程,五个都跑偏了你也不知道
- 它们互相不知道对方在干什么
- 回退救不了它们改的东西
子代理最擅长的是「读一大堆、回来一小段」,不是「同时动手改一大片」。
确实需要几个角色互相配合的话,那是另一个功能:多代理并行:Agent Teams。
和技能怎么配合
两者可以叠在一起:
- 技能里写
context: fork→ 这个技能在子代理里跑 - 子代理定义里写
skills→ 这个子代理启动时预装某些技能
| 系统说明来自 | 任务来自 | |
|---|---|---|
技能加 context: fork |
指定的代理类型 | 技能正文 |
子代理加 skills |
子代理的定义正文 | 你派活的那句话 |
一个简单的选法:
这件事本身就是一个完整任务 → 做成带
context: fork的技能这是一个角色,要接不同的活 → 做成子代理
本节事实查证日期:2026-08-05。 依据:官方 Create custom subagents。