一键导入
llm-council
Query multiple LLM models in parallel from CodeAct and cross-reference their responses
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Query multiple LLM models in parallel from CodeAct and cross-reference their responses
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when adding or reviewing tests for Reborn behavior — choosing a test tier, covering a bug fix, testing model/tool-choice behavior, touching tests/integration or tests/fixtures/llm_traces, or when a test needs Postgres, Docker, or a live LLM.
Navigate building a user-facing feature in the Reborn stack (a capability that crosses product_workflow → composition → webui_v2 → runtime/serve → frontend). Use when planning or implementing any new Reborn settings page, endpoint, facade method, or runtime-backed capability — especially before writing code, to avoid rebuilding what already exists and to wire it in one pass instead of layer-by-layer.
Use when asked to "review the open PRs", review a batch or stack of pull requests, or run a recurring PR-review pass on a repo — especially with many PRs, stacked branches, conflicts, or security-sensitive changes. Covers grouping, fan-out to review subagents, verdict synthesis, and posting.
Generate or update the IronClaw architecture overview video using Remotion. Use when asked to update, regenerate, or modify the architecture video, add/remove scenes, or reflect codebase changes in the video.
Use when writing or reviewing a change in crates/ that adds a trait, a crate, a dependency edge, a re-export, or code in ironclaw_reborn_composition — or when deciding whether an abstraction, layer, or crate boundary is justified in the IronClaw Reborn stack.
Use when starting work in the IronClaw repo, deciding where a feature/fix/prompt/doc belongs, tracing how a request flows, looking up which crate owns a subsystem, or when repo docs, the knowledge graph, or component names seem stale, missing, or contradictory.
| name | llm-council |
| version | 1.0.0 |
| description | Query multiple LLM models in parallel from CodeAct and cross-reference their responses |
| activation | {"keywords":["council","compare models","multiple models","cross-reference","second opinion","opinions","consensus","different models","model comparison","diverse perspectives","ask several","ask multiple","vote"],"exclude_keywords":["routine","schedule"],"patterns":["(?i)(ask|query|consult|compare)\\s.*(models|llms|ais)","(?i)(what do|how do)\\s.*(different|other|multiple)\\s.*(models|llms|ais)\\s*(think|say)","(?i)council","(?i)cross[- ]?referenc"],"tags":["llm","analysis","research"],"max_context_tokens":1200} |
You can query multiple LLM models with the same prompt directly from CodeAct
using the built-in llm_query() and llm_query_batched() functions. Both
accept a model= (or models=) keyword that overrides the configured model
for that call.
Per-request model override support varies by backend:
| Backend | Honors model=? | Cross-vendor routing? |
|---|---|---|
| NEAR AI | Yes | Yes (aggregator — hosts models from many vendors) |
| Anthropic OAuth | Yes | No (Anthropic models only) |
| GitHub Copilot | Yes | No (Copilot-exposed models only) |
| Bedrock | No | — (model fixed at construction) |
| OpenAI / Ollama / Tinfoil via rig | No (silent fallback with warning log) | — |
A genuine cross-vendor council (Anthropic + Google + OpenAI in one batch) therefore only works on an aggregator backend like NEAR AI. On single-vendor backends, use a lineup of models available within that vendor.
Check the configured backend first (e.g. from LLM_BACKEND or the user's
settings) before picking a lineup. Unless the user requests specific models,
use the matching default below.
NEAR AI (aggregator — default council):
COUNCIL = [
"anthropic/claude-opus-4-6",
"google/gemini-3-pro",
"zai-org/GLM-latest",
"openai/gpt-5.4",
]
This 4-model lineup spans the major frontier providers and reasoning styles. It only works on NEAR AI (or another aggregator) — the prefixed model names route inside NEAR AI to the respective vendors.
Anthropic OAuth (Anthropic-only, no cross-vendor routing):
COUNCIL = [
"claude-opus-4-6",
"claude-sonnet-4-6",
"claude-haiku-4-5",
]
Use different Anthropic tiers for diversity of reasoning depth vs. speed.
GitHub Copilot (whatever Copilot exposes):
COUNCIL = ["gpt-5.4", "claude-opus-4-6", "gemini-3-pro"]
Copilot's available models shift over time — call llm_query with the
user's configured default if you're unsure which are reachable.
Bedrock / OpenAI / Ollama / Tinfoil: per-request model= is not honored
by these backends. A council is not possible without switching backends —
tell the user and fall back to a single-model answer.
If the user names specific models, always use those instead of the defaults.
answer = llm_query(
prompt="What is X?",
context="Optional background", # optional
model="anthropic/claude-opus-4-6", # optional per-call override
)
COUNCIL = [
"anthropic/claude-opus-4-6",
"google/gemini-3-pro",
"zai-org/GLM-latest",
"openai/gpt-5.4",
]
responses = llm_query_batched(
prompts=["What are the main risks of X?"] * len(COUNCIL),
models=COUNCIL, # parallel array, length must match prompts
context="Answer in 3-5 bullet points.",
)
# `responses` is a list of strings in the same order as `models`.
# If a specific model is unavailable, that slot returns "Error: ..." —
# the rest of the batch still completes.
results = llm_query_batched(
prompts=["Q1", "Q2", "Q3"],
model="anthropic/claude-opus-4-6", # singular: applies to every prompt
)
models= slots with NoneA None slot inside models=[...] means "no override for this prompt" —
that call uses the configured default model. The singular model= kwarg
does NOT backfill None slots; it is only used when models= is omitted
entirely.
COUNCIL = [
"anthropic/claude-opus-4-6",
"google/gemini-3-pro",
"zai-org/GLM-latest",
"openai/gpt-5.4",
]
question = "What are the main risks of relying on a single LLM provider?"
responses = llm_query_batched(
prompts=[question] * len(COUNCIL),
models=COUNCIL,
context="Answer concisely in 3-5 bullet points.",
)
# Build a synthesis prompt
labelled = "\n\n---\n\n".join(
f"**{model}**:\n{resp}" for model, resp in zip(COUNCIL, responses)
)
synthesis = llm_query(
prompt=f"Synthesize a balanced answer from these {len(COUNCIL)} expert opinions:\n\n{labelled}",
context="Identify consensus, flag disagreements, and produce a unified answer.",
)
FINAL(synthesis)
llm_query_batched() runs all calls in parallel — total latency is roughly the slowest model.models= is provided, it must be the same length as prompts.model= (singular) when you want one model applied to every prompt; use models= (plural list) for the council pattern."Error: ..." strings in the result list, so a single bad model does not fail the whole batch. Argument validation errors — wrong types, or models/prompts length mismatch — still raise exceptions.