Elenchus plan
A Claude Code skill set that makes Claude argue with itself before it agrees with you
npx -y skills add alexvtejeda/elenchus --skill elenchus-planAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 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
Use when you have an approved spec (or firm requirements) for a multi-step build and want the implementation plan itself stress-tested before you execute it — "write the plan and have the council check it", "verify this plan against the spec", "turn this spec into a plan I can trust", or the writing-plans stage of the Elenchus pipeline. The plan/verification front end over the elenchus-council engine. NOT for stress-testing a build PREMISE that isn't settled yet (that's elenchus-build), NOT for authoring plan craft from scratch with no council (that's plain writing-plans), and NOT for verifying a finished implementation in the browser (that's finishing-implementation-elenchus).
SKILL.md
10.2 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
Elenchus — plan front end
The plan/verification front end over the elenchus-council engine. It takes an
approved spec, writes an implementation plan, and has the anonymized council verify
the written plan — replacing the solo "fresh eyes" self-review that plain
writing-plans ships with. It also lets the deepest-reasoning tier propose whether
the spec should become several plans, as a suggestion the user approves.
Two skills compose here — read both, re-teach neither:
writing-plansis the base layer: it owns the plan-authoring craft — file-structure mapping, bite-sized task granularity, the plan header + task schema, the no-placeholders rules, and the Execution Handoff. REQUIRED SUB-SKILL: Use writing-plans to draft the plan. Do not re-explain its rules here.elenchus-councilowns the loop — parallel anonymized seats, tier decorrelation, dissent-preserving synthesis, the gate. Readelenchus-council/SKILL.mdand run its loop for the verification round. Do not re-implement it.
This file supplies only the plan-mode specifics: what to add on top of writing-plans,
the two round templates, the roster gate, the checkpoint, and the terminal.
What this changes about plain writing-plans
writing-plans does two things solo that this front end moves to the council / the
user — this is the whole point of the skill, and baseline agents skip it because
writing-plans explicitly prescribes the solo versions:
| writing-plans (solo) | elenchus-plan (replaces it) |
|---|---|
| Self-Review — "look at the spec with fresh eyes … a checklist you run yourself, not a subagent dispatch." | Plan-check council round — dispatch the anonymized seats to audit the plan against the spec (COVERED / GAPS / DEFECTS). The solo Self-Review is REPLACED, not run in addition. |
| Scope Check — the author decides to split "one plan per subsystem" and acts on it. | Split suggestion — one deep-tier seat proposes the split; the chairman returns it to the user for approval BEFORE any plan file is written. The author never splits-and-writes unprompted. |
Do not run writing-plans' Self-Review or act on its Scope Check yourself. Use writing-plans for craft; the verification and the split decision belong to the council and the user respectively.
Flow
- Input: an approved spec (from the build → brainstorming pipeline, or any spec the user points at). Read it.
- Split suggestion (deep-tier, one seat, BEFORE writing anything). Confirm the
roster (see gate), then dispatch one seat on the deepest tier (Fable; Opus
fallback) via the engine with
templates/split-suggestion.md+ the spec. It returns an advisoryRECOMMENDATION / SEAM / RATIONALE / RISK IF IGNORED. Present it to the user and get their call — one plan, the proposed split, or their own division. Nothing is written until they choose. Record the approved division in the checkpoint. - Draft the plan(s). Using writing-plans, write the draft plan(s) to
docs/superpowers/plans/<YYYY-MM-DD>-<slug>.md— one file per approved plan (if split, also write the shared-contract/foundational plan the seam needs first). - Verify (plan-check council round — replaces Self-Review). Confirm the roster
again, then dispatch the full anonymized council via the engine with
templates/round-plan-check.md, giving each seat the spec + the draft plan (one dispatch set per plan file if split). Anonymize + synthesize dissent-preserving as any engine round. Schema:COVERED / GAPS / DEFECTS. - Revise. The chairman fixes every GAP and DEFECT inline — add the missing task, kill the placeholder, reconcile the mismatched signature, re-ground the stale API. If the revisions were substantial, re-verify.
- Terminal = writing-plans' Execution Handoff, unchanged: offer Subagent-Driven (recommended) vs Inline execution, and hand to the chosen sub-skill.
No readiness/verdict — the engine invariant holds. The council flags coverage gaps and defects; it never certifies the plan "ready to build." The user owns that.
Roster gate (suite invariant — every dispatching round)
Confirm the seat roster with the user before EVERY dispatch — the split-suggestion dispatch (step 2) and the plan-check dispatch (step 4), and on resume. Present the roster you intend to use (models + per-seat lens), and dispatch only after the user agrees or edits it. The split-suggestion step is a single Fable seat by default — say so and let the user change it. Never dispatch on a silently-reused or assumed roster.
Round templates (plan mode)
Owned by this front end; composed by the engine (seat-base + template + tier row):
templates/split-suggestion.md— one deep-tier seat, advisory split proposal, run before drafting. Returned to the user, not acted on.templates/round-plan-check.md— full council, audits the written plan against the spec for coverage + executability.COVERED / GAPS / DEFECTS.
Reuses engine seat-base.md + tiers.md unchanged. Grounding: seats verify every
framework/API a task leans on against current docs (Context7 first, web second).
The checkpoint file (durable state)
One markdown file per plan session survives /clear.
- Path:
docs/elenchus/<slug>-plan.md(slug from the spec/feature name). - Gitignore
docs/elenchus/first — append the line to the caller project's.gitignore(create it if absent) before the first checkpoint write. The plan files underdocs/superpowers/plans/are real deliverables and are NOT gitignored. - Write it DURING the round, before the user clears — never a
SessionEndhook. After the split suggestion + user's choice, record the approved division. After the plan-check round, record COVERED/GAPS/DEFECTS and what was revised. - Resume = scan-on-invoke. When convened, Read
docs/elenchus/for an open (ready: false) plan session; resume from itsround.
Frontmatter schema:
---
artifact: elenchus-plan-session
spec_path: "<path to the approved spec>"
ready: false # user self-declares; the council never sets it
round: split # split = suggestion posed, awaiting user's plan-count call
# · plan-check = plan drafted, awaiting/under council audit
split: "<one plan | N plans: names>" # the USER-approved division
plan_paths: [docs/superpowers/plans/<...>.md, ...]
seats: # the USER-approved roster for the current dispatch
- {model: fable, lens: split-suggestion} # step 2 default: one deep seat
gaps: [...] # unresolved GAPS/DEFECTS from the plan-check round
created: <date>
updated: <date>
---
Body: the spec path + one-line premise; a Split section (the seat's proposal + the user's decision); the plan paths; a Plan-check section (COVERED / GAPS / DEFECTS + what was revised).
Common mistakes (plan front end)
Drawn from observed baseline behavior — both are the default pull, not edge cases:
- Running writing-plans' solo Self-Review instead of the council. The baseline agent literally ran that checklist verbatim and called the plan verified. A solo pass is not verification here — it is REPLACED by the plan-check council.
- Deciding the plan count yourself and writing the files. The baseline agent wrote three plan files to disk unprompted, citing writing-plans' Scope Check. The split is a suggestion returned for approval; write nothing until the user picks.
- Dispatching either round on a roster the user didn't confirm this round.
- Treating
COVEREDas a readiness sign-off — it is a fidelity check, not a green light. - Leaving a
GAP/DEFECTunrevised because it seems minor. Fix every one, then re-verify if the fixes were substantial. - Smoothing a genuine split between seats in the plan-check synthesis into "they agree."
Rationalization table (excuse → reality)
| The excuse | The reality |
|---|---|
| "I ran the skill's Self-Review checklist, the plan's verified." | That is writing-plans' SOLO check — REPLACED here by the plan-check council. Convene it. |
| "The spec says two subsystems, so I'll split and write the plans." | The split is a suggestion for the USER to approve. Propose, then wait — write nothing yet. |
| "I decided it's three plans." | Plan-count is the user's call. Give the proposal + rationale; let them decide. |
| "The plan-check found only minor gaps, ship it." | Fix every GAP/DEFECT. Minor-looking signature drift is exactly what breaks at integration. |
| "COVERED means the plan is ready to build." | COVERED is fidelity, not readiness. The engine never certifies ready. |
Red flags — stop if you catch yourself
- About to run a solo "fresh eyes" review of the plan instead of dispatching the council.
- About to write plan files before the user approved the plan count.
- About to dispatch a round on a roster the user didn't confirm this round.
- About to call the plan "ready to build" — that's the user's declaration, never yours.
- About to leave a plan-check GAP/DEFECT unfixed because it "looks small."
Install / sync
Skill lives at skills/elenchus-plan/ (version-controlled archive) and must be
synced to ~/.claude/skills/elenchus-plan/ (the runtime copy Claude Code loads).
It dispatches the existing council-seat agent — no new agent, but a fresh session is
still required if council-seat was (re)installed this session.
What ships with it: 2 files
5.8 KB alongside SKILL.md
templates/
- round-plan-check.md2.7 KB
- split-suggestion.md3.0 KB