Session Handoff
Produce a single, self-contained Markdown handoff document that lets the next
worker (human or AI) resume exactly where this session left off — with the
same understanding of what is done, what remains, why choices were made, and what
to do next. The output must prevent loss of plan or intent.
Prime directive: verify, don't narrate
A handoff that just recounts the chat is dangerous — the chat contains intentions,
abandoned ideas, and claims that may not match reality. Ground every
"done" against the repo. Before writing a status, confirm it:
git log --oneline -20 and git status --short — what actually landed vs. what
is uncommitted/dirty vs. only discussed.
- Read/
ls/grep the files a claim depends on — does the module/route/setting
actually exist? (Absence of evidence ≠ done.)
- Run the tests that would prove a claim; note pass/fail. A test file that
exists is not a test that passed — locating one earns CLAIMED, never
DONE (verified), and a test that skips, or asserts nothing that could
fail, proves nothing however green it prints. If you can't run them, say so —
never imply verification you didn't do.
Classify every item as one of: DONE (verified), CLAIMED (asserted in chat
but not confirmed in repo), IN-PROGRESS (partial / uncommitted), or
NOT STARTED. Never collapse CLAIMED into DONE.
Method
- Reconstruct the goal. Re-read the session from the top. State the original
objective and any scope changes in the user's own terms. Distinguish the
mission (why) from the tasks (what).
- Inventory the work. List everything attempted. For each, assign a status
from the four above with evidence (commit hash, file path:line, test name,
or "asserted in chat, unverified").
- Capture the reasoning. For every non-obvious decision: what was chosen,
what was rejected, and why. This is what prevents the next worker from
re-litigating settled questions or repeating dead ends. Pull rationale out of
the conversation — it is the most perishable, highest-value content.
- Surface the constraints & gotchas. Environment quirks, air-gap/offline
limits, credentials, flaky steps, "do not re-fix this" traps (check the repo docs
and whichever instruction file this host loads — CLAUDE.md, AGENTS.md,
SYSTEM.md). These cost the next worker hours if lost.
- Define the resume path. The exact next 1–3 actions, the first commands to
run to get oriented, and the branch/PR state. Be concrete enough that someone
can start in under five minutes.
- List open questions. Anything awaiting a user decision, unknowns, or risks.
Writing the document
Fill in template.md (in this skill's directory). Read it and follow its
structure and section-by-section guidance. Rules for the output:
- Self-contained. The reader has not seen this chat. Spell out acronyms,
link file paths as
path:line, quote the relevant commit messages. Do not write
"as discussed above" — there is no above.
- Evidence over assertion. Prefer "
geo/mosaic_qa.py — ABSENT (grep returned
0 matches)" to "QA judge not done".
- Ruthlessly current. If the plan changed mid-session, document the final
plan and note what was superseded, so nobody follows a stale branch of thought.
- Depth where it matters, brevity where it doesn't. In-depth on decisions,
rationale, gotchas, and resume steps; terse on boilerplate.
- No invention. If something is unknown, write "UNKNOWN — needs checking",
never a plausible guess. A confident wrong handoff is worse than an honest gap.
Output location & naming
Default to docs/handoffs/HANDOFF-<YYYY-MM-DD>-<short-topic-slug>.md (create the
folder if absent). If the repo has an obvious conventions dir (e.g.
docs/superpowers/), prefer matching it. If the user named a path or the
scratchpad, honor that. Confirm the location in your reply.
Optional args: treat any argument as the output path or a focus hint
(e.g. /handoff docs/notes/handoff.md or /handoff mosaic tracks).
Finish
After writing, reply with: the file path, a 3–5 line summary of the current state
it captured, and the single recommended next action. Do not commit or push
unless the user asks — the handoff is theirs to place.
1---2name: handoff3description: Use when the user asks to "hand off", "write a handoff", "create a handoff doc", "document where we are", "prepare for the next session/person", or wants a continuity/checkpoint summary of the current session — an in-depth, verified session-handoff document (a Markdown file) so a different person or AI can continue the work with zero loss of context, plan, or intent.4---56# Session Handoff78Produce a single, self-contained Markdown handoff document that lets the next9worker (human or AI) resume **exactly where this session left off** — with the10same understanding of what is done, what remains, why choices were made, and what11to do next. The output must prevent loss of plan or intent.1213## Prime directive: verify, don't narrate1415A handoff that just recounts the chat is dangerous — the chat contains intentions,16abandoned ideas, and claims that may not match reality. **Ground every17"done" against the repo.** Before writing a status, confirm it:1819- `git log --oneline -20` and `git status --short` — what actually landed vs. what20 is uncommitted/dirty vs. only discussed.21- Read/`ls`/`grep` the files a claim depends on — does the module/route/setting22 actually exist? (Absence of evidence ≠ done.)23- Run the tests that would prove a claim; note pass/fail. A test file that24 exists is not a test that passed — locating one earns **CLAIMED**, never25 **DONE (verified)**, and a test that skips, or asserts nothing that could26 fail, proves nothing however green it prints. If you can't run them, say so —27 never imply verification you didn't do.2829Classify every item as one of: **DONE (verified)**, **CLAIMED (asserted in chat30but not confirmed in repo)**, **IN-PROGRESS (partial / uncommitted)**, or31**NOT STARTED**. Never collapse CLAIMED into DONE.3233## Method34351. **Reconstruct the goal.** Re-read the session from the top. State the original36 objective and any scope changes in the user's own terms. Distinguish the37 *mission* (why) from the *tasks* (what).382. **Inventory the work.** List everything attempted. For each, assign a status39 from the four above **with evidence** (commit hash, file path:line, test name,40 or "asserted in chat, unverified").413. **Capture the reasoning.** For every non-obvious decision: what was chosen,42 what was rejected, and *why*. This is what prevents the next worker from43 re-litigating settled questions or repeating dead ends. Pull rationale out of44 the conversation — it is the most perishable, highest-value content.454. **Surface the constraints & gotchas.** Environment quirks, air-gap/offline46 limits, credentials, flaky steps, "do not re-fix this" traps (check the repo docs47 and whichever instruction file this host loads — CLAUDE.md, AGENTS.md,48 SYSTEM.md). These cost the next worker hours if lost.495. **Define the resume path.** The exact next 1–3 actions, the first commands to50 run to get oriented, and the branch/PR state. Be concrete enough that someone51 can start in under five minutes.526. **List open questions.** Anything awaiting a user decision, unknowns, or risks.5354## Writing the document5556Fill in `template.md` (in this skill's directory). Read it and follow its57structure and section-by-section guidance. Rules for the output:5859- **Self-contained.** The reader has *not* seen this chat. Spell out acronyms,60 link file paths as `path:line`, quote the relevant commit messages. Do not write61 "as discussed above" — there is no above.62- **Evidence over assertion.** Prefer "`geo/mosaic_qa.py` — ABSENT (grep returned63 0 matches)" to "QA judge not done".64- **Ruthlessly current.** If the plan changed mid-session, document the *final*65 plan and note what was superseded, so nobody follows a stale branch of thought.66- **Depth where it matters, brevity where it doesn't.** In-depth on decisions,67 rationale, gotchas, and resume steps; terse on boilerplate.68- **No invention.** If something is unknown, write "UNKNOWN — needs checking",69 never a plausible guess. A confident wrong handoff is worse than an honest gap.7071## Output location & naming7273Default to `docs/handoffs/HANDOFF-<YYYY-MM-DD>-<short-topic-slug>.md` (create the74folder if absent). If the repo has an obvious conventions dir (e.g.75`docs/superpowers/`), prefer matching it. If the user named a path or the76scratchpad, honor that. Confirm the location in your reply.7778Optional args: treat any argument as the output path or a focus hint79(e.g. `/handoff docs/notes/handoff.md` or `/handoff mosaic tracks`).8081## Finish8283After writing, reply with: the file path, a 3–5 line summary of the current state84it captured, and the single recommended next action. Do **not** commit or push85unless the user asks — the handoff is theirs to place.