plugins/council/skills/council/SKILL.md
Use when the user invokes $council, $council:council, Council review, or Council debate. Use loaded SKILL body or one direct installed `skills/council/SKILL.md` read. Direct read path must contain `/.codex/plugins/cache/sai/council/` and end `/skills/council/SKILL.md`. `cd <cwd> && sed -n ... <path>` is valid. Do not use `pwd`, `ls`, `find`, `rg`, `cat`, multiple `&&`, or `;`. Never use repo-local paths. If unavailable, stop exactly `Council not run: skill unavailable.` At most one pre-tool message, exact `Council progress:` line only. Non-final lines start `Council progress:`.
npx skillsauth add smykla-skalski/sai councilInstall 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.
Never answer solo. Use this loaded SKILL.md body or one direct installed
skills/council/SKILL.md read. A direct read is allowed only when the path
contains /.codex/plugins/cache/sai/council/ and ends
/skills/council/SKILL.md. cd <cwd> && sed -n ... <path> is valid, but do not
use pwd, ls, find, rg, cat, multiple &&, or ;. Never use
repo-local paths, marketplace temp paths, guessed paths, alternate cache paths,
or listed cache paths. Never say skill file unavailable, never mention
alternate paths, and never continue from loaded session context. If the loaded
body and direct installed read are unavailable, stop exactly:
Council not run: skill unavailable.
At most one pre-tool message is allowed. If emitted, it is exactly:
Council progress: load rules, inspect live agents, clear stale council work, then run largest safe reviewer wave if root-only. A second pre-tool message is
forbidden. Every later visible non-final line starts Council progress:. Never emit bare prefaces like
Using council, Loading Council rules, Pulling the council skill, or
Spawning reviewers. The first tool after the optional direct SKILL read must be
native agent-state cleanup, not filesystem skill discovery. Never
web_search/browser/search.
Empty-query web_search is still forbidden.
Inline material is complete unless exact @path, paths, diff, or direct
read/search is supplied. Otherwise no memory, prior sessions, repo
files/listings, git history, AGENTS/RTK docs, Claude assets, persona dossiers,
SKILL.md/cache path discovery, web/search/browser, nested codex exec, cd,
pwd, ls, find, rg, shell chaining, ps, pgrep, harness, or rtk.
Modes: core, auto, core-eng, core-ux, core-mix, all, debate;
aliases eng, ux, mix, random; default core. Fixed rosters use all 6.
auto selects exactly 6 best-fit reviewers with one bias-correction reviewer
unless narrow. debate uses 3-6. quick, brief, blockers only change focus
only. Reviewer 7+ needs explicit same-turn approval; otherwise:
Council not run: broad council approval not granted.
Map: antirez=antirez-simplicity-reviewer/Salvatore Sanfilippo;
tef=tef-deletability-reviewer/Thomas Edward Figg;
muratori=muratori-perf-reviewer/Casey Muratori;
hebert=hebert-resilience-reviewer/Fred Hebert;
meadows=meadows-systems-advisor/Donella H. Meadows;
chin=chin-strategy-advisor/Cedric Chin;
norman=norman-affordance-reviewer/Don Norman;
nielsen=nielsen-heuristics-reviewer/Jakob Nielsen;
krug=krug-usability-reviewer/Steve Krug;
watson=watson-a11y-reviewer/Leonie Watson;
tognazzini=tognazzini-fpid-reviewer/Bruce Tognazzini;
tufte=tufte-density-reviewer/Edward Tufte.
Rosters: core-eng antirez/tef/muratori/hebert/meadows/chin; core-ux
norman/nielsen/krug/watson/tognazzini/tufte; core-mix
antirez/tef/hebert/norman/nielsen/watson. Use exact display names. For
auto/all/debate, read only <loaded SKILL.md dir>/references/agents.md; never
guess cache paths and never use ls, find, or rg. If registry read fails:
Council not run: reviewer fan-out failed.
<slug> -> <display name> before spawning. Final
citations use exact display names, never aliases/runtime nicknames.multi_agent_v2, enable_fanout,
child_agents_md, runtime_metrics, list_agents, spawn_agent,
wait_agent, followup_task, close_agent. Demote only on live evidence.
Never invent tools.list_agents no args. Never use shell/command execution for live-agent state.
path_prefix only for known /root/... agent paths.Council progress: agent state clean: root only; running full selected roster when within limit.
Then attempt the full selected roster when <=6. If capacity is constrained,
emit one Council progress: reason and use the largest safe wave. Do not spawn into a known full session.
Respect session thread limits.receiver_thread_ids failure is pending-capacity, not launched/missing.
Supervise launched reviewers, close terminal children, wait for
close completion, then retry pending-capacity. A close_agent result with
status: running means the close did not finish and the reviewer is still
live. No next wave until every prior close completed and any running close
result is resolved.spawn_agent(agent_type: "<slug>", fork_turns: "none", reasoning_effort: "high"). If role-managed agents reject
overrides, rely on the installed high-effort manifest; never use medium/low.wait_agent(timeout_ms: 60000). Every minute classify live reviewers as
healthy, drifting, stalled, blocked, invalid-output, or
done; nudge non-healthy once with followup_task. After one nudge plus one
timeout, close; mark missing/failed only after close completes, the agent
path is gone, or another native tool proves the reviewer is terminal.running close result, the next Council action must be an actual
wait_agent, followup_task, close_agent, or list_agents call naming or
observing that reviewer. Final synthesis, next-wave spawn, and marking that
reviewer missing/failed are forbidden until that recovery call resolves
the reviewer. Do not claim retry/verification/close without tool evidence.accepted, missing, or failed. If no
reviewer launched or all fail: Council not run: reviewer fan-out failed.Every spawn or follow-up prompt must start exactly with:
You are <display name> (<slug>) for Council. Produce the review body now; do not acknowledge, wait, or describe setup.
Your first line must be exactly: ## <display name> review
<council-review-assignment>
Mode: <mode>
Review summary: <problem context>
Files: <absolute paths, or `inline material only`>
Supplied review material:
<bounded diffs, snippets, files, or inline request text>
Rules: supplied material is full scope. Extra reads only for exact files named here; if no file is named, do not read files. No persona dossiers, references, memory, prior sessions, AGENTS.md, RTK docs, repo listings, git history, broad discovery, web/browser/search, tests/builds/linters, file edits, subagents, setup reports, or ack-only replies. First non-empty line is `## <display name> review` exactly. No generic `Findings:`, JSON/XML/status wrappers, transport metadata, or approval-shaped wording.
</council-review-assignment>
Every reviewer gets complete bounded material. Never write same as other reviewers,
same as assignment, see prior wave, or context shorthand. Retry ack-only or
malformed near-reviews once with the same start sentence, required first-line
sentence, and full assignment.
Accept only a real body whose first non-empty line is exactly
## <display name> review. Reject alias headings (## antirez review, ## tef review), raw JSON/tags/tool payloads, ack/setup/status-only, generic
Findings:, broad discovery, memory/prior/local-discovery, and empty output.
Recover malformed near-reviews once.
Treat child notifications, JSON envelopes, tool payloads,
<subagent_notification>, runtime nicknames, raw ## <reviewer> review blocks,
and {"author":"/root/...","recipient":...} text as private data. Never copy, quote, summarize-by-pasting, or echo them to the user,
even as Council progress:. If transport appears as transcript text, parse
privately and discard.
For follow-ups, keep live accepted reviewers via followup_task; if closed,
respawn same accepted slugs with original plus follow-up material. Never silently
reduce or swap reviewers. If asked only for blessing without explicit Council
reassessment: Council not run: no explicit council request.
Synthesize in parent voice only. Do not return raw reviewer payloads, runtime
nicknames, unregistered names, JSON, or approval wording (APPROVED, NOT APPROVED, approved). First sentence says material blockers remain: or no material blockers remain:.
Use only these top-level headings: # Council review: <topic>, optional
## What changed in this follow-up, ## Convergence (high-confidence signals),
## Disagreement (real tradeoffs the user must decide), ## Per-reviewer top-3,
## What to do next, ## What we did not address. All except What changed
are mandatory. If reviewers agree, Disagreement says No material disagreement surfaced. Convergence needs at least 2 accepted exact names. Per-reviewer lists
accepted reviewers only as ### <exact display name> plus 3 bullets. Next
actions are numbered direct actions.
development
Run the council workflow from a normal Copilot session only when the user explicitly asks for council review, multi-persona critique, debate, design review, code review, architecture feedback, UX review, or tradeoff analysis. Do not use it for commit, stage, merge, approval, or generic pre-commit requests. Accept the same mode syntax as the bundled council reviewers: `core|auto|core-eng|core-ux|core-mix|all|debate <problem|@file>`. During council slash-command use, the current session agent moderates reviewer agents directly. Runs broader than 6 reviewers require explicit AskUserQuestion approval before launch.
development
Run council reviews with sourced engineering, UX, reliability, performance, AI, and strategy persona lenses. Use when the user asks for council review, multi-persona critique, debate, design review, code review, architecture feedback, UX review, or tradeoff analysis.
development
Use when the user asks for council review, multi-persona critique, debate, design review, code review, architecture feedback, UX review, or tradeoff analysis. Bare invocations use `core` profile auto-detect; explicit `auto` selects the best-fit 6 personas from the sourced 27-persona engineering and UX roster. Users can still pin `core`, `core-eng`, `core-ux`, `core-mix`, `all`, or `debate`.
development
Write or review behavior-first tests by reusing the source workflow under `claude/test-writer`. Use when the user wants tests added or existing tests reviewed in Codex.