每次Claude Code的会话塞满搜索结果、文件转储和死胡同探索时,模型就会在最需要清醒的时刻“降智”。这不是个别开发者的牢骚,而是每个长时间编程会话都无法回避的陷阱——上下文窗口被污染后,模型开始在简单问题上犯糊涂,忘记之前的决策,甚至输出毫无逻辑的代码片段。真正能扛住长会话的秘诀,就藏在Claude Code内置的“子代理”机制里:让独立的工作进程去做混乱的挖掘,只把干净的结论送回主对话。

子代理本质上是一个独立的代理实例,Claude Code会为它启动专属的上下文窗口。它接到一个任务就开始工作——读文件、用grep搜索、做推理——最终只把一条结果消息发回主对话。所有中间过程的噪音,比如读了却没用上的文件片段、试了又放弃的思路,全在子代理自己的上下文中自生自灭,不会污染你的主线。

第一个立竿见影的好处是主上下文始终干净。子代理在它那一侧烧掉的token只算自己的;你收到的那条总结可能只是“找到12处手动拼接的SQL查询,涉及5个文件,风险点集中在支付模块”,可这背后是子代理翻阅了50个文件、匹配了海量代码后的提炼结果,信息密度瞬间拉高。这就像办公室里有人默默翻遍档案柜,最后只递给你一页摘要——你的桌面永远不乱。

第二个好处是并行处理。传统串行对话里,你要先问一件事,等回答,再问下一件。现在遇到多个互不依赖的调研任务,比如同时需要知道“所有处理认证的代码位置”“支付回调涉及的中间件”“历史提交中关于密码加密策略的变更”,可以直接丢出三个子代理。它们在各自空间里并行推进,互不干扰,主代理收到三份结论后再统一整理给你。这不仅能大幅缩短墙上时钟时间,也让认知更加连贯。

第三个好处是专业化。通用型聊天代理虽然什么都能聊,但容易杂而不精。定制子代理可以通过独立的系统提示和工具限制,让一个实例只做一类事。比如你可以造一个只读的代码审查员,只给它Read、Grep、Glob三种权限,它就无法修改文件,也杜绝了误删风险。当子代理被限定在特定领域反复打磨时,它输出的一致性反而高于一个试图兼顾全局的全能选手。

触发子代理的方式非常自然,没有硬性门槛。Claude Code会自动判断哪些任务适合派发,比如“找出项目中所有手动构造SQL查询的地方”这类大范围扫描,它自己就会安排子代理去处理,你可能甚至没注意到它用了异步帮手。如果想直接控制,只需要说人话:“用子代理找到每一个我们手写鉴权逻辑的地方”或“派一个代理去研究支付webhook的完整链路,然后帮我总结”。不用记命令,也不用配flag,说清任务即可。

需要留意的是,子代理返回的结果并不会直接递给你,而是交给主代理。主代理读过那份结果后,再以自己的理解进行总结,最后呈现在给你的回复里。你始终在与协调员对话,从未直接接触那些埋头干活的工人。这种设计虽然让“干净结论”经过了一道转换,但也保证了交互风格的一致,你不需要适应两套对话模式。

更强大的用法藏在自定义子代理里。它的定义极其简洁:一个带YAML前置内容的Markdown文件。放在项目的.claude/agents/目录下,就是团队共享的专家;放在用户目录~/.claude/agents/下面,则是你私人的万能助手,任何项目都能调用。同一架构,两种分发粒度,让你可以像组建工具箱一样积累自己的代理阵容。