Skip to content

xntj-ai/cross-review

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cross-review

License: MIT Claude Code Skill Version 2.0

A multi-model deliberative review: live web research, a 4–7 member cross-vendor council that actually debates, and a strongest-model double-blind judge — for architecture and design decisions.

多模型辩论式审查:先联网调研,再让 4–7 个跨厂商模型组成议会真正辩论,最后由最强模型双盲综合 —— 专为架构与设计决策而生。

cross-review is a Claude Code skill. Most "ask several models" setups are monologues — you query each model alone and play judge yourself, so they never see each other's blind spots. cross-review is a debate: Perplexity gathers fresh facts (R0), a council of role-specialized models from different vendors argues over your real context (R1 → R2, anonymized), and Claude Opus, sitting outside the council, synthesizes everything double-blind into a two-layer report. The Pragmatist seat is filled by the Claude Code orchestrator itself — the one party that has read your project's memory.

cross-review 是一个 Claude Code 技能。多数"问几个模型"的做法都是独白 —— 你单独问每个模型,然后自己当裁判,它们永远看不到彼此的盲区。cross-review 是一场辩论:先用 Perplexity 联网搜来新鲜事实(R0),再让一支由不同厂商、各司其职的模型组成的议会针对你的真实上下文辩论(R1 → R2,全程匿名),最后由议会之外的 Claude Opus 双盲综合成一份双层报告。其中 Pragmatist(实用者)这一席由 Claude Code 主调用方亲自担任 —— 它是唯一读过你项目记忆的一方。

Why Cross-Review · 为什么用 cross-review

When you face an architecture choice, a design trade-off, or a high-stakes decision, a single model's answer always sounds right — you just can't tell what it failed to consider. Asking several models separately doesn't help: they each monologue, and you're left hand-merging conflicting opinions with no idea whether they actually disagree or are simply parroting one another. cross-review turns that into a structured, accountable debate so the disagreements surface, the blind spots get named, and the final call comes with a paper trail.

当你面对一个架构选择设计取舍关键决策时,单个模型的回答听起来永远都"对" —— 你只是无从判断它漏想了什么。分头去问几个模型也不解决问题:它们各说各话,你最后还得手动拼合互相冲突的意见,也分不清它们到底是真有分歧、还是在互相附和。cross-review 把这一切变成一场结构化、可追责的辩论,让分歧浮出水面、让盲区被点名、让最终结论附带可追溯的依据。

  • Diversity over volume — cross-vendor, not more of the same. Four reviewers drawn from Google, OpenAI, xAI and (via the Pragmatist) your own Claude Code orchestrator cover more failure modes than any single vendor's model run five times. 异质优先于数量 —— 跨厂商,而非同质多跑几遍。 四位 reviewer 分别来自 Google、OpenAI、xAI,加上(由 Pragmatist 担任的)你自己的 Claude Code 主调用方,覆盖的 failure mode 比单一厂商的模型跑五遍都多。
  • Research before judgment. R0 sends Perplexity to the live web first, so the council argues over current reality instead of stale training data. 调研先于判断。 R0 先派 Perplexity 上网,让议会基于当下实况辩论,而不是过时的训练数据。
  • Real anonymization, not just hiding the logo. Round 2 passes only a structured summary with style and brand stripped, so no model can reverse-engineer who said what and rubber-stamp a "friend." 真匿名化,不只是藏掉品牌。 第二轮只传剥离了风格和品牌的结构化摘要,任何模型都无法反推谁说了什么、从而给"自己人"盖橡皮图章。
  • The strongest model judges, blind. Claude Opus synthesizes 30+ claims down to consensus / divergence, seeing only Member A/B/C/D — never the model names. 最强模型来裁,且是盲裁。 Claude Opus 把 30+ 条观点综合成共识 / 分歧,只看得到 Member A/B/C/D,看不到模型名。
  • A two-layer record. A human-readable summary to act on, plus a machine-auditable audit ledger of who raised what, how stances evolved, and where sycophancy crept in. 双层留底。 一层给人看的 summary 供你决策,一层给机器审计的 audit 台账,记录谁提出了什么、立场如何演化、附和在哪里悄悄发生。

How it works · 工作原理

The pipeline runs in four stages — research, council debate, anonymized rebuttal, and a double-blind judge — and emits a two-layer JSON report.

整条流水线分四步 —— 调研、议会辩论、匿名反驳、双盲裁判 —— 最后产出一份双层 JSON 报告。

┌─────────────────────────────────────────────────────────────────────┐
│ R0 · Live research (Perplexity Sonar / Sonar Pro)                     │
│   Web-searches current practice / cases / warnings, with citations.   │
│   Output is fed to the whole council as augmented context.            │
│   ~$0.03–0.06, 15–30s                                                 │
└───────────────────────────────┬───────────────────────────────────────┘
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│ R1 · Council, parallel (role system prompts + augmented context)      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────────────────┐     │
│  │ Promoter │  │  Critic  │  │Troublemkr│  │     Pragmatist     │     │
│  │  Gemini  │  │   GPT    │  │   Grok   │  │  Claude Code        │     │
│  │  t=0.3   │  │ t=0.3+PUA│  │ t=0.7+PUA│  │  (with memory) $0   │     │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬───────────────┘     │
│       └─────────────┴─────────────┴─────────────┘                     │
│   Each emits: free markdown body + a JSON summary block at the end.    │
└───────────────────────────────┬───────────────────────────────────────┘
                                ▼
                  ┌──────────────────────────────────┐
                  │  Structured early stop            │
                  │  all safe_to_stop=true            │
                  │  AND 0 blocking_issues → skip R2  │
                  └──────────────┬───────────────────┘
                                 │ otherwise
                                 ▼
