10 KiB
name, description
| name | description |
|---|---|
| claude-brain | "大脑 + 手脚" 多 agent 协作模式:唯一的主 agent(Claude Fable 5.1,"大脑")只做分析和决策, 不执行任何操作;所有实际动作(读代码、改文件、跑命令、调 MCP、烧板子……)都派给任务子 agent (默认 Opus 5.5,大脑可按难度改选 Sonnet/Haiku)去做。子 agent 做完把结果写成报告回给大脑, 大脑再分析、再派活,循环直到大脑判定完成。双方的全部交互记录都以 md 形式只存放在 ./Notes/auto 下。 只要用户说 "claude-brain"、"用大脑模式"、"brain 模式"、"让 Fable 当主 agent"、"Fable 规划 Opus 执行"、 "主 agent 只分析不动手"、"主从 agent 循环做这个任务"、"大脑分析、子 agent 执行"、 "use claude-brain"、"brain/worker loop",就必须使用这个 skill —— 哪怕他们只说了 "用 brain 跑一下这个任务"、"让大脑来拆解这个活"。 |
claude-brain:大脑分析,子 agent 执行
三个角色
| 角色 | 谁 | 数量 | 模型 | 能做什么 |
|---|---|---|---|---|
| 大脑(brain) | 一个持续存活的子 agent | 全程唯一一个 | 只有它用 Fable 5.1(fable) |
读 ./Notes/auto 里的记录(必要时只读查看文件),分析、决策、写任务单。不改任何东西、不跑命令 |
| 任务子 agent(worker) | 每个任务派一个新的 | 任意多个,可并行 | 默认 Opus 5.5(opus);大脑可按难度指定 sonnet / haiku,不能用 fable |
执行任务单,把结果写成报告 |
| 调度员(dispatcher) | 当前这个 Claude Code 会话(就是你) | 一个 | 会话本身的模型 | 只做机械转递:启动大脑、把大脑的任务单发给 worker、把报告路径交回大脑、写记录文件、替大脑问用户 |
为什么要有调度员:大脑的工具被限制为只读,它不能自己派 agent、也不能写文件;而嵌套派 agent 在 Claude Code 里也不可靠。所以"手"一律由会话来转递。
调度员的纪律:你不是第二个大脑。不要自己分析任务、不要改写或"优化"大脑的任务单、不要替大脑判断完成与否、不要自己动手干活(哪怕看起来一行命令就能搞定)。你只照抄、转递、存档。如果大脑的指令有明显问题(比如路径不存在),把问题原样反馈给大脑让它重新决定,而不是自己修。
交互记录:只放在 ./Notes/auto
所有大脑与 worker 之间的交互 md 都只能写在当前工程根目录下的 ./Notes/auto/ 里(每次运行一个子目录)。不要写到 Notes/ 其它位置、工程其它目录或临时目录。worker 执行任务本身需要改的工程文件(包括工程里的 .md 文档)不受此限——这条约束针对的是"协作记录"。
./Notes/auto/<YYYYMMDD-HHMM>-<短slug>/
├── 00-goal.md # 用户原始任务 + 约束(调度员写)
├── log.md # 每轮一行流水:轮次/动作/状态(调度员追加)
├── R01-brain.md # 第 1 轮大脑决策原文(调度员照抄写入)
├── R01-T1-task.md # 第 1 轮任务 1 的任务单(调度员从大脑决策中原样抽出)
├── R01-T1-report.md # worker 写的执行报告
├── R01-T2-task.md / R01-T2-report.md ...
├── R02-brain.md ...
├── Rxx-user.md # 大脑要问用户时:问题与用户回答
├── agents.md # 子 agent 名册:每个 agent 的角色/任务/模型/状态(调度员维护)
└── FINAL.md # 大脑判定完成后的总结(调度员照抄)
模板见 references/templates.md,第一次运行时读一下。
子 agent 名册:每新增一个 agent,就把全表亮一遍
用户看不到后台 agent 的内部,他需要随时知道"现在有哪些 agent、各用什么模型、谁在跑谁跑完了"。所以调度员维护 agents.md,并且每次启动一个新 agent(大脑或 worker)之后,以及每次有 agent 结束之后,都在对用户的回复里把整张表完整打印一遍——不是只报新增的那一行。表格很短,重复打印的成本远低于用户去翻历史消息的成本。
表的列:#、角色/任务、模型(指定)、状态、启动、结束、报告。状态只用四个词:运行中、完成、失败/受阻、已接替(大脑被新实例接替时旧行标此状态)。大脑永远是第 1 行,模型一栏写 fable;worker 按派出顺序编号。模板见 references/templates.md。
"模型(指定)"是调度员传给 Agent 工具的 model 参数。要核实实际生效的模型,跑 scripts/check_models.sh(读本地 subagent 转录里每条回复的 "model" 字段);在 FINAL 汇报时附上一次核实结果,这样每次运行都有"大脑确实是 Fable、worker 确实没有用 Fable"的审计证据。
流程
0. 准备
- 确认工程根目录(当前工作目录)。创建
./Notes/auto/<YYYYMMDD-HHMM>-<slug>/,写00-goal.md:用户的原话 + 你从对话里知道的约束(不要加自己的分析)。 - 确保大脑的 agent 定义已安装:把本 skill 的
agents/claude-brain.md复制到~/.claude/agents/claude-brain.md(不存在或内容不同时覆盖)。这个定义把大脑的工具锁成Read, Glob, Grep,从机制上保证它"只分析不动手"。- 若本次会话里
claude-brain这个 subagent_type 还不可用(新装的定义可能要重启会话才生效),就退回用general-purpose,并在提示词里写明工具限制(见agents/claude-brain.md正文,原样附上)。告诉用户:下次重启后就会是硬限制。
- 若本次会话里
1. 启动唯一的大脑
用 Agent 工具:subagent_type: "claude-brain"(或退回 general-purpose),model: "fable"(显式传,别依赖默认),description: "claude-brain 主 agent"。提示词给出:
- 运行目录的绝对路径,让它读
00-goal.md - 让它按
agents/claude-brain.md里的决策格式回复第 1 轮决策
记下这个 agent 的 ID/名字,在 agents.md 写入第 1 行并向用户打印全表。之后每一轮都用 SendMessage 把消息发给同一个大脑,不要新建大脑——全程只有一个大脑,它的上下文就是它对任务的理解。(SendMessage 是延迟加载工具,先 ToolSearch("select:SendMessage")。)
只有当大脑确实无法再联系上(报错、被终止)时,才新起一个来接替:提示它先通读整个运行目录恢复状态。任何时刻都不能同时存在两个大脑。
2. 每一轮的循环
收到大脑的决策后:
- 把决策原文写入
Rnn-brain.md,在log.md追加一行。 - 看决策里的
状态:- CONTINUE:对每个任务,把任务单原样写入
Rnn-Tk-task.md,然后派 worker(下一节)。大脑标为可并行的任务在同一条消息里一起派出;有依赖的按顺序派。 - ASK_USER:用 AskUserQuestion(或直接在对话里)把大脑的问题原样问用户,问答写入
Rnn-user.md,然后把文件路径发回大脑。 - DONE:把大脑的总结写入
FINAL.md,向用户汇报(第 4 步)。
- CONTINUE:对每个任务,把任务单原样写入
- 本轮所有 worker 结束后,SendMessage 给大脑:
第 nn 轮报告已就绪:<各 report.md 的绝对路径>。请阅读后给出第 nn+1 轮决策。不要附上你自己的摘要或评价——让大脑自己读原始报告。
3. 派 worker
Agent 工具,subagent_type: "general-purpose",model 取任务单里大脑指定的模型(缺省 opus;若写了 fable 视为无效,改回 opus 并在 log 里记一笔,因为 Fable 只属于大脑)。提示词:
你是 claude-brain 流程中的任务子 agent。
请先读任务单:<Rnn-Tk-task.md 绝对路径>,按其中的目标、背景和验收标准完成任务。
- 只做任务单要求的事,不扩大范围;遇到任务单没覆盖的关键决策,停下并在报告里写明,而不是自己拍板。
- 不要再派生子 agent。
- 完成(或失败/受阻)后,按任务单末尾给的报告格式,把报告写到:<Rnn-Tk-report.md 绝对路径>
- 报告要写事实:做了什么、改了哪些文件、命令输出/测量值等证据、验收标准逐条是否满足、遗留问题。失败就如实写失败。
- 这份报告是唯一会被交回大脑的东西,除此之外不要在 ./Notes/auto 以外创建协作用的 md。
每派出一个(或一批)worker,立刻在 agents.md 追加行、向用户打印全表。
worker 返回后,确认报告文件确实存在;不存在就把 worker 的最终回复原文写进该报告文件,并注明"worker 未按要求写报告,以下为其最终回复原文"。然后更新 agents.md 中该行的状态/结束时间/报告路径,再向用户打印全表。
4. 结束
大脑给出 DONE 后,向用户汇报:任务结果(引用 FINAL.md 的要点)、共几轮、agents.md 全表、scripts/check_models.sh 的实际模型核实结果、运行目录路径。
自主模式:用户说"别问我"
用户可能在启动时或中途说"不要停下来问我"、"所有问题主 agent 自己定"。这时调度员把这句话记入 Rnn-user.md,并告诉大脑:ASK_USER 状态不再可用,worker 报告里"需要用户决定"的点和大脑原本想问的事项全部由大脑裁定。为了用户事后能复核,要求大脑在每轮"分析"里把替用户做的裁定单列为"大脑裁定(原拟问用户)",并在 DONE 的总结里汇总这些裁定及依据。调度员自己也不再用 AskUserQuestion,但仍照常向用户打印名册和进展。
防止空转
- 默认上限 15 轮。到了上限先暂停,把现状和大脑的最新判断告诉用户,问是否继续。
- 如果同一任务连续 3 轮失败、而大脑的新决策基本是重复派同样的活,把这一情况告诉大脑(事实陈述,不给建议),让它换思路或转 ASK_USER。
- 用户随时插话时:把用户的话原样写入
Rnn-user.md并转给大脑,由大脑决定如何调整。
恢复上次中断的运行
用户说"继续上次的 brain 任务"时:在 ./Notes/auto/ 里找最近的运行目录(看 log.md 最后一行,没有 FINAL.md 的就是未完成的),新起一个大脑(这是接替,不是第二个),让它通读该目录后给出下一轮决策,轮次编号接着往下排。