Skip to content
Agentmart
Submit a tool

handoff

Use when ending, pausing, or wrapping up a working session, or when asked to write or update hand-off, continuity, or session-state docs (session end, hand…

Skill by roborracle

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/roborracle-handoff

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when ending, pausing, or wrapping up a working session, or when asked to write or update hand-off, continuity, or session-state docs (session end, hand off, wrap up, stopping here, pause work, update handoff).

Use cases: writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/handoff

Tools it pre-approves 6

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Bash,
  • Read,
  • Write,
  • Edit,
  • Grep,
  • Glob

What's inside

Skill name
handoff
Description
Use when ending, pausing, or wrapping up a working session, or when asked to write or update hand-off, continuity, or session-state docs (session end, hand off, wrap up, stopping here, pause work, update handoff).
License
MIT
Allowed tools
Bash,, Read,, Write,, Edit,, Grep,, Glob
Instructions
157 lines in SKILL.md · view on GitHub

Before installing

  • Pre-approves some shell commands

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Session Hand-off

The read side of this is `resume`. This is the write side.

**Core principle: a hand-off is written for a reader with zero memory of this session.** Everything
you know that is not in a file is lost the moment the session ends. The test is not "did I write a
summary" — it is "could a stranger resume tomorrow without asking me anything."

## Step 0 — Find what already writes this. Do not skip.

Projects usually already have a hand-off mechanism, and hand-writing its output silently forks the
format.

```bash
ls .planning/ .continue-here.md 2>/dev/null
ls ~/.claude/commands/*/ 2>/dev/null | grep -iE "pause|handoff|session"
grep -rln "HANDOFF\|continue-here" ~/.claude/get-shit-done ~/.claude/commands 2>/dev/null
```

If a command owns the artifact, **match its schema exactly** — same filenames, same keys, same enum
values the reader parses. GSD projects: `/gsd:pause-work` writes `.planning/HANDOFF.json` **and**
`.planning/phases/XX/.continue-here.md`; `/gsd:resume-work` reads both. Writing one and not the other
leaves a half-handoff.

**Match the schema, not the framing.** Pause commands assume you stopped mid-task and hard-code that
assumption: `/gsd:pause-work` sets `"status": "paused"` and commits `wip: … paused at task X/Y`. If
your session ended *shipped*, running it unmodified writes a false state. Override exactly these:

| Field | Paused mid-task | Complete and shipped |
|---|---|---|
| `status` | `paused` / `in_progress` | `blocked` if a human gate remains, else `done` |
| commit prefix | `wip:` | `docs(handoff):` or `docs(log):` |
| `next_action` | the task you were inside | the gate or the next phase |

Use the reader's documented enum values — never invent one like `awaiting_checkpoint`, which parses
as nothing. Say in the commit body which defaults you overrode and why.

## The durability rule — the one that actually bites

Sort every fact into **one-shot** or **durable** before writing it anywhere.

| | One-shot | Durable |
|---|---|---|
| Holds | position, next action, in-flight state | environments, access, decisions, incidents, gotchas |
| Lifetime | consumed and **deleted** on resume | outlives every session |
| Home | `HANDOFF.json`, `.continue-here.md` | `docs/`, decision log, project README |

`.planning/HANDOFF.json` is explicitly deleted after a successful `/gsd:resume-work`. **Anything whose
only copy lives there dies on first resume.** Deploy commands, server access, why a decision was made,
how an incident was diagnosed — all durable. Put them in `docs/`, then *reference* them from the
one-shot file.

Before you finish, ask of every block you wrote: *if this file is deleted tomorrow, is anything
valuable gone?* If yes, move it and leave a pointer.

## If the artifact already exists — the usual case

Most invocations are a **delta pass, not a first write.** The file is there and mostly right, and
rewriting it wholesale churns good content and loses detail. Diff it instead:

1. **Re-verify every fact that can move**: SHAs, branch parity, dates, counts, phase/task numbers,
   "uncommitted files". Anything recording its own commit SHA is always one behind — prefer
   "last code commit X; docs commits after it" over a bare SHA that re-stales immediately.
2. **Check what already migrated.** If durable facts have since landed in `docs/`, do not duplicate
   them — replace with a pointer, and confirm the pointer's target is committed.
3. **Timestamps must be real.** A hand-typed midnight (`T00:00:00.000Z`) is a tell that nobody
   checked; take the actual time from the project's own tooling.
4. **Leave what is still true alone.** Only touch what drifted.

## What the hand-off must contain

Fill every slot. An empty slot is a finding, not an omission — write "none" and move on.

1. **Position** — phase/task, and whether it is *paused mid-task* or *complete and shipped*. These are
   different states; do not record shipped work as "paused at task N".
2. **What shipped** — with commit SHAs and issue numbers.
3. **What remains** — with enough context to start, not just a title.
4. **Blocked on a human** — separate from your own remaining work, and mark which are blocking.
5. **Decisions + rationale** — the *why*, because the what is already in the diff.
6. **Verification state** — what you actually ran and what it returned. "Tests pass" is worthless
   without which suites and how many.
7. **Incidents** — anything that broke and how it was fixed. Highest-value block for a successor;
   include the *symptom*, since that is what they will recognise.
8. **Next action** — one concrete first move, not a category.

## Sweep stale artifacts

Old hand-offs are read as current and actively mislead.

```bash
# Read the file's OWN claimed state. Git dates lie here: a stale checkpoint swept
# into an unrelated commit looks freshly touched.
for f in $(find .planning -name ".continue-here*.md" 2>/dev/null); do
  echo "$f: $(grep -hE '^(status|last_updated):' "$f" | tr '\n' ' ')"
done
```

A checkpoint whose own frontmatter says `phase_complete`, or that names a phase already closed, is
dead weight sitting in the resume path. **Deleting a tracked file is a confirmation gate** — propose
it with the evidence and wait. Meanwhile note it in the hand-off so a resume that trips over it knows
it is stale.

Also check the inverse: a `*-PLAN.md` with no matching `*-SUMMARY.md` makes a resume announce
incomplete work. If it is blocked on a human rather than unfinished, say so in a checkpoint — but
never write the missing SUMMARY yourself, which fakes a sign-off that never happened.

## Reconcile the whole file, not just your section

Hand-off files accrete. Adding a fresh block while an older block still says something else leaves
the file contradicting itself, and a stranger cannot tell which half to believe. **A file that
disagrees with itself is worse than one that is merely stale** — stale is at least consistently wrong.

After editing, grep the file for every date, SHA, phase number, and "last session" claim and make
them agree. Then check the pointers actually resolve:

```bash
grep -nE "last session|stopped at|[0-9a-f]{7}|20[0-9]{2}-[0-9]{2}" <handoff-file>
# every referenced path must exist AND be committed
git ls-files --error-unmatch <each-referenced-path>

From roborracle/agent-workflow-kit, MIT.

More from roborracle/agent-workflow-kit

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Aug 11, 2026 (2 months ago)
Last release
Aug 11, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from roborracle

Cite this page

handoff skill. Agent Mart. https://agentmart.dev/skills/roborracle-handoff (last updated 2026-10-24)