Concilium — 跨模型对抗性审查
一个与您(或用户)主张不同的第二个模型会对其进行对抗性审查。不同的模型谱系意味着不同的盲点——这就是价值所在。审阅者提出(PROPOSES);调用会话批准(RATIFIES)。不要让任何一方的自信成为证据的替代品。
该技能设计为由 Claude Code 编排——Opus 5 和 Fable 5 都是首选的批准席位(在盲法结局预测基准测试中衡量为席位平等的;任何 Claude 模型都能驱动这个循环,但批准者应是两者之一)。GPT 方(通过 codex 的 sol/terra/5.5)执行独立的探查和机械性执行——而这个跨家族席位是承担重任的:它可衡量地捕捉到同一家族席位共同遗漏的内容。
先决条件(每个环境检查一次)
-
codex login status→ 必须显示 "Logged in using ChatGPT"(订阅 OAuth — 不需要 API 密钥,订阅不能用作 API 密钥;不要尝试代理/路由器桥接)。 -
发现可用模型:
codex debug models或~/.codex/models_cache.json。如果模型报错 "requires a newer version of Codex",运行codex update然后重试。 -
首次在新环境中使用时,在信任裁决之前运行校准引导程序(
references/setup.md):一个已知真相的推理测试,然后一个简单的真实任务,然后(可选)一个头对头测试以选择层级模型。 -
Kimi 席位 — 实验性且自愿加入;从不作为默认轮次的一部分。 仅在用户明确要求第三方家族时添加。这里有两个传输方式,各自有其包装器:
- Kimi 桌面版 (Windows)。
scripts/concilium-review-kimi.ps1驱动该应用自带的 daimon runner,运行在其自己的 Electron 下。需要安装并登录桌面应用。 - Kimi Code CLI (Linux/macOS/Windows)。
scripts/concilium-review-kimi.sh驱动跨平台的、MIT 许可的 CLI — 无头kimi -p加上设备码 OAuth,因此适用于容器或一次性 VM(工作示例:references/isolated-guest-vmware.md)。⚠ 打印模式会必然地自动批准每个工具调用,因此那里的隔离是前提条件,而非预防措施。⚠ 始终传递--model:CLI 的内置默认值是比旗舰型号更老的代际,并且输出中没有任何内容命名它。
已校准但比 codex 更不稳定,且隔离性更弱:路径、模型、沙箱和注意事项见
references/setup.md和陷阱 #18–21。 - Kimi 桌面版 (Windows)。
层级矩阵(默认值是当前日期的模型 — 按安装覆盖)
| 层级 | 默认值 | 努力程度 | 用途 |
|---|---|---|---|
| 研究型 | 旗舰款(例如 gpt-5.6-sol) | 最大 | 开放式审查轮次,对抗性验证 |
| 机械型 | 上一代旗舰(例如 gpt-5.5) | 中等 | 用一个探针验证一个已知主张 |
| 执行型 | 廉价层级(例如 gpt-5.6-terra) | 低 | 执行并报告:运行脚本,监控导入 |
研究型层级的包装器在每个席位上默认设为最大。努力程度的词汇因模型而异,值得精确了解:codex 接受 none · minimal · low · medium · high · xhigh · max(已测量 — API 拒绝任何其他值并命名枚举),kimi 席位接受 low · high · max。
努力程度不能替代第二个家族 — 已通过控制实验测量。 对同一 14 项预测数据包,使用单个席位(gpt-5.6-sol)运行六次,分别在 low/medium/high/xhigh/max 加上一个相同努力程度的重复:同一努力程度的两次运行覆盖了 10/14 项,而跨努力程度的配对平均覆盖 8.9 项且从未超过此值;完整的六次运行集成也只达到 10/14 项,等于两次运行的噪声底限,也等于一个 codex+kimi 配对。准确率并非随努力程度单调递增(high 9, max 9, xhigh 7, medium 7, low 7),而挂钟时间增长了 8 倍(21 秒 → 166 秒)。有四项被每一次运行(无论何种努力程度)都遗漏——而跨家族席位获得了其中两项。变化努力程度会重新采样相同的盲点;不同的谱系才能移动它们。 如果您想要覆盖率,请添加一个家族,而非计算资源。-Mechanical 是有意降级的选项,并保持在 medium。
执行型任务不是审查 — 直接调用 codex 绕过包装器:
codex exec -m <cheap-model> -c model_reasoning_effort=low [-s read-only unless it writes] "<task>" < /dev/null
始终在直接的非交互式调用中关闭 stdin(bash 使用 < /dev/null;PowerShell 使用 $null | codex …)— 一个打开的、非 TTY 的 stdin 会导致 codex 在 "Reading additional input from stdin..." 上无限阻塞,并且孤儿进程会超越父 shell 的超时(陷阱 #10;包装器是免疫的 — 它们通过 stdin 管道传输)。
运行审查
使用捆绑的包装器。它们从 references/contract.md 加载共享的审查合约(单一真相来源 — 伪造探针、替代解释、注意事项、裁决提议、模式/编码规则;在那里编辑合约,切勿在脚本中编辑)并添加来源戳记。两个包装器功能相同;按平台选择:
Linux / macOS (bash):
- 主张:
scripts/concilium-review.sh claim "<claim>" - 差异:
scripts/concilium-review.sh diff [base-branch] - 通过环境变量配置:
MODEL、EFFORT、MECHANICAL=1(机械层级)、REPO_DIR、PROJECT_RULES(规则文件路径)。 - 克隆后首次使用:
chmod +x scripts/concilium-review.sh。
Windows (PowerShell 5.1+):
- 主张:
powershell -ExecutionPolicy Bypass -File scripts/concilium-review.ps1 -Claim "<claim>" [-Mechanical] [-RepoDir <path>] [-ProjectRules <file>] - 差异:
... -Diff [-Base <branch>]— 审查-RepoDir的工作树差异。
Kimi 第三方家族席位 — 实验性,自愿加入。 不作为默认轮次的一部分;仅在用户要求第三方家族时添加。两个包装器,相同的合约和相同的五个模块:concilium-review-kimi.sh(跨平台 CLI,通过环境变量配置 — 那里 MODEL 是必需的)和 concilium-review-kimi.ps1(Windows 桌面运行器)。
桌面包装器接受相同的 -Claim/-Diff/-RepoDir/-ProjectRules/-PriorRounds 接口,外加 -Model(默认 k3-agent)、-Effort(low|high|max)和 -RawPrompt(无合约,用于校准探测)。两个席位特定的差异,均已测量:CLAUDE.md 自动桥接在此处默认为关闭 — 注入通常会可靠地导致运行失败并出现裸 Connection error.,因此通过 -AutoRules 自愿加入;使用 -ProjectRules <file> 为审阅者提供上下文。并且永远不要信任其退出代码 — 它在那次失败时也返回 0,因此请检查五个模块。多行提示必须通过此包装器;从 bash 直接执行 kimi-daimon --prompt 会导致其 argv 被截断(陷阱 #18–19)。
此席位没有沙箱 — 给它一个可丢弃的副本。 -SandboxFrom <dir> 将目录树复制到一个临时目录(排除 .git、虚拟环境和密钥形状的文件),在那里运行代理,精确打印其创建/修改/删除的内容,并删除该副本(除非指定 -KeepSandbox)。默认使用它。明确它能买到什么:workDir 不是一个边界 — 其外部的罐子文件被绝对路径读取并原样返回(陷阱 #20)— 所以这是爆炸半径控制和审计线索,而非隔离。如果机器上的材料不得到达提供商,则在操作系统级别隔离(具有 ACL 的单独帐户,或 VM)。
对于盲法轮次,来自相同多孔性的风险是污染而非损害:游荡到真实树中的代理可以找到答案,并且该轮次悄无声息地不再是盲法。添加 -WatchPaths <a,b,c> — 它对必须保持未读状态(真实仓库、结果日志、答案键)的任何内容的 NTFS 最后访问时间进行快照,并报告运行期间读取的任何内容。已针对两个方向的已知逃逸进行验证;在信任它之前请阅读陷阱 #21,包括为什么基于枚举的相同检查版本在已证明逃逸的运行中报告为“干净”。
操作规则(每一条都是已测量的失败 — 原因见 references/pitfalls.md):
- 在后台运行,从第一次调用开始设置完整的 ~10 分钟超时。 真实审查在高等努力程度下需要 5–15+ 分钟;前台超时会中途杀死它们。
- 优先使用新会话而非恢复超时的会话。 长时间恢复的链会遇到上下文压缩 — 审阅者早期的仔细阅读在最后关键步骤之前会被有损地摘要。
- 永远不要裸恢复。
codex exec resume会静默地将模型和沙箱重置为用户config.toml中的默认值。如果您必须恢复(或想在中途切换模型),请重新固定所有内容:codex exec resume -m <model> -c sandbox_mode="read-only" -c model_reasoning_effort=<tier> <session-id> -标志放在位置参数 session id 之前。关键是sandbox_mode—-c sandbox=...会被静默忽略,并且 resume 上没有-s标志。跨模型恢复会保留上下文。 - 审阅者是一个完整的代理,而不是聊天机器人 — 只读沙箱会阻止文件写入,但不会阻止读取命令或数据库 SELECT。它审查的所有内容都会发送给第二个模型的提供商。
- 实时观察进度,不要盲目等待 — 并监控正确的流。 合约(规则 9)使审阅者在工作时发出
STATUS:单行报告,并且 codex 逐步写入 — 但流是分开的(已实时验证):使用1> out 2> err,最终的五个模块落在 stdout 上,而流式传输记录(横幅、STATUS 行、工具调用)进入 stderr。将 tail/monitor 指向 stderr 以获取进度 + 失败签名;读取 stdout 以获取裁决。警告:PowerShell 的1>/2>重定向写入 UTF-16 — 相应解码(或通过 UTF-8 强制步骤进行重定向)然后再进行 grep。 - 盲法轮次需要结构性隔离,而非一条指令。 当轮次必须保持未启动状态(盲法评估、每个请求模板的关键盲法优先传递)时,在干净的目录中运行审阅者,并关闭自动规则桥接(
-NoAutoRules/NO_AUTO_RULES=1):携带项目上下文并被指示“仅从数据包中回答”的模型,已测量仍会使用该上下文(陷阱 #16–17)。
批准协议(调用会话的工作)
审阅者返回五个模块:PROBE / ALT / CAVEAT / VERDICT-PROPOSAL / PHASE-LOG。
在传递或行动之前:
- 阅读实际的探针(查询/命令),而不仅仅是散文摘要。
- 极端结果是绊线:首次尝试时的 0% 或 100% 通常意味着错误的连接键、错误的作用域或错误的表 — 而不是新发现。在接受之前,亲自验证探针的关键步骤。
- 范围检查分歧:两个探针在不同的范围上都可以是事实正确的(一个表与数据库范围,一个来源与所有来源)。在比较数字之前命名作用域。
- 区分已反驳 / 已过时 / 不完整。 “今天的数字不同”并不意味着主张在撰写时是错误的 — 在说“被反驳”之前检查历史/时间戳。
- 亲自分配最终裁决标签:
[V-code](对照源代码验证,引用 file:line)/[V-db](只读查询,引用它)/[V-probe](可重新运行的脚本)/[C](未验证)/[X](被反驳 — 命名替代它的内容)。提议是输入,而非答案。 - 按谱系衡量一致性。 同家族确认(Claude 批准席位同意 Claude 编排者)是弱证据 — 同谱系席位可测量地共享错误答案,直至独立产生相同的错误推理。跨家族确认或反驳的权重超过任何数量的同谱系投票;永远不要通过在共享谱系的席位之间多数投票来解决争议。第三方家族(Moonshot)可作为实验性自愿席位移用;除非是独立的,否则第三个席位没有任何价值,因此按家族而非按人头数量进行权衡 — 并注意一致通过的小组可能仅仅意味着该问题很简单(
setup.md)。
concilium 循环(迭代轮次)
单次审查通常就足够了。但是当审阅者的探针存在空白,或者您(编排者)基于可辩护的理由不同意该提议时,一次交换就称不上 concilium — 一个议事会需要审议。该循环运行审查轮次,直到裁决收敛或争议被证实是真实的争议。此循环由您(调用的 Claude 会话)编排 — 它是一个协议,而非脚本(批准步骤需要您的判断;没有任何东西可以自动完成它)。
每个轮次:
- 运行一次审查(包装器)→ 获得五个模块 → 根据上述协议批准。
- 决定轮次的结果并行动:
| 结果 | 条件 | 行动 |
|---|---|---|
| 收敛 | 您验证了探针的关键步骤并且它成立 | 停止 — 发出最终标签。 |
| 争议 | 探针存在空白、范围错误,或者您有具体的、有证据支持的反对意见 | 将此轮次的 PROBE 加上您的反对意见写入轮次文件;使用指向该文件的 -PriorRounds/PRIOR_ROUNDS 运行下一个轮次。 |
| 干涸 | 轮次没有添加新的可检查证据 — 审阅者重复断言,或者在 CAVEAT 中说没有新路径 | 停止 — 将未解决的问题作为 [C]/[POLICY] 升级给负责人。这是防振荡保护。 |
| 上限 | 达到轮次限制(默认为 3)而未收敛 | 停止 — 展示状态并升级;真正的争议是发现,而非失败。 |
设计规则(它们直接源于陷阱):
- 每个轮次使用新的会话 — 永远不要使用恢复链。 该循环恰好是陷阱 #3 警告的“长链”;通过
-PriorRounds文件携带上下文,而非codex exec resume。每个轮次从干净状态开始,只看到已尝试内容的紧凑摘要。 - 每个轮次必须添加一个新的证据路径。 合约(规则 8)在审阅者端强制执行这一点;您在您端强制执行 — 反对意见仅在得到证据支持或指向具体的、可检查的空白时才有价值。"我不信服" 不是一个轮次。
- 批准者保持固定(您 / Fable)审查;随着争议缩小,审阅者可以降低层级。 轮次 1 在研究型层级上;一旦问题缩小到机械问题...