Skip to content
Back to skills

Create Handoff

ASecurity

Hand in-flight work to another session — by default as a copyable continuation prompt rendered in one fenced code block, or as a transfer packet committed to docs/handoff/ when the user asks for a file. Use when wrapping up before /clear, running low on context, or when the user says to "hand this off", "write a handoff", "give me a prompt for the next session", or pause work for later. To pick a handoff back up, use resume-handoff instead.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
devopsrustgogit

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add KyleMit/Splotch --skill create-handoff --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Create Handoff?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Create Handoff
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kylemit-create-handoff/badge)](https://www.skillsdirectory.com/skills/kylemit-create-handoff)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: create-handoff
description: Hand in-flight work to another session — by default as a copyable continuation prompt rendered in one fenced code block, or as a transfer packet committed to docs/handoff/ when the user asks for a file. Use when wrapping up before /clear, running low on context, or when the user says to "hand this off", "write a handoff", "give me a prompt for the next session", or pause work for later. To pick a handoff back up, use resume-handoff instead.
---

# Handoff

Hand off the work in flight so the next session can resume it cold, without re-deriving it. Both
modes carry the same content; they differ only in where it lands.

| Mode                     | Use when                                                                                                                                              | Output                                                                     |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| **Prompt** — the default | every other case                                                                                                                                      | one fenced code block in the chat reply, ready to paste into a new session |
| **File**                 | the user asks for a *file*, *doc*, *packet*, or `docs/handoff/` — or the receiving session is a cloud/other-machine run that must find it in the repo | `docs/handoff/<topic>.md`, committed and pushed                            |

Prompt mode is the default because it is portable: it needs no repo, no branch, and no commit to
reach the next session, and it works when the receiver is a different machine, a different runner,
or a session with no checkout. File mode buys durability instead — the packet travels with the repo
and `resume-handoff` finds it — and costs a commit, a push, and a file someone has to prune.

A handoff is transient either way. If what you're about to record is really a durable decision, a
backlog item, or behavioural feedback, route it to the `create-adr` skill, a **GitHub issue** (the
live backlog — see `docs/ISSUE-WORKFLOW.md`), or `memory/` instead — see the table in the root
`CLAUDE.md`. A request to have this session's PRs *reviewed* is not a handoff at all — that prompt
belongs to `create-pr-review-prompt`.

## Before either mode: refresh the live state

Handoff content assembled from memory hands off a state that no longer exists. Immediately before
writing, re-read the facts you are about to assert — the branch and how it stands against its
upstream, the working tree, the PR and its CI, and any background processes or servers this session
started:

```
git status --short --branch
git log --oneline @{u}..HEAD || git log --oneline -10
```

`--branch` is load-bearing. Plain `git status --short` lists modified files and says nothing about
`[ahead N]`, and a plain `git log` never compares against the upstream, so between them a branch
whose commits exist only on this disk looks identical to one that is fully pushed. `@{u}..HEAD`
fails outright when the branch has no upstream, which is itself the answer: nothing is pushed.

**A handoff carries only what is pushed** — in both modes, and this is what the portability above
rests on. Commit and push everything the next session needs before writing either output; to a
receiver on another machine an unpushed commit and an uncommitted edit are equally invisible, and a
handoff pointing at either is a dead link. If something is deliberately staying behind — a scratch
file, a half-finished experiment worth abandoning — name it in the handoff as work the receiver does
*not* have, so the gap is stated rather than discovered.

## What the handoff carries

Same state model in both modes, and the same honesty rule: anything you *believe* but did not run a
check on goes under **Unverified assumptions**, never under **Done & verified**. `resume-handoff`
tests that section first, and a receiving session that finds a mislabelled claim there stops
trusting the rest.

* **Objective & non-goals** — what the work is trying to do, and what it is explicitly *not* doing,
  so the next session doesn't scope-creep.
* **State** — branch, PR, the commits that landed (short table: sha · what), files touched.
* **Decisions made (and why)** — including approaches tried and **reverted**, so they aren't
  revisited.
* **Unverified assumptions** — believed, not checked.
* **Done & verified** — the commands already run and their result, so the next session knows what it
  can trust versus must re-run.
* **Risks & next 3 steps** — concrete, ordered.
* **Reread first** — pointers to the source files, ADRs, and skills to open first. Pointers, not
  summaries.

Keep it a packet, not a recap: prefer a `file:line` pointer over a paragraph re-explaining the code.
`docs/handoff/coloring-fill-drift.md` is a worked example of the right density.

## Prompt mode (default)

Render the whole handoff as **one fenced code block**, written as instructions to a session that has
none of this context — second person, imperative, no "as we discussed".

1. **Open with the objective and the checkout it assumes** — repo, branch, and how to get there
   (`git fetch && git checkout <branch>`), then the sections above.

2. **Add the two things only a prompt needs**, which a packet gets from its folder conventions:
   * **Authorization** — what the receiving session may do without asking (commit, push, open a PR,
     merge, run device captures) and what it must not.
   * **Completion condition** — the observable state that means the work is finished.

3. **Make it one clean copy.** Nothing but the prompt inside the fence, and no commentary between
   fences that a copy would swallow. If the prompt body itself contains a fenced block, wrap the
   outer fence in four backticks so the inner one survives. Keep your own chat prose to a line
   before the fence and a line after.

Do not tell the receiving session to look for a `docs/handoff/` packet or to run `resume-handoff` —
in this mode the prompt *is* the packet.

## File mode

1. **Pick the topic name.** `docs/handoff/<brief-kebab-topic>.md`, two to four words for *what is
   being handed off* (`magic-brush-drift.md`, not a date). If a handoff for this exact work already
   exists, update it in place rather than making a second file.

2. **Write the packet.** Read `docs/handoff/CLAUDE.md` first — it owns the folder conventions. The
   packet opens with the status line, then carries the sections above:

   ```
   > <today> · branch `<branch>` · PR [#NN](url) · <objective>
   ```

   Take the date from the environment context and the branch from the refresh above; drop the PR
   segment if there's no PR.

3. **Commit and push.** The doc is only useful if it survives the container:
   ```
   git add docs/handoff/<topic>.md
   git commit -m "Add handoff for <topic>"
   git push -u origin <branch>
   ```

4. Tell the user the file path and that the `resume-handoff` skill will pick it up.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…