About retro
A session-retrospection skill that uses an LLM pass to identify friction and reusable learnings, classify them, and propose approved materialization. It supports session reviews, cross-session audits, memory promotion, and a definition-of-done check; writes are never silent.
Key features
- 01Detects friction and reusable learnings
- 02Classifies findings into destinations
- 03Requires approval before materializing
- 04Supports session and cross-session review
- 05Includes promotion and done-check modes
Use cases
- 01Reviewing a coding session for recurring friction
- 02Auditing architectural drift across sessions
- 03Promoting approved local memory to broader scope
- 04Checking task completion against evidence-backed gates
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ netresearch/ retro-skill --skill retroAfter installing, type/retroin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
checkpoints.yamlevals/canonical-owner-not-skill-copy.mdcleanup-scope-derived-not-remembered.mdconflicting-skill-instructions.mdcross-session-pattern-scope.mddescription-no-match-not-conclusive.mddone-gate-holds-on-unbooked-time.mddurable-change-codified.mdeval-tightening-retains-valid-controls.mdharness-artefact-over-prose.mdmechanical-failure-not-skill-update.mdno-action-low-confidence.mdobsolete-instruction-removal.mdpending-state-memory-is-reverified.mdpersonal-rule-alias-accepted.mdproject-harness-not-only-skills.mdREADME.mdreusable-learning-survives-cap.mdreview-feedback-outside-transcript.mdsignal-count-validated-before-escalation.mdskill-bug-vs-gap.mdstale-open-not-obsolete.mdsuperseded-copy-pruned.mdtracker-neutrality.mdreferences/classification-heuristic.mddestination-taxonomy.mddone-mode.mdeval-integration.mdfeedback-contract.mdfriction-catalog.mdDetails
From the project READMERetro — LLM-driven Session Retrospection
On Codex, resolve script paths from this loaded skill directory and use the
native discovery reader (find-org-skills.py --host codex), not Claude cache
paths. Host selection and coverage limits: references/skill-discovery.md.
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. Seereferences/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. Seereferences/done-mode.md.- Auto — optional SessionEnd hook, off by default. It is plugin-level, not
part of this skill directory:
hooks/session-end.jsonat the repository root (see README, "Optional auto-trigger").
Pipeline (all modes)
- Mechanical pre-pass —
uv run ${CLAUDE_SKILL_DIR}/scripts/detect-mechanical.py(Promote:uv run ${CLAUDE_SKILL_DIR}/scripts/scan-memory-inventory.py). Every Python script runs throughuv run: its header declares Python 3.11 or later, andpython3can be an older interpreter (macOS ships 3.9). 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. Codex rollout JSONL must first be converted withscripts/codex-transcript.py; on Windows setPYTHONUTF8=1beforeuv run. Invocation and adapter limits are inreferences/workflow.md. Thenuv run ${CLAUDE_SKILL_DIR}/scripts/collect-review-findings.pyon the same transcript (its header also declares the tree-sitter parser; plainpython3stops with a message): review threads, bot reviews, and comments on the session's PRs/MRs, their linked issues, plus normalized tracker feedback supplied via--feedback-file(input for B18–B20, D4, D6). The subagents' transcripts (<session id>/subagents/agent-*.jsonl) are read with it;transcriptsin the output lists every file read. PRs a script opened (a fleet driver'sopened.jsonl) are not in the transcript: pass that file with--pr-list. Resolve relevant opaque hints through the owning integration, never by key shape. Seereferences/feedback-contract.md; incomplete coverage is not silence. - LLM enrichment — inferential signals, both classes (friction + learnings B16–B20); 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. Tracker identity and access belong to the owning integration; QA and time policy belong to project/organization rules. No implicit tracker, CLI discovery or organization-specific billing defaults in the core.
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, harness-invented attribution (a disclosure
the user's rules prescribe is required), 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/feedback-contract.md | Tracker-neutral evidence and reference resolution |
references/friction-catalog.md | All signals: friction + learnings (A/B/C, B16–B20) |
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 |