Retro — LLM-driven Session Retrospection
One LLM pass over a session or the memory backlog detects friction and
reusable learnings, classifies each into one of seven destinations, and
materializes approved ones.
Core principle: No silent writes — every materialization needs
approval.
Modes
/retro — Sweep: the whole current session.
/retro "<problem>" — Spotlight: one described issue.
/retro outcome [session-id|--since N] — replay a past session by its
outcomes.
/retro audit [--scope project|repo|skill] — cross-session architectural
drift.
/retro promote — re-home already-written local memory upward (never
project-local memory); drain the source only after the upward write is
verified. See references/promote-mode.md.
/retro done — definition-of-done gate: seven evidence-backed checks
(task, findings, retro, cleanup, questions, tickets, time), each ✅ / ❌ /
⏸ / N/A. ⏸ only when a named person can close it with a named action;
what is structurally absent is N/A with its reason — a ⏸ nobody can close
makes the whole table get skipped. Say done when every row is ✅ or N/A.
See references/done-mode.md.
- Auto — optional SessionEnd hook, off by default. It is plugin-level, not
part of this skill directory:
hooks/session-end.json at the repository root
(see README, "Optional SessionEnd hook").
Pipeline (all modes)
- Mechanical pre-pass —
${CLAUDE_SKILL_DIR}/scripts/detect-mechanical.py (Promote:
${CLAUDE_SKILL_DIR}/scripts/scan-memory-inventory.py). It requires --transcript-file, and the
transcript is located by content — a token from this session — never by
mtime: several sessions share one project slug, so the newest JSONL is
regularly somebody else's. Invocation in references/workflow.md.
- LLM enrichment — inferential signals, both classes (friction + learnings
B16–B18); filter false positives.
- Cross-session enrichment (optional) — JSONL scan via
${CLAUDE_SKILL_DIR}/scripts/scan-cross-session.py.
- Discover skills —
${CLAUDE_SKILL_DIR}/scripts/find-org-skills.py — and the repo's harness (project-harness-inspection.md).
- Classify (
classification-heuristic.md) — authority first, then broadest
scope; never project-local memory.
- Evals — read a matched skill's
evals/; propose a TDD stub.
- Proposals — prose Why + How-to-apply, grouped, ≤10; learnings survive the
trim.
- Approval — approve / edit / reject per proposal.
- Materialize per destination; for Promote, drain the source last (verified).
- Report.
Boundaries
Scope: session-end/cross-session analysis, skill-PR routing, done gate.
Always: LLM is primary classifier. Patches go to source repos, never the
cache. Per-private-repo confirmation. Conventional Commits. DCO sign-off
(git commit -s). Preserve commit signing.
Ask first: skill-match ambiguity, auto-mode activation, private-repo targets,
dirty-worktree fallback, any promotion making a note team-visible.
Never: auto-merge, silent writes, bot attribution, skip hooks (--no-verify),
patch the cache, hardcode a static skill list, rm a drained memory (tombstone);
from Done mode: merge, tag or deploy, or touch another session's containers,
processes or worktrees.
References
| File |
Purpose |
references/friction-catalog.md |
All signals: friction + learnings (A/B/C, B16–B18) |
references/destination-taxonomy.md |
The seven destinations |
references/classification-heuristic.md |
Friction → destination mapping |
references/skill-discovery.md |
Finding skills at runtime |
references/patch-workflow.md |
Source-repo patching (never cache) |
references/eval-integration.md |
Evals for context + TDD stubs |
references/promote-mode.md |
Promote: materialize-then-drain |
references/done-mode.md |
Done: seven-gate finish check |
references/workflow.md |
All modes + phase selection |
1---2name: retro3description: Use when a Claude Code session ends or is declared finished, a friction needs fixing, a reusable learning needs capturing, local memory needs promoting upward, or for cross-session audits — detect friction AND learnings, route each to the right destination, and gate 'done'. Triggers: /retro, /retro done, 'retrospective', 'capture this learning', 'fix this skill', 'promote memory', 'audit', 'alles erledigt'.4license: (MIT AND CC-BY-SA-4.0). See LICENSE-MIT and LICENSE-CC-BY-SA-4.05---67# Retro — LLM-driven Session Retrospection89One LLM pass over a session or the memory backlog detects **friction and10reusable learnings**, classifies each into one of seven destinations, and11materializes approved ones.1213**Core principle:** No silent writes — every materialization needs14approval.1516## Modes1718- **`/retro`** — Sweep: the whole current session.19- **`/retro "<problem>"`** — Spotlight: one described issue.20- **`/retro outcome [session-id|--since N]`** — replay a past session by its21 outcomes.22- **`/retro audit [--scope project|repo|skill]`** — cross-session architectural23 drift.24- **`/retro promote`** — re-home already-written local memory upward (never25 project-local memory); drain the source only after the upward write is26 verified. See `references/promote-mode.md`.27- **`/retro done`** — definition-of-done gate: seven evidence-backed checks28 (task, findings, retro, cleanup, questions, tickets, time), each ✅ / ❌ /29 ⏸ / N/A. **⏸ only when a named person can close it with a named action;30 what is structurally absent is N/A with its reason** — a ⏸ nobody can close31 makes the whole table get skipped. Say **done** when every row is ✅ or N/A.32 See `references/done-mode.md`.33- **Auto** — optional SessionEnd hook, off by default. It is plugin-level, not34 part of this skill directory: `hooks/session-end.json` at the repository root35 (see README, "Optional SessionEnd hook").3637## Pipeline (all modes)38391. Mechanical pre-pass — `${CLAUDE_SKILL_DIR}/scripts/detect-mechanical.py` (Promote:40 `${CLAUDE_SKILL_DIR}/scripts/scan-memory-inventory.py`). It requires `--transcript-file`, and the41 transcript is located **by content** — a token from this session — never by42 mtime: several sessions share one project slug, so the newest JSONL is43 regularly somebody else's. Invocation in `references/workflow.md`.442. LLM enrichment — inferential signals, both classes (friction + learnings45 B16–B18); filter false positives.463. Cross-session enrichment (optional) — JSONL scan via `${CLAUDE_SKILL_DIR}/scripts/scan-cross-session.py`.474. Discover skills — `${CLAUDE_SKILL_DIR}/scripts/find-org-skills.py` — and the repo's harness (`project-harness-inspection.md`).485. Classify (`classification-heuristic.md`) — authority first, then broadest49 scope; never project-local memory.506. Evals — read a matched skill's `evals/`; propose a TDD stub.517. Proposals — prose Why + How-to-apply, grouped, ≤10; learnings survive the52 trim.538. Approval — approve / edit / reject per proposal.549. Materialize per destination; for Promote, drain the source last (verified).5510. Report.5657## Boundaries5859**Scope:** session-end/cross-session analysis, skill-PR routing, done gate.6061**Always:** LLM is primary classifier. Patches go to source repos, never the62cache. Per-private-repo confirmation. Conventional Commits. DCO sign-off63(`git commit -s`). Preserve commit signing.6465**Ask first:** skill-match ambiguity, auto-mode activation, private-repo targets,66dirty-worktree fallback, any promotion making a note team-visible.6768**Never:** auto-merge, silent writes, bot attribution, skip hooks (`--no-verify`),69patch the cache, hardcode a static skill list, `rm` a drained memory (tombstone);70from Done mode: merge, tag or deploy, or touch another session's containers,71processes or worktrees.7273## References7475| File | Purpose |76|---|---|77| `references/friction-catalog.md` | All signals: friction + learnings (A/B/C, B16–B18) |78| `references/destination-taxonomy.md` | The seven destinations |79| `references/classification-heuristic.md` | Friction → destination mapping |80| `references/skill-discovery.md` | Finding skills at runtime |81| `references/patch-workflow.md` | Source-repo patching (never cache) |82| `references/eval-integration.md` | Evals for context + TDD stubs |83| `references/promote-mode.md` | Promote: materialize-then-drain |84| `references/done-mode.md` | Done: seven-gate finish check |85| `references/workflow.md` | All modes + phase selection |