┌─────────────────────────────────────────────────────────────────────┐
│ R2 · Anonymized rebuttal (structured summary only; style+brand gone)  │
│  Each member sees "Council Member A/B/C…" summaries, must state        │
│  agree / disagree / supplement, and justify any wholesale agreement.   │
│  Pragmatist's R1 view is an anchor — it does not evolve across rounds. │
└───────────────────────────────┬───────────────────────────────────────┘
                                ▼
              ┌───────────────────────────────────────┐
              │  Judge · Claude Opus 4.7 (double-blind)│
              │  Sees only Member A/B/C/D + role label │
              │  Emits two-layer JSON:                 │
              │  • summary (human): consensus 4/4 +    │
              │    majority 3/4 + split 2/4 +          │
              │    key_divergence + final_recommendation│
              │  • audit (machine): individual +       │
              │    ledger + stance_evolution + warnings │
              └───────────────────────────────────────┘
  • R0 · Research. Perplexity Sonar Pro web-searches the question, returning at least three pieces of current industry reality, relevant cases / repos, and known failure modes — all with citations — as augmented context. Skippable with --no-research. R0 · 调研。 Perplexity Sonar Pro 联网搜索该问题,返回至少三条最新行业实况、相关案例 / 仓库、已知 failure mode(均带 citation)作为增强上下文。可用 --no-research 跳过。
  • R1 · Independent council. All reviewers run in parallel, each under its own role system prompt, and each must end with a JSON summary block (core_claims / key_evidence / stance / safe_to_stop / blocking_issues). R1 · 各自独立审。 所有 reviewer 并行运行,各自带角色 system prompt,且必须以 JSON summary 块结尾(core_claims / key_evidence / stance / safe_to_stop / blocking_issues)。
  • Early stop. If every member reports safe_to_stop=true with zero blocking issues after R1, R2 is skipped — no debate for the sake of debate. Disable with --no-early-stop. 早停。 如果 R1 后全员 safe_to_stop=true 且零阻断问题,就跳过 R2 —— 不为辩论而辩论。可用 --no-early-stop 关闭。
  • R2 · Anonymized rebuttal. Each member sees only the structured summaries of the others, relabeled as Council Member A/B/C…, with original prose, style fingerprint, and brand stripped. An anti-rubber-stamp clause forces anyone inclined to agree fully to explain which member's which claim they accept and why. R2 · 匿名反驳。 每个成员只看到其他人的结构化摘要,重命名为 Council Member A/B/C…,原文、风格指纹和品牌全部剥离。反 rubber-stamp 约束逼着想完全同意的人解释:认同了哪位成员的哪条 claim、凭什么。
  • Judge · double-blind. Claude Opus 4.7 sees the full transcript but only as Member A/B/C/D plus a role label — never the model brand — and emits the two-layer schema. 裁判 · 双盲。 Claude Opus 4.7 看到完整记录,但只以 Member A/B/C/D 加角色标签的形式 —— 永远看不到模型品牌 —— 并输出双层 schema。

The council · 议会角色

Four roles, each a different stance toward your proposal. Three are played by cross-vendor API models; the fourth is the Claude Code orchestrator itself.

四个角色,各自对你的方案持不同立场。其中三个由跨厂商 API 模型扮演,第四个由 Claude Code 主调用方亲自担任。

  • Promoter · 推进者 — the builder. Proposes the best workable plan, concrete steps, and a feasible path, citing specific passages of your context. Forbidden from playing devil's advocate (that's the Troublemaker's job); required to give executable advice, not just principles. 建设者。 提出最优可落地方案、具体步骤、可行路径,引用你上下文中的具体片段。禁止故意唱反调(那是 Troublemaker 的事);必须给出可执行建议,而非只罗列原则。
  • Critic · 批评者 — strict reasoning. Uses rigorous logic to find boundary conditions, failure modes, and hidden assumptions; must quote the context ("paragraph X says Y, but…"), separate known risk from unidentified blind spot, and rate each issue high / medium / low. 严格推理。 用严格逻辑找边界情况、failure mode、隐藏假设;必须引用上下文("第 X 段提到 Y,但…"),区分"已知风险"和"未识别盲区",并给每个问题评级 high / medium / low。
  • Troublemaker · 挑刺者 — the contrarian. Its only job is to find holes. Banned from opening with agreement, it must surface at least two risks or blind spots the others missed, quote the original text for each, and — if it genuinely can't object — say so and explain why. Runs hotter (temperature 0.7). 反共识。 唯一任务是找洞。禁止以附和开头,必须列出其他人没提到的至少两个风险或盲区,每条都引用原文;若真找不到反对意见,要明说并解释原因。温度更高(0.7)。
  • Pragmatist · 实用者 — the stakeholder, with memory. Represents the real needs of the end user, team, and stakeholders: implementation feasibility, maintenance cost, learning curve, rollback path. It flags plans that are "technically right but won't actually fly." Crucially, this seat is filled by the Claude Code orchestrator, not a fresh model — see the rationale below. 利益相关方,自带记忆。 代表最终用户、团队、利益相关方的实际需求:实施可行性、维护成本、学习曲线、回退路径。它会指出那些"技术上对但实际行不通"的方案。关键在于,这一席由 Claude Code 主调用方担任,而非一个全新模型 —— 理由见下文。

