子代理重用
Claude Code的MCP服务器,用于阻止子代理在已经完成的工作上浪费令牌。
问题
Claude Code孕育了子代理——计划代理进行研究,探索代理进行搜索,通用代理进行实施。每一个都从零开始。它读取文件,建立理解,完成工作。
然后,下一个子代理将执行相关任务。它读取相同的文件。重建同样的理解。燃烧相同的代币。
在一个会话中,这加起来。在多次会议中,它会复合。一个计划代理读取7个文件,一个实现代理重新读取所有7个文件。一个后续的bug修复代理再次读取它们。这是21次可能被继承的上下文文件读取。
这有什么作用
位于克劳德密码及其子代理之间。在生成新代理之前, route_task 检查现有代理是否已加载相关文件。
You: "Fix the auth redirect bug"
→ route_task(task, files=["src/auth/callback.ts", "src/middleware/session.ts"])
→ CREATE_NEW (no agent knows these files)
→ Agent spawns, reads files, fixes the bug
You: "Now add refresh token rotation"
→ route_task(task, files=["src/auth/callback.ts", "src/auth/tokens.ts"])
→ REUSE (previous agent already read callback.ts)
→ Agent resumes with existing context — no re-reading如果代理上次读取文件后文件发生了更改,您将收到过期警告:
{
"action": "REUSE",
"stale_files": ["src/auth/callback.ts"],
"stale_warning": "Re-read callback.ts — it changed since this agent last read it."
}当不存在强匹配时,响应包括现有代理的摘要,这样克劳德就可以自己决定是否有任何代理是相关的——没有单词匹配,没有NLP。LLM在语义判断方面比任何评分算法都要好。
安装
npx subagent-reuse --setup一个命令。这将MCP添加到Claude Code中,并自动批准所有工具权限,因此您永远不会收到提示。服务器会自动从工作目录中检测您的项目。
如果您更喜欢手动操作:
claude mcp add subagent-reuse -- npx subagent-reuse运作原理
自动发现
扫描Claude Code的本机会话存储(~/.claude/projects/)对于当前的项目。从每个子代理的JSONL转录中提取:
- 文件已读取 --从读取工具调用
- 文件已修改 --从编辑/写入工具调用
- 学习成果 --从辅助文本块
- 简明摘要 --来自Claude Code的内置摘要
无需手动记录。没有并行存储系统。它读取Claude Code已经编写的内容。
稳定性检测
每个代理的已知文件都使用SHA-256内容哈希(Merkle树)进行跟踪。在路由时间:
- 根哈希比较——即时检查是否有任何更改
- 如果更改了,叶子比较会精确地指出哪些文件已经过时
- 过时的文件在路由中获得一半的权重
- 陈旧的修改没有奖金
路由
纯结构性信号——无文本匹配:
| 信号 | 点 | 注释 |
|---|---|---|
| 文件重叠 | 0-50 | 过期文件获得50%的权重 |
| 修改奖励 | 0-15 | 过期修改获得0 |
| 目录匹配 | 0-20 | 精确、父/子或共享祖先 |
| 最近时间 | 0-10 | 代理最近有多活跃 |
得分>=40→ 复用 (如适用,带有陈旧警告) 得分\<40→ CREATE_NEW (附现有代理人摘要,供法学硕士审查)
工具
| 工具 | 目的 |
|---|---|
route_task | 产卵前检查现有的代理。仅当任务复杂到需要子代理时才调用。 |
get_context | 加载代理的完整上下文——文件、学习、过时报告。 |
recall | 在所有代理中搜索以前的工作。用于将相关知识引入新代理。 |
list_agents | 查看当前项目的所有已发现代理。 |
register_agent | 手动注册代理(与自动发现一起混合使用)。 |
log_work | 在自动扫描提取的内容之外,向代理的上下文添加注释。 |
mark_done | 从未来的路由中排除代理。它的学习内容仍然可以通过回忆进行搜索。 |
添加到CLAUDE.md
为了获得最佳效果,请将此添加到您的项目中 CLAUDE.md 因此Claude自动遵循工作流程:
# Subagent Reuse Protocol
## Rule
Only spawn subagents for complex, multi-step tasks (deep exploration, large refactors, parallel workstreams). For simple tasks, handle them directly.
When you DO decide to spawn a subagent, call `route_task` first. Always.
## Workflow
route_task(task, files?, directory?)
- REUSE → call get_context(agent_id), check stale_files, re-read any that changed
- CREATE_NEW → spawn a new agent. Check existing_agents in response — if one looks relevant, use get_context instead环境变量
全部可选。默认值开箱即用。
| 变量 | 默认值 | 用途 |
|---|---|---|
CLAUDE_PROJECT_PATH | process.cwd() | 覆盖项目路径检测 |
CLAUDE_PROJECTS_DIR | ~/.claude/projects/ | 覆盖Claude Code的存储目录 |
SUBAGENT_DATA_DIR | ~/.subagent-reuse/ | 索引树和Merkle树持续存在的地方 |
SUBAGENT_SCAN_INTERVAL_MS | 30000 | 重新扫描冷却时间(毫秒) |
许可证
麻省理工学院 ©Amruth
