Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opencode-council

opencode-council demo

Multi-agent council plugin for OpenCode — structured debate for hard questions across any domain.

The council runs 4 specialist perspectives (Researcher, Logician, Creative, Critic) in parallel across structured debate rounds, then a Synthesizer produces the final answer. Works for ethics, strategy, policy, science, design — any question where a single perspective is likely to miss something important.


When to use

Good for: complex decisions with genuine trade-offs, ambiguous ethical or strategic questions, policy analysis, design choices where reasonable people disagree, any question where you suspect a single model's first answer is incomplete.

Not for: simple factual lookups ("what is the capital of France?"), closed-ended questions with a single verifiable answer. Research shows debate-style critique can decrease accuracy on factual retrieval tasks — the council is a reasoning tool, not a search engine (Du et al., 2023; Valmeekam et al., 2023).


Install

Add to opencode.json in your project root:

{
  "plugin": ["@roderickoxen/opencode-council"]
}

Or globally in ~/.config/opencode/opencode.json. OpenCode installs it automatically at startup using Bun.


Usage

Three ways to invoke the council:

Slash command (from any agent):

/council Should we migrate our monolith to microservices?

Tool call — the model invokes the council tool automatically when it determines a question warrants multi-perspective debate.

TUI — select the council agent (purple) in the agent picker and type your question directly.


Configuration

Override per-member models in opencode.json. The council uses your default model for all members unless you specify otherwise.

{
  "agent": {
    "council-researcher": { "model": "openai/gpt-4o" },
    "council-logician":   { "model": "anthropic/claude-sonnet-4-6" },
    "council-creative":   { "model": "google/gemini-pro" },
    "council-critic":     { "model": "anthropic/claude-sonnet-4-6" },
    "council-synthesizer": { "model": "anthropic/claude-opus-4-6" }
  }
}
Setting How to set Default
Per-member model agent.council-<role>.model in opencode.json Your default model
Max debate rounds maxRounds arg to the council tool 3
Consensus rule consensusMode arg ("unanimous" or "majority") "unanimous"
Debug transcript debug: true arg to the council tool false

Council members

Role Agent name Mandate Acceptance bar
Researcher council-researcher Provide accurate, evidence-based analysis. Distinguish what is empirically known from what is assumed or speculated. Cite concrete evidence, historical analogues, or documented precedents. Reject claims that lack verifiable evidence, falsifiable criteria, or a way to confirm the promised outcome. Flag unverified assumptions explicitly.
Logician council-logician Provide rigorous logical analysis, identify edge cases, check internal consistency, and evaluate whether conclusions actually follow from the premises. Surface the sharpest counterexample. Reject arguments that contain logical fallacies, ignore stated constraints, paper over edge cases, or whose conclusions do not follow from their premises.
Creative council-creative Challenge the dominant framing. Offer alternative problem definitions, unconventional approaches, and surface second-order effects and human impact that the other perspectives may overlook. Reject solutions that are technically correct but ignore human factors, assume the current problem framing is the only valid one, or fail to account for second-order consequences.
Critic council-critic Identify weaknesses, risks, and blind spots. Play devil's advocate. Accept a proposal only when you genuinely cannot find a credible objection — not when it merely sounds reasonable. Reject arguments that paper over risks, overstate confidence, lack a credible failure model, or rely on assumptions that have not been stress-tested.
Synthesizer council-synthesizer Produces the final answer — not a voting member
Entry point council Routes questions to the council tool Primary agent

Debate protocol

  1. Opening: all 4 members state initial positions in parallel
  2. Rounds (up to 3, configurable):
    • Rotating proposer drafts a resolution
    • All 4 members vote independently against their acceptance bar
    • If not unanimous (or majority, if configured): members respond to objections and the next round begins
  3. Early stop: consensus reached when all votes are "accept"
  4. Synthesis: the Synthesizer produces the final answer covering the council's best answer, points of genuine agreement, unresolved tensions, and the most important open question

Cost

Roughly 5–10× more tokens than a single model call for approximately 15–20% better reasoning on hard questions (Du et al., arXiv:2305.14325). Members run in parallel so wall-clock time is roughly 2–3× a single call.

Use deliberately. The council is not a replacement for a good prompt — it is a tool for questions where that is not enough.


Development

git clone https://github.com/RoderickOxen/opencode-council.git
cd opencode-council
bun install
bun run test   # 77 tests
bun run build  # produces dist/

License

MIT — see LICENSE

About

No description or website provided.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages