Orchestrates multi-model LLM consensus through a three-phase deliberation protocol. Use when you need collaborative AI review, multi-model problem-solving, code review from multiple perspectives, or consensus-based decision making. Coordinates OpenAI Codex, Google Gemini, and Claude CLIs for opinion collection, peer review, and chairman synthesis.
/plugin marketplace add xrf9268-hue/llm-council-plugin/plugin install llm-council-plugin@llm-councilThis skill inherits all available tools. When active, it can use any tool Claude has access to.
EXAMPLES.mdMETADATA.mdREFERENCE.mdSECURITY.mdscripts/check_codex_env.shscripts/council_utils.shscripts/query_claude.shscripts/query_codex.shscripts/query_gemini.shscripts/run_chairman.shscripts/run_parallel.shscripts/run_peer_review.shscripts/source_utils.shtemplates/chairman_prompt.txttemplates/review_prompt.txtThree-phase consensus protocol coordinating multiple LLMs for collaborative decision-making.
Architecture:
Council Members:
# Resolve path to council_utils.sh
if [[ -n "${COUNCIL_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${COUNCIL_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
elif [[ -n "${CLAUDE_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${CLAUDE_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
else
UTILS_PATH="${CLAUDE_PROJECT_DIR}/skills/council-orchestrator/scripts/council_utils.sh"
fi
source "$UTILS_PATH"
get_cli_status
Quorum Requirements:
See detailed prerequisites for CLI installation.
Quick Start:
# Initialize working directory
council_init
# Validate user input (security)
validate_user_input "$user_query" || exit 1
# Execute parallel opinion collection
PLUGIN_ROOT=$(get_plugin_root)
"${PLUGIN_ROOT}/skills/council-orchestrator/scripts/run_parallel.sh" "$query" .council
What it does:
.council/stage1_*.txtOutput Files:
.council/stage1_claude.txt (required).council/stage1_openai.txt (if Codex available).council/stage1_gemini.txt (if Gemini available)Manual Execution: See Phase 1 detailed guide
Quick Start:
PLUGIN_ROOT=$(get_plugin_root)
"${PLUGIN_ROOT}/skills/council-orchestrator/scripts/run_peer_review.sh" "$original_question" .council
What it does:
templates/review_prompt.txt.council/stage2_review_*.txtCross-Review Matrix:
| Reviewer | Reviews |
|---|---|
| Claude | Codex (A) + Gemini (B) |
| Codex | Claude (A) + Gemini (B) |
| Gemini | Claude (A) + Codex (B) |
Output Files:
.council/stage2_review_claude.txt.council/stage2_review_openai.txt.council/stage2_review_gemini.txtManual Execution: See Phase 2 detailed guide
Quick Start:
# Generate chairman invocation prompt
PLUGIN_ROOT=$(get_plugin_root)
CHAIRMAN_PROMPT=$("${PLUGIN_ROOT}/skills/council-orchestrator/scripts/run_chairman.sh" \
"$original_question" \
.council)
# Invoke chairman sub-agent
# Use Task tool: council-chairman agent
Prompt for Chairman:
Use the council-chairman agent to synthesize the council's responses.
$CHAIRMAN_PROMPT
After chairman completes:
# Retrieve final report for this run
cat .council/final_report.md
What it does:
.council/final_report.mdContext Isolation:
Manual Execution: See Phase 3 detailed guide
| Error | Handling | Details |
|---|---|---|
| CLI missing | Proceed with available members | See quorum requirements |
| Rate limit (429) | Exponential backoff, retry once | Rate limit handling |
| Empty output | Mark member absent in report | Empty output handling |
| Timeout (>120s) | Terminate, mark absent | Timeout configuration |
| Quorum failure | Abort council session | Quorum check |
Graceful Degradation:
⚠️ Important: This skill executes external CLI tools with user-provided input. Follow security guidelines to prevent command injection and ensure safe operation.
.council/ is stored in a dedicated working directory. By default, files are preserved after synthesis so users can review or reuse the final report. Use council_cleanup or /council-cleanup to explicitly remove these files when no longer needed.# Always validate user input before processing
# Resolve path to council_utils.sh
if [[ -n "${COUNCIL_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${COUNCIL_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
elif [[ -n "${CLAUDE_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${CLAUDE_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
else
UTILS_PATH="${CLAUDE_PROJECT_DIR}/skills/council-orchestrator/scripts/council_utils.sh"
fi
source "$UTILS_PATH"
validate_user_input "$user_query" || {
error_msg "Invalid input - aborting for security"
exit 1
}
For comprehensive security guidance including:
See SECURITY.md
The final output is the Chairman's Markdown report containing:
Executive Summary
Council Debate Summary
Detailed Analysis
Final Recommendation
Participation Notes (if applicable)
# Resolve path to council_utils.sh
if [[ -n "${COUNCIL_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${COUNCIL_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
elif [[ -n "${CLAUDE_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${CLAUDE_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
else
UTILS_PATH="${CLAUDE_PROJECT_DIR}/skills/council-orchestrator/scripts/council_utils.sh"
fi
source "$UTILS_PATH"
# Phase 0: reset working directory for this run
council_cleanup || true
council_init
# Phase 1
validate_user_input "$query" || exit 1
PLUGIN_ROOT=$(get_plugin_root)
"${PLUGIN_ROOT}/skills/council-orchestrator/scripts/run_parallel.sh" "$query" .council
# Phase 2
"${PLUGIN_ROOT}/skills/council-orchestrator/scripts/run_peer_review.sh" "$query" .council
# Phase 3
CHAIRMAN_PROMPT=$("${PLUGIN_ROOT}/skills/council-orchestrator/scripts/run_chairman.sh" "$query" .council)
# [Invoke chairman agent with $CHAIRMAN_PROMPT]
# Output
cat .council/final_report.md
# Resolve path to council_utils.sh
if [[ -n "${COUNCIL_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${COUNCIL_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
elif [[ -n "${CLAUDE_PLUGIN_ROOT:-}" ]]; then
UTILS_PATH="${CLAUDE_PLUGIN_ROOT}/skills/council-orchestrator/scripts/council_utils.sh"
else
UTILS_PATH="${CLAUDE_PROJECT_DIR}/skills/council-orchestrator/scripts/council_utils.sh"
fi
source "$UTILS_PATH"
get_cli_status
count_available_members
can_council_proceed && echo "Council ready" || echo "Install more CLIs"
# View current config
config_list
# Set custom quorum
config_set "min_quorum" "3"
# Enable only specific members
config_set "enabled_members" "claude,gemini"
For more examples see EXAMPLES.md