The Pragmatist is an independent fourth viewpoint, not the arbiter — the Judge is.

Pragmatist 是独立的第四视角,不是仲裁者 —— 裁判才是。

Features · 功能特性

  • Cross-vendor council that truly debates — R1 independent review, then R2 where each model must explicitly agree / disagree / supplement on the others' points, with an anti-rubber-stamp constraint. 真正会辩论的跨厂商议会 —— R1 各自独立审,R2 中每个模型必须对他人观点明确表态同意 / 反对 / 补充,并受反 rubber-stamp 约束。
  • Live web research (R0) — Perplexity Sonar Pro grounds the debate in current, cited reality. 联网调研(R0) —— Perplexity Sonar Pro 用当下的、带引用的实况为辩论奠基。
  • Memory-aware Pragmatist at $0 — the orchestrator injects project history, team constraints, and past failures directly, skipping an API call. 自带记忆、零成本的 Pragmatist —— 主调用方直接注入项目历史、团队约束、历史踩坑,跳过一次 API 调用。
  • True anonymization — R2 ships only a structured summary JSON, removing style and brand fingerprints so no model can reverse-engineer identity. 真匿名化 —— R2 只传结构化 summary JSON,剥离风格与品牌指纹,任何模型都无法反推身份。
  • Double-blind judge — Claude Opus 4.7 synthesizes seeing only Member A/B/C/D, never the model names. 双盲裁判 —— Claude Opus 4.7 综合时只看 Member A/B/C/D,看不到模型名。
  • Two-layer output schema — a human summary (consensus / majority / split / key divergence / final recommendation) plus a machine audit (individual observations / ledger / stance evolution / warnings). 双层输出 schema —— 给人的 summary(共识 / 多数 / 分裂 / 关键分歧 / 最终建议)加给机器的 audit(独有观点 / 台账 / 立场演化 / 警告)。
  • Multi-role expansion--multi-role lets any role except Pragmatist be played by two models in parallel, growing the council from 4 to 7 for complex decisions. Multi-Role 扩展 —— --multi-role 让除 Pragmatist 外的任意角色由两个模型并行扮演,把议会从 4 人扩到 7 人应对复杂决策。
  • Structured early stop — skips R2 when the council unanimously reports safe_to_stop with no blocking issues. 结构化早停 —— 当议会一致 safe_to_stop 且无阻断问题时跳过 R2。
  • EmotionPrompt, selectively — performance-pressure ("PUA") prompts go only to GPT / Grok (which respond to them); Claude is left out because it pushes back. 选择性 EmotionPrompt —— 性能压力("PUA")prompt 只发给 GPT / Grok(它们吃这套);Claude 不加,因为它会反弹。
  • Cost guard & graceful recovery — a --max-cost abort, a summary fallback extractor when a model skips its JSON block, and soft handling of empty API responses. 成本守护与优雅降级 —— --max-cost 上限熔断,模型漏附 JSON 块时的 summary 兜底提取器,以及对空 API 响应的软处理。

When to use · 适用场景

Scenario 场景 Fit 适合度 Why 说明
Architecture decisions 架构决策 ✓✓✓ Four viewpoints expose coupling points. 四视角识别耦合点。
Comparing 2–3 candidate plans 方案对比 ✓✓✓ Surfaces the cost boundaries of A vs B. 厘清 A / B 的代价边界。
Design / UX / API review 设计审查 ✓✓✓ UI, API, data-flow trade-offs. UI、API、数据流取舍。
Writing implementation code 编码实现 No debate needed — just let Claude write it. 不需要辩论,Claude 直接做。
Fact verification 事实验证 LLMs can be collectively wrong. LLM 可能集体出错。
Emergency hotfix 紧急 hotfix Takes 2–4 minutes; just fix it. 耗时 2–4 分钟,直接修。

Install · 安装

Clone this repository into your Claude Code skills directory:

把本仓库克隆到你的 Claude Code 技能目录:

# macOS / Linux
cd ~/.claude/skills
git clone https://github.com/xntj-ai/cross-review.git

# Windows (PowerShell)
cd $env:USERPROFILE\.claude\skills
git clone https://github.com/xntj-ai/cross-review.git

Prerequisites · 前置条件

  • Claude Code installed. 已安装 Claude Code
  • Python 3.10+. Python 3.10+。
  • An OpenRouter API key (pay-per-token; all models are reached through it). 一个 OpenRouter API Key(按 token 付费,所有模型都经它调用)。

Configure the API key · 配置 API Key

# Option A — environment variable · 方式 A:环境变量
export OPENROUTER_API_KEY="<PLACEHOLDER>"

