Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyzes evaluation patterns across completed plans and evolves the superpowers checklists accordingly.
.claude/skills/fradser-retrospective/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 201% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 243% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 251% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 325% | 0% |
Analyze evaluation patterns across completed plans, identify recurring failures, and auto-apply checklist evolution — the downstream consumer of executing-plans Phase 4 "Checklist Evolution Candidates". The user reviews post-commit via git show docs/retros/checklists/.
/goalLaunch it under Claude Code's built-in /goal (v2.1.139+) — a retrospective can span multiple turns:
/goal "Claude has narrated a successful checklist-evolution commit (with commit hash) and stated the retrospective is complete" /superpowers:retrospective <plan-paths>/goal is a user-typed outer wrapper (a skill cannot enable it for itself mid-run), and its evaluator judges only what Claude narrates in the transcript — phrase the condition against narrated output (the commit-hash line, an explicit completion statement), never filesystem state. Full semantics and condition phrasing: ../../skills/references/goal-wrapper.md.
Read the most recent plan_completed event from docs/retros/plans-completed.jsonl. If hours_since_completion < 24h AND bash "${CLAUDE_PLUGIN_ROOT}/lib/post-plan-diff.sh" summary <completion_commit> <files...> returns total == 0, output the INSUFFICIENT-POST-PLAN reminder verbatim (see ./references/post-plan-diff.md §Pre-Check A) and proceed to Phase 0 — do NOT pause. Skip silently when completion_commit is missing.
CRITICAL — do this before Phase 0, do NOT skip it as setup. Persistent memory holds the human judgments the evolution-log cannot capture. Recall is a SECONDARY calibration signal — docs/retros/evolution-log.jsonl (Phase 1 step 5) stays authoritative; when they disagree, the log wins.
The MEMORY.md index hooks are ALREADY in your context (injected at session start) — read nothing from disk. Scan them now and select the ones bearing on this run: prior evolution/rejection decisions and debt trackers, harness-design principles, and working-style feedback. Carry them forward as priors into Phase 1 step 5 (calibration history), Phase 3 (suppression of weakly-justified ADDs), and Phase 4 (self-reject a proposal that contradicts a recalled prior, citing the memory entry). If no calibration-relevant hook exists, log Pre-Check B: no calibration-relevant memory and proceed. Never resolve a memory path, read a topic file, block, or ask — the index hooks carry the signal on their own.
When a recalled hook cited as evidence for an approved Phase 3 proposal proves project-specific and durable, the Phase 4 step 3.5 draft records Promoted from private assistant memory hook: <hook-name>, <date> in its ## Why section — cross-project harness-design stances are NOT promoted, and the private hook is never deleted or modified.
Before Phase 1, check whether docs/retros/checklists/ contains {mode}-v1.md for each mode (design / plan / code). Phase 0 runs per-mode independently — seed only the modes missing a v{N} file; if all three are present, log Phase 0: all checklists present, skipping seed and proceed. Full procedure (Path A vs. Path B Full History Bootstrap, exit codes, --force reset): ./references/bootstrap.md.
$ARGUMENTS for plan paths. If --across-all, scan docs/plans/ for all *-plan/ directories with evaluation reports. If no argument is given, read docs/retros/plans-completed.jsonl and auto-scope to plans completed after the most recent retrospective_run event in docs/retros/evolution-log.jsonl. Complement the log via the docs index: bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" list --kind plan --status implemented scopes shipped plans; bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" list --status expired surfaces prior expirations as calibration input (read an expired plan's retro report before re-proposing anything that touches it). Also consult memory: bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" list --kind memory --status active; fold matches into Phase 2 analysis as calibration input.evaluation-round-*.md, evaluation-design-round-*.md, evaluation-plan-round-*.md) from the plan directory, or from a sibling *-evals/ directory when one exists.docs/retros/checklists/ for each mode's latest {mode}-v{N}.md (highest N).docs/retros/evolution-log.jsonl if present; build a history table keyed by item_id (most recent event, timestamp, rationale). This feeds Phase 3 — do NOT re-propose an ADD for an item REMOVEd in the most recent retrospective unless the new evidence is materially different; cite the historical entry in any such proposal.completion_commit field, run bash "${CLAUDE_PLUGIN_ROOT}/lib/post-plan-diff.sh" list <completion_commit> <completion_modified_files...> and pass the classified commit list to Phase 5a (classification rules and skip conditions: ./references/post-plan-diff.md).Aggregate data across all plans (detailed logic: ./references/analysis-patterns.md).
Output a structured analysis report with tables for each category.
Generate proposals from analysis results (format details: ./references/evolution-protocol.md).
| Type | Trigger and threshold | |------|-----------------------| | ADD | Failure pattern in 2+ distinct plans with no covering item | | REMOVE | 0 failures across 3+ reports per item | | MODIFY | 2+ false positives (FAIL overturned in rework) | | PROMOTE | Capability item pass rate >80% across 3+ successive plans |
Rate limit (EVO-6): Max 3 proposals per mode per run; defer excess with evidence.
Counter monotonic growth (REMOVE is load-bearing): each run, actively scan for never-firing items and propose REMOVE — a checklist that only grows is a calibration failure, not success. The 3+ reports/item threshold is deliberately reachable (rationale and history: ./references/evolution-protocol.md §History).
Memory-file consolidation (reuses the MODIFY threshold, 2+ instances): when Phase 2 surfaces 2+ active kind=memory files covering the same concept, propose a MODIFY merging them into one surviving file. When applied in Phase 4, fold the absorbed file's content into the survivor, then run bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" set-status <absorbed-path> "expired:superseded-by-consolidation:<survivor-path>" — the collapse rule then drops the row.
Each proposal includes: type, target checklist, item ID, description, rationale with plan evidence.
Apply every Phase 3 proposal (regression breaks first, then by frequency). No per-proposal approval gate — EVO-6 + thresholds + post-commit git show docs/retros/checklists/ are the quality surface. proposals_rejected is reserved for self-rejection at apply time: a proposal duplicating a recent removal (Phase 1 step 5) or contradicting a recalled memory prior (Pre-Check B) without materially new evidence is logged under "Self-Rejected Proposals" with the cited entry, increments proposals_rejected, and skips the checklist row. All others advance.
Apply steps:
{mode}-v{N+1}.md with all applied changes. Version increments once per run (not per proposal). Original version preserved unchanged.docs/retros/evolution-log.jsonl via lib/jsonl-emit.sh with <channel>=evolution-log and event item_added | item_removed | item_modified | item_promoted — emit per-proposal, do NOT defer to the end of the run (canonical invocation: ./references/evolution-protocol.md §"Canonical Emit Invocations"). These rows feed Phase 1 step 5's re-proposal guard — a dropped item_removed row silently re-adds the just-removed item next run. The Stop hook backfill is all-or-nothing and carries no rationale; the in-skill emit is authoritative and must run.3.5. Draft memory files for applied ADD/MODIFY proposals: for each ADD or MODIFY applied this run (post-self-rejection), draft one docs/memory/<category>_<slug>.md (convention for a structural rule, pitfall for a recurring failure mode, decision for a rejected-vs-chosen call), using the proposal's description and rationale as Fact/Why content and source: citing this run's retro report path. REMOVE and PROMOTE proposals, even if applied, do NOT trigger this step.
checklist_version equals this run's version(s) and confirm the count equals proposals_approved; emit any missing rows now. This guards against a partial drop the hook's all-or-nothing backfill cannot catch.Surface components that may no longer earn their cost and turn post-plan corrections into checklist proposals. Everything here is advisory — it feeds Phase 3 proposals and the Phase 6 report, reviewed via the post-commit diff. Phase 5 never disables a component or mutates the harness (the automated disable-test loop was removed in v2.9.0; history: ./references/evolution-protocol.md §History).
This is the load-bearing input (provenance: ./references/evolution-protocol.md §History). For each plan's post-plan-diff (Phase 1 step 6): when feedback-classified commits (refactor/fix/style/perf on plan-modified files) cluster around a pattern no batch evaluator flagged, that is a real evaluator coverage gap. Render the corrections table (./references/post-plan-diff.md §Phase 5a) and graduate each missed pattern to a Phase 3 ADD proposal at 1-plan evidence. This catches what grep-based checks cannot: consistency, API-contract, and coverage gaps.
Report notes only — never disable a component here; never-failing items belong to Phase 3 REMOVE proposals (do not duplicate).
Write the retrospective report to docs/retros/retro-{date}-{topic}.md:
bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" upsert retro <retro-report-path> --status active --summary "<one-line>" (same string as the report's summary line).invalidates: <path> line in the just-written retro report, run bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" set-status <path> "expired:retro-<date>:<reason>". If set-status returns exit 3 (path not tracked), log a warning and skip — do NOT upsert speculative entries just to mark them expired. CRITICAL boundary — a checklist-item REMOVE does NOT invalidate a design: a Phase 3 REMOVE evolves the checklist, not the design folder; only an explicit invalidates: <path> line triggers set-status expired: — separate channels. Expiry is retrospective-only — the other writer skills may NOT set expired:; only this step does.bash "${CLAUDE_PLUGIN_ROOT}/lib/docs-index.sh" upsert memory docs/memory/<path> --status active --summary "<one-line>" --category <category>.Close the calibration loop — CRITICAL: do this before you stop, even when zero proposals were approved. Append one retrospective_run row to docs/retros/evolution-log.jsonl via the canonical emit pattern (./references/evolution-protocol.md §"Canonical Emit Invocations"), recording proposals_approved and proposals_rejected. This row is the closure marker the next run's auto-scope reads — skip it and the next retrospective silently re-analyzes these plans. The Stop hook backfills a minimal watermark if you drop this, but only your emit carries proposals_approved / proposals_rejected / plans_analyzed — write the rich row here.
./references/bootstrap.md - Phase 0 procedure: Path A/B, exit codes, --force reset./references/analysis-patterns.md - Failure frequency, plateau detection, never-failing analysis./references/evolution-protocol.md - Proposal types, thresholds, log schema, canonical emits, history../../skills/references/goal-wrapper.md - /goal wrapper semantics and condition phrasing (shared)${CLAUDE_PLUGIN_ROOT}/lib/post-plan-diff.sh - classifies post-plan commits as feedback (user correcting superpowers output) or evolution (user adding new requirements); feeds Pre-Check A, Phase 1 step 6, and Phase 5a| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→fail | 36,577 | 6,786 | -81% | 1 | 1 | 0% | 272 | 4,055 | +1391% | 0 | 0 | — |
case-01 | fail→fail | 5,421 | 8,627 | +59% | 1 | 1 | 0% | 237 | 3,917 | +1553% | 0 | 0 | — |
case-02 | fail→fail | 5,628 | 7,010 | +25% | 1 | 1 | 0% | 507 | 4,051 | +699% | 0 | 0 | — |
case-03 | fail→fail | 6,884 | 5,600 | -19% | 1 | 1 | 0% | 488 | 3,971 | +714% | 0 | 0 | — |
case-05 | pass→fail | 20,507 | 8,954 | -56% | 1 | 1 | 0% | 3,372 | 4,138 | +23% | 0 | 0 | — |
case-06 | fail→fail | 2,373 | 9,748 | +311% | 1 | 1 | 0% | 394 | 4,047 | +927% | 0 | 0 | — |
case-07 | fail→pass | 10,314 | 9,133 | -11% | 1 | 1 | 0% | 1,704 | 5,121 | +201% | 0 | 0 | — |
case-08 | fail→pass | 11,600 | 2,899 | -75% | 1 | 1 | 0% | 1,949 | 4,113 | +111% | 0 | 0 | — |
case-09 | pass→pass | 12,434 | 6,313 | -49% | 1 | 1 | 0% | 1,892 | 4,607 | +143% | 0 | 0 | — |
case-10 | pass→pass | 7,661 | 3,309 | -57% | 1 | 1 | 0% | 1,171 | 4,188 | +258% | 0 | 0 | — |
case-11 | pass→pass | 11,070 | 6,272 | -43% | 1 | 1 | 0% | 1,720 | 4,740 | +176% | 0 | 0 | — |
case-12 | fail→pass | 8,504 | 6,445 | -24% | 1 | 1 | 0% | 1,303 | 4,469 | +243% | 0 | 0 | — |
case-13 | pass→pass | 12,540 | 8,844 | -29% | 1 | 1 | 0% | 1,780 | 5,098 | +186% | 0 | 0 | — |
case-14 | fail→pass | 8,494 | 3,820 | -55% | 1 | 1 | 0% | 1,247 | 4,374 | +251% | 0 | 0 | — |
case-15 | fail→fail | 13,393 | 9,085 | -32% | 1 | 1 | 0% | 2,189 | 5,121 | +134% | 0 | 0 | — |
case-16 | fail→pass | 7,213 | 4,469 | -38% | 1 | 1 | 0% | 1,037 | 4,404 | +325% | 0 | 0 | — |
case-17 | fail→pass | 13,819 | 4,733 | -66% | 1 | 1 | 0% | 2,565 | 4,433 | +73% | 0 | 0 | — |
case-18 | pass→pass | 11,273 | 4,910 | -56% | 1 | 1 | 0% | 1,830 | 4,585 | +151% | 0 | 0 | — |
case-19 | fail→pass | 18,845 | 4,852 | -74% | 1 | 1 | 0% | 3,324 | 4,648 | +40% | 0 | 0 | — |
case-20 | pass→pass | 10,320 | 5,618 | -46% | 1 | 1 | 0% | 1,568 | 4,501 | +187% | 0 | 0 | — |
case-21 | fail→fail | 7,945 | 2,923 | -63% | 1 | 1 | 0% | 1,541 | 4,143 | +169% | 0 | 0 | — |
case-22 | pass→pass | 13,690 | 5,460 | -60% | 1 | 1 | 0% | 2,327 | 4,790 | +106% | 0 | 0 | — |
case-23 | pass→pass | 9,177 | 4,955 | -46% | 1 | 1 | 0% | 1,278 | 4,453 | +248% | 0 | 0 | — |
case-24 | fail→pass | 7,826 | 4,098 | -48% | 1 | 1 | 0% | 1,374 | 4,267 | +211% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 18 counted toward the lift figure. The other 6 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +29 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.