Session Handoff
Produce a repeatable end-of-session summary so the user can /clear and start a fresh agent without losing continuity. The next agent should be able to pick up by reading this summary alone.
This is a context-handoff artifact, not a status report. The audience is a future instance of you, not a stakeholder.
Scope boundary: This is the ephemeral, chat-only path. If the user actually wants the work written into the project's real files so it survives on disk (a changelog entry, an ADR, a task), this skill is the wrong tool — don't write to their files. The tell: words like "save", "persist", "into the repo", "don't lose anything on disk", "resume cold next week".
When to invoke
User says: "session handoff", "wrap up session", "hand off", "handoff summary", "let's wrap up", "summarize before I clear", or any near-equivalent. Also invoke proactively if the user says they're about to /clear without having run it yet.
How to produce the summary
- Review the full conversation, not just the last few turns. Handoffs miss things when they only summarize recent context.
- Pull state from these sources (in order):
- Plan files referenced this session (check
~/.claude/plans/ if a plan was mentioned).
- TodoWrite state — any in-progress or pending tasks.
- Background processes you started with
run_in_background — shell IDs are load-bearing for the next agent.
- Files created or modified this session — you know what you touched; don't grep to re-discover.
- Memory files written or updated (
~/.claude/projects/<project>/memory/).
- Unresolved questions — things you asked the user that never got a clear answer, or things the user asked that got deflected.
- Do NOT audit the filesystem. This is synthesis of what happened in THIS session. No
git log, no broad Glob sweeps. If you didn't touch it this session, it doesn't belong here.
- Produce the output in chat. Do not write a file. Do not update memory. Chat-only.
Output template — use exactly this structure, every time
# Session Handoff — <one-line title of what this session was about>
## Where it started
<2-3 sentences: what the user asked for, key framing or constraints that emerged>
## Decisions locked + what shipped
- <decision or change> — <why, and where it lives (absolute path if a file)>
- ...
## Key files for next session
- `<absolute path>` — <why the next agent should read this first>
- Plan file: `<path>` (if a plan drove the session)
- Memory files touched: `<paths>` (if any)
## Running state
- Background processes: <shell IDs + what they are + how to kill> — or "none"
- Dev servers / ports: <url + port> — or "none"
- Open worktrees / branches: <paths> — or "none"
## Verification — how to confirm things still work
- `<command>` — <expected outcome>
- ...
## Deferred + open questions
- Deferred: <item> — <why pushed to later>
- Open: <question needing the user's input> — <context>
## Pick up here
<1-2 sentences: the single most likely next action for a fresh agent>
Hard rules
- Chat output only. Never write the handoff to a file. Never update memory from this skill.
- Never invent state. If a section has nothing to report, write "none" — do not omit the section. Structure stability is the whole point.
- Absolute paths always. The next agent may have a different working directory.
- If a plan file drove the session, name it first in "Key files" so the next agent reads it before anything else.
- No emojis, no hype, no "great job" summaries. Terse and concrete — paths, commands, shell IDs, decisions. Match the tone of a seasoned engineer handing off at end-of-shift.
- Background process IDs are critical. If you started any
run_in_background shells, their IDs must appear in "Running state" with the kill command — the next agent cannot find them otherwise.
Anti-patterns — do not do these
- Summarizing the last 3 turns and calling it a handoff.
- Listing files by relative path.
- Skipping the "Running state" section because "nothing is running" — write "none" instead.
- Writing the summary to
~/.claude/handoffs/ or any file. This is chat-only by design.
- Adding a "what went well / what went poorly" retrospective. This isn't a retro.
- Recommending next steps beyond the single "Pick up here" line. The next agent decides; you just hand off.
1---2name: session-handoff3description: Use when the user wants a CHAT-ONLY end-of-session summary so a fresh agent can continue seamlessly after /clear - phrases like "session handoff", "hand off", "handoff summary", "brief the next agent", "summarize so the next instance can pick up", "I'm about to clear, write a handoff". Produces a structured handoff (decisions, shipped changes, key files, running state with background shell IDs, verification steps, deferrals, open questions) printed in chat - it never writes files or updates memory. This is the EPHEMERAL path - output stays in the conversation. Do NOT use it when the user wants the work PERSISTED INTO PROJECT FILES on disk so nothing is lost; this skill writes nothing.4---56# Session Handoff78Produce a repeatable end-of-session summary so the user can `/clear` and start a fresh agent without losing continuity. The next agent should be able to pick up by reading this summary alone.910This is a **context-handoff artifact**, not a status report. The audience is a future instance of you, not a stakeholder.1112**Scope boundary:** This is the *ephemeral, chat-only* path. If the user actually wants the work written **into the project's real files** so it survives on disk (a changelog entry, an ADR, a task), this skill is the wrong tool — don't write to their files. The tell: words like "save", "persist", "into the repo", "don't lose anything on disk", "resume cold next week".1314## When to invoke1516User says: "session handoff", "wrap up session", "hand off", "handoff summary", "let's wrap up", "summarize before I clear", or any near-equivalent. Also invoke proactively if the user says they're about to `/clear` without having run it yet.1718## How to produce the summary19201. **Review the full conversation**, not just the last few turns. Handoffs miss things when they only summarize recent context.212. **Pull state from these sources (in order):**22 - Plan files referenced this session (check `~/.claude/plans/` if a plan was mentioned).23 - TodoWrite state — any in-progress or pending tasks.24 - Background processes you started with `run_in_background` — shell IDs are load-bearing for the next agent.25 - Files created or modified this session — you know what you touched; don't grep to re-discover.26 - Memory files written or updated (`~/.claude/projects/<project>/memory/`).27 - Unresolved questions — things you asked the user that never got a clear answer, or things the user asked that got deflected.283. **Do NOT audit the filesystem.** This is synthesis of what happened in THIS session. No `git log`, no broad `Glob` sweeps. If you didn't touch it this session, it doesn't belong here.294. **Produce the output in chat.** Do not write a file. Do not update memory. Chat-only.3031## Output template — use exactly this structure, every time3233```34# Session Handoff — <one-line title of what this session was about>3536## Where it started37<2-3 sentences: what the user asked for, key framing or constraints that emerged>3839## Decisions locked + what shipped40- <decision or change> — <why, and where it lives (absolute path if a file)>41- ...4243## Key files for next session44- `<absolute path>` — <why the next agent should read this first>45- Plan file: `<path>` (if a plan drove the session)46- Memory files touched: `<paths>` (if any)4748## Running state49- Background processes: <shell IDs + what they are + how to kill> — or "none"50- Dev servers / ports: <url + port> — or "none"51- Open worktrees / branches: <paths> — or "none"5253## Verification — how to confirm things still work54- `<command>` — <expected outcome>55- ...5657## Deferred + open questions58- Deferred: <item> — <why pushed to later>59- Open: <question needing the user's input> — <context>6061## Pick up here62<1-2 sentences: the single most likely next action for a fresh agent>63```6465## Hard rules66671. **Chat output only.** Never write the handoff to a file. Never update memory from this skill.682. **Never invent state.** If a section has nothing to report, write "none" — do not omit the section. Structure stability is the whole point.693. **Absolute paths always.** The next agent may have a different working directory.704. **If a plan file drove the session, name it first** in "Key files" so the next agent reads it before anything else.715. **No emojis, no hype, no "great job" summaries.** Terse and concrete — paths, commands, shell IDs, decisions. Match the tone of a seasoned engineer handing off at end-of-shift.726. **Background process IDs are critical.** If you started any `run_in_background` shells, their IDs must appear in "Running state" with the kill command — the next agent cannot find them otherwise.7374## Anti-patterns — do not do these7576- Summarizing the last 3 turns and calling it a handoff.77- Listing files by relative path.78- Skipping the "Running state" section because "nothing is running" — write "none" instead.79- Writing the summary to `~/.claude/handoffs/` or any file. This is chat-only by design.80- Adding a "what went well / what went poorly" retrospective. This isn't a retro.81- Recommending next steps beyond the single "Pick up here" line. The next agent decides; you just hand off.