Handoff Skill
Write a one-shot handoff note to the next session, in the current working directory.
Purpose
Bridge state across a restart or /exit when a full session log is overkill. The next session's SessionStart hook (handoff-read.sh) reads handoff.md, injects its contents as additional context, then deletes the file. One read, gone.
Use this when:
- You need to restart (e.g., MCP server re-enable, permission change, context pressure)
- You want to hand off mid-task state to the next session without polluting
log/ - A quick note is enough — not a full
/session-close
When NOT to Use
- End of a substantive work session → use
/session-close(proper logs, git commit) - Permanent decisions or learnings → use MEMORY.md with
[LEARN]tags - Cross-project notes → use
.context/agent-messages.md
Workflow
Step 1: Gather state
Collect:
- Current working directory (
pwd) — the handoff lives here - What was happening — the immediate task, not a session recap
- What's next — the specific next action
- Open loops — files mid-edit, background processes, pending confirmations
- Blockers — why the session is ending (e.g., "Paperpile MCP needs restart")
Step 2: Write handoff.md in cwd
Use this template:
# Handoff — <YYYY-MM-DD HH:MM>
## Where we are
<1-3 sentences on current task state>
## Next action
<The single next thing to do — be specific>
## Open loops
- <file.py mid-edit at line N>
- <background job: description>
- <HPC job $SLURM_JOB_ID on your-hpc: submitted/running/completed; OUT_DIR=~/projects/<name>/out/<jobid>/>
- <pending user confirmation: question>
## Blockers / context the next session needs
<Why the handoff exists. API keys set? MCP restarted? Permission added?>
## Files touched this session
- <path:line> — <what changed>
## Scratch
<Anything else — half-formed thoughts, commands to try, URLs>
Keep it tight. The next session reads this once as SessionStart context — it should be skimmable in 10 seconds.
Step 3: Confirm
Tell the user: "Handoff written to <cwd>/handoff.md. Next session in this directory will read and delete it."
Hook Behavior
The companion hook handoff-read.sh fires on every SessionStart (startup + resume + compact). If handoff.md exists in the session's cwd:
- Reads contents
- Injects as
additionalContextwith the header# Handoff from previous session - Deletes
handoff.md(scratch)
Zero token cost when no handoff exists.
Important
- Handoff is ephemeral — one-shot. If you need durable state, write to
log/or MEMORY.md instead. handoff.mdshould NOT be committed. Add to.gitignoreif the directory has one.- If the next session's cwd differs, the handoff won't fire — always
cdto the same directory before restarting.