Retro — Three Questions, Then Intents
Why this exists
The session that did the work is the worst judge of its own blind
spots and the last to notice its own drift. Verification gates check
what the session claimed; the retro asks what it did not claim, and
whether the work still points at the slice it started on. It is a
grooming step, cheap enough to run whenever drift is suspected, not a
closing ceremony: it fixes what the hot context can fix, files intents
for what it cannot, never a story, and it never touches the primer. The session close is /handoff, which is gated on
a retro newer than the primer.
Precedent: a mid-session retro surfaced that a just-shipped
containment check was looser than its intent and that a fail-closed
gate needed a second edge kind. No gate would have caught either,
because no claim covered them.
Prerequisites
WIKI_SCOPE: <scope> declared in the project instructions. If
missing, suggest /wiki.
- The
intent kind served: wiki://template/project/intent via MCP,
or kmd resource wiki://template/project/intent where the harness
exposes no MCP resources.
- The scope's
notes/ folder for the dated retro note
(projects/<scope>/notes/retro-YYYY-MM-DD.md).
When it runs
- Any time drift is suspected: a bug-hunting detour, an hour without
touching the slice in progress, a compaction, a topic change.
- Before a release cut, and before
/handoff — the handoff gate blocks
a primer write until a retro note is newer than the primer.
- The operator invokes it. The context clock may prompt it; the agent
never runs it unasked.
The protocol
Step 1 — Re-read ground truth
Before answering anything, re-read the story and slice in progress
from disk, and list the scope's open intents:
- MCP:
search(query, scope=<scope>, kind="intent");
CLI: kmd search "<terms>" --scope <scope> --kind intent.
The re-read is the point. A degraded context cannot diagnose its own
drift by introspection; reading the contract back is the cheapest
refresh there is.
Step 2 — Answer three questions
In order, in the visible response:
- What are you least confident about right now?
- What's the biggest thing we're missing about the situation right
now? What don't I realize?
- Where are we relative to the slice we started? State the delta
between the slice's acceptance and what is in the tree, citing the
slice by name and its tick state. Then name every detour since the
last retro and classify each: decision (recorded where), drift
(dropped, or worth an intent), or done.
Answering rules:
- Answers are about the WORK, not the worker. Name code, artifacts,
and measurements — never feelings, apologies, or process narrative.
- Every answer to questions 1 and 2 carries a location (file, story,
intent, number) and a falsification path: what a future session runs
or reads to confirm or kill the concern.
- Question 2 demands the perspective shift: re-read the session's own
claims as a skeptic. What blind spot did every gate share? What
would an adversarial reviewer probe first? What state does the
session assume persists that nothing actually verifies?
- Banned: performative humility ("mistakes may have been made"),
vacuous confidence ("everything is verified"), and re-announcing
filed intents or stories as discoveries — reference them instead.
- An answer that only references existing intents and stories is a
valid answer. A retro that files nothing new is a passing retro.
Step 3 — Route each answer
Nothing stays only in chat. Route by shape:
| Answer shape |
Artifact |
| Finding already on file — an intent in any status, or a story |
Bump the intent's sightings and its updated; for a story, reference it. Never file a twin. |
| New finding whose fix is small, testable now, and outside ADR-gated territory |
The fix itself, in the current commit: a test named for the finding, then the change; one Decisions line in the owning story naming it. No intent. |
| New finding that needs investigation, a decision, a cold session, or more than a small change |
An intent: status: draft, origin: retro, sightings: 1, the six template sections, about fifteen lines, a concrete Falsification path. |
| Invalidated or shaky assumption |
Correct the story, spec, or ADR where it lives, inline; a Decisions entry in the story if acceptance changes. |
| Sequencing call or risk that shapes what ships next |
A Decisions entry in the owning story, carrying its falsification path. |
| A detour from question 3 |
Decision → its recorded location; drift → dropped, or an intent if it is worth pursuing; done → the slice tick. |
Rules of the table:
- Cap: at most three new intents per retro. With more findings,
file the three with the sharpest falsification paths and name the
rest as unfiled in the retro note. If one matters it recurs, and the
second sighting is what earns it a file.
- Two strikes before elaboration. The retro never writes a story.
Promotion — two sightings, a confirmed falsification, or an operator
call — is
/triage's outcome, and the story is written there.
- Never a new story, a session log in the plan, or a primer edit.
The plan carries only its Story Index; the primer is
/handoff's.
Step 4 — The retro note
One note per day at projects/<scope>/notes/retro-YYYY-MM-DD.md, no
kind field, updated taken from date -u +%Y-%m-%dT%H:%M:%SZ. Each
invocation appends a section headed by the UTC time and a label:
## 14:30Z — mid-session, resolver
- Intents: [[intent-<slug>]] filed; [[intent-<other>]] sightings → 2
- Decisions: [[story-<slug>]] § Decisions, sequencing of the engine publish
- Detours: <one line each, classified>
- Unfiled: <one line each, if any>
Ten lines or fewer, pointers only. The substance lives in the intents
and stories; the note is the freshness signal the handoff and tag
gates read, so its clock must move every time.
Step 5 — Acting on a finding: fix now, or file
The intent is a cold-start capture: its six sections hold what a
future session cannot recover from the code. When the context is hot
and the fix is small, the interview re-captures what the conversation
already holds and charges the next session for work this one could
have finished. Fixing is the default and filing the fallback. Fix now
when all three hold:
- Small and testable. The change is bounded — on the order of
twenty lines — and a test named for the finding goes red before it,
in a test file already in play. The test is the contract; the
record is one Decisions line in the owning story, or
fixed_by on
an intent already filed.
- In the current flow. It ships in the commit the session is
already building — never its own slice, ceremony, or "next run" —
and the operator hears what shipped in the same turn: a report, not
a permission gate. Slice ticks, spec corrections, and the retro note
ride the same session.
- Unlocked territory. Anything the story's Decisions mark as
ADR-gated routes to its amendment round. When the fix shape IS an
amendment, acting now means holding that conversation now.
Anything larger files as an intent; when a filed intent's fix turns out
that cheap, it archives with fixed_by naming the test's repo-relative
path. Promotion is for findings that need a story's shape.
Output shape
Visible response: the three answers, each with location and
falsification path; the artifact list (file → what changed); one line
naming what the session is re-anchored on (story-<slug>, slice N).
No separate report — the artifacts are the output.
Anti-patterns
- Skipping the re-read. Answering question 3 from memory is the
drift the question exists to catch.
- Story from a retro. A finding is an intent until triage promotes
it; a story written at filing is the backlog growing by ceremony.
- Primer from a retro. The primer is written once, at
/handoff,
from the corrected state. A retro that edits it inherits the blind
spots it was meant to surface.
- Filing as resolution. A draft intent is a routed finding, not a
handled one; the second sighting, not the first file, is the signal.
- Filing as deferral. An intent for a fix the hot context could
make is ceremony charged to the next session, which starts cold and
pays the interview twice.
- Confession register. Wiki artifacts store project state, never
behavioral postmortems.
- Note as substance. A retro note longer than ten lines is a plan
session log by another name.
1---2name: retro3description: This skill should be used for a session retrospective at any point in a session — mid-session when drift is suspected, after a bug-hunting detour, after compaction, before a release cut, and always before /handoff. Asks three questions — 'What are you least confident about?', 'What's the biggest thing we're missing? What don't I realize?', and 'Where are we relative to the slice we started, and what were the detours?' — then routes every answer into a fix in the current commit when it is small and testable, else intents, sightings bumps, and story Decisions entries — never a new story and never the primer. Use when the user says "/retro", "run the retro", "lightweight retro", "mid-session retro", "session retro", "retro protocol", "check for drift", "what are we least confident about", "what are we missing", or "what don't you realize".4---56# Retro — Three Questions, Then Intents78## Why this exists910The session that did the work is the worst judge of its own blind11spots and the last to notice its own drift. Verification gates check12what the session claimed; the retro asks what it did not claim, and13whether the work still points at the slice it started on. It is a14grooming step, cheap enough to run whenever drift is suspected, not a15closing ceremony: it fixes what the hot context can fix, files intents16for what it cannot, never a story, and it never touches the primer. The session close is `/handoff`, which is gated on17a retro newer than the primer.1819Precedent: a mid-session retro surfaced that a just-shipped20containment check was looser than its intent and that a fail-closed21gate needed a second edge kind. No gate would have caught either,22because no claim covered them.2324## Prerequisites2526- `WIKI_SCOPE: <scope>` declared in the project instructions. If27 missing, suggest `/wiki`.28- The `intent` kind served: `wiki://template/project/intent` via MCP,29 or `kmd resource wiki://template/project/intent` where the harness30 exposes no MCP resources.31- The scope's `notes/` folder for the dated retro note32 (`projects/<scope>/notes/retro-YYYY-MM-DD.md`).3334## When it runs3536- Any time drift is suspected: a bug-hunting detour, an hour without37 touching the slice in progress, a compaction, a topic change.38- Before a release cut, and before `/handoff` — the handoff gate blocks39 a primer write until a retro note is newer than the primer.40- The operator invokes it. The context clock may prompt it; the agent41 never runs it unasked.4243## The protocol4445### Step 1 — Re-read ground truth4647Before answering anything, re-read the story and slice in progress48from disk, and list the scope's open intents:4950- MCP: `search(query, scope=<scope>, kind="intent")`;51 CLI: `kmd search "<terms>" --scope <scope> --kind intent`.5253The re-read is the point. A degraded context cannot diagnose its own54drift by introspection; reading the contract back is the cheapest55refresh there is.5657### Step 2 — Answer three questions5859In order, in the visible response:60611. **What are you least confident about right now?**622. **What's the biggest thing we're missing about the situation right63 now? What don't I realize?**643. **Where are we relative to the slice we started?** State the delta65 between the slice's acceptance and what is in the tree, citing the66 slice by name and its tick state. Then name every detour since the67 last retro and classify each: *decision* (recorded where), *drift*68 (dropped, or worth an intent), or *done*.6970Answering rules:7172- Answers are about the WORK, not the worker. Name code, artifacts,73 and measurements — never feelings, apologies, or process narrative.74- Every answer to questions 1 and 2 carries a location (file, story,75 intent, number) and a falsification path: what a future session runs76 or reads to confirm or kill the concern.77- Question 2 demands the perspective shift: re-read the session's own78 claims as a skeptic. What blind spot did every gate share? What79 would an adversarial reviewer probe first? What state does the80 session assume persists that nothing actually verifies?81- Banned: performative humility ("mistakes may have been made"),82 vacuous confidence ("everything is verified"), and re-announcing83 filed intents or stories as discoveries — reference them instead.84- An answer that only references existing intents and stories is a85 valid answer. A retro that files nothing new is a passing retro.8687### Step 3 — Route each answer8889Nothing stays only in chat. Route by shape:9091| Answer shape | Artifact |92|---|---|93| Finding already on file — an intent in any status, or a story | Bump the intent's `sightings` and its `updated`; for a story, reference it. Never file a twin. |94| New finding whose fix is small, testable now, and outside ADR-gated territory | The fix itself, in the current commit: a test named for the finding, then the change; one Decisions line in the owning story naming it. No intent. |95| New finding that needs investigation, a decision, a cold session, or more than a small change | An intent: `status: draft`, `origin: retro`, `sightings: 1`, the six template sections, about fifteen lines, a concrete Falsification path. |96| Invalidated or shaky assumption | Correct the story, spec, or ADR where it lives, inline; a Decisions entry in the story if acceptance changes. |97| Sequencing call or risk that shapes what ships next | A Decisions entry in the owning story, carrying its falsification path. |98| A detour from question 3 | Decision → its recorded location; drift → dropped, or an intent if it is worth pursuing; done → the slice tick. |99100Rules of the table:101102- **Cap: at most three new intents per retro.** With more findings,103 file the three with the sharpest falsification paths and name the104 rest as unfiled in the retro note. If one matters it recurs, and the105 second sighting is what earns it a file.106- **Two strikes before elaboration.** The retro never writes a story.107 Promotion — two sightings, a confirmed falsification, or an operator108 call — is `/triage`'s outcome, and the story is written there.109- **Never** a new story, a session log in the plan, or a primer edit.110 The plan carries only its Story Index; the primer is `/handoff`'s.111112### Step 4 — The retro note113114One note per day at `projects/<scope>/notes/retro-YYYY-MM-DD.md`, no115`kind` field, `updated` taken from `date -u +%Y-%m-%dT%H:%M:%SZ`. Each116invocation appends a section headed by the UTC time and a label:117118```markdown119## 14:30Z — mid-session, resolver120121- Intents: [[intent-<slug>]] filed; [[intent-<other>]] sightings → 2122- Decisions: [[story-<slug>]] § Decisions, sequencing of the engine publish123- Detours: <one line each, classified>124- Unfiled: <one line each, if any>125```126127Ten lines or fewer, pointers only. The substance lives in the intents128and stories; the note is the freshness signal the handoff and tag129gates read, so its clock must move every time.130131### Step 5 — Acting on a finding: fix now, or file132133The intent is a cold-start capture: its six sections hold what a134future session cannot recover from the code. When the context is hot135and the fix is small, the interview re-captures what the conversation136already holds and charges the next session for work this one could137have finished. Fixing is the default and filing the fallback. Fix now138when all three hold:1391401. **Small and testable.** The change is bounded — on the order of141 twenty lines — and a test named for the finding goes red before it,142 in a test file already in play. The test is the contract; the143 record is one Decisions line in the owning story, or `fixed_by` on144 an intent already filed.1452. **In the current flow.** It ships in the commit the session is146 already building — never its own slice, ceremony, or "next run" —147 and the operator hears what shipped in the same turn: a report, not148 a permission gate. Slice ticks, spec corrections, and the retro note149 ride the same session.1503. **Unlocked territory.** Anything the story's Decisions mark as151 ADR-gated routes to its amendment round. When the fix shape IS an152 amendment, acting now means holding that conversation now.153154Anything larger files as an intent; when a filed intent's fix turns out155that cheap, it archives with `fixed_by` naming the test's repo-relative156path. Promotion is for findings that need a story's shape.157158## Output shape159160Visible response: the three answers, each with location and161falsification path; the artifact list (file → what changed); one line162naming what the session is re-anchored on (`story-<slug>`, slice N).163No separate report — the artifacts are the output.164165## Anti-patterns166167- **Skipping the re-read.** Answering question 3 from memory is the168 drift the question exists to catch.169- **Story from a retro.** A finding is an intent until triage promotes170 it; a story written at filing is the backlog growing by ceremony.171- **Primer from a retro.** The primer is written once, at `/handoff`,172 from the corrected state. A retro that edits it inherits the blind173 spots it was meant to surface.174- **Filing as resolution.** A draft intent is a routed finding, not a175 handled one; the second sighting, not the first file, is the signal.176- **Filing as deferral.** An intent for a fix the hot context could177 make is ceremony charged to the next session, which starts cold and178 pays the interview twice.179- **Confession register.** Wiki artifacts store project state, never180 behavioral postmortems.181- **Note as substance.** A retro note longer than ten lines is a plan182 session log by another name.