# Option B — ~/.claude/settings.local.json (recommended) · 方式 B(推荐)
{
  "credentials": {
    "openrouter": { "OPENROUTER_API_KEY": "<PLACEHOLDER>" }
  }
}

The script looks for the key in OPENROUTER_API_KEY first, then ~/.claude/settings.local.json under credentials.openrouter (or any mcpServers.*.env entry containing OPENROUTER). Nothing is hard-coded.

脚本先查 OPENROUTER_API_KEY 环境变量,再查 ~/.claude/settings.local.jsoncredentials.openrouter(或任何含 OPENROUTERmcpServers.*.env 项)。代码里没有任何硬编码密钥。

(Optional) Local proxy · (可选)本地代理

# If you're behind a regional restriction. Default is http://127.0.0.1:10808.
export OPENROUTER_PROXY="http://127.0.0.1:10808"

The script strips inherited proxy env vars and uses this one, so OpenRouter stays reachable from restricted networks. 脚本会清掉继承的代理环境变量并改用这个,确保在受限网络下也能连到 OpenRouter。

Verify · 验证

python ~/.claude/skills/cross-review/scripts/cross_review.py \
  examples/example_prompt.json --profile balanced

A balanced run on the bundled example confirms the install end to end. 用 balanced 跑一遍自带示例,即可端到端确认安装成功。

Usage · 使用方式

With Claude (natural language) · 对 Claude 说(自然语言)

"用 cross-review 审一下这个架构方案"
"拉 4 个模型一起看:Redis 还是 Postgres advisory lock"
"Run cross-review on whether to migrate this service to K8s"

Claude reads the relevant memory, writes the Pragmatist view, assembles the context bundle, and invokes the script.

Claude 会读取相关 memory、写好 Pragmatist 视角、组装上下文包,然后调用脚本。

Standalone (no Claude) · 独立使用(不经 Claude)

# Prepare a prompt JSON · 准备一个 prompt JSON
cat > /tmp/review.json <<'EOF'
{
  "context": "Existing system: X. Constraints: Y. Real file excerpts: …",
  "question": "1. Cost boundary of plan A vs B?  2. Blind spots I might have missed?"
}
EOF

# Run (premium + judge are the defaults) · 运行(默认 premium + judge)
python ~/.claude/skills/cross-review/scripts/cross_review.py \
  /tmp/review.json \
  --profile premium \
  --rounds 2 \
  --with-judge \
  --output /tmp/result.md \
  --json-output /tmp/result.json

# Cost-sensitive · 成本敏感
python ~/.claude/skills/cross-review/scripts/cross_review.py \
  /tmp/review.json --profile cheap --max-cost 0.50

Flags · 参数

Flag 参数 Default 默认 Meaning 说明
--profile premium cheap / balanced / premium model combo. 模型组合档位。
--rounds N 2 Debate rounds; 3+ has diminishing returns. 辩论轮次;超过 3 边际收益极低。
--multi-role off (1:1) Expand a role to 2 models: critic / troublemaker / promoter / all / comma-separated. 把某角色扩到 2 模型。
--with-judge / --no-judge on Run the independent judge synthesis. 是否跑独立 judge 综合。
--no-research off Skip the R0 Perplexity research round. 跳过 R0 Perplexity 调研。
--no-early-stop off Disable the R1 structured early stop. 关闭 R1 结构化早停。
--max-cost 5.00 Abort once total USD cost exceeds this. 总成本(美元)超此值即熔断。
--output temp dir Markdown report path. Markdown 报告路径。
--json-output (none) Judge JSON output path. Judge JSON 输出路径。

The Pragmatist view is supplied via an optional pragmatist_view field in the prompt JSON (see Multi-role mode and the rationale). When present, the skill uses it directly and skips that API call ($0); when absent, it falls back to the profile's Anthropic model.

Pragmatist 视角通过 prompt JSON 里可选的 pragmatist_view 字段提供(见 Multi-Role 模式 与下方理由)。提供了就直接用并跳过该次 API 调用($0);没提供则 fallback 到该档位的 Anthropic 模型。

Multi-role mode · Multi-Role 模式

Every role except the Pragmatist can be played by two models in parallel, surfacing more complementary blind spots. The default is 1:1 (a 4-member council, compatible with v1.1).

除 Pragmatist 外,每个角色都可由两个模型并行扮演,挖出更多互补盲区。默认是 1:1(4 人议会,兼容 v1.1)。

# Default 1:1 — 4-member council · 默认 1:1,4 人议会
python cross_review.py review.json --profile balanced

# Critic played by 2 models — 5-member council · Critic 用 2 模型,5 人议会
python cross_review.py review.json --profile balanced --multi-role critic

# Every expandable role doubled — 7-member council · 全角色加倍,7 人议会
python cross_review.py review.json --profile balanced --multi-role all
Command 命令 Council size 议会规模 When 适用场景
(default) 4 (1:1) General decisions. 通用决策。
--multi-role critic 5 (Critic ×2) Boundary cases, failure modes. 边界情况、failure mode 多视角。
--multi-role troublemaker 5 (Troublemaker ×2) More contrarian angles. 反共识多视角,找更多盲区。
--multi-role promoter 5 (Promoter ×2) Exploring several workable plans. 探索多种可行方案。
--multi-role critic,troublemaker 6 Double insurance on finding problems. 找问题双重保险。
--multi-role all 7 Full multi-angle for large decisions. 全角色多视角,大型决策。

