pi-llm-council
v0.1.1
Published
Multi-model LLM Council for adversarial debate, cross-validation, and synthesized decision-making via pi-teams
Maintainers
Readme
pi-council
Multi-model LLM Council for adversarial debate, cross-validation, and synthesized decision-making.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ claude-opus-4-6│ │ claude-opus-4-7│ │ claude-sonnet-4-6│
│ DRAFTER #1 │ │ DRAFTER #2 │ │ DRAFTER #3 │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
┌────────┴────────┐ ┌───────┴─────────┐
│ gpt-5.4 │ │ gpt-5.3-codex │
│ DRAFTER #4 │ │ DRAFTER #5 │
└────────┬────────┘ └────────┬────────┘
│ │
└────────┬───────────┘
▼
╔══════════════════════╗
║ ADVERSARIAL DEBATE ║
║ (2 rounds) ║
╚══════════╤═══════════╝
▼
┌──────────────────────┐
│ SYNTHESIS │
│ (claude-opus-4-7) │
└──────────┬───────────┘
▼
┌──────────────────────┐
│ FINAL VERDICT │
│ Confidence: 94% │
└──────────────────────┘Installation
pi install npm:pi-councilUsage
As a Tool (LLM calls it)
The council tool is available to the LLM for tasks that benefit from multi-model deliberation:
council({
task: "Design a mass hallucination prevention system",
mode: "full",
debate_rounds: 2
})As a Command
/council Design a caching layer for our API
/council --mode draft Quick brainstorm on auth strategies
/council --rounds 3 --mode critique Review this security implementationConfiguration
# Environment variables
export COUNCIL_MODELS="anthropic/claude-opus-4-6,anthropic/claude-opus-4-7,anthropic/claude-sonnet-4-6,openai-codex/gpt-5.4,openai-codex/gpt-5.3-codex"
export COUNCIL_SYNTHESIZER="anthropic/claude-opus-4-7"
export COUNCIL_ROUNDS=2Or use the council_config tool:
council_config({ action: "set", debate_rounds: 3 })
council_config({ action: "get" })Pipeline
| Phase | What Happens | |-------|-------------| | 1. Parallel Drafts | All models independently answer the task | | 2. Adversarial Debate | Models critique each other through N rounds | | 3. Synthesis | Designated model merges best ideas | | 4. Validation | Optional JSON schema validation with retry |
Modes
| Mode | Phases | Use Case |
|------|--------|----------|
| full | All 4 | Highest quality, default |
| draft | Draft only | Quick parallel brainstorm |
| critique | Draft + Debate | Get diverse critiques without merging |
Models
Default council members:
| Model | Provider | |-------|----------| | claude-opus-4-6 | anthropic | | claude-opus-4-7 | anthropic | | claude-sonnet-4-6 | anthropic | | gpt-5.4 | openai-codex | | gpt-5.3-codex | openai-codex |
Override per invocation or globally via config.
Structured Output
Pass a JSON schema to get validated structured output:
council({
task: "Evaluate these 3 database options",
schema: {
type: "object",
required: ["recommendation", "scores", "reasoning"],
properties: {
recommendation: { type: "string" },
scores: { type: "object" },
reasoning: { type: "string" }
}
}
})The council will retry up to 3 times if the output doesn't conform.
Requirements
- pi (the coding agent)
- API keys for Anthropic and OpenAI (or whichever models you configure)
- Terminal multiplexer (cmux, tmux, iTerm2, Wezterm, or Windows Terminal) for visual pane mode
License
MIT
