Mind stone

Council

Speaks, never acts. The stone that thinks out loud, in assigned seats, on a budget, and then falls silent.

budget operator-set seats: 1+ per cabinet executes: never

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

Field
Meaning
name
Cabinet name.
description
What this cabinet is for.
rounds
How many argument rounds the seats get.
seats[]
One entry per seat: name, provider, model, system.
chair
name, provider, model, system, and thinking_effort of low, medium, high, or max.
local_code_only
Restrict the session to local code.
synthesis_mode
generic or directive_proposal_v1.
hash
Internal.

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.

Cabinet
What it is, and when to choose it
standard
The default room. 3 frontier seats (Grok + Gemini + Opus 4.6) into an Opus 4.8 chair, 2 rounds. Pick it when you just want a good council and no ceremony.
warroom
Maximum-depth 5-seat, 3-round deliberation for high-stakes decisions: CEO, Mirror, Red Team, Constraint, Operator, with a max-thinking chair. The room for decisions that hurt if wrong.
quick
Fast 2-seat, 1-round deliberation, frontier models only. For a topic that does not deserve a full cabinet.
duo
Dialectic Duo: binary debate, one seat argues FOR, one argues AGAINST. For yes-or-no questions where you want the sides forced apart.
checklist-duo
Manual-checklist verification, 1 round. For walking a checklist, not debating a thesis.
code-verify
Read-only local-code verification using CLI agents with explicit provenance, 1 round. For "did this change do what it claims" against the actual tree.
wargame
Experimental military decision-making process (MDMP)-style adversarial wargaming, 3 rounds: Blue develops courses of action, Red attacks them, White holds ground truth, Green scores sustainment. Its own YAML states the kill criterion for removing it.
reflection
Cognitive self-review: Munger, Socrates, Advocate, and Tao seats. For auditing your own reasoning rather than a proposal.
heritage
The 4 original archetypes: Skeptic, Mirror, Strategist, Tao. The lineage room.
trinity
Trust-based three-voice deliberation, 2 rounds, with the strongest available chair earning the synthesis.
sovereign
NVIDIA NIM-only seats, 2 rounds: runs on NVIDIA_API_KEY alone. For deliberating without frontier CLI logins.
freeride
NIM free-tier council of free models proven in live runs. The zero-dollar room.
triad-*
Six 3-seat focused panels, 2 rounds each: architecture, debugging, product, risk, shipping, strategy. Pick the triad named after your problem.
triage*
Machine-output cabinets (triage, triage.canary-novertex) running directive_proposal_v1 synthesis, 1 round. Built for the escalation path, not for conversation.
starter-nvidia
Optional first live run on one free-tier 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

Verdict
Meaning
supported
Evidence found that backs the claim.
consistent
Nothing contradicts it; nothing directly proves it either.
no evidence
The gather returned nothing usable. The claim stays a claim.
contradicted
Evidence cuts against it. With Gate mode on, contradicted claims are redacted from what the next round inherits.

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 searchPostsRecent tool. 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-default Grok 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

Field
Meaning
budget
The USD cap the run was given.
total_cost_usd
What the run actually cost.
total_tokens
Tokens consumed across seats and chair.
total_latency_ms
Wall time the deliberation took.
ruling_digest
Digest of the chair's ruling.
confidence
The recorded confidence of the outcome.

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.sh writes ~/.local/state/irin/runtime/source.json with 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.
  • --discover output 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.