@codeninza/aicouncil

A council of frontier models for oh-my-pi: independent opinions → anonymized peer review → chairman synthesis, running on your existing subscriptions (Anthropic, Codex, Antigravity — no API keys).

Packages

Package details

extension

Install @codeninza/aicouncil from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@codeninza/aicouncil
Package
@codeninza/aicouncil
Version
0.4.3
Published
Aug 4, 2026
Downloads
132/mo · 31/wk
Author
codeninza
License
MIT
Types
extension
Size
78.9 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "./index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

aicouncil

A council of frontier models for oh-my-pi. Karpathy's llm-council flow, inside your coding agent, on the subscriptions you already pay for — no API keys, no OpenRouter.

/council <question>
   │
   ├─ Stage 1  OPINIONS    every member answers independently, in parallel
   ├─ Stage 2  REVIEW      every member ranks the anonymized answers (A/B/C/D)
   └─ Stage 3  SYNTHESIS   the chairman reads everything and writes the verdict

One model can be confidently wrong. Several independent answers plus adversarial, anonymized cross-review catch what a single model misses — and the chairman is instructed to surface disagreements, not paper over them.

Install

omp install @codeninza/aicouncil

Or manually: drop this folder into ~/.omp/agent/extensions/.

Setup

Log into the providers you want seated (inside omp):

/login anthropic
/login openai-codex
/login google-antigravity

Check the seats:

/council roster

The default roster is Claude Fable + Claude Opus + Codex + Gemini (Antigravity), chaired by Opus. If a seat shows UNRESOLVED, run /council models to see the exact model IDs your logins expose and set them in your config (below). Model specs are fuzzy — "anthropic/opus" finds claude-opus-* — but exact IDs are safest.

Use

/council should we use SQLite or Postgres for this service?

Manage the roster without touching config files:

/council add anthropic/claude-haiku-5 Haiku    # seat a member
/council remove Codex                          # unseat a member
/council chair google-antigravity/gemini-3-pro # change the chairman
/council roster                                # see the result
/council list                                  # table: seats, positions, last peer rank

Changes persist to your council.json (project-level config wins if it defines the roster).

By default the council also sees a slice of your current session, so "is this plan sound?" works mid-task. The main agent gets a council tool too, so plain conversation works:

ask the council whether this migration strategy is safe

The verdict lands in the chat (and in context, so the agent can act on it). Every run also writes a self-contained HTML dashboard — roster, the 3-stage flow, each seat's opinion with timing/tokens, the anonymization map, a who-ranked-whom matrix, and the Borda leaderboard — plus a markdown transcript, to <cwd>/.omp/council/. Open the latest with:

/council last

While the council deliberates, a live status widget in omp shows each seat thinking, answering, reviewing, and the chair synthesizing — and a live communication graph auto-opens in your browser: every agent is a node, and glowing lines animate while they talk (question → seats, seats reading each other's anonymized answers, everything converging into the chairman). Open it any time with:

/council live

Set liveGraph: false in config to turn the auto-open off.

Config

Create ~/.omp/agent/council.json (user-wide) or <project>/.omp/council.json (per-project, wins). Any subset of keys; the rest fall back to defaults:

{
  "members": [
    { "model": "anthropic/claude-fable-5", "nick": "Fable 5" },
    { "model": "anthropic/claude-opus-5", "nick": "Opus 5" },
    { "model": "openai-codex/gpt-5-codex", "nick": "Codex" },
    { "model": "google-antigravity/gemini-3-pro", "nick": "Gemini" }
  ],
  "chairman": "anthropic/claude-opus-5"
}
Key Default Meaning
members 4 seats { model, nick?, effort? } — any number of seats ≥ 2
chairman anthropic/claude-opus-5 who writes the final synthesis
chairmanEffort high reasoning effort: minimal/low/medium/high/xhigh/max
effort medium default member reasoning effort
maxTokensOpinion / maxTokensReview / maxTokensSynthesis 3000 / 1500 / 4000 per-stage output caps
timeoutMs 240000 per model call
includeSessionContext true prepend recent conversation to the question
contextCharBudget 24000 size of that slice
writeTranscript true full deliberation to .omp/council/
exposeTool true let the main agent convene the council itself

Cost

One run = 2N + 1 model calls (9 with four seats), each drawing on that provider's subscription limits. Reviews are capped small; opinions and synthesis dominate. A failed seat (rate limit, expired login) doesn't sink the council — it deliberates with whoever showed up, and the verdict footer tells you who was missing.

Development

bun install
bun test          # mocked-provider pipeline tests
bunx tsc --noEmit # typecheck against the real omp packages

License

MIT © Koteshwar Rao M