Concilium
Skill raichominev/concilium
Adversarial cross-model review for hard, load-bearing tasks — combining frontier models: the Claude session (Opus 5 or Fable 5 as the intended orchestrator) hands a claim, diff, or result to an OpenAI model (gpt-5.6-sol / gpt-5.6-terra / gpt-5.5, via the codex CLI on ChatGPT-subscription auth, no API key), which probes it with falsification attempts and PROPOSES a verdict; the orchestrator checks the probe and RATIFIES. Use whenever the user wants a second opinion from a different model, a cross-model or concilium review, adversarial verification of a research claim, benchmark number, or diff, says "have GPT/codex check this", wants codex set up as a reviewer, needs to switch codex models mid-session (park-and-resume), is tiering work across codex models, or wants to LOOP/iterate review rounds until a disputed claim converges.From its SKILL.md
npx -y skills add raichominev/conciliumAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
13.0 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it
Concilium — cross-model adversarial review
A second, different model reviews your (or the user's) claims adversarially. Different model lineage means different blind spots — that's the value. The reviewer PROPOSES; the calling session RATIFIES. Never let either side's confidence substitute for evidence.
Designed to be orchestrated from Claude Code — Opus 5 and Fable 5 are both first-class ratification seats (measured at chair parity on a blind outcome-prediction benchmark; any Claude model can drive the loop, but the ratifier should be one of the two). The GPT side (sol/terra/5.5 via codex) does the independent probing and mechanical execution — and that cross-family seat is load-bearing: it measurably catches what same-family chairs jointly miss.
Prerequisites (check once per environment)
codex login status→ must say "Logged in using ChatGPT" (subscription OAuth — an API key is NOT needed and a subscription can NOT be used as one; don't attempt proxy/router bridges).- Discover available models:
codex debug modelsor~/.codex/models_cache.json. If a model errors "requires a newer version of Codex", runcodex updateand retry. - First time in a new environment, run the calibration bootstrap (references/setup.md) before trusting verdicts: a known-truth reasoning test, then one simple real task, then (optionally) a head-to-head to pick tier models.
Tier matrix (defaults are current-day models — override per installation)
| Tier | Default | Effort | Use for |
|---|---|---|---|
| Research | flagship (e.g. gpt-5.6-sol) | high | open review rounds, adversarial verification |
| Mechanical | prev flagship (e.g. gpt-5.5) | medium | verify a known claim with one probe |
| Runner | cheap tier (e.g. gpt-5.6-terra) | low | execute-and-report: run a script, babysit an import |
Runner tasks are NOT reviews — skip the wrapper and call codex directly:
codex exec -m <cheap-model> -c model_reasoning_effort=low [-s read-only unless it writes] "<task>" < /dev/null
Always close stdin on direct non-interactive calls (bash < /dev/null; PowerShell $null | codex …) —
an open non-TTY stdin blocks codex forever on "Reading additional input from stdin...", and the orphaned
process survives the parent shell's timeout (pitfall #10; the wrappers are immune — they pipe via stdin).
Running a review
Use the bundled wrappers. They load the shared review contract from
references/contract.md (single source of truth — falsification probe, alternative explanation,
caveat, verdict-proposal, schema/encoding rules; edit the contract there, never in the
scripts) and add provenance stamping. Both wrappers are functionally identical; pick by platform:
Linux / macOS (bash):
- Claim:
scripts/concilium-review.sh claim "<claim>" - Diff:
scripts/concilium-review.sh diff [base-branch] - Config via env:
MODEL,EFFORT,MECHANICAL=1(mechanical tier),REPO_DIR,PROJECT_RULES(rules file path). - First use after clone:
chmod +x scripts/concilium-review.sh.
Windows (PowerShell 5.1+):
- Claim:
powershell -ExecutionPolicy Bypass -File scripts/concilium-review.ps1 -Claim "<claim>" [-Mechanical] [-RepoDir <path>] [-ProjectRules <file>] - Diff:
... -Diff [-Base <branch>]— reviews the working-tree diff of-RepoDir.
Operational rules (each one is a measured failure — the why is in references/pitfalls.md):
- Run in background with a full ~10 min timeout from the FIRST call. Real reviews take 5–15+ min at high effort; a foreground timeout kills them mid-probe.
- Prefer a fresh session over resuming a timed-out one. Long resumed chains hit context compaction — the reviewer's early careful reading gets lossy-summarized before the final, consequential step.
- Never bare-resume.
codex exec resumesilently resets model AND sandbox to the user's config.toml defaults. If you must resume (or want to switch models mid-session), re-pin everything:codex exec resume -m <model> -c sandbox_mode="read-only" -c model_reasoning_effort=<tier> <session-id> -Flags go BEFORE the positional session id. The key issandbox_mode—-c sandbox=...is silently ignored, and there is no-sflag on resume. Cross-model resume retains context. - The reviewer is a full agent, not a chatbot — read-only sandbox blocks file writes, not read commands or DB SELECTs. Everything it reviews goes to the second model's provider.
- Watch progress live, don't wait blind — and monitor the right stream. The contract (rule 9)
makes the reviewer emit
STATUS:one-liners as it works, and codex writes progressively — but the streams split (verified live): with1> out 2> err, the final five blocks land on stdout while the streaming transcript (banner, STATUS lines, tool calls) goes to stderr. Point a tail/monitor at stderr for progress + failure signatures; read stdout for the verdict. Caveat: PowerShell1>/2>redirects write UTF-16 — decode accordingly (or redirect through a UTF-8-forcing step) before grepping. - A blind round needs structural isolation, not an instruction. When the round must be
unprimed (a blind eval, a framing-critical blind-first pass per request-template), run the
reviewer in a clean directory with auto-rules bridging OFF (
-NoAutoRules/NO_AUTO_RULES=1): a model carrying project context and told to "answer from the packet alone" measurably still uses that context (pitfalls #16–17).
Ratification protocol (the calling session's job)
The reviewer returns five blocks: PROBE / ALT / CAVEAT / VERDICT-PROPOSAL / PHASE-LOG.
Before relaying or acting:
- Read the actual probe (the query/commands), not just the prose summary.
- Extremal results are a tripwire: 0% or 100% on a first attempt usually means a wrong join key, wrong scope, or wrong table — not a discovery. Verify the probe's load-bearing step yourself before accepting it.
- Scope-check disagreements: two probes can both be factually right at different scopes (one table vs DB-wide, one source vs all sources). Name the scope before comparing numbers.
- Distinguish refuted / stale / incomplete. "The numbers differ today" does not mean the claim was wrong when written — check history/timestamps before saying "refuted".
- Assign the final verdict tag yourself:
[V-code](verified vs source, cite file:line) /[V-db](read-only query, cite it) /[V-probe](re-runnable script) /[C](unverified) /[X](refuted — name what supersedes it). The proposal is input, not the answer. - Weigh agreement by lineage. Same-family confirmation (a Claude chair agreeing with a Claude orchestrator) is weak evidence — same-lineage chairs measurably share wrong answers, down to independently producing the identical wrong inference. A cross-family confirmation or refutation outweighs any count of same-lineage votes; never settle a dispute by majority across chairs that share a lineage.
The concilium loop (iterative rounds)
A single review pass is often enough. But when the reviewer's probe has a gap, or you (the orchestrator) disagree with the proposal on defensible grounds, one exchange isn't a concilium — a council deliberates. The loop runs review rounds until the verdict converges or the dispute is proven genuine. This loop is orchestrated by you, the calling Claude session — it is a protocol, not a script (the ratification step is your judgment; nothing can automate it).
Each round:
- Run a review (the wrapper) → get the five blocks → ratify per the protocol above.
- Decide the round's outcome and act:
| Outcome | Condition | Action |
|---|---|---|
| Converged | You verified the probe's load-bearing step and it holds | STOP — emit the final tag. |
| Dispute | The probe has a gap, wrong scope, or you have a specific, evidence-backed objection | Write this round's PROBE + your objection to a rounds file; run the next round with -PriorRounds/PRIOR_ROUNDS pointing at it. |
| Dry | A round adds no new checkable evidence — the reviewer re-asserts, or says (in CAVEAT) it has no new path | STOP — escalate to the owner as [C]/[POLICY] with the open question. This is the anti-oscillation guard. |
| Cap | Round limit reached (default 3) without converging | STOP — present the state and escalate; a real dispute is a finding, not a failure. |
Design rules (they follow directly from the pitfalls):
- Fresh session per round — never a resume chain. The loop is exactly the "long chain"
that pitfall #3 warns about; carry context forward via the
-PriorRoundsfile, notcodex exec resume. Each round starts clean and sees only a compact summary of what was already tried. - Every round must add a NEW evidence path. The contract (rule 8) enforces this on the reviewer side; you enforce it on yours — an objection is only worth a round if it's backed by evidence or points at a concrete, checkable gap. "I'm not convinced" is not a round.
- Ratifier stays fixed (you / Fable); the reviewer can drop tiers as the dispute narrows.
Round 1 on the research tier; once it's down to a mechanical check, run later rounds
-Mechanical. Each round is a real 5–15 min codex call — the cap and the dry-stop are cost controls, not just correctness ones. - Keep the rounds file in durable project storage (not a session temp dir), so the whole deliberation is auditable and the final PHASE-LOG can cite it.
Trigger it when the user asks to "loop", "iterate", "keep going until it's resolved", "have them hash it out", or when a first pass comes back disputed and the stakes justify another round.
Project adaptation
The reviewer sees AGENTS.md, not CLAUDE.md — mind the gap
codex auto-loads AGENTS.md (from the working directory upward), the same way Claude Code
auto-loads CLAUDE.md. They are different files: a project with only a CLAUDE.md gives the
reviewer none of the ground rules Claude has — it reviews half-blind. Three ways to close it,
in order of durability:
- Best (project-level): make
AGENTS.mdexist. Mirror yourCLAUDE.mdinto anAGENTS.md(or makeAGENTS.mda short pointer to it), and keep them synced. This helps all codex usage, not just this skill, and is codex's own supported convention. - Automatic (built into the wrappers): CLAUDE.md bridging. When no
AGENTS.mdis present, the wrapper auto-injects the project'sCLAUDE.md(root or.claude/CLAUDE.md) into the contract and prints a notice, so the reviewer isn't missing rules. Disable with-NoAutoRules/NO_AUTO_RULES=1(e.g. a huge, mostly-workflow CLAUDE.md you don't want in every review). - Curated (explicit):
-ProjectRules <file>. Point at a short, hand-picked extract of the safety-critical rules — this overrides auto-bridging. Best for large instruction files where only a slice is relevant to review (invariants, "never touch X", schema quirks).
If you keep both files but let them drift, the reviewer sees the AGENTS.md version — sync them.
Other adaptation
- If the project keeps a claims ledger, the PHASE-LOG block is a ready-to-paste line
(
Phase N — <reviewer>(<model>) — <date> — <found> [proposed]); append it only via the project's own hygiene rules (typically: owner or main session, append-only). No ledger → drop the block. - Storage: keep probe outputs and frozen samples in a durable project location, never in session-scoped temp dirs (they die with the session).
References
references/request-template.md— how to construct the REQUEST you hand in (your side, not the reviewer's): confidence-tag facts (never "do not re-derive" over a conclusion), always mount the repo/DB, license rejecting the frame, and run a blind-first pass for framing-critical rounds. Read before writing any non-trivial request.references/contract.md— the review contract the wrappers send (edit it there; both scripts load it at runtime).references/pitfalls.md— known issues and the rules that counter them (read when a rule seems overcautious, or when debugging reviewer misbehavior).references/setup.md— first-time setup, calibration bootstrap, and the head-to-head method for picking tier models.
What ships with it: 10 files
54.5 KB alongside SKILL.md, 2 of them executable
evals/
- evals.json2.2 KB
references/
- contract.md2.8 KB
- pitfalls.md10.3 KB
- request-template.md5.6 KB
- setup.md5.1 KB
scripts/
- concilium-review.ps1runs5.2 KB
- concilium-review.shruns3.7 KB
- .gitignore40 B
- LICENSE11.1 KB
- README.md8.6 KB