Mind stone
Council
Speaks, never acts. The stone that thinks out loud, in assigned seats, on a budget, and then falls silent.
The discipline
Council is multi-model deliberation, not a chat room. Seats are assigned, rounds are counted, and the ruling is written down.
Assigned seats stream arguments across rounds. The operator can intervene between rounds, a validator can check claims, and the chair files a ruling at the end. When an ambiguous Escalation arrives, Council adjudicates it and emits a bounded Directive. It does not execute anything, ever.
Thought is rare, so it is budgeted: every run gets a USD cap and provider calls have bounded timeouts. The gauntlet does not do infinite meetings.
The one-rule summary
Council may speak, sign nothing, and touch nothing. Rulings and Directives are words with structure; the action path belongs to other stones, and only after the human says so.
The CLI
One binary, many levers. Every row below is copyable, and every tag says whose lever it is.
council --discover
OperatorNon-billable transport scan. Reports which provider CLIs are present on this machine. Presence only: it says nothing about whether the login behind them is valid.
council "Should we split the parser crate?"
OperatorRun a deliberation on a topic with the standard cabinet. Tear-down is the default mode, so a no-go is a permitted outcome.
council --quick "Ship the hotfix tonight?"
OperatorThe quick path for a topic that does not deserve a full cabinet.
council --cabinet triad-risk "Launch on the holiday weekend?"
OperatorPick a named cabinet instead of the default. The roster ships 21 of them; see the cabinets section below.
council --pathfind "How do we migrate the store?"
OperatorPathfind mode: objections must come with a path. No veto without a route forward.
council --harden --map ./src "Attack this design."
OperatorHarden mode: adversarial findings, each with a concrete fix. Often paired with --map ./src so the seats argue over real code.
council --pathfind --then-tear-down "Bet the release on the new cache?"
OperatorCombined mode: find the path first, then let tear-down try to break it.
council --map ./src "Review the hot path."
OperatorMap a code path into the session so seats deliberate over the actual tree, not a summary of it.
council --recall "auth timeout"
OperatorSearch the precedent index for past sessions matching these terms.
council --budget 0.50 "Rewrite the scheduler?"
OperatorUSD cap per run. Thought is rare and it is also metered.
council --context notes.md "Continue the design review."
OperatorFeed a notes file into the session as context for every seat.
council --validate "Is the vendor claim about latency true?"
OperatorTurn on Sheldon, the between-round claim validator. Each round's factual claims get checked against gathered evidence before the next round; see the Sheldon section below.
council --no-frame-check "A prompt you already audited."
OperatorSkip the round-1 embedded-assumption scan that otherwise runs by default. See Frame Check below before you make a habit of this.
council --smoke-provider claude_code "Reply with the word ok."
EngineeringOne live, billable call to verify a seat actually works. This, not --discover, is the proof that a transport is authenticated.
council --smoke-model claude-opus-4-6
EngineeringThe model-level twin of --smoke-provider: smoke one specific model.
council --reindex
EngineeringRebuild sessions/index.jsonl, the precedent index.
council --serve --port 8765
OperatorRun the Council API and WebSocket server on loopback, the surface the War Room talks to.
Cabinets: who sits at the table
A cabinet is a chair plus one or more seats plus a round count, declared in YAML. The file stem is the cabinet's key, and it must match ^[a-z0-9][a-z0-9_-]{0,63}$.
Cabinet schema
name, provider, model, system.name, provider, model, system, and thinking_effort of low, medium, high, or max.generic or directive_proposal_v1.Modes are flags, not fields
Mode is a CLI or session flag, never a YAML field. The shipped modes and tags, per docs/cabinets.md:
tear-down: the default. A no-go is a permitted outcome.pathfind: objections must come with a path.harden: adversarial findings with concrete fixes.pathfind-then-tear-down: route first, wreck it second.- Also:
recall,blind,wargame,premortem. - War Room direct-fire tags:
contrarian,munger,kiss,specops,premortem.
The roster: 21 shipped cabinets, and why you would pick each room
A cabinet is a room with a temperament. Descriptions below are the cabinets' own, from their YAML files. In War Room, chips also show seat count, round count, and any providers you are missing; a cabinet needing a transport you lack stays visible with a need <provider> note and is never silently rerouted.
NVIDIA_API_KEY alone. For deliberating without frontier CLI logins.triage, triage.canary-novertex) running directive_proposal_v1 synthesis, 1 round. Built for the escalation path, not for conversation.NVIDIA_API_KEY. Its seat models must be in config/nim-invokable-allowlist.txt, and the allowlist is a snapshot, not a guarantee.The canonical example: standard.yaml
rounds: 2
seats:
- name: Strategist
provider: grok_hermes
model: grok-4.3
- name: Mirror
provider: gemini_agy
model: gemini-3.1-pro-preview
- name: Operator
provider: claude_code
model: claude-opus-4-6
chair:
provider: claude_code
model: claude-opus-4-8
thinking_effort: high
ReferenceThree seats, two rounds, one high-effort chair. Fields not shown follow the schema above.
Sheldon: the evidence check
Sheldon is load-bearing. It is the between-round claim validator: after a round of seat responses, it checks the factual claims made in that round and returns a verdict per claim before the next round or the chair ruling. It does not gate whether a round runs; it gates what gets treated as an established fact inside the deliberation.
What a verdict looks like
Where the evidence comes from
Before the validator model runs, Council gathers bounded evidence for it, in this order of preference:
- Provider evidence: Exa, Tavily and Tavily News, Firecrawl for cited URLs, and optional Semantic Scholar. The primary path; needs no xmcp instance.
- Live X posts, optional: if a local xmcp instance is reachable, Sheldon calls only its
searchPostsRecenttool. It never reads a personal bookmark or intel corpus, and xmcp being down means that evidence is simply absent, not an error. - Direct Grok fallback: if the gather returns nothing, Council falls through to the
grok-cli-defaultGrok Build seat, which keeps its own native web and X search directly against the provider, not through Gateway.
One boundary worth repeating
Gateway transport does not itself supply native web or X search. A governed route must not be read as inheriting Sheldon's evidence tools. And Sheldon is opt-in per run: the --validate flag on the CLI, the Validate toggle in War Room, with a validator provider picker and the optional Gate mode.
Frame Check and the Scope Auditor
Sheldon checks what the seats said. These two check what the seats were asked. A poisoned premise upstream beats good reasoning downstream every time, so the prompt gets audited too.
Frame Check: the round-1 assumption scan
On by default. Before round 1 fans out to the seats, a small utility model scans the assembled prompt for embedded assumptions, the anti-prompt-poisoning pass. Each finding is marked as an ASSUMPTION with a matching VERIFY instruction, so every seat reasons with the assumption flagged instead of inheriting it silently; a clean prompt comes back CLEAN. It costs roughly 500 tokens.
The role runs a cascade defined in roles.yaml (grok-4.3 first, then grok-4.20-0309-reasoning, a NIM Mistral, and gemini-3.5-flash), pinnable via COUNCIL_FRAME_CHECK_MODEL. Skip it with --no-frame-check on the CLI or the Frame check toggle in War Room; it is disabled automatically for local_code_only cabinets.
Scope Auditor: declared, not yet wired
The Scope Auditor is the step beyond Frame Check: a scoped investigator for steering detection and boundary review, anti-framing and scope discipline. It is meant to catch operator steering, loaded framing, and scope creep across the whole proceeding, not just the opening prompt. The role and its model cascade exist in roles.yaml, and the toggle exists in War Room.
The exact caveat
- The toggle is a preview: its full streaming enforcement is not yet implemented.
- The flag is parsed and the request is logged to the operator log, then ignored for that run. The engine message reads: "scope_auditor requested (Scope Auditor / steering detection). Engine wiring not yet implemented per the spec. Flag parsed but ignored for this run."
- Nothing about a Scope Auditor result should be claimed for any current session, because there is none.
The record: what a session leaves behind
Deliberation is ephemeral; precedent is not. Every completed session is written down so future councils can stand on it.
Precedent and retrieval
Completed sessions become PrecedentEntry lines in sessions/index.jsonl. Retrieval produces a RetrievalReceipt: the ranker (hybrid-v1 or keyword-v1), the query, and per-hit session id, score, and why-matched. That one receipt feeds prompt injection, the precedent_loaded event, and session.precedent_ids identically, so what the seats saw is exactly what the log says they saw.
The keyword precedent path is separate from the War Room semantic embedding search. Two search systems, two purposes; do not conflate them.
What a session records
Sheldon validation
Run with --validate and Sheldon checks the claims. Each round gets a validation_report, and every claim lands one of four verdicts: supported, consistent, no evidence, or contradicted. The full evidence stack and its boundaries live in the Sheldon section above.
Five artifacts you must not conflate
- Source receipt:
irin-runtime.shwrites~/.local/state/irin/runtime/source.jsonwith origin, branch, SHA, and cleanliness. - Precedent RetrievalReceipt: what past sessions were injected, and why.
- Ed25519 Gateway audit ledger: the signed record of routed calls.
- Watch hash-chained fires: the Sentinel's tamper-evident observation log.
- Signed Outbox directive: an action artifact. Ordinary deliberation NEVER creates one.
The honest limits
Fine print, read before you assemble
- Deliberation does not guarantee correctness. A ruling informs your call; it does not make the call.
- Discovery does not prove a credential is authenticated. CLI binary presence is not a valid login; the first real seat call is the proof.
- A multi-seat council needs at least 2 usable transports.
- Provider and model names churn per account. What ships today may rename tomorrow.
--discoveroutput is authoritative for the current commit only.- Partial seats stay visible at reduced emphasis with a
need <provider>note. They are never silently dropped or rerouted.