agentleFS
LARIkozLARIkoz/cli-council/skills/consilium/SKILL.md

consilium

Skill1 starsChanged 8 days agoMITView on GitHub

Convene a multi-model DECISION council on the cli-council engine (`council decide`) — several independent subscription-CLI models recommend, anonymously peer-rank, a chairman synthesizes ONE audit-gated recommendation with action tiers. Auto-use when the user wants MORE than a single-model answer on a genuine decision or trade-off — convening a council / a consilium / a second opinion from several models, deciding between clear alternatives with real trade-offs, or asks for a consilium or council by name, in English or Russian. Each run spends a few wall-minutes across the CLIs you already authed ($0, no API keys) — reserve it for decisions worth that, not trivial or quick-fact questions (for those, just answer directly).

6 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions6 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 6

    1. alxyrgin/health-os★ 38same name
    2. edloidas/skills★ 2same name
    3. 3952801-sudo/claude-code-master-agent★ 1same name
    4. kavyrshin/Consilium★ 1same name
    5. AndreySukhanov/memento★ 0same name
    6. specscore/specstudio-skills★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository2 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

6 rules. 0 are common, 1 is distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 4 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Input: If this ran as /consilium <decision>, that argument is the decision.

    line 9
  2. Very specific:

    Run an Exa search on the decision's factual premises BEFORE launching the council and put the findings, with their URLs, into question.md: …

    line 41
  3. Distinctive:

    Self-bias safeguard: write the initial lean BEFORE launching the voices.

    line 138
  4. Very specific:

    All fallback features are opt-in via council.toml — a fresh install with no fallbacks configured behaves identically to before.

    line 154
  5. Very specific:

    Every consilium runs all four outside voices: Gemini (agy), Grok (grok-p), Muse (muse-batch) and the OpenAI voice: ChatGPT Chat, falling …

    line 174
  6. Very specific:

    After the run, check pipeline-status.json: every voice in reviewers, none in opinion_errors.

    line 189

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Convene a decision/opinion council on the cli-council engine (council decide).

