Communitygithub.com

raichominev/concilium

跨模型对抗性审查技能,用于 Claude Code:Fable 编排,GPT(通过 codex CLI 的 sol/terra/5.5)进行探测,裁决结果经过批准。需要 ChatGPT 订阅身份认证,无需 API 密钥。

concilium 是什么?

Concilium 是一个用于 Claude Code 的跨模型对抗性审查技能。其核心思想是让来自不同模型家族(例如 Claude 和 GPT)的第二个模型对用户或调用会话的主张进行独立、对抗性的审查。由于不同模型家族具有不同的盲点,这种方法能够更有效地发现单一模型可能遗漏的错误。审阅者负责提出审查结果,而原始的调用会话(由 Fable 或 Opus 5 主持)则负责批准或否决这些结果。该技能支持多种模型平台:通过 codex CLI 使用 GPT 模型(sol/terra/5.5)进行独立探测和执行,而 Claude 模型则充当裁决者。用户需要拥有 ChatGPT 订阅(通过 OAuth 登录 codex),无需 API 密钥。此外,还实验性地支持 Kimi 作为第三方模型家族。审阅结果以五个标准化模块的形式返回:探测、替代解释、注意事项、裁决提议和阶段日志。调用会话需要根据这些模块进行人工核实和最终裁决,强调证据验证而非单纯信任模型输出。该技能还定义了完整的轮次迭代协议,用于处理争议和分歧,直至达成共识或确认真正分歧。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add raichominev/concilium

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Concilium — 跨模型对抗性审查

一个与您(或用户)主张不同的第二个模型会对其进行对抗性审查。不同的模型谱系意味着不同的盲点——这就是价值所在。审阅者提出(PROPOSES);调用会话批准(RATIFIES)。不要让任何一方的自信成为证据的替代品。

该技能设计为由 Claude Code 编排——Opus 5 和 Fable 5 都是首选的批准席位(在盲法结局预测基准测试中衡量为席位平等的;任何 Claude 模型都能驱动这个循环,但批准者应是两者之一)。GPT 方(通过 codex 的 sol/terra/5.5)执行独立的探查和机械性执行——而这个跨家族席位是承担重任的:它可衡量地捕捉到同一家族席位共同遗漏的内容。

先决条件(每个环境检查一次)

  1. codex login status → 必须显示 "Logged in using ChatGPT"(订阅 OAuth — 不需要 API 密钥,订阅不能用作 API 密钥;不要尝试代理/路由器桥接)。

  2. 发现可用模型:codex debug models 或 ~/.codex/models_cache.json。如果模型报错 "requires a newer version of Codex",运行 codex update 然后重试。

  3. 首次在新环境中使用时,在信任裁决之前运行校准引导程序(references/setup.md):一个已知真相的推理测试,然后一个简单的真实任务,然后(可选)一个头对头测试以选择层级模型。

  4. 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。

层级矩阵(默认值是当前日期的模型 — 按安装覆盖)

层级默认值努力程度用途
研究型旗舰款(例如 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。 在传递或行动之前:

  1. 阅读实际的探针(查询/命令),而不仅仅是散文摘要。
  2. 极端结果是绊线:首次尝试时的 0% 或 100% 通常意味着错误的连接键、错误的作用域或错误的表 — 而不是新发现。在接受之前,亲自验证探针的关键步骤。
  3. 范围检查分歧:两个探针在不同的范围上都可以是事实正确的(一个表与数据库范围,一个来源与所有来源)。在比较数字之前命名作用域。
  4. 区分已反驳 / 已过时 / 不完整。 “今天的数字不同”并不意味着主张在撰写时是错误的 — 在说“被反驳”之前检查历史/时间戳。
  5. 亲自分配最终裁决标签:[V-code](对照源代码验证,引用 file:line)/ [V-db](只读查询,引用它)/ [V-probe](可重新运行的脚本)/ [C](未验证)/ [X](被反驳 — 命名替代它的内容)。提议是输入,而非答案。
  6. 按谱系衡量一致性。 同家族确认(Claude 批准席位同意 Claude 编排者)是弱证据 — 同谱系席位可测量地共享错误答案,直至独立产生相同的错误推理。跨家族确认或反驳的权重超过任何数量的同谱系投票;永远不要通过在共享谱系的席位之间多数投票来解决争议。第三方家族(Moonshot)可作为实验性自愿席位移用;除非是独立的,否则第三个席位没有任何价值,因此按家族而非按人头数量进行权衡 — 并注意一致通过的小组可能仅仅意味着该问题很简单(setup.md)。

concilium 循环(迭代轮次)

单次审查通常就足够了。但是当审阅者的探针存在空白,或者您(编排者)基于可辩护的理由不同意该提议时,一次交换就称不上 concilium — 一个议事会需要审议。该循环运行审查轮次,直到裁决收敛或争议被证实是真实的争议。此循环由您(调用的 Claude 会话)编排 — 它是一个协议,而非脚本(批准步骤需要您的判断;没有任何东西可以自动完成它)。

每个轮次:

  1. 运行一次审查(包装器)→ 获得五个模块 → 根据上述协议批准。
  2. 决定轮次的结果并行动:
结果条件行动
收敛您验证了探针的关键步骤并且它成立停止 — 发出最终标签。
争议探针存在空白、范围错误,或者您有具体的、有证据支持的反对意见将此轮次的 PROBE 加上您的反对意见写入轮次文件;使用指向该文件的 -PriorRounds/PRIOR_ROUNDS 运行下一个轮次。
干涸轮次没有添加新的可检查证据 — 审阅者重复断言,或者在 CAVEAT 中说没有新路径停止 — 将未解决的问题作为 [C]/[POLICY] 升级给负责人。这是防振荡保护。
上限达到轮次限制(默认为 3)而未收敛停止 — 展示状态并升级;真正的争议是发现,而非失败。

设计规则(它们直接源于陷阱):

  • 每个轮次使用新的会话 — 永远不要使用恢复链。 该循环恰好是陷阱 #3 警告的“长链”;通过 -PriorRounds 文件携带上下文,而非 codex exec resume。每个轮次从干净状态开始,只看到已尝试内容的紧凑摘要。
  • 每个轮次必须添加一个新的证据路径。 合约(规则 8)在审阅者端强制执行这一点;您在您端强制执行 — 反对意见仅在得到证据支持或指向具体的、可检查的空白时才有价值。"我不信服" 不是一个轮次。
  • 批准者保持固定(您 / Fable)审查;随着争议缩小,审阅者可以降低层级。 轮次 1 在研究型层级上;一旦问题缩小到机械问题...

相关技能