pstack 架构拆解
H07 / 十层 · 肌肉

50 个目录里
只有 5 个会自己派子代理

这一层才真正用 Cursor 的 Task 工具生子代理。自己派活的只有五个: swarm、arena、interrogate、reflect、recall。 另外三个(architect、blast-radius、teach)把并行委托出去,自己不 spawn。 形态的区别不是"跑几个",而是子代理之间是否交换信息、由谁裁决、结论怎么合并。 选错形态的代价很高:该赛马的铺成覆盖,就没人告诉你哪个更好。

图 7-1四种拓扑 + 第五种

"四种拓扑"是本站的归纳——上游没有任何一个文件给扇出分过类。下面每一项都按它自己 SKILL.md 里的阶段名原样列出。

swarm · 4 阶段 Frame → Fan out → Aggregate → Report worker 之间不互相看 父级只收摘要,一条报告 PASS / ISSUES / BLOCKED arena · 6 阶段 Frame → Fan out → Cross-judge → Pick → Graft → Verify candidate-1candidate-2candidate-3 judge rubric 在 Frame 定好:3–6 条可打分标准 选手看不到 rubric,只有父级和裁判看 Pick 逐条打分,禁止 holistic feel;裁判优先选与父级不同家族 interrogate · 5 步 Scope → State Intent → Spawn → Synthesize → Lead Judgment A · opus-5-5-maxB · gpt-5.6-solC · grok-4.7 Act on Consider Noted / Dismissed 同一份 rubric,同一个 prompt 对抗性来自模型多样性,不来自扮演角色 只读、不自动采纳,最后由人定 architect · 5 阶段(内部复用 arena) Ground → Sketch → Agree(可选) → Implement → Scrap Ground Sketch(跑 arena) Implement / Scrap Sketch 阶段要求至少 2 个结构上真正不同的候选,函数体留空只给签名 Scrap:设计不对就整块扔掉,不在错形状上继续写 第五种:reflect · 3 个评审 + 1 个综合者 同一条消息发 3 个 Task,但全部带 readonly: false —— 原文理由:"Readonly strips MCPs." 综合者返回 Accepted / Rejected / Backlog 三桶,再把 Accepted 落成对具体技能文件的编辑 这一格放在这里,是为了划清扇出层的边界:它扇的是自己最近的会话 怎么选(五问) ① 只要覆盖面、不要排名 → swarm  ② 要一个最好的,并留下可嫁接的基座 → arena ③ 已经写完了,要找盲点 → interrogate  ④ 还没写,形状没定 → architect(它把并行委托给 arena) ⑤ 要改的是技能自己 → reflect  另有 blast-radius / teach / recall:前两个只委托,第三个按会话数决定要不要扇 共同点:全部要求父级只收摘要,不收原始输出(这是 H06 的 guard-the-context-window);全部一条消息发完
图 7-1 · 阶段名、参数名、分桶名均取自各技能 SKILL.md 原文(提交 e43c7ee):swarm 47 行、arena 72 行、interrogate 111 行、architect 84 行、reflect 74 行。其中 interrogate 另带 4 份 references/(reviewer-prompt.md、rubric.md、code-quality-review.md、lead-judgment.md),architect 带 3 份——这就是 H03 的"阶段三:顺着链接取附件"。

7-2八个容易忽略的硬约束

约束原文 / 机制为什么这样设计
一次性发出swarm 与 arena 都写 "Spawn all N … in one message",interrogate 写 "Launch all reviewers in a single message";一律带 run_in_background: true串行发就退化成顺序执行,并行度归零
先声明裁决规则swarm:declare `first pass`, `rank all`, or `best-of` before spawning(这条只在 swarm 里写,arena 用 rubric 代替)防止跑完再挑标准,等于没有标准
选手看不到评分表arena Phase A:The rubric is the picker's tool in Phase D. Candidates only see the task.否则候选会按评分表写作,测不出真实差异
掉队不阻塞swarm "proceed with N-1 and note it";arena "proceed with N-1 and note the dropout"并行扇出的失败是常态,不能整体重跑
写路径隔离arena:每个候选 "a git worktree where possible, otherwise /tmp/arena-<slug>/candidate-<n>/",点名引用 separate-before-serializing-shared-state对应 H06 那条 Architecture 原则
只读是有代价的interrogate / arena 裁判带 readonly: true;但 reflect 反过来强制 readonly: false,原文理由只有五个字:Readonly strips MCPs.只读模式会剥掉 MCP 工具,需要 MCP 的评审就没法只读
不许自动采纳interrogate:Do NOT auto-apply changes. 共识判据:Findings raised by 2+ models independently are highest signal评审的价值在判断,不在顺手改代码;两票独立才算强信号
默认在云端跑swarm:environment: "cloud",只有 worker 需要碰你本机的东西时才给 "local";非默认分支要传 cloud_base_branch扇出规模大,默认离机跑;这也是它绑 Cursor 的地方(H09)

7-3这一层的成本

成本 1
token 翻倍
3 个 reviewer = 3 份完整上下文。pstack 用"父级只收摘要"限制爆炸半径,但基础开销仍在。
成本 2
规模由一行配置决定
interrogate 的评审数 = interrogate reviewers 那行的列表长度——"one subagent runs per entry, so the list length sets the panel size"。所以必须有 H08 那张表。
成本 3
模型被上游改名的风险
arena 明文兜底链:配置里的 slug 被 Task 工具拒绝时,"run that seat on its family's default and say so";家族只按前缀认——claude-* / gpt-* / grok-*。
本层的检验问题:arena 和 interrogate 都是"多个模型跑同一个 prompt",区别在哪? 答:arena 产出物(选出基座并嫁接),interrogate 产出判断(分四桶后交人决定)。 下一层 H08 解释这些"多个模型"具体是谁。
上一站← H06 原则层