npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@roderickoxen/opencode-council

v0.7.0

Published

Multi-agent council plugin for OpenCode — structured debate for hard questions

Downloads

22

Readme

opencode-council

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