agentsclimarketplace

Agent council

Skill magnus919/agent-skills/agent-council

Curated collection of AI agent skills for Hermes and other agent frameworks

Install
npx -y skills add magnus919/agent-skills --skill agent-council

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 25 days oldThe repository was created 25 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 21 stars21 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Multi-agent structured debate system. Spawn a panel of expert agents to debate any question, with convergence-aware iteration and typed synthesis output. Run via `agent-council` CLI. Compatible with any AI agent harness that supports agentskills.io skills (Claude Code, Cursor, Hermes Agent, OpenHands, etc.).

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

16.2 KB, as published. Nobody here has run it

Agent Council

Spawn a panel of expert agents to debate any question. The council runs a structured protocol — compose, premortem, position, cross-examination (iterative), synthesis — and produces a decision landscape with convergence diagnostics.

When to Use

Invoke the council when any of these apply:

  • The question has genuine tradeoffs with no clear correct answer
  • You want multi-perspective analysis to surface hidden assumptions
  • A decision would benefit from adversarial collaboration
  • You want confidence diagnostics (not just a recommendation)
  • The question has high stakes or irreversible consequences

Signal phrases: "Let's get multiple perspectives on this" / "Debate this: X" / "What would experts say about X" / "What are we missing?"

Quick Start

1. Install

# One-time setup
pip install pydantic-ai
pip install agent-council

# Or install from this skill directory:
python3 scripts/bootstrap.py

2. Configure

export AGENT_COUNCIL_API_KEY="sk-..."
export AGENT_COUNCIL_MODEL="openai:gpt-5.6-luna"

3. Run

agent-council "Should we use Postgres or SQLite for this service?"

Command Reference

agent-council [OPTIONS] <question>

Options:
  --agents, -n {3,4,5,6,7}  Number of agents (default: 5)
  --mode, -m {quick,medium,deep}  Debate depth (default: medium)
  --profiles TEXT          Comma-separated profile names from the hermes-profiles
                           library (e.g. "debugger,researcher,product-manager")
  --persona-file PATH      JSON file with custom agent personas
  --json                   Output structured JSON instead of markdown
  --verbose, -v            Show phase-by-phase progress
  --max-rounds INTEGER     Max cross-examination rounds (default: 4)
  --convergence FLOAT      Convergence threshold (default: 0.10)

Mode Selection

ModeAgentsRoundsWhen to use
quick31 cross-examine roundLow-stakes check, fast answer needed
medium (default)5Eval-driven, up to 4 roundsStandard decisions
deep7Eval-driven, up to 4 roundsHigh-stakes, hidden assumptions

Profile Selection

In a recursive source checkout, the council auto-selects relevant real professional profiles from the included hermes-profiles library. Each profile has a SOUL.md — an identity document with real methodology, values, and operating principles — rather than a fabricated persona. Pip and wheel installs do not bundle that library; use generated or user-supplied personas instead.

Auto-selection

When no --profiles flag is given, the council scores each profile's description against your question using keyword overlap. The top N most relevant profiles are selected. This works best for focused, single-domain questions.

Explicit selection

agent-council --profiles debugger,data-scientist,product-manager "What architecture should we choose?"

Comma-separated profile names. Available profiles include: ceo, cfo, cmo, coo, cpo, cto, curator, data-architect, data-engineer, data-scientist, debugger, editor, frontend-engineer, ml-engineer, orchestrator, product-manager, researcher, reviewer, security-engineer, site-reliability-engineer, technical-architect, technical-writer, ux-designer, verifier, wonderer, writer, and more.

Choosing a Profile Source

Three ways to populate the council, with different tradeoffs:

MethodBest forDiversitySetup
--profiles (auto-select)Single-domain questions with clear keywordsHigh — profiles have real SOUL.md methodologyRecursive source checkout required
--profiles name1,name2Targeted debates where you know the stakeholdersHighest — you pick specific methodological voicesRecursive source checkout and profile names
--persona-file file.jsonFull control over agent identities, custom domainsVariable — depends on how you design themCreate a JSON file
Auto (no flag)Default — uses profiles if available, falls back to generatedGood — varies with available profilesNo setup for generated personas; recursive source checkout for real profiles

For most cases, let it auto-select or use --profiles with 3-5 names. Only use --persona-file when you need specific invented expertise that doesn't map to any existing profile.

Custom personas (fallback)

If the profile library is unavailable or you want full control, use --persona-file to supply your own persona definitions. If neither --profiles nor --persona-file is provided, the council auto-selects profiles from the library; if the library is missing, it falls back to LLM-generated personas.

How It Works

Pipeline

Compose ──► Premortem ──► Position ──► Cross-examine ──► [eval] ──► Synthesis
  (1)        (parallel)    (parallel)    (iterative loop)    ↑        (1)

                    ┌── converged ──────┐
                    ├── diminishing_ret │
    eval ───────────┼── genuine_disagr──┼──► Synthesis
                    └── continue ───────┘
                          ↓
                   Cross-examine (next round)

Phases

PhaseWhat happensMethod
ComposeA single LLM call generates N expert personas tuned to the question1 call
PremortemEach agent independently imagines how the decision already failed — bypasses positional commitment biasN parallel calls
PositionEach agent forms an independent position, referencing their own premortemN parallel calls
Cross-examineEach agent reads all other positions and responds — concedes, disagrees, updates confidenceN parallel calls per round
EvalConvergence detection: measures dispersion, argument novelty, concession rate. Decides whether to loop or stopAlgorithmic
SynthesisCollates all phases into a structured decision landscape with LLM-generated narrative1 call

Convergence Detection

The council doesn't use a fixed number of rounds. After each cross-examination round, it measures:

  • Confidence dispersion — standard deviation of agent confidence scores. Below threshold = converged.
  • Argument novelty — new arguments not seen in prior rounds. Near zero = diminishing returns.
  • Concession rate — points where agents shifted position. Zero + no new arguments = stalled.

Stopping conditions:

ConditionMeaning
convergedDispersion below threshold, confidence stable. Genuine agreement.
diminishing_returnsNo new arguments or concessions. Nothing more to surface.
genuine_disagreementDispersion widened, positions hardened. Summary of irreducible tension.
max_roundsHard cap reached. Inconclusive — principal must decide.

Bootstrapping

If agent-council is not available on PATH, the invoking agent should run:

python3 scripts/bootstrap.py

This installs the package from the skill directory using the current Python's pip, falling back to pipx. No PyPI dependency for the bootstrap path — the package ships inside the skill directory.

If bootstrap fails: Run one of these manually:

pip install pydantic-ai
pip install agent-council

# Or from this directory:
python3 -m pip install -e /path/to/agent-council/

Configuration

Env varRequiredDefaultDescription
AGENT_COUNCIL_API_KEYYesAPI key for your LLM provider
AGENT_COUNCIL_MODELNoopenai:gpt-5.6-lunaModel string (provider/model)
AGENT_COUNCIL_BASE_URLNoProvider defaultCustom API endpoint (OpenRouter, LiteLLM, etc.)

You can set these as environment variables or create a .env file in the directory you run agent-council from:

# .env file
AGENT_COUNCIL_API_KEY=sk-...
AGENT_COUNCIL_MODEL=openai:gpt-5.6-luna

Environment variables take precedence over .env file values.

Model strings follow PydanticAI convention: openai:gpt-5.6-luna, anthropic:claude-sonnet-4-20250514, deepseek:deepseek-v4-flash, google:gemini-2.0-flash.

Output

The synthesis report is a structured decision landscape. In markdown mode it includes:

  1. Confidence dispersion table — per-round confidence metrics with diagnostic
  2. Shared risks — failure modes from the pre-mortem (pre-positional, uncontaminated)
  3. Shared concerns — what survived cross-examination as genuine shared risk
  4. Remaining disagreements — positions that did not resolve
  5. Assumptions per position — what must hold for each position to be valid
  6. Principal's path — narrative synthesis of the decision landscape

Use --json for programmatic consumption. The JSON output follows this structure:

{
  "question": "string",
  "mode": "quick|medium|deep",
  "num_agents": 3,
  "rounds_completed": 2,
  "stopped_reason": "converged|max_rounds|diminishing_returns|genuine_disagreement",
  "confidence_history": [
    {"round": 1, "mean_confidence": 0.74, "dispersion": 0.061, "new_arguments": 20, "concessions_made": 17}
  ],
  "shared_risks": [{"description": "...", "severity": "low|medium|high", "phase_discovered": "premortem"}],
  "shared_concerns": ["..."],
  "disagreements": [{"topic": "...", "positions": {"agent_a": "position_a", "agent_b": "position_b"}}],
  "assumptions_per_position": {"agent_name": ["assumption1", "assumption2"]},
  "principal_path": "narrative text"
}

Claims Verification

Every synthesis output includes a post-debate verification scan. A separate LLM call reads the narrative synthesis and identifies any claims about verifiable external facts (domain availability, package namespace status, pricing, statistics) that the debate could not have verified from its own reasoning. Flagged claims are appended as a ⚠️ Claims Not Verified section:

⚠️  Claims Not Verified
The following assertions in this synthesis could not be verified
by the council's own reasoning and should be checked before acting:
  • "Dialekt passes all five checks..." — domain availability:
    No evidence the council checked domain registries

This is not a rejection of the synthesis — it is a quality signal. Claims in this section should be treated as hypotheses to verify, not as facts.

Reading the Convergence Diagnostic

The confidence dispersion table tells you whether the debate was productive:

PatternMeaningWhat to do
Mean confidence DROPPED, dispersion WIDENEDCouncil surfaced genuine doubt — healthy debateTrust the shared concerns; investigate the newly surfaced risks
Mean confidence ROSE, dispersion NARROWEDGenuine convergence — agents convinced each otherThe strongest signal; highest-confidence path forward
Mean confidence STABLE, dispersion NARROWEDPossible false consensus — agents agreed before debatingProbe the assumptions section for shared blind spots
Mean confidence ROSE, dispersion WIDENEDPolarization — agents became more entrenchedThe question may be genuinely irresolvable by argument alone; look for an experimental path
stopped_reason: convergedDispersion fell below thresholdGood — run with the recommendation
stopped_reason: max_roundsHit hard cap before convergingThe debate was cut off; consider a second run with --max-rounds higher or --mode quick for faster convergence
stopped_reason: diminishing_returnsNo new arguments surfacedThe council exhausted what it could discover — make a call
stopped_reason: genuine_disagreementPositions hardened, dispersion widenedThe council could not resolve the tension. The output is valuable precisely because it maps irreconcilable disagreement — read the disagreements section carefully

Pitfalls

SymptomCauseFix
Debate fails with "Exceeded maximum output retries"Model couldn't produce valid structured output for a phaseRetry the debate. If persistent, try a different model or add --verbose to see which agent failed.
Debate runs for 5+ minutes with no outputDeepSeek or slow model with many agentsUse --mode quick --agents 3 for fast turnarounds, or use --verbose to see progress in real time.
All agents agree immediately with high confidenceFalse consensus — same model shares blind spotsCheck the dispersion diagnostic. Try --profiles with diverse identities to force methodological diversity.
"Profile X not found" warningTypo in profile nameRun agent-council --profiles list (or check the profiles list above) for valid names.
Synthesis contains obvious factual errorsAgents fabricated claims during debateCheck the ⚠️ Claims Not Verified section. The guardrail reduces fabrication but cannot eliminate it. Verify any statistics, pricing, or availability claims before acting.

Architecture Decision

Single-model debate: All agents share one LLM configuration. Diversity comes from persona definitions (system prompts with distinct backgrounds, analytical approaches, biases), not from different model instances. This minimizes setup friction — one API key, one endpoint, predictable cost.

Limitation: All agents share the model's knowledge cutoff and blind spots. The convergence diagnostics include a "possible false consensus" flag when confidence starts high and never shifts.

Reference Files

FileLoad when
references/convergence.mdUnderstanding the convergence detection algorithm
references/debate-protocol.mdDeep dive into phase structure and round design
references/configuration.mdProvider setup, troubleshooting, model strings

Directory Structure

agent-council/
├── SKILL.md                      # This file — skill entry point
├── pyproject.toml                # Pip package definition
├── README.md
├── LICENSE                       # MIT
├── agent_council/                # Python package
│   ├── cli.py                    # CLI entry point
│   ├── config.py                 # Env var loading
│   ├── state.py                  # Typed state + Pydantic models
│   ├── convergence.py            # Convergence detection
│   ├── graph.py                  # Debate graph orchestration
│   └── phases/
│       ├── compose.py            # Persona generation
│       ├── premortem.py          # Failure pre-mortem
│       ├── position.py           # Initial positions
│       ├── cross_examine.py      # Iterative cross-examination
│       └── synthesis.py          # Decision landscape
├── scripts/
│   └── bootstrap.py              # First-run installation
├── templates/
│   └── personas.json             # Example custom personas
└── references/
    ├── convergence.md
    ├── debate-protocol.md
    └── configuration.md

Related Skills

  • ai-frameworks — umbrella bundle for all AI framework skills. Load this when comparing agent-council against other multi-agent approaches (LangGraph, AutoGen, CrewAI).
  • langgraph — for complex state-machine multi-agent orchestration beyond the debate protocol
  • pydanticai — the underlying framework for type-safe agent definitions
  • spec-driven-development — for building specs that agent-council can help you evaluate
  • hermes-profiles — the 39-profile library that powers the profile selection system

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.