Handover
Handover & Resume — session-continuity skills for Claude Code / Craft Agents
npx -y skills add CoachSteff/handover-skills --skill handoverAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Capture the current coding session's state into durable in-repo artifacts (PROGRESS.md + a self-contained HANDOVER.md) at a milestone or phase change, so a fresh session can resume without the transcript.
SKILL.md
6.9 KB, as published. Nobody here has run it
Handover — Capture Session State
You are closing out a coding work session by writing durable state, not a chat summary. The next session will read your artifacts COLD and must be able to resume without this transcript.
When to use this skill
Invoke at a boundary, not mid-thought:
- A milestone finished (a feature or layer is stable).
- A phase change (planning → building, or building → polish).
- The conversation has drifted or accumulated noise.
- The user says "wrap up", "hand off", "save state", or "we'll continue later".
Compaction is for staying in ONE thread. Handover is for crossing a boundary. If the user just wants to keep going in the same thread, do NOT write a handover — say so.
Before you write
- Find the project root (the repo or working directory being built). If it's ambiguous, ASK — do not guess.
- Read the project's existing docs: spec / README, PROGRESS.md, and any prior HANDOVER.md. Detect where docs live (root vs a docs/ folder) and follow that convention.
- Verify, don't assume. Establish current state from reality, not memory:
- Check git:
git statusandgit log --oneline -5. - If there's a build, a running app, or tests, note whether they were actually run this session.
- Re-read the key source files you're about to describe.
Anything you did NOT verify goes in
<unknowns_and_do_not_assume>, not<current_state>.
- Check git:
What to write
- Append to PROGRESS.md — a dated milestone block (see format). Never wipe this file.
- Overwrite HANDOVER.md — the full XML-sectioned brief (see format). Fill EVERY section. Empty sections are a smell; if a section is truly N/A, write "none" with one line of why.
- Archive a copy to
handover/HANDOVER-YYYY-MM-DD-HHMM.md. Get the timestamp fromdate '+%Y-%m-%d-%H%M'so it matches the user's clock. Keep this folder visible (not hidden) — the growing trail of snapshots is part of the practice. - If
init.shdoes not exist and the project needs a non-obvious startup, write one.
HANDOVER.md format
---
title: Handover — {project-name}
project: {project-name}
date: YYYY-MM-DD
time: HH:MM
phase: planning | building | testing | polish | shipped
---
<mission>
One or two sentences. What is this project trying to be, and what does "done" mean
for the CURRENT phase (not the whole project)?
</mission>
<current_state>
What works right now (verified, not assumed). What is half-built. What is broken.
Be concrete: "Add-item works in the browser; delete button throws on an empty list."
</current_state>
<artifacts>
- repo / branch: {repo} @ {branch} — last commit {sha or 'uncommitted changes'}
- key files: path — one-line role
- spec / docs: which file holds the source spec, and which sections are now stale
- running app: how it's started (e.g. `npm run dev`, `python3 -m http.server 8000`)
- tests: where they are, how to run them
</artifacts>
<decisions>
Settled choices the next session must NOT reopen, with the why in one clause.
- Chose vanilla JS over a framework — keep it readable, no build step.
- Dropped offline mode — out of scope for v1 (non-goal).
</decisions>
<constraints>
Hard limits and forbidden moves for THIS project (read from the repo, not assumed).
- Stack and tooling as established in the repo.
- Don't force-push; open a PR instead.
- Any conventions the project's docs/README require.
</constraints>
<verification>
Evidence level for the claims above. What was actually run vs assumed.
- Ran: `npm test` — 12 pass / 1 fail (delete-empty case).
- Manually checked: golden path in browser — PASS.
- NOT verified: mobile layout, error states.
</verification>
<next_steps>
Exact next actions, in order. The next session executes these, not re-plans them.
1. Fix the delete-on-empty-list crash (app.js around line 42).
2. Add an empty-state message to the list view.
3. Re-run tests + golden path, then commit.
</next_steps>
<unknowns_and_do_not_assume>
Explicit gaps. The next session MUST verify these before acting on them.
- Unsure whether the storage key changed — check the code before assuming the schema.
- Don't assume the spec's data model section is current; it predates the latest redesign.
</unknowns_and_do_not_assume>
<source_of_truth_rank>
When this brief disagrees with reality, trust in this order:
running code > tests > spec / docs > PROGRESS.md > this HANDOVER > older handovers.
</source_of_truth_rank>
<startup_protocol>
What the next session must read and run BEFORE answering or editing. Prescriptive.
1. Read: the spec/README, PROGRESS.md, this file, then the key source files.
2. Run: `bash init.sh` (or the documented start command) and exercise the app/tests.
3. Confirm current_state matches what you see; note any drift out loud.
4. Only then start next_steps[1].
</startup_protocol>
PROGRESS.md format
Append a dated block at every milestone — this is the chronological spine the HANDOVER snapshots from.
## 2026-06-13 14:20 — Add/list complete
- Done: add and list items, local persistence.
- Verified: browser golden path PASS.
- Next: delete + edit.
- Risk: no input validation yet.
Quality bar
- Concrete over vague. "Fix the delete crash near app.js:42" beats "continue work".
- Decisions are closed doors. Anything in
<decisions>must not be re-litigated next session. - Separate verified from assumed. This is the single most important anti-hallucination move.
- Self-contained. No section may say "see our earlier conversation".
- Read constraints from the project, not from assumptions — stack, conventions, and limits come from the repo's own docs and config.
- Target the HANDOVER at ~40–70 lines. Longer means it belongs in the spec or PROGRESS.md.
After writing
- Confirm in one line with the paths, e.g.:
Handover written to HANDOVER.md (archived as handover/HANDOVER-2026-06-13-1420.md), PROGRESS.md updated.
- Recommend a fresh session. The point of a handover is a clean context window. Tell the user
to START A NEW SESSION and run the
resumeskill there — do not just continue in this one. Suggested wording:To pick this up with a clean context, open a new session and run the
resumeskill. It will read HANDOVER.md, verify it against the live files, and restate the plan before changing anything.
Do not
- Do not invent test results or claim something works that you did not run.
- Do not overwrite PROGRESS.md (append only) or delete the handover/ archive.
- Do not write a handover for a trivial mid-thread save — recommend continuing instead.
- Do not run
resumeyourself in the same session right after writing — that defeats the purpose (the context is already polluted). Hand off to a fresh session.