Session Handoff Skill
Produce a repeatable end-of-session summary so the user can /clear and start fresh without losing continuity.
When to invoke
User says: "session handoff", "wrap up session", "hand off", "handoff summary", "let's wrap up", or proactively if user says they're about to /clear.
How to produce the summary
- Review FULL conversation, not just last 3 turns
- Pull state from:
- Plan files in
.claude/plans/(if used this session) - TodoWrite state (in-progress/pending tasks)
- Background processes (
run_in_backgroundshell IDs) - Files created/modified (what you touched)
- Memory files written (if any)
- Unresolved questions (user asked but didn't get clear answer)
- Plan files in
- Do NOT audit filesystem. Synthesis only of what happened in THIS session.
- Output in chat only — never write a file, never update memory.
Output template — use exactly this every time
# Session Handoff — <one-line title>
## Where it started
<2-3 sentences: what user asked, key constraints>
## Decisions locked + shipped
- <decision> — <why, location if file>
- ...
## Key files for next session
- `<absolute path>` — <why read this first>
- Plan file: `<path>` (if applicable)
- Memory touched: `<paths>` (if any)
## Running state
- Background: <shell IDs + command to kill> or "none"
- Dev servers: <url + port> or "none"
- Worktrees/branches: <paths> or "none"
## Token budget this session
- Started: XXK tokens
- Ended: XXK tokens
- Next trigger: ~60% of window (manual compact before auto-compaction)
## Blocked by
- <waiting for user decision yes/no>
- <waiting for deploy result>
- or "none"
## Verification — how to confirm work
- `<command>` — <expected output>
- ...
## Deferred + open questions
- Deferred: <item> — <why pushed to later>
- Open: <question needing user input> — <context>
## Exact pickup command
\`\`\`bash
<full command to restart where we left off>
\`\`\`
## Pick up here
<1-2 sentences: single most likely next action for fresh agent>
Hard rules
- Chat output only. Never write to file. Never update memory.
- Never invent state. If section is empty, write "none" — do not omit.
- Absolute paths always. Next agent may have different working dir.
- Plan file first if it drove the session.
- Background process IDs are critical. Include with kill command.
- Token budget is now required. Track start/end and next trigger point.
- Blocked by section required. What's waiting on user input?
- Exact pickup command is now required. No guessing; full command.
- No emojis, no hype. Terse, concrete, engineering tone.
Anti-patterns — do NOT do these
- Summarizing only last 3 turns
- Using relative paths
- Skipping sections (use "none" instead)
- Writing summary to file
- Adding retrospective ("what went well / poorly")
- Recommending next steps beyond "Pick up here"
- Forgetting token budget or exact pickup command