别让子代理替你拍板:给 Agent Team 建立证据交接协议
把一个难题扔给子代理,等它回一句“已经定位,建议改这里”,确实很爽。也很危险。主代理往往没看过那批日志、没读过那几个文件,只能相信一句压缩后的结论。结论一旦错了,后面的修改、测试和提交会把错误包装得越来越像真相。
Claude Code 的子代理本来就适合处理会淹没主会话的搜索结果、日志和文件内容;它们在自己的上下文里工作,回传的是摘要。[2] 这个机制节省上下文,却也改变了责任边界:子代理负责调查,主代理负责决策。不要让“摘要”偷偷变成“授权”。
我会把交接结果固定成一份证据包,而不是自由发挥的工作汇报。每个子任务只交五项:结论、证据定位、复现命令、反证或未知项、建议动作。结论必须能被证据支撑;证据至少带文件路径和行号,或日志的时间段与唯一关键字;复现命令默认只读。主代理拿到包后先抽查一条证据,再决定是否动代码。
这比要求“认真检查”有用得多。比如让子代理排查一个接口变慢,模糊指令会让它在缓存、数据库、网络之间来回猜。证据交接协议则要求它回答:慢发生在哪个端点、哪个时间窗、用什么命令看到、还有什么没排除。若它无法给出可复查位置,结论就只能算假设,不能直接进入修复。
让子代理只做它擅长的部分#
先按产物切任务,不按岗位切。一个子代理负责找调用链,一个负责读取指标,一个负责比对近期变更;不要让同一个人“调查、设计方案、实现、批准上线”。并行会话确实可以配合 worktree 避免并发修改互相覆盖,但官方的建议仍然是先规划,再让改动落盘。[1] 对高不确定任务,我宁可多花一次抽查,也不让多个代理同时改同一层。
再给每个子代理一个停止条件。比如“找到首个可稳定复现的失败点,或检查完这三个候选模块后停止”。没有停止条件的调查很容易扩张成全仓库漫游,最后回来的摘要又长又虚。子代理的价值不是替你读完所有东西,而是用有限范围排除一部分可能性。
工具权限也要跟任务绑定。Claude Code 允许给子代理设置工具,并可把 MCP 服务限定到某个子代理;同时,项目级 hook 会在子代理调用工具前照常生效。[2][3] 所以“只读调查”不能只写在提示词里:把写入工具拿掉,把不能触碰的命令交给 PreToolUse 阻断。官方文档明确说明,PreToolUse 在工具执行前触发,并且能够阻止调用。[3]
快速上手:在仓库里放一份交接模板#
先创建一名只读调查代理。这里故意不给它编辑工具,避免“顺手修一下”毁掉定位过程:
<!-- .claude/agents/latency-investigator.md -->
---
name: latency-investigator
description: 只读定位 API 延迟根因,输出可复查的证据包。
tools: Read, Grep, Glob, Bash
---
范围:只检查 $ARGUMENTS 指定的路由、时间窗和模块。
允许:rg、git log、git diff、只读监控查询。
禁止:编辑文件、重启服务、写数据库、执行部署。
按下列格式返回:
结论:一句话,附置信度(高/中/低)。
证据:每条写“路径:行号”或“命令 + 输出关键字”。
复现:一条无副作用命令,含预期现象。
未排除:最多三项。
建议:仅给下一步,不直接执行。
停止:找到首个稳定失败点,或检查完指定模块。
调用时别说“看看为什么慢了”,把验收条件一起写进去:
使用 latency-investigator 调查 /api/orders 在 10:00–11:00 的 P95 上升。
范围限于 server/orders、缓存配置和最近 10 个提交。
必须给出一条可本地复现的只读命令;没有证据的判断标为低置信度。
主代理收到报告后执行那条复现命令,打开至少一个引用位置。如果证据和结论对不上,就退回调查,而不是开始改代码。若要把这件事做成硬规则,可在 .claude/settings.json 给 Bash 配置 PreToolUse hook;hook 输入包含工具调用数据,返回阻断决定即可拦住不该发生的操作。[3]
最后,给每次交接留一个很小的记录:任务编号、结论、采用或拒绝的原因。两周后回看,你会发现哪些代理总把“相关性”说成“根因”,哪些证据格式最省复查时间。协议不是为了让 agent 写更多字,而是让每次关键判断都能回到一个具体位置。主代理不必重新做调查,但必须保留说“不”的能力。
还有一个容易漏掉的细节:把“没有发现”也当成正式结果。子代理检查了缓存键、慢查询和最近提交后仍未找到异常,报告里应列出已经排除的范围、检查时使用的版本和日志窗口。这样下一轮不会又从头查一遍,更不会把空白结论误读成系统正常。只有当观察条件一致时,两次调查的结果才值得比较。主代理据此决定扩大时间窗、补指标,还是暂缓修改;这比依据直觉挑一个看起来最像的补丁稳得多。
Sources#
[1] https://docs.anthropic.com/en/docs/claude-code/common-workflows — Claude Code Common workflows [2] https://docs.anthropic.com/en/docs/claude-code/sub-agents — Claude Code Create custom subagents [3] https://docs.anthropic.com/en/docs/claude-code/hooks — Claude Code Hooks reference