The second model added per role (on balanced):

每个角色加上的第 2 个模型(balanced 档):

Role 角色 1:1 default + multi-role 2nd model
Promoter Gemini 3.1 Pro + Claude Sonnet 4.6 (a different angle on building the plan). 建设方案的不同切入点。
Critic GPT-5.4 + DeepSeek V4 Pro (formal logic + math / code). 形式逻辑 + 数学 / 代码。
Troublemaker Grok 4.20 + DeepSeek V4 Pro (complementary contrarian). 反共识互补。
Pragmatist Claude Code (orchestrator) (cannot be expanded). 无法扩展。
Judge Claude Opus 4.7 / Sonnet 4.6 (always exactly one). 始终 1 个。

Why the Pragmatist can't be doubled — it's supplied by the Claude Code orchestrator from your project memory, and that memory is the one thing that can't be cloned into a second model.

为什么 Pragmatist 不能加倍 —— 它由 Claude Code 主调用方从你的项目 memory 提供,而那份 memory 是唯一无法复制到第二个模型里的东西。

A note on instances: because the same model can play two roles at once (e.g. DeepSeek V4 Pro as both Critic and Troublemaker), the engine keys every participant by an instance_id (model#role#n), so the two never collide. 关于实例:由于同一个模型可同时扮演两个角色(如 DeepSeek V4 Pro 既当 Critic 又当 Troublemaker),引擎用 instance_id(model#role#n)给每个参与者编号,两者绝不混淆。

Model choice rationale · 模型选型理由

Why 4 reviewers, not 3 · 为什么 4 位 reviewer,而非 3 位

The earlier v3 had three reviewers (Promoter / Critic / Troublemaker) and lacked an Anthropic-side viewpoint. The Claude Pragmatist fills that gap: it occupies the pragmatic middle between the Promoter's idealism and the Critic / Troublemaker's extremes, representing the real needs of users, team, and stakeholders. It is an independent fourth view, not the arbiter (the Judge is that). Peacemaker (arxiv 2509.23055) shows 3 is the lower bound of the sweet spot and 4 is still in range; 5+ collapses into diminishing returns.

早先的 v3 是 3 位 reviewer(Promoter / Critic / Troublemaker),缺一个 Anthropic 侧视角。Claude Pragmatist 补上这一环:它处在 Promoter 的理想主义与 Critic / Troublemaker 的极端之间的实用主义中点,代表用户、团队、利益相关方的真实需求。它是独立的第四视角,不是仲裁者(裁判才是)。Peacemaker(arxiv 2509.23055)证明 3 是甜区下限、4 仍在合理范围;5+ 则坍缩为边际收益递减。

Why Gemini 3.1 Pro, not 3.5 Flash · 为什么用 Gemini 3.1 Pro,而非 3.5 Flash

On reasoning benchmarks, Pro beats Flash — and the council's job is reasoning, not agentic tool-calling:

在推理 benchmark 上,Pro 胜过 Flash —— 而议会的活是推理,不是 agentic 工具调用:

Benchmark 3.1 Pro 3.5 Flash Pro advantage 优势
ARC-AGI-2 77.1% 72.1% +5.0
Humanity's Last Exam 44.4% 40.2% +4.2

3.5 Flash is strong at agentic / coding work, not at reasoning. 3.5 Flash 强在 agentic / coding,不在推理。

Why EmotionPrompt only for GPT / Grok, not Claude · 为什么 EmotionPrompt 只给 GPT / Grok,不给 Claude

A real-world test of "PUA" prompts across 11 models found that GPT and Gemini comply and improve under performance pressure, while Claude Sonnet 4 without thinking pushes back ("I won't change my working method under pressure"), Claude Opus 4 with thinking resists it too (with a sycophancy risk in the opposite direction), and DeepSeek's hallucinations spike. EmotionPrompt (arxiv 2307.11760) reports a 115% gain on BIG-Bench, but only for models that respond to emotional pressure. Leaving Claude out is the safe choice — hence the Critic / Troublemaker get the pressure clause and the Pragmatist / Promoter do not.

一次对 11 个模型的"PUA" prompt 实测发现:GPT 和 Gemini 在性能压力下会照办且提升,而 Claude Sonnet 4 无 thinking 时会反弹("我不会因压力改变工作方法"),Claude Opus 4 带 thinking 也反吃这套(且有反方向的 sycophancy 风险),DeepSeek 则幻觉飙升。EmotionPrompt(arxiv 2307.11760)在 BIG-Bench 上报告 115% 提升,但仅对响应情绪压力的模型有效。把 Claude 排除在外是稳妥之选 —— 所以 Critic / Troublemaker 加压力条款,Pragmatist / Promoter 不加。

Why Claude Opus 4.7 as Judge · 为什么用 Claude Opus 4.7 当裁判

The judge must identify consensus, divergence, and meta-sycophancy across 30+ claims — the stronger the model, the better. v1.0 used DeepSeek purely to be cross-vendor and avoid self-preference bias, but DeepSeek V4 Pro's synthesis is weaker than Opus 4.7's. v1.1 switched to Opus 4.7, and it stays unbiased because the council removed its Anthropic seat (the Pragmatist is now supplied by the orchestrator's external view, or falls back to Sonnet 4.6). So the Opus judge is either a different vendor from every reviewer, or at least a different and stronger model — self-preference risk stays minimal. See Self-Preference Bias (arxiv 2410.21819).

裁判要在 30+ 条 claim 中识别共识、分歧、meta-sycophancy —— 模型越强越好。v1.0 用 DeepSeek 纯粹是为了跨厂商、消除 self-preference bias,但 DeepSeek V4 Pro 的综合能力弱于 Opus 4.7。v1.1 改用 Opus 4.7,且它保持无偏的前提是议会移除了 Anthropic 那一席(Pragmatist 现由主调用方的外部 view 提供,或 fallback 到 Sonnet 4.6)。于是 Opus 裁判与每位 reviewer 要么跨厂商、要么至少是不同且更强的模型 —— self-preference 风险极低。参考 Self-Preference Bias(arxiv 2410.21819)。

Why R0 Perplexity research · 为什么加 R0 Perplexity 调研

Without it, the council relies only on (a) what the models learned in training and (b) the context you provided — so anything after a model's knowledge cutoff is invisible, fast-moving best practices go stale, and you can't tell whether a model's "fact" is out of date. R0 sends Perplexity Sonar Pro to the live web for current industry reality, cases, and warnings — with citations — as augmented context for the whole council. It adds roughly +$0.06 and 15–30 seconds.

没有它,议会只能依赖(a)模型训练时学到的东西和(b)你提供的上下文 —— 于是模型 knowledge cutoff 之后的事一概看不到、快速演化的最佳实践变得陈旧、你也无从判断模型给的"事实"是否过时。R0 派 Perplexity Sonar Pro 上网取当下的行业实况、案例、警告(带 citation)作为整个议会的增强上下文。代价约 +$0.06、15–30 秒。

Why the Pragmatist is supplied by the orchestrator · 为什么 Pragmatist 由主调用方提供

A fresh model — even Opus 4.7 — doesn't know your actual situation: the team's learning curve, the historical failures ("we tried X six months ago and it blew up"), the budget / server / ops constraints, the user base. But the Claude Code orchestrator has your memory and project conversation history. Letting it write the Pragmatist view directly is more accurate than any fresh model guessing from a prompt. Implementation: the prompt JSON carries a pragmatist_view field; when the skill detects it, it uses it and skips the API call ($0); otherwise it falls back to Sonnet 4.6. This is the soul of the v1.1 design, and across the six GitHub competitors surveyed below it wasn't seen anywhere.

一个全新模型 —— 哪怕是 Opus 4.7 —— 也不知道你的实际处境:团队学习曲线、历史踩坑("6 个月前试过 X,炸了")、预算 / 服务器 / 运维约束、用户群体特征。但 Claude Code 主调用方有你的 memory 和项目对话历史。让它直接写 Pragmatist 视角,比任何 fresh model 凭 prompt 推断都准。实现:prompt JSON 带 pragmatist_view 字段,skill 检测到就用它并跳过 API 调用($0),否则 fallback 到 Sonnet 4.6。这是 v1.1 设计的灵魂,在下方调研的六个 GitHub 竞品里没见过。

Why a structured summary instead of raw markdown for R2 · 为什么 R2 传结构化摘要而非原文

v3 anonymized by merely swapping out brand names, and its own meta-test concluded this fails: keeping the role label, output style, and original prose forms a strong fingerprint a model can reverse-engineer. v1.0 fixed it by passing only {core_claims, key_evidence, stance, blocking_issues} as structured JSON in R2, killing the style fingerprint at the source.

v3 仅替换品牌名来匿名,而它自己的 meta-test 断定这行不通:保留 role 标签、输出风格和原文,会形成强指纹,模型极易反推身份。v1.0 的修法是 R2 只传 {core_claims, key_evidence, stance, blocking_issues} 结构化 JSON,从源头消除风格指纹。

Output · 输出 schema 与示例

The judge emits one two-layer JSON: a summary for humans to act on, and an audit for machines and accountability. Classification rule: a point marked by 4/4 → consensus_issues; 3/4 → majority_issues; 2/4 → split_issues; 1/4 → individual_observations.

裁判产出一份 双层 JSON:给人决策的 summary,给机器与追责的 audit。归类规则:4/4 标记 → consensus_issues;3/4 → majority_issues;2/4 → split_issues;1/4 → individual_observations

summary — for humans · 给人看

{
  "consensus_issues": [
    {"point": "At 100 users/day, K8s is categorically unnecessary"}
  ],
  "majority_issues": [
    {"point": "Dockerizing is a necessary evolution step", "dissenter_role": "troublemaker"}
  ],
  "split_issues": [
    {
      "point": "Whether the Lambda path is worth the rework",
      "for": ["pragmatist"],
      "against": ["promoter", "critic", "troublemaker"]
    }
  ],
  "key_divergence": {
    "topic": "When to introduce containerization",
    "positions": {
      "promoter": "Phase 1, Docker now",
      "critic": "Phase 3, after multi-instance",
      "troublemaker": "Reject outright, use bare VMs",
      "pragmatist": "Depends on the team's Docker experience"
    },
    "judge_recommendation": "Promoter's case is strongest: the OCR consistency problem the Troublemaker itself raised is exactly what Docker solves"
  },
  "final_recommendation": "…3–5 sentences telling the user what to do…"
}

audit — for machines / accountability · 给机器 / 审计看

{
  "individual_observations": [
    {
      "source_role": "troublemaker",
      "point": "Holiday peak traffic was never accounted for",
      "merit": "high",
      "merit_reason": "Spring Festival peaks really do exist for this business"
    }
  ],
  "ledger": [
    {
      "claim": "Redis incr is sufficient",
      "raised_by_role": "promoter",
      "raised_at_round": 1,
      "stance_evolution": {
        "type": "revised",
        "evidence": "Accepted the Critic's rebuttal in R2",
        "trigger": "Critic's high-concurrency argument in R1"
      }
    }
  ],
  "warnings": [
    "meta-sycophancy: three members accepted the Critic's argument too fast, with little independent challenge"
  ]
}

The stance_evolution.type is a compound object whose type spans seven values — stable / revised / abandoned / sycophantic_shift / escalated / conditional / split — so the ledger captures how a position moved, not just that it did. The warnings array flags sycophancy, drift, unanimous-bias, meta-sycophancy, and performative-compliance.

stance_evolution.type 是一个复合对象,其 type 覆盖七种取值 —— stable / revised / abandoned / sycophantic_shift / escalated / conditional / split —— 让台账记录立场是怎么移动的,而非只记录它动了warnings 数组会标出 sycophancy、drift、unanimous-bias、meta-sycophancy、performative-compliance。

Cost & time · 成本与时间

Measured on v1.1. Everything is reached through OpenRouter, billed per token.

基于 v1.1 实测。一切都经 OpenRouter 调用,按 token 计费。

Profile R0 research 调研 R1 council 议会 R2 council 议会 Judge Total 总成本 Time 时长
cheap ~$0.03 ~$0.04 ~$0.05 ~$0.05 $0.20–0.40 90–180s
balanced ~$0.06 ~$0.15 ~$0.18 ~$0.15 $0.40–0.80 150–240s
premium (default) ~$0.06 ~$0.30 ~$0.40 ~$0.50 $1.20–2.50 180–300s

Multi-role raises it modestly (on balanced: --multi-role critic ≈ $0.50–1.00, --multi-role all ≈ $0.70–1.30). If the orchestrator supplies pragmatist_view, you save ~$0.05–0.15 by skipping that API call. Two rounds is the sweet spot — 3+ degrades (DRIFTJudge), and a --max-cost guard (default $5.00) aborts before anything runs away.

Multi-role 会小幅抬升(balanced 档:--multi-role critic ≈ $0.50–1.00,--multi-role all ≈ $0.70–1.30)。如果主调用方提供 pragmatist_view,跳过该次 API 调用可省 ~$0.05–0.15。两轮是甜区 —— 3+ 反而恶化(DRIFTJudge),--max-cost(默认 $5.00)守护会在失控前熔断。

Limitations · 限制

Stated honestly. 诚实说明。

  • Not a replacement for Claude Opus thinking mode — for a simple, single-dimension decision, thinking hard directly is more efficient. 不替代 Claude Opus thinking 模式 —— 简单单维度决策,直接深思更高效。
  • Collective hallucination is real — cross-vendor is the strongest available hedge, but Majority Rules (arxiv 2511.15714) warns correlated errors still exist. 集体幻觉真实存在 —— 跨厂商已是最强对冲,但 Majority Rules(arxiv 2511.15714)提醒 correlated errors 仍在。
  • GPT occasionally omits its JSON summary — a fallback extractor auto-recovers it ($0.02), so the pipeline degrades gracefully rather than breaking. GPT 偶尔不附 JSON summary —— fallback extractor 自动补回($0.02),流水线优雅降级而非崩溃。
  • The judge is not absolute truth — Opus 4.7 still has its own preferences when synthesizing; the final call is yours. 裁判不是绝对真理 —— Opus 4.7 综合时仍有自己的偏好,最终决策权在你。
  • Don't exceed 3 rounds — DRIFTJudge shows R3+ degrades significantly. 不要超过 3 轮 —— DRIFTJudge 实证 R3+ 显著恶化。
  • Context must be real and specific — abstract questions get abstract answers. 上下文必须真实具体 —— 抽象问题得抽象答案。
  • R0 research isn't real-time — Perplexity returns publicly indexable content; internal company docs or pre-announcement plans aren't in scope. R0 调研非实时 —— Perplexity 返回的是公网可索引内容,公司内部文档或未发布的方案不在范围。

Basis · 学界与竞品依据

Every design choice traces to either a 2025–2026 paper or a surveyed open-source project — plus a round of the skill reviewing itself.

每个设计选择都可追溯到一篇 2025–2026 的论文或一个调研过的开源项目 —— 外加一轮 skill 审自己。

Academic · 学术 (2025–2026)

Paper 论文 What it shaped 影响了哪部分
Peacemaker (2509.23055) 4 reviewers, not 2–3, to resist sycophancy collapse. 4 reviewer 而非 2–3,抗 sycophancy collapse。
Stop Overvaluing MAD (2502.08788) Heterogeneity over homogeneous multi-round → 4 cross-vendor. 异质性 > 同质多轮 → 4 跨厂商。
Free-MAD (2509.11035) Structured-summary aggregation instead of free debate. 用结构化摘要聚合替自由辩论。
DRIFTJudge (2502.19559) Structured early stop + rounds ≤ 3. 结构化早停 + 限 rounds≤3。
Self-Preference Bias (2410.21819) Judge is cross-vendor (or council's Anthropic seat removed). 裁判跨厂商(或议会移除 Anthropic 席)。
EmotionPrompt (2307.11760) PUA clause for GPT / Grok only; Claude pushes back. PUA 只给 GPT / Grok,Claude 反弹。
Talk Isn't Always Cheap (2509.05396) Anti-conformity constraint to stop right→wrong drift. 反附和约束防止从对到错。

GitHub competitors borrowed from · GitHub 竞品借鉴

Pattern 模式 Source 来源
Council Member anonymization. Council Member 匿名化 karpathy/llm-council
consensus / majority / split schema peteski22/star-chamber (Mozilla.ai)
accountability ledger nyldn/claude-octopus
rubber-stamp counter-pressure. rubber-stamp 反向施压 zscole/adversarial-spec
4-layer anti-groupthink. 4 层 anti-groupthink wan-huiyan/agent-review-panel

Self-review drove v3 → v1.0 · 自审驱动 v3 → v1.0

The skill ran on itself (a meta-test) and found five root defects, all since fixed: brand-only anonymization that failed (→ R2 ships structured summary only); a same-vendor judge bias (→ cross-vendor / stronger judge); brittle keyword early stop (→ structured safe_to_stop + blocking_issues); a 7-field flat schema overloaded with information (→ two-layer summary + audit); and an incomplete stance_evolution enum (→ a compound {type, evidence, trigger} object with type widened to seven values).

这个 skill 用自己审自己(meta-test),找出五个根本缺陷,现已全部修复:仅替换品牌名的匿名失效(→ R2 只传结构化摘要);同厂商裁判偏置(→ 跨厂商 / 更强裁判);脆弱的关键词早停(→ 结构化 safe_to_stop + blocking_issues);7 字段扁平 schema 信息过载(→ 双层 summary + audit);不完备的 stance_evolution 枚举(→ 复合 {type, evidence, trigger} 对象,type 扩到七种)。

FAQ · 常见问题

Does it need an internet connection? · 需要联网吗? Yes — every model is reached through OpenRouter, and R0 does a live Perplexity web search. From a restricted network, set OPENROUTER_PROXY. 需要 —— 所有模型都经 OpenRouter 调用,R0 还会用 Perplexity 实时联网搜索。受限网络下设 OPENROUTER_PROXY

Can I use it without Claude? · 不用 Claude 能用吗? Yes. Write a {context, question} JSON and run the script. You lose only the memory-aware Pragmatist; without pragmatist_view, it falls back to the profile's Anthropic model. 可以。写一个 {context, question} JSON 跑脚本即可。你只是失去自带记忆的 Pragmatist;没有 pragmatist_view 时它会 fallback 到该档位的 Anthropic 模型。

How is this different from "just asking 3 models"? · 和"随手问 3 个模型"有什么区别? Those are monologues — the models never see each other and can't catch each other's blind spots. cross-review makes them debate (R1 → anonymized R2), then has a blind judge synthesize, so consensus and divergence are explicit and recorded. 那些是独白 —— 模型互不相见,抓不到彼此的盲区。cross-review 让它们辩论(R1 → 匿名 R2),再由盲裁综合,共识与分歧因此明确且留底。

Why not use it to verify facts? · 为什么不能用来验证事实? LLMs can be collectively wrong (correlated errors). cross-review judges design, not truth — use a real cross-reference check for facts. LLM 可能集体出错(correlated errors)。cross-review 裁的是设计,不是事实 —— 验证事实请用真正的交叉引用核查。

Is my API key safe in the repo? · 仓库里我的 key 安全吗? Yes — the key is only read from env or settings.local.json at runtime, never written to the repo; .gitignore blocks *.local.json and the temp result/prompt files. 安全 —— key 只在运行时从环境变量或 settings.local.json 读取,绝不写入仓库;.gitignore 屏蔽 *.local.json 及临时结果 / prompt 文件。

Related · 相关

  • ppvi — the visual identity behind these docs. 本套文档所用的视觉体系。
  • flowmaker — single-HTML, drag-to-edit web flowcharts. 单 HTML、可拖拽编辑的网页流程图。
  • xntj.tv — more Claude Code workflows and skills from 张拼拼 · XNTJ. 更多来自张拼拼·XNTJ 的 Claude Code 工作流与技能。

License · 许可证

MIT © 张拼拼 · XNTJ

About

Multi-model deliberative design review — a Claude Code skill that runs structured debate between Gemini and GPT to surface blind spots in architecture decisions.

Topics

Resources

License

Stars

5 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages