子代理:任务隔离与主会话上下文保护

把「要读一大堆东西」的活派出去,回来的只有结论。这是省上下文最有效的一招,也是最容易用错的一个。

约 10 分钟

子代理的核心价值只有一个:

它有自己独立的上下文空间。读了多少材料、跑了多少命令,全都不占你这边——回来的只有最后那段结论。

什么时候该派出去

场景 派不派
「把这 30 份访谈过一遍,找出提到价格的段落」 ——过程你不需要看
「这个目录里都有什么,大概是干什么的」 ——探查过程全是噪音
「帮我改一下这一段」 不派——一步就完了
「我们一起把这份报告改到满意」 不派——需要反复来回
「跑一下测试看哪里错了」(要连着改) 不派——共享上下文才好接着做

一个简单的判断:

你会不会去看它的中间过程?

不会看 → 派出去。会看 → 留在主会话。

最省事的用法:直接说

不需要建任何文件。

可复制的提示词
派一个子代理,把 interviews/ 下面所有文件都读一遍,
列出每份里提到「价格」「预算」「成本」的段落,
按访谈编号整理成一张表给我。

复制为纯文本,换行与缩进原样保留,可直接粘贴进对话框。

它会自己开一个,做完把表给你。

内置的几个

不用你定义,已经有的:

名字 干什么 特点
Explore 找文件、搜内容、摸清情况 只读,不能改文件
Plan 做方案时的调研 只读
general-purpose 复杂研究、多步操作、要动手改的活 全部工具

Explore 是最常用的一个。 它只读,所以派出去很安全——最坏的结果是它没找到,不会是它改坏了什么。

调用 Explore 时可以指定彻底程度:快速定点、均衡、或者全面分析。你直接说「彻底一点」就行。

Explore 和 Plan 有一个特殊之处:它们不加载 CLAUDE.md 这是为了让它们跑得更快更便宜。

实际含义是:你在 CLAUDE.md 里写的那些约定,Explore 不知道。要它遵守什么,得写在你派活的那句话里。

做一个自己的

放在 .claude/agents/~/.claude/agents/,一个 .md 文件:

Markdown
---
name: interview-scanner
description: 扫描访谈转写稿并提取指定主题的段落。
             需要从多份材料中批量找内容时使用。
tools: Read, Grep, Glob
model: sonnet
---

你负责从访谈转写稿中提取内容。

工作方式:
1. 用 Glob 找出目标目录下所有转写稿
2. 用 Grep 定位包含关键词的位置
3. 用 Read 读取上下文,摘出完整的段落
4. 原话逐字保留,不要改写

输出格式:
| 访谈编号 | 关键词 | 原话段落 |

找不到的访谈也要列出来,标注「无相关内容」。

只有 namedescription 是必填的。

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

← 回到手册目录