plugins/session-handoff-plugin/skills/SKILL.md
Generate a HANDOFF-<slug>.md document that captures the full state of the current work session — goal, progress, next steps, key files, decisions, open questions, and how to run/resume — so the work can be picked up later, including on a different machine by a fresh session with none of this conversation's context. Use this skill whenever the user wants to wrap up, pause, end, stop, or save a session to continue later; whenever they mention a "handoff", "pick this up later", "resume on another computer/machine", "continue tomorrow", "save where we are", "hand off to someone else", or want to carry context into a fresh session. Trigger even if they don't say the word "handoff" but clearly want to preserve session state for later continuation.
npx skillsauth add memfrag/apparata-plugins session-handoffInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You're writing a document that lets work resume cleanly after this session ends — often on a different machine, by a fresh instance of Claude that has none of this conversation's context.
That framing drives every choice below. The next reader will not have: this chat history, the local ~/.claude memory files, the same absolute file paths, or the uncommitted changes sitting in this working tree. The handoff has to stand on its own. The biggest failure mode is writing a doc that only makes sense to you, right now — vague references ("the bug we fixed"), relative dates ("yesterday"), or an assumption that the code is already wherever it needs to be.
A second, quieter failure mode: a tidy-looking doc that quietly drops the one detail that actually unblocks the next session. Completeness on the load-bearing facts (next action, how to run it, where the code is) matters more than polish.
$ARGUMENTS is optional. If provided, treat it as either an output file path
(ends in .md or contains a /) or a slug to use in the default filename.
If absent, derive the slug yourself from the goal (see step 4).
Read back over what happened this session and pull out:
If any load-bearing fact lives only in your local memory (the ~/.claude memory files) rather than in the repo, surface it into the doc — memory does not travel to another machine.
The next session needs to get the project running before it can do anything. Capture how. Check git so you can record exactly where the code is:
git rev-parse --is-inside-work-tree 2>/dev/null && \
echo "branch: $(git branch --show-current)" && \
echo "head: $(git rev-parse --short HEAD)" && \
git remote -v && \
echo "--- dirty files ---" && git status --short
Also note the run/test/build commands actually used this session (don't guess — prefer what you saw work), and the absolute working directory, since paths may differ on the other machine.
The markdown describes the code; it cannot carry it. So the code has to reach the other machine some other way, and the doc must say how.
git init. Don't paper over this — it's the most common reason a handoff fails on the other end..env, scratch files, local config): these won't follow either. Name them and say how to recreate them — but see the secrets rule below.Use the template below. Default filename HANDOFF-<slug>.md in the project root, where <slug> is a short kebab-case summary of the task derived from the goal (e.g. HANDOFF-payment-retry-bug.md, HANDOFF-onboarding-redesign.md). The slug lets a reader tell what the file is about before opening it, and keeps multiple handoffs distinguishable instead of clobbering one HANDOFF.md. Keep it to ~2–4 words. If $ARGUMENTS gave a path or slug, honor that instead.
Fill every section that applies; drop sections that genuinely don't (an empty "Gotchas" is fine to omit). Resolve all relative dates to absolute ones (today is whatever the session's current date is) — "fix by Friday" is meaningless to a reader next week.
End your turn by telling the user the exact path and the one-liner to resume next time, e.g.: "Open HANDOFF-payment-retry-bug.md and say 'read HANDOFF-payment-retry-bug.md and pick up where we left off.'" Use the real filename you wrote, not a placeholder.
# Handoff: <short project / task name>
> **To resume:** read this file, then continue from **Next steps**.
> Generated <absolute date> on <machine / working dir>.
## Goal
<One or two sentences: what we're ultimately trying to accomplish and why.>
## Current state
<What's done and working. Mark clearly what is verified vs. assumed-but-untested.>
## Next steps
1. <The single most important next action, concrete enough to act on.>
2. <...>
## Code & how to run
- **Repo / branch / commit:** <remote> @ `<branch>` `<short-sha>`
(or: "not a git repo — code lives at <path>, must be copied manually")
- **Uncommitted work:** <none / what's uncommitted and whether it was pushed>
- **Setup:** <install / env steps>
- **Run / test:** <exact commands that worked this session>
- **Working dir this session:** <absolute path — may differ on the new machine>
## Key files
- `path/to/file` — <what it is / why it matters> (line refs if useful)
## Decisions & rationale
- <Chose X over Y because Z.>
## Open questions / blockers
- <Unresolved things, or what's waiting on the user.>
## Gotchas
- <What surprised us or wasted time.>
development
Extract timestamped transcripts from WWDC session videos. Use this skill whenever the user wants to read, search, or get the transcript of a WWDC session or Apple developer video — even if they just say something like "what did they say about concurrency in that talk" or "get me the transcript for session 230". Also use this when the user provides a developer.apple.com/videos URL and wants to know what the video covers.
testing
Download WWDC session videos in HD or SD quality. Use this skill whenever the user wants to download a WWDC video, save a session video to disk, or get the video file for a specific WWDC talk. Supports lookup by URL, session ID (e.g. "wwdc2025/230"), session number, or title. Also use when the user says things like "download the AlarmKit session" or "grab the HD video for session 287".
development
Fetch the WWDC session catalog from Apple's CDN by extracting the catalog URL embedded in one of the Developer.app's binaries. Use this skill whenever the user asks about WWDC sessions, WWDC videos, WWDC catalog, Apple developer conference content, or wants to browse, search, list, or look up any WWDC session or talk — even if they just say something like "what sessions are there about SwiftUI" or "find me that WWDC video about concurrency". Also use this when the user wants to download or work with WWDC session metadata.
tools
Generate a blog-post-style HTML page from a WWDC session, interleaving transcript text with slide screenshots. Use when the user wants to create a blog post, readable page, or visual summary from a WWDC talk — e.g. "create blog post from WWDC session 230", "generate HTML for that WWDC talk", "make a readable version of the AlarmKit session".