Input. If this ran as /consilium <decision>, that argument is the decision. If it auto-triggered from the conversation, extract the decision to weigh yourself — the forks, the constraints, and what a good answer must address. If the decision is empty or too vague to frame, ask ONE clarifying question before firing (a run is $0 via the user's subscriptions but burns a few minutes of wall time). If the request is a trivial or quick-fact question, do NOT convene the council — just answer.

What this is

A decision/opinion council on the cli-council engine (council decide, pipeline.run_decide_pipeline) — the SAME engine as consreview, pointed at a DECISION instead of a diff. One council decide call runs the whole shape: every enrolled voice gives a recommendation → anonymized peer-ranking → a chairman synthesizes ONE recommendation with the action tiers → a mandatory audit panel gates it (worst-wins — a rule, not a chairman, so no model can soften the gate). Decision mode = recommendations + trade-offs + action tiers, NOT code-review SHIP/FIX verdicts. $0 (subprocess to the subscription CLIs you authed), stdlib-only.

Why audit but no redteam by default: a redteam refutes a claim — high-signal for code (a bug is true or false), but a decision has no ground truth to refute. The load-bearing guard for a recommendation is the audit — is the synthesis faithful to the raw voices (no invented convergence, misattribution, or action-tier inflation). Opt into adversarial pressure on the recommendation with --redteam.

Voices: whatever you enrolled in council.toml ([council].voices, and the [decide] audit/redteam panels). A decision needs ≥3 model families — a family quorum, so no single vendor's models decide alone; the shipped council.example.toml enrols a diverse keyless CLI roster that clears it. Two voices of one house (e.g. two Claude models) count as one family.

Step 0 — Exa grounding (before any voice runs)

Run an Exa search on the decision's factual premises BEFORE launching the council and put the findings, with their URLs, into question.md: facts, not guesses. If Exa fails, label the run "ungrounded" in the question and in the report. Consilium is not a review loop:

  • the prompt asks each voice for its perspective, not for bugs;
  • the output is opinions with arguments, one round, then a synthesis and the user decides;
  • Claude is the synthesiser, not a vote counter: one unique minority insight can outweigh five agreeing voices; resolve by the project concept and the evidence.

Procedure

  1. Preflight. council must be on PATH (run the repo's install.sh, or put bin/ on PATH) and council.toml must enrol your voices — the blessed path is python3 installer/doctor.py enroll agy grok muse chatgpt (the roster below; a re-enroll keeps the chairman already in council.toml): it re-smokes each and writes a GATED config with the [decide] audit panel already filled in from your voices. Hand-copying council.example.toml works too, but its [decide] block ships commented out — leave it commented and the run is unverified (no audit gate, no AUDIT_VERDICT.md). The engine auto-discovers council.toml (cwd or the repo root); an explicit --config <path> to a file that doesn't exist fails loud (it won't silently fall back to one voice).
  2. Frame the decision → write it to a file so a long / multi-line decision pipes cleanly on stdin (the engine reads a positional arg OR stdin):

    DIR="$(mktemp -d)/consilium"; mkdir -p "$DIR"
    # write the framed decision to "$DIR/question.md": state the forks, the constraints,
    # and what a good answer must address — a decision, not a vague prompt.
  3. Run the decision council (background it — a few minutes with the slow reasoning voices and the audit panel):

    council decide --out "$DIR" < "$DIR/question.md" 2>"$DIR/engine.log"
    echo "exit=$? · dir=$DIR"; tail -12 "$DIR/engine.log"
    • A short one-liner instead of the file: council decide "<the question>" --out "$DIR".
    • --redteam requested → append --redteam <v1,v2> (a lean adversarial panel that stress-tests the recommendation; off by default because a decision has no ground-truth claim to refute).
    • --no-verify → append --no-verify — skips the audit panel → status unverified, no gate. Use only for a quick unguarded opinion sweep; an unverified run is NEVER reported as a clean recommendation.
    • --voices a,b,c narrows the roster; --chairman X changes the synthesizer. Peer-ranking is intrinsic — there is no --no-rank.
    • Non-zero exit = the council itself failed — all voices dead, or fewer than 3 model families answered (the family-quorum abort) — read engine.log. A degraded status is exit 0: a gate flagged the synthesis (steps 5–6).
  4. Artifacts in $DIR: SYNTHESIS.md (the recommendation) · v-<voice>.md (raw recommendations) · a-<voice>.md (audit panelists) · AUDIT_VERDICT.md · RANKINGS.md · MECHANICAL.md · pipeline-status.json (machine-readable gate) · PIPELINE_DEGRADED.md (only when not clean) · decide_prompt.md (the exact prompt). With --redteam: also REDTEAM_VERDICT.md + r-<voice>.md. Read pipeline-status.json first for the verdict, then the prose in SYNTHESIS.md.
  5. Read pipeline-status.json + SYNTHESIS.md + AUDIT_VERDICT.md (+ RANKINGS.md) and report:

    • Recommendation (the one-line lead of SYNTHESIS.md) + per-voice stances (which voices converged / which split) + status (clean / degraded [finding|infra| mixed] / unverified) + opinion_errors.
    • Peer leaderboard (RANKINGS.md): top / bottom voices. A weighting SIGNAL only — never present rank as proof, and never drop a voice because of rank.
    • Key convergences (2+ voices) with verbatim quotes · disagreements.
    • Audit verdict — AUDIT_VERDICT.md first line # CLEAN | ISSUES | INVALID (worst-wins across panelists) + which panelist(s) set it. (redteam = SKIPPED on a default run — expected; a REDTEAM_VERDICT.md appears only with --redteam.)
    • Action classification — SYNTHESIS.md headings `## BLOCKER / ## IMPORTANT /

      CHECK / ## ACCEPT / ## NOISE`. Present in that order.

    For CHECK items, verify before presenting as actionable. For BLOCKER/IMPORTANT items with specific numbers/paths, spot-check against the actual source/data first.

    status: degraded is NOT a failure — a gate flagged the synthesis. degraded_kind: finding = a verifier caught a real problem (hand-verify before applying); infra = a verifier or the chairman synthesis couldn't complete (re-run); mixed = both.

  6. 🚨 Re-synth gate — MANDATORY when AUDIT_VERDICT is ISSUES / INVALID: do NOT apply raw SYNTHESIS.md. The engine gates but does not auto-re-synth (an auto-loop would let the panel out-vote a correct minority). Re-synth + primary-source verify: a. Read each v-*.md directly (don't trust SYNTHESIS.md counts) + the flagging a-*.md. b. Rebuild by hand: recount convergences, drop inventions (phrases not literally in any voice), fix attributions, add missed convergences. c. Verify each claim with a concrete identifier (number, %, date) — 2+ independent sources. d. Apply only verified; consilium-only = tentative; disproven → drop.

Auto-Consilium (auto-decide)

  • Activation: the user says "auto-decide"; it stays on until "stop auto-decide" or the session ends.
  • Scope: the implementation phase only. Discovery, research and plan decisions always go to the user.
  • Rule: where Claude would ask the user an implementation question, it runs this skill's council instead and acts on the synthesis. At most 5 auto-consiliums per task. A wrong answer that costs under 1 h of rework → decide; one that costs over a day → ask the user.
  • Never auto-decided (always ask the user): permission-gated actions, spending over $1, scope expansion, security decisions, anything contradicting the concept or charter.
  • Self-bias safeguard: write the initial lean BEFORE launching the voices. Confidence high (3 of 4 voices or more, plus evidence) → decide; medium (2 of 4) → decide with caution; low (split or weak) → ask the user. A council that merely confirms the lean with less than high confidence → ask the user.
  • Log: append to the project's consilium-log.md: question, initial lean, votes, audit verdict, confidence, decision.

Fallback chain (optional)

Voices can declare fallbacks = ["name1", "name2"] in council.toml. If the primary fails (usage limit, version error, timeout), fallbacks are tried in order; the first success wins. A dead-provider cache ensures a failed primary is skipped instantly on subsequent stages (stage 2/3/panels pay zero retry cost). Codex voices can add auth_check for a quick usage-limit preflight (~20s instead of 30min hang). SSH-based fallback providers (bin = "ssh") get automatic ControlMaster warm-up at pipeline start.

All fallback features are opt-in via council.toml — a fresh install with no fallbacks configured behaves identically to before.

Dependencies

  • cli-council on PATH (bin/council → python3 -m council; Python 3.11+, stdlib only)
    • a council.toml enrolling your voices (per-machine, git-ignored — copy council.example.toml).
  • The subscription CLIs you enrolled, each authed (python3 installer/doctor.py smoke <voice> PASSES).

Related

  • consreview — code-review council on the same engine (council review; it adds a redteam panel — a bug has ground truth to refute).
  • commands/consilium.md — the explicit slash-command form of this exact procedure.
  • Engine internals: council/{decide,pipeline,audit,stages}.py.

Required roster (2026-10-01)

Every consilium runs all four outside voices: Gemini (agy), Grok (grok-p), Muse (muse-batch) and the OpenAI voice: ChatGPT Chat, falling back to dot, then Sol (gpt-6.1-sol), for an ordinary council (owner rule 2026-10-21), Astra (gpt-6-astra at "extra" = xhigh) for a heavy one (skill codex-cli, section "Sol or Astra — which one"). The roster, routes and fallbacks live once, in the global contract (~/.claude/rules/team-rules.md, from claude-setup contract.md, section "Review Cycle", "The four outside voices"); this section only says how this skill meets it.

  • council.toml enrols agy, grok, muse, chatgpt by default (chairman chatgpt; both use the chain chatgpt → dot → sol; sol on a Mac without a Chat route; decide audit agy, grok, muse), so the procedure's bare council decide runs them; a heavy decision (costly trade-off, or stuck after a Sol council) runs --voices agy,grok,muse,astra --chairman astra. Never pass a --voices list that drops a family. The Claude voices, the terra/sol codex voices and agy38 remain opt-in.
  • After the run, check pipeline-status.json: every voice in reviewers, none in opinion_errors. Since 2026-10-01 a missing voice makes the run degraded (required voice <v> missing). Four houses leave a family-quorum margin of one: two missing voices abort the decide.
  • A missing voice is re-probed and re-run, never replaced by another model (no Qwen, DeepSeek, Mistral, default Codex, Claude or OpenRouter stand-in); if it still cannot run after both routes and retries, report it as missing.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.