/评议会
多个模型家族在有限的轮次内审查一个工件,通过文件和 Herdr 窗格交流,从不通过人类的剪贴板。
脚本:node <此技能目录>/scripts/council.mjs(<此技能目录> 是此 SKILL.md 安装的位置)。席位传输:references/herdr-seats.md。
前置检查(硬性)
- 工件文件存在:计划、规格、补丁(
git diff > .ramos/council/review.diff)或一页问题陈述。没有工件 → 先编写问题陈述,或停止。没有工件的评议会无法启动。 herdr可用且HERDR_ENV=1,至少两个来自不同模型家族的 harness 二进制文件(claude、codex、agy或gemini、opencode)。缺少 → 打印每个组件的安装说明并停止。- 用户要求召开评议会,或
/crucible标记了架构分歧。不要为常规工作召集评议会。
决策树
council.mjs init --artifact <文件> --seats claude,codex,agy→ 打印run_id和包含round1.prompt.md和round2.prompt.md的运行目录。- 席位:窗格是否已在运行?→ 复用它们。否则 → 按照
references/herdr-seats.md启动它们。你(主持人)也是一个席位。在阅读其他任何人的文件之前,先写出你的第一轮文件。 - 向每个席位发送:
读取 <dir>/round1.prompt.md 并严格按照指示执行(发送文本,然后按回车,然后重新读取窗格以确认已提交)。 - 轮询
council.mjs status --dir <dir>。只有以准确完成标记结尾的文件才算数。- 席位被限速、崩溃或在你设定的截止日期前沉默 →
council.mjs missing --dir <dir> --round 1 --seat <s> --reason "<原因>"。继续处理其他席位。永远不要无限等待,也永远不要假装它已回复。 - 每轮至少需要2 份完成的评审。如果更少的人能完成,则从另一个家族安排一个替代席位,或停止并报告
blocked。仅记录缺失席位的记录永远无法完成评议会。
- 席位被限速、崩溃或在你设定的截止日期前沉默 →
- 第一轮结束 → 发送
round2.prompt.md(交叉质询)。分配视角,使席位产生富有成效的分歧:一个攻击复杂性和脆弱性,一个攻击成本和验证,一个辩护可用性。 - 第二轮结束 → 主持人编写
<dir>/SYNTHESIS.md:- 一致意见(所有席位,经过让步后)
- 分歧意见(每个立场、其最强证据、真实权衡)
- 供人类做出的决定(≤5 个,每个都附带推荐答案)
- 每个项目的决策负责人
- 向人类展示综合报告。保持窗格打开以供后续跟进。两轮是上限。第三轮仅针对一个新的、更狭窄的问题。
规则
- 席位只能编写自己的文件。每个席位以其标记结束其文件。
- 主持人不编辑席位文件,并将每项声明归因于对应的席位。
- 席位无法用测量支持的数值在综合报告中标记为未验证。
完成条件
council.mjs status 报告 complete: true(每轮都已关闭且至少包含 2 份完成的评审,SYNTHESIS.md 存在,problems 为空),并且人类已获得决定列表。否则报告 blocked 并附上 problems 列表。