skills/agents-and-council-of-llms/SKILL.md
invoke multiple LLMs to gather different perspectives, review each other's outputs, and act as a council under the directorship of you the Council Head. Or more generally, call other LLM instances as agents to provide summaries without cluttering context.
npx skillsauth add gregoryg/aipihkal agents-and-council-of-llmsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are the Council Chairman, an elite orchestration manager responsible for conducting high-quality deliberation among multiple AI models. Your goal is to produce the single best possible answer by synthesizing the diverse strengths of your "Council" and verifying their claims with your own tools.
Role: Council Chairman Description: Orchestrate a "Council of LLMs" to provide multi-perspective analysis on complex problems. Supports both Role-Based (different lenses) and Consensus-Based (same prompt, multiple models) workflows.
council-convene.sh.council-review.sh.council_logs.org.council-convene.shOrchestrates parallel opencode calls. Supports Role-Based (Lenses), Consensus-Based (Voting), and multiple input modes.
Usage:
# 1. Role-Based (Standard Council)
./skills/agents-and-council-of-llms/council-convene.sh \
--problem "..." \
--lenses "Lens1, Lens2, Lens3"
# 2. Consensus-Based (Democratic Voting)
# Spawns N identical members to check for consistency/hallucination
./skills/agents-and-council-of-llms/council-convene.sh \
--problem "..." \
--count 5
# 3. Complex prompts via file (avoids shell escaping issues)
./skills/agents-and-council-of-llms/council-convene.sh \
--prompt-file /tmp/my_prompt.txt \
--lenses "Technical, Business, Legal"
# 4. Complex prompts via base64 (single safe argument)
prompt_b64=$(echo "My complex prompt..." | base64 -w0)
./skills/agents-and-council-of-llms/council-convene.sh \
--prompt-b64 "$prompt_b64" \
--count 3
# 5. Override models for this session
./skills/agents-and-council-of-llms/council-convene.sh \
--problem "..." \
--models "openrouter/openai/gpt-4o,openrouter/anthropic/claude-3.5-sonnet"
# 6. Dry run (validate without burning tokens)
./skills/agents-and-council-of-llms/council-convene.sh \
--problem "..." \
--lenses "A, B, C" \
--dry-run
Options:
| Option | Description |
|--------|-------------|
| --problem TEXT | Problem statement (inline) |
| --prompt-file FILE | Read problem from file (recommended for complex prompts) |
| --prompt-b64 STR | Problem as base64-encoded string |
| --lenses LIST | Comma-separated expert perspectives |
| --models LIST | Comma-separated model identifiers (overrides config) |
| --count N | Number of council members for consensus mode |
| --context TEXT | Additional context |
| --timeout SECS | Per-model timeout (default: 120) |
| --dry-run | Show what would run without executing |
council-review.shAnonymizes council outputs and requests critique/ranking. Can use a single reviewer or a full democratic panel.
Usage:
# 1. Democratic Review (auto-detect original lenses as reviewers)
./skills/agents-and-council-of-llms/council-review.sh \
--session "skills/agents-and-council-of-llms/transcripts/<TIMESTAMP>"
# 2. Specific Panel Review
./skills/agents-and-council-of-llms/council-review.sh \
--session "..." \
--reviewers "Devil's Advocate, Optimist"
# 3. Single "Supreme Court" Reviewer
./skills/agents-and-council-of-llms/council-review.sh \
--session "..." \
--reviewers "Supreme_Court" \
--model "openrouter/openai/gpt-4o"
# 4. Dry run
./skills/agents-and-council-of-llms/council-review.sh \
--session "..." \
--dry-run
Phase 0: Triage & Research
Phase 1: Solicitation
# Write the full prompt (your research + user's question)
cat > /tmp/council_prompt.txt << 'PROMPT_EOF'
[Your research brief here]
=== USER'S QUESTION (verbatim) ===
[Exact user prompt here]
PROMPT_EOF
council-convene.sh with appropriate mode:
./skills/agents-and-council-of-llms/council-convene.sh \
--prompt-file /tmp/council_prompt.txt \
--lenses "Technical, Historical, Philosophical"
Phase 2: The Review (Branch by Type)
council-review.sh on the resulting session directory.Phase 3: The Verdict
council_logs.org first (create if missing).Models are configured via (in priority order):
--models command-line argumentCOUNCIL_MODELS environment variable~/.config/council/models.conf fileSee README.md for detailed configuration instructions, including how to discover your available models with opencode models.
# ~/.config/council/models.conf
# One model per line, full opencode identifier
openrouter/openai/gpt-4o-mini
openrouter/anthropic/claude-3.5-haiku
openrouter/google/gemini-2.0-flash-001
| Variable | Description | Default |
|----------|-------------|---------|
| COUNCIL_MODELS | Comma-separated model list | (from config file) |
| COUNCIL_MODELS_FILE | Path to models config | ~/.config/council/models.conf |
| COUNCIL_REVIEW_MODEL | Model for peer reviews | (first model in config) |
| COUNCIL_TIMEOUT | Timeout per model call (seconds) | 120 |
| COUNCIL_DEBUG | Set to 1 for verbose output | 0 |
skills/common/secrets.sh to load secrets from ~/.authinfo.gpg..env (gitignored, chmod 600).source skills/common/secrets.sh
# loads API keys automatically if configured
Use --prompt-file or --prompt-b64 instead of inline --problem:
# File method (recommended)
echo "Your complex prompt with 'quotes' and $variables..." > /tmp/prompt.txt
./council-convene.sh --prompt-file /tmp/prompt.txt --count 3
# Base64 method (single safe argument)
prompt_b64=$(cat /tmp/prompt.txt | base64 -w0)
./council-convene.sh --prompt-b64 "$prompt_b64" --count 3
Council sessions typically take 30-90 seconds for 3 members running in parallel. High-reasoning models may take longer.
COUNCIL_TIMEOUT environment variable to adjust per-model timeoutopencode models to see available modelsopenrouter/provider/model-name)opencodeCheck individual output files in the session directory:
ls -la ./transcripts/YYYYMMDD_HHMMSS/
cat ./transcripts/YYYYMMDD_HHMMSS/Member_1.md
Files containing COUNCIL_ERROR: indicate failures. Common causes:
Enable verbose output:
COUNCIL_DEBUG=1 ./council-convene.sh --problem "test" --count 2
Use dry-run mode:
./council-convene.sh --problem "test" --lenses "A, B, C" --dry-run
Each council session creates a timestamped directory in ./transcripts/:
| File | Description |
|------|-------------|
| metadata.txt | Session parameters (problem, lenses, models) |
| <Lens>_PROMPT.txt | Actual prompt sent to each member |
| <Lens>.md | Raw response from each member |
| FULL_TRANSCRIPT.md | Compiled transcript of all responses |
| review_key.txt | Anonymization key (after review) |
| <Reviewer>_REVIEW.md | Individual review outputs |
| PEER_REVIEW.md | Aggregated peer reviews |
tools
Write, review, and test Python code following PEP 8, type hints, and modern best practices (Python 3.12+). Use when writing, editing, debugging, or reviewing Python files. Enforces a mandatory verify-before-deliver rule - all written code must be tested for syntax and functionality using available shell tools before presenting to the user. Covers naming conventions, project layout, docstrings, formatting, and test authoring.
development
Write correct, idiomatic Org mode (vanilla) including denote-style optional frontmatter, agenda-aware tasks (TODO/STARTED/PAUSED/DONE, SCHEDULED/DEADLINE, repeaters, tags), and interactive executable Org Babel blocks (emacs-lisp, python, bash, sql) that produce in-buffer results. Use when asked to draft or transform .org files, planning/task documents, executable notes, or when Org syntax/agenda/Babel interactivity is needed instead of Markdown.
tools
Control and query Home Assistant via the hass-cli Python CLI. Use when Codex needs to interact with a Home Assistant instance for controlling devices (lights, switches, climate, covers, etc.), querying entity states or attributes, managing areas/devices/entities, calling services, checking system status, or any Home Assistant automation/control tasks. Supports JSON output for structured data.
tools
Write, review, and test Emacs Lisp code following idiomatic conventions and hard-won local best practices. Use when writing, editing, debugging, or reviewing .el files, Emacs packages, or gptel tools. Enforces a mandatory verify-before-deliver rule - all written code must be batch byte-compiled and smoke-tested before presenting to the user. Covers load-path management, buffer-local variable safety, HTML/XML parsing, file I/O patterns, and batch testing workflows.