handoff
Skill1 starsChanged 3 months agoMITView on GitHub
Capture a session hand-off so work can resume cleanly in a new Claude session before context runs out. Writes a canonical dated Markdown file (objective, progress, decisions, files, open issues, and a ready-to-paste "Next Session Prompt") AND a lightweight project-memory pointer to it. Use this skill whenever the user says "/handoff", "hand off", "handoff", "save context", "preserve context", "running out of context", "wrap up for next session", "before we lose context", or otherwise asks to snapshot the current state for a fresh session — even if they don't say "skill". Do NOT trigger on a bare "let's stop here" / "we're done" with no continuity cue — just end the session normally; wait for an explicit hand-off ask.
191 other projects use a version of this.
Adopted by
Most recently taken up by
- xiaoxiaosrm/dsh-mattpocock-skillstheir own version, first seen Nov 8, 2026
- ethosagent/ethostheir own version, first seen Nov 8, 2026
- dsifry/metaswarmtheir own version, first seen Nov 8, 2026
- glebis/claude-skillstheir own version, first seen Nov 8, 2026
- domengabrovsek/agent-configtheir own version, first seen Nov 8, 2026
- domengabrovsek/claudetheir own version, first seen Nov 8, 2026
Used with
Projects with it also use decision-mapping, setup-ts-deep-modules and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
FabienDehopreSkilldecision-mapping
Turn a loose idea into a sequenced map of investigation tickets, then drive them to resolution one at a time.
Also in 8 projects that use this
liufeng1976Skillsetup-ts-deep-modules
Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.
Also in 42 projects that use this
AWSSkillto-questionnaire
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
Also in 93 projects that use this
GoogleSkillask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Also in 87 projects that use this
RoentekSkillloop-me
Grill me about specs for the workflows I want to build, within this workspace.
Also in 51 projects that use this
LesaniSkillwriting-beats
Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.
Also in 54 projects that use this
Other versions191 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 191
- mattpocock/skills★ 309ksame name
- QuivrHQ/quivr★ 40ksame name
- The-Vibe-Company/quivr★ 40ksame name
- GreyDGL/PentestGPT★ 16ksame name
- ykdojo/claude-code-tips★ 10ksame name
- ArcReel/ArcReel★ 6.3ksame name
- vinvcn/mattpocock-skills-zh-CN★ 5.5ksame name
- withcoral/coral★ 4.9ksame name
- epicenter-md/epicenter★ 4.8ksame name
- EpicenterHQ/epicenter★ 4.8ksame name
181 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository38 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- api-contract-reviewSkill
- autopilotSkill
- backlog-plannerSkill
- codebase-explainerSkill
- code-reviewSkill
- context-dietSkill
- conventional-commitsSkill
- create-prSkill
- design-briefSkill
- diagnoseSkill
- dotnet-conventionsSkill
- dotnet-onion-apiSkill
- draw-optionsSkill
- e2e-verifySkill
- githubSkill
- goal-runnerSkill
- grill-with-docsSkill
- humanizerSkill
- improve-codebase-architectureSkill
- maestro-mobile-testSkill
- migration-safetySkill
- model-inventorySkill
- nextjs-app-routerSkill
- plan-and-buildSkill
- record-browser-testSkill
- regression-huntSkill
- safe-refactorSkill
- security-reviewSkill
- ship-itSkill
- sql-reviewSkill
- task-executorSkill
- tauri-2-appSkill
- think-like-fableSkill
- upgrade-depsSkill
- worktree-sandboxSkill
- write-a-skillSkill
- write-testsSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 7 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 172 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
Do not auto-trigger when the user just says "let's stop here" without asking for continuity.
- Distinctive: line 21
Every invocation produces BOTH:
- Very specific: line 28
If a file with that exact name already exists, append -2, -3, etc.
- Distinctive: line 30
Use the exact section structure below.
- Distinctive: line 58
Use these headings in this order, with this phrasing.
- Distinctive: line 134
If you reference a file path, confirm it exists (or that you created it this session).
- Very specific: line 135
If you reference a command, make sure it's the one that actually works in this repo (check package.json, Makefile, etc.).
- Distinctive: line 136
If a decision in the conversation was reversed later, record the final decision — not the abandoned one.
- Distinctive: line 138
If tests were failing when work stopped, re-run them now and quote the exact failure.
- Very specific: line 173
If the project already has a different conventional location for session notes (e.g.
“Common” is measured: kept by at least 6 in 10 of the 172 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Handoff
Preserve everything the next Claude session needs to pick up where this one left off. The hand-off is a real artifact (a Markdown file in the repo) plus a small memory pointer so future sessions auto-discover it.
When to use this skill
- The user runs
/handoffor types "handoff" / "hand off". - The user says any of: "save context", "preserve context", "running out of context", "before we lose context", "wrap up for next session", "snapshot where we are", "I need to start a new session".
- The user signals they're about to compact, switch machines, or hand the work to another teammate / another Claude session.
- You notice the conversation has accumulated significant state (many files touched, several decisions made) and the user explicitly asks to checkpoint.
Do not auto-trigger when the user just says "let's stop here" without asking for continuity. Wait for an explicit hand-off cue.
Output: two artifacts
Every invocation produces BOTH:
1. Canonical Markdown file (the source of truth)
- Path:
.claude/handoffs/<YYYY-MM-DD>-<short-slug>.mdin the current project root.- Date is today's date, ISO format.
- Slug is 2–4 kebab-case words describing the work (e.g.
oauth-account-linking,cache-invalidation-fix). - If a file with that exact name already exists, append
-2,-3, etc.
- Create the parent directory if missing (
.claude/handoffs/). - Use the exact section structure below.
2. Lightweight memory pointer (for future-session discovery)
Write a project-type memory entry per the auto-memory system. The auto-memory directory is whichever directory your system context names as the persistent memory location — it already contains MEMORY.md. If this session exposes no such directory (auto-memory disabled or not present in this install), skip both pointer steps and add one line to the report-back: "No auto-memory in this install — the Next Session Prompt is the only discovery path; paste it into the fresh session." Keep it short — its only job is to surface the hand-off file:
---
name: handoff-<short-slug>
description: Hand-off doc for <one-line topic> — see file for full state.
metadata:
type: project
---
Active hand-off for <topic> at `<relative path to handoff file>`.
**Why:** Session was checkpointed on <YYYY-MM-DD> to resume work cleanly in a new context.
**How to apply:** When the user opens a new session and references this topic, read the hand-off file first before doing anything else. Remove this memory entry once the work is finished or superseded.Then append this line to the index list in MEMORY.md:
- [handoff-<short-slug>](handoff-<short-slug>.md) — hand-off for <one-line topic>; full state in `<relative path to handoff file>`Required sections in the hand-off file
Use these headings in this order, with this phrasing. Objective, Progress, Important Files, and Next Session Prompt are never skipped. Blocked, Decisions, and Open Issues may be dropped only when they would have zero entries — don't pad.
# Handoff: <topic> — <YYYY-MM-DD>
## Objective
<1–3 sentences: what are we building / fixing / investigating, and why.>
## Progress
**Completed:**
- <done item>
- <done item>
**In Progress:**
- <what's mid-flight> — verified: <how observed> / assumed: <if wrong, what breaks>
**Blocked:**
- <blocker> — <on whom / what>
## Decisions
- <decision> — <why; the reasoning matters more than the choice>
- <decision> — <why>
## Important Files
- `<path>` — <one line on what changed or why it matters>
- `<path>` — <one line>
## Open Issues
- <unresolved bug or question> — <verified|assumed>: <evidence, or blast radius if wrong>
- <unresolved bug or question> — <verified|assumed>: <evidence, or blast radius if wrong>
## Next Session Prompt
> Copy-paste this into the new session.
Read `.claude/handoffs/<this-filename>.md` first.
**Goal:** <one-sentence resume goal>
**Start by reviewing:**
1. `<path>`
2. `<path>`
**Then:**
- <next concrete step>
- <next concrete step>
- <verification command, e.g. `pnpm test auth`>Tag every load-bearing claim verified (observed this session), inferred or assumed — the next session must know what was observed vs. guessed.
The Next Session Prompt is the most important section — it's what the user pastes into the new chat to bootstrap continuity. Write it so a fresh Claude with no prior context can act on it immediately.
A prompt that survives a fresh session vs. one that doesn't:
- ❌ "Goal: Continue working on auth. Then: finish the remaining fixes." — which file? what's broken? what command shows it? Every answer lives in the dead session.
- ✅ "Goal: Make
linkAccountmerge OAuth identities instead of erroring. Start by reviewing:src/auth/link.ts(thelinkAccountstub at line 42),src/auth/__tests__/link.test.ts. Then: implement the merge branch for theexisting-verified-emailcase; runpnpm vitest run src/auth -t linkAccount— currently failing withError: account already exists." — names the file, the failing test, the exact command, and the next action.
Workflow
- Scan the current conversation for: the stated objective, files you've read or edited, decisions made (and the reasoning), commands run, errors hit, and open threads.
- Cross-check against the repo state — run
git statusandgit diff --statto confirm which files actually changed in this session. Don't trust memory alone; verify. - Draft the file content using the section template above. Pull the why behind each decision from the conversation, not just the what.
- Pick the filename — today's date + short slug.
- Create
.claude/handoffs/if missing, then write the file with the Write tool. - Write the memory pointer to the auto-memory directory and index it in
MEMORY.md. - Run the zero-context self-test. Re-read the Next Session Prompt as if you knew nothing about this conversation: does it name the exact files, the exact command to run, the current failing state, and the immediate next action? If answering any of those requires this conversation, the hand-off is not done — fix it before reporting. If a required detail is genuinely unrecoverable from this session (the exact failing test name or command never appeared in any output), write
unknown — next session must rediscover: <what, and the command that will find it>in the prompt instead. A named gap is a valid hand-off; an invented specific is not. - Report back: tell the user the file path, the slug, and quote the Next Session Prompt so they can copy it without opening the file.
Verifying before you write
- If you reference a file path, confirm it exists (or that you created it this session).
- If you reference a command, make sure it's the one that actually works in this repo (check
package.json,Makefile, etc.). - If a decision in the conversation was reversed later, record the final decision — not the abandoned one.
- Exact artifacts, never paraphrases. Commands verbatim and runnable (
pnpm vitest run src/auth -t linkAccount, not "run the auth tests"). Failing test names copied from actual runner output. Branch name fromgit branch --show-current. Uncommitted-state description from actualgit statusoutput — never from memory of what you think you edited. - If tests were failing when work stopped, re-run them now and quote the exact failure. "Some tests failing" forces the next session to rediscover which — that's the context loss this skill exists to prevent.
When a verification step itself fails: git status errors (not a git repo) → build Important Files from the conversation and tag the section assumed — no git to verify against. The test re-run cannot complete (runner unknown, fails to start, or context critically low — this skill fires precisely when context is scarce) → quote the last failure actually observed earlier in this session, tagged assumed — not re-run at checkpoint. Anything else: retry once changing exactly one thing, then record the failure in Open Issues. Never present unobserved output as current.
Examples
Example 1: Mid-feature checkpoint
User: "ok let's handoff, I'm running low on context"
Claude:
- Runs
git status, scans recent edits. - Writes
.claude/handoffs/2026-05-15-oauth-account-linking.mdwith all six sections filled in. - Writes memory pointer
handoff-oauth-account-linking.mdand updatesMEMORY.md. - Replies with: file path, a one-line summary, and the Next Session Prompt block ready to paste.
Example 2: User pastes the Next Session Prompt into a fresh chat
The new session reads the referenced hand-off file first, confirms files still exist, and resumes from the Next Session Prompt to-do list — no rediscovery needed.
Anti-patterns
- Writing the hand-off without checking
git status— drift between conversation memory and actual repo state. - Vague "next steps" like "continue the work" — write concrete actions tied to specific files.
- Recording every micro-decision — keep Decisions to choices that would be re-litigated otherwise.
- Dumping the entire conversation transcript — hand-off is a synthesis, not a log.
- Forgetting the memory pointer (when auto-memory exists) — without it, the next session won't know the hand-off exists unless the user remembers to paste the prompt.
- Skipping the Next Session Prompt section — that's the single highest-value piece of the doc.
- Quoting commands, test names, or branch names from memory instead of from actual output.
git status,git branch --show-current, and the test runner are the sources of truth. - Shipping a Next Session Prompt that fails the zero-context self-test — if understanding any part of it requires this conversation, it's a summary, not a hand-off.
Notes
- Hand-off files are project-scoped and should be git-ignored or committed deliberately — they may contain in-progress reasoning the team doesn't want in history. Opted in = a hand-off file is already tracked by git (
git ls-files .claude/handoffs/prints anything). If not opted in and.gitignoredoes not already cover the path, append the line.claude/handoffs/to.gitignoreand name that edit in the report-back — never touch.gitignoresilently. - Once a hand-off is superseded (work finished, or a newer hand-off written for the same topic), delete the memory pointer so it doesn't accumulate stale entries. The Markdown file can stay as historical record.
- If the project already has a different conventional location for session notes (e.g.
docs/handoffs/,NOTES.md), prefer that location and tell the user you're using it.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

