$npx -y skills add Rune-kit/rune --skill councilGathers N independent, decorrelated perspectives across model families (external CLIs when present, subagents when not) and arbitrates inline. Use when a decision needs genuine debate — not same-model echo — for critique, review, or judge calls. Honest about degradation: never cl
| 1 | # council |
| 2 | |
| 3 | ## Purpose |
| 4 | |
| 5 | One coordination primitive that gathers N INDEPENDENT perspectives for any skill needing debate or multi-view judgment. Detects installed AI CLIs → fans a question across distinct model families → degrades gracefully to subagents when no bridge exists → gates off-topic/malformed voices → normalizes claims → **arbitrates INLINE** (no separate arbiter skill — single producer→single consumer is YAGNI). |
| 6 | |
| 7 | Council's entire value proposition is *decorrelated* model bias — two different architectures independently reaching the same conclusion is signal; two instances of the same model agreeing is an echo. council refuses to launder the second case as the first. |
| 8 | |
| 9 | <HARD-GATE> |
| 10 | If fewer than 2 distinct real `model_family` values answered (excluding `is_fallback` voices AND voices with `model_family: "unknown"` — unconfirmed wrapper-CLI backends, see `references/dispatch-protocol.md` §Detect), council MUST stamp the run `NO_DECORRELATION` and the Arbitrate step MUST NOT use consensus language ("voices agree", "consensus view", "the panel concludes"). Say what happened instead: "N subagents of the same model family produced overlapping output — treat as one perspective, not independent confirmation." |
| 11 | </HARD-GATE> |
| 12 | |
| 13 | ## Triggers |
| 14 | |
| 15 | - Called by `adversary` — Step 0.6, mode=critique, for plans flagged high-risk/critical-path/expensive-to-reverse |
| 16 | - Called by `review` — Step 1.6, mode=review, when blast radius is 50+ callers with a HIGH-severity change |
| 17 | - Called by `brainstorm` — Step 3.75, mode=judge, Design-It-Twice Mode only, when N=4 spawned for a remote/external dependency, diversity landed in the 0.4-0.59 marginal band, or the user requests a second opinion on which candidate design is strongest |
| 18 | - Called by `problem-solver` — Step 6.5, mode=judge, when a one-way-door decision has a high-impact top solution, or the ethical dimension check surfaced a severe harm/fairness concern |
| 19 | - `/rune council <question>` — manual multi-perspective gathering on any question |
| 20 | - Auto-trigger: none (always explicit — council is expensive relative to a single pass, callers opt in) |
| 21 | |
| 22 | ## Calls (outbound) |
| 23 | |
| 24 | None at the skill level — council dispatches via `Bash` (external CLI bridge) and `Task` (subagent fallback) directly. It does not call other Rune skills. |
| 25 | |
| 26 | ## Called By (inbound) |
| 27 | |
| 28 | - `adversary` (L2): Step 0.6 — decorrelated critique before red-teaming a high-risk plan |
| 29 | - `review` (L2): Step 1.6 — decorrelated bug-finding when blast radius escalation fires |
| 30 | - `brainstorm` (L2): Step 3.75 — decorrelated judgment on which Design-It-Twice candidate is strongest, narrow trigger only |
| 31 | - `problem-solver` (L3): Step 6.5 — decorrelated judgment on whether a high-stakes framework conclusion holds (documented L3→L3 coordination) |
| 32 | - User: `/rune council` direct invocation |
| 33 | |
| 34 | ## Data Flow |
| 35 | |
| 36 | ### Feeds Into → |
| 37 | |
| 38 | - `adversary` (L2): `CouncilResult.agreement` → seeds Step 6 Verdict with cross-family-verified findings instead of (or alongside) single-pass analysis |
| 39 | - `review` (L2): `CouncilResult.agreement` → seeds Step 6 Report's CRITICAL/HIGH findings for the escalated symbol |
| 40 | - `brainstorm` (L2): `CouncilResult.agreement` → seeds Step 4 Recommend with cross-family-verified judgment on the strongest candidate design, alongside (never replacing) the diversity score |
| 41 | - `problem-solver` (L3): `CouncilResult.agreement` → seeds Step 6's top solution with a cross-family-verified soundness check before Step 7 communication structuring |
| 42 | - `.rune/council/run-*.json`: every run's full result — free tier owns this schema; Pro Council Cockpit (deferred, Phase 2) reads it for a live panel |
| 43 | |
| 44 | ### Fed By ← |
| 45 | |
| 46 | - Caller's `PerspectiveRequest` — question, mode, n, diversity constraints, evidence requirements (see `.rune/council-voice-contract.md`) |
| 47 | - `.rune/runtimes.json` — cached CLI detection from the current session (council writes this in Step 1, OR `sentinel-env --agents` may have pre-written it during env pre-flight — same council-owned schema, council's Step 1.1 cache-reuse path picks up whichever wrote first) |
| 48 | |
| 49 | ## Workflow |
| 50 | |
| 51 | Contract source of truth: `.rune/council-voice-contract.md` (Voice v2). This section is the executable protocol; the contract file is the schema. If the two disagree, the contract wins — update this file to match, don't silently drift. |
| 52 | |
| 53 | ### Step 1: DETECT |
| 54 | |
| 55 | 1. Check for a cached runtime report at `.rune/runtimes.json`. If it exists and is from the current session (same date), reuse it — skip to |