Agent skill

Handoff

by Ovid in Ovid/paad

EXPERIMENTAL. An agent skill from Ovid/paad.

MITAuto-check passed

Install Handoff

skills CLI
$ npx skills add Ovid/paad --skill handoff -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Ovid/paad handoff --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/paad/skills/handoff .claude/skills/handoff && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
handoff
GitHub stars
131
Token cost
~3.4k tokens
SKILL.md length
1,504 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
MIT

At a glance

EXPERIMENTAL. An agent skill from Ovid/paad.

  • Works in 5 steps: Check .gitignore → Verify before you write → Write the file → …
  • A session is running out of context and the work needs to continue in a fresh one
  • SKILL.md covers Arguments, Saving, Resuming and Common Mistakes, plus 1 more section
  • Calls git and bash

What it does

Handoff is an agent skill from Ovid/paad. EXPERIMENTAL. Use when a session is running out of context and the work needs to continue in a fresh one, or when starting a session meant to pick up where an earlier one stopped. Not for compacting in place — that is /compact — and not for specifying work that has not started, which is a plan.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: The practices that made software work didn't stop working. They stopped keeping up. PAAD brings them back at AI speed. The licence is MIT.

When your agent uses it

  • A session is running out of context and the work needs to continue in a fresh one
  • Starting a session meant to pick up where an earlier one stopped

Example prompts

  • “/handoff”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Check .gitignore
  2. Verify before you write
  3. Write the file
  4. Ask for the review that matters
  5. Announce the artifact

What it can do on your machine

Read from SKILL.md and the folder at commit 9b0b57f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Handoff loads about 3.4k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 1,504 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~76
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Ovid/paad at commit 9b0b57f, republished under its MIT licence (© Ovid). 1,504 words, ~3,441 tokens.

Download SKILL.mdSave it as .claude/skills/handoff/SKILL.md (or your agent's skills folder).
name
handoff
description
EXPERIMENTAL. Use when a session is running out of context and the work needs to continue in a fresh one, or when starting a session meant to pick up where an earlier one stopped. Not for compacting in place — that is /compact — and not for specifying work that has not started, which is a plan.

On invocation: announce "Running paad:handoff v1.31.0" before anything else.

Handoff

Experimental. Arguments, file format, and behavior may change — or this skill may be withdrawn — in any release, including a patch release. The semver promise the settled skills carry does not apply here. If you build a workflow on it, pin your plugin version and file what breaks.

Writes a handoff.md that lets a fresh session continue this one's work, and reads it back on the other side.

Claude Code already solves most of this, and knowing which part it doesn't is the whole point. /compact summarizes and keeps working, but the summary it carries is machine-authored, lands unreviewed, and lives inside the transcript where you cannot edit it. --continue and --resume restore the full prior conversation, which re-pays the context cost you were trying to escape. /clear gives a genuinely empty session and carries nothing forward. handoff is worth running for exactly one reason: the carried state is a file a human can read and correct before anything is built on it. A handoff nobody reviews is a worse /compact — same summary, more ceremony. Say so rather than letting the review get skipped.

The failure mode is not omission. Left to itself, a competent agent writing a handoff keeps the expensive material well: the approaches that were tried and abandoned, the reasons behind them, constraints the user stated once in passing. What it gets wrong is the cheap material — a test's file path, which changes are in the last commit, a line number, who said a quoted sentence. Those are the claims a tool could have settled in seconds, and they arrive in exactly the same confident register as the parts that are right. A fresh session has no memory to catch them with. So verify what is checkable before writing it down, and mark what is not.

Mode selection and saving:

dot
digraph handoff_save {
  "Argument given?" [shape=diamond];
  "Use the named mode" [shape=box];
  "Conversation above this invocation?" [shape=diamond];
  "Say: saving, session has history" [shape=box];
  "Resume flow, below" [shape=box];
  "handoff.md in .gitignore?" [shape=diamond];
  "Suggest adding it, never add it silently" [shape=box];
  "Verify every checkable claim with tools" [shape=box];
  "Claim survived verification?" [shape=diamond];
  "Write it as fact" [shape=box];
  "Correct it, or mark it inferred" [shape=box];
  "Write handoff.md with the Write tool" [shape=box];
  "Name the unverified claims, ask for review" [shape=box];
  "Announce the artifact" [shape=box];

  "Argument given?" -> "Use the named mode" [label="save or resume"];
  "Argument given?" -> "Conversation above this invocation?" [label="no"];
  "Conversation above this invocation?" -> "Say: saving, session has history" [label="yes"];
  "Conversation above this invocation?" -> "Resume flow, below" [label="no"];
  "Use the named mode" -> "Say: saving, session has history" [label="save"];
  "Use the named mode" -> "Resume flow, below" [label="resume"];
  "Say: saving, session has history" -> "handoff.md in .gitignore?";
  "handoff.md in .gitignore?" -> "Suggest adding it, never add it silently" [label="no"];
  "handoff.md in .gitignore?" -> "Verify every checkable claim with tools" [label="yes"];
  "Suggest adding it, never add it silently" -> "Verify every checkable claim with tools";
  "Verify every checkable claim with tools" -> "Claim survived verification?";
  "Claim survived verification?" -> "Write it as fact" [label="yes"];
  "Claim survived verification?" -> "Correct it, or mark it inferred" [label="no"];
  "Write it as fact" -> "Write handoff.md with the Write tool";
  "Correct it, or mark it inferred" -> "Write handoff.md with the Write tool";
  "Write handoff.md with the Write tool" -> "Name the unverified claims, ask for review";
  "Name the unverified claims, ask for review" -> "Announce the artifact";
}

Resuming:

dot
digraph handoff_resume {
  "handoff.md exists?" [shape=diamond];
  "Say so, offer to save one instead" [shape=box];
  "Read it, summarize in a few lines" [shape=box];
  "Recorded commit matches HEAD?" [shape=diamond];
  "Report the drift before asking" [shape=box];
  "Ask: proceed?" [shape=diamond];
  "Stop, leave the file alone" [shape=box];
  "Check the files and state it names" [shape=box];
  "Everything matches?" [shape=diamond];
  "Report every mismatch, ask again" [shape=box];
  "Start the recorded next step" [shape=box];
  "Leave handoff.md in place" [shape=box];

  "handoff.md exists?" -> "Read it, summarize in a few lines" [label="yes"];
  "handoff.md exists?" -> "Say so, offer to save one instead" [label="no"];
  "Read it, summarize in a few lines" -> "Recorded commit matches HEAD?";
  "Recorded commit matches HEAD?" -> "Ask: proceed?" [label="yes"];
  "Recorded commit matches HEAD?" -> "Report the drift before asking" [label="no"];
  "Report the drift before asking" -> "Ask: proceed?";
  "Ask: proceed?" -> "Check the files and state it names" [label="yes"];
  "Ask: proceed?" -> "Stop, leave the file alone" [label="no"];
  "Check the files and state it names" -> "Everything matches?";
  "Everything matches?" -> "Start the recorded next step" [label="yes"];
  "Everything matches?" -> "Report every mismatch, ask again" [label="no"];
  "Report every mismatch, ask again" -> "Start the recorded next step" [label="user confirmed"];
  "Start the recorded next step" -> "Leave handoff.md in place";
}

Arguments

  • /handoff — infer the mode. Conversation above this invocation means you are saving; an empty session means you are resuming. Say which way it went, in one line, before acting.
  • /handoff save — write a handoff regardless
  • /handoff resume — read the existing handoff regardless

The inference is a convenience, not a guess worth defending. If it picks wrong, the user says save or resume and you obey without arguing.

Saving

1. Check .gitignore

If handoff.md is not ignored, say so and suggest adding it. Suggest — do not edit .gitignore yourself. It is a tracked file and the user may have reasons.

2. Verify before you write

This is the step that makes the skill worth running. Every claim below is checkable with a tool in seconds, and every one of them is a claim agents get wrong from memory:

ClaimSettle it with
Current commit, branch, dirty stategit rev-parse --short HEAD, git status --short
What is actually in the last commitgit show --stat HEAD — not the commit message, which lies
A file pathRead it, or ls it
A line numberRead the file and look
A test's name or fileGrep for it
Whether the suite passes, and what failsRun it
A quoted sentence and who said itFind it in the conversation, or do not quote it

If a claim cannot be settled, it does not become a fact. Either drop it or mark it inferred.

3. Write the file

Use the Write tool, never a shell redirect. Claude Code snapshots files its own file tools touch; a bash > handoff.md has no recovery copy anywhere, and neither does git, since the file is ignored.

markdown
# Handoff — <one-line task name>

Written <date time> · branch `<branch>` · commit `<short sha>`
Uncommitted: <one line — what is dirty, what is staged>

## Goal
What we are trying to achieve, and what "done" looks like.

## Decisions
Chose X over Y, because Z. One line each.

## Ruled out
What was tried, how it failed, and how far it got. One line each.

## Constraints
Things the user said that exist nowhere on disk. Quote them.

## Next step
The single immediate action, with the file and line to start at.

## Verify
The command that says whether it worked.

## Unverified
Anything above that could not be checked, marked as inferred.
Delete this section if it is empty — do not pad it.

"Ruled out" is the section that earns the file. Everything else is recoverable — a fresh session can read the code, run git log, work out the goal. What it cannot recover is that forty minutes already went into proving an approach doesn't work. Without that line, it spends them again.

Write down what a fresh session cannot reconstruct, and nothing else. No architecture tour, no narrative of how the session went, no restating what git diff already shows. Those feel thorough and are pure padding, and padding is not harmless here: it makes the file long enough that the review gets skimmed, and the review is the only reason this skill beats /compact.

4. Ask for the review that matters

Do not close with a general disclaimer. "Please review, AI can make mistakes" is true of everything and therefore aims at nothing — it gets skimmed, and inference reads exactly like recall.

Name the specific claims you are least sure of and say what depends on them:

Two things to check before you rely on this. I inferred the next step from what we were doing rather than from anything you said outright, and I could not confirm the second constraint is still live — it came from early in the session. Everything downstream is built on both.

If everything in the file was verified, say that instead, plainly. An honest "all of this was checked against the repo" is a better prompt to read it than a manufactured doubt.

5. Announce the artifact

End with the file you touched. Say it even though the user asked for it and watched it happen — a handoff sitting unnoticed in the working directory is the same as no handoff:

Files written or updated:
  new      handoff.md

On a resume, the same block covers whatever the recorded next step changed. Source and test files need only a count and a pointer — 4 source files changed in src/dbsync/ (see git diff) — but handoff.md itself is named every time.

Show full SKILL.md (588 more words)Show less

Resuming

  1. Read handoff.md. If there isn't one, say so and offer to save one instead.
  2. Summarize it in a few lines — the goal, where it stopped, the next step. Short. The file is right there if the user wants the rest.
  3. Check for drift. Compare the recorded commit against HEAD. If they differ, say so before asking anything.
  4. Ask whether to proceed. Wait for an answer.
  5. Verify the handoff's claims before acting on them: the files it names exist, the state it describes is the state on disk, the failing tests it predicts are the ones failing. A fresh session has no independent memory — if it does not check, nothing does.
  6. Report every mismatch and ask again. A stale handoff is more dangerous than no handoff, because it is specific and confident.
  7. Then start the recorded next step.

Never delete handoff.md. Not after reading it, not on success. It is the only written record of the reasoning, and it is untracked, so git cannot bring it back. If the resume goes sideways the user needs to re-read what it actually said. The next save overwrites it; that is the whole lifecycle.

Common Mistakes

MistakeWhat to do instead
Writing file paths, line numbers, or test names from memoryThese are the errors. Check each one with a tool first — it costs seconds.
Quoting the user's constraint and attributing it to a nameThe conversation may never state who said it. Quote the sentence; do not invent the speaker.
Trusting the last commit's message for what it containsgit show --stat HEAD. Messages describe intent, not content.
Including an architecture tour or a file-by-file layoutRecoverable by opening the repo. It buys nothing and costs the review.
Narrating how the session unfoldedThe next session needs the conclusions, not the journey.
Stating inferred and verified claims in the same registerMark the inferred ones. Uniform confidence is what hides the errors.
Filing a claim under "Unverified" instead of checking itThat section is for what a tool genuinely cannot settle. If git show --stat HEAD or one grep would answer it, run it. An Unverified list longer than a few lines, in a repo you can read, means verification got skipped and relabelled.
Closing with "review this, AI makes mistakes"Name the two or three claims that actually need checking.
Deleting the handoff after resumingIt is untracked; git cannot restore it. Let the next save overwrite it.
Resuming straight into the work without checking the treeThe handoff may be describing a state that no longer exists.
Writing the file with echo or >Use the Write tool. A shell redirect leaves no recovery copy.
Running this to compact the current sessionThat is /compact. This skill exists to produce a file for a different session.

Red Flags — stop and check

  • You are about to write a line number you did not just read
  • You are about to write "the tests pass" without having run them
  • You are attributing a quote to a person the conversation never named
  • Your handoff has a section describing the codebase's structure
  • Every sentence in your draft is equally confident
  • You are about to close with a generic request to review it
  • You are about to rm handoff.md
  • Your "Unverified" section is longer than your "Decisions" section, and you can read the repo
  • The file is long enough that you would not read it yourself

All of these mean: go check, cut it, or mark it inferred.

© Ovid, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/paad/skills/handoff of Ovid/paad.

Open the folder on GitHubat commit 9b0b57f

Compare with similar skills

Handoff next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Handoff compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Handoff this skillOvid/paad131—~3.4kAutomated safety check: PassMIT
Session Handoff Documentthedotmack/claude-mem98k—~1.4kAutomated safety check: PassApache-2.0
Handoffnexu-io/open-design100k—~547Automated safety check: PassApache-2.0
Handoffalirezarezvani/claude-skills28k—~2.5kAutomated safety check: NotesMIT
Handoffalirezarezvani/claude-skills28k—~532Automated safety check: PassMIT
Session Handoff Writercodewhale-hq/Codewhale41k—~1.2kAutomated safety check: PassMIT

Similar skills

  • Session Handoff Document

    thedotmack/claude-mem

    Writes a HANDOFF.md capturing goal, state, files, failed attempts and next steps so a fresh agent session can continue exactly where this one stopped.

    98k GitHub stars~1.4k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Handoff

    nexu-io/open-design

    Push the run's accepted artifact to a downstream collaboration surface (cli, other code agents, cloud, desktop) and stamp the artifact manifest with the export target.

    100k GitHub stars~547 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Handoff

    alirezarezvani/claude-skills

    Compact the current conversation into a handoff document for another agent to pick up.

    28k GitHub stars~2.5k tokensUpdated 1 mo ago
    Agent WorkflowsAuto-check: notes
  • Handoff

    alirezarezvani/claude-skills

    Compact the current conversation into a handoff document for another agent to pick up.

    28k GitHub stars~532 tokensUpdated 1 mo ago
    Product & Project ManagementAuto-check passed
  • Session Handoff Writer

    codewhale-hq/Codewhale

    Writes a compact handoff note from real git and CI state so the next session or a teammate can pick up the work without rebuilding the context.

    41k GitHub stars~1.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Session Handoff

    sickn33/agentic-awesome-skills

    A skill your agent uses when context approaches capacity, before /clear or /compact, when switching tasks, or when ending a coding session: produces a structured handoff artifact for the next session.

    47k GitHub stars~1.8k tokensUpdated yesterday
    Agent WorkflowsAuto-check: notes

More from Ovid/paad

All 16 skills in this repo
  • A skill your agent uses when reviewing current branch for bugs before pushing or merging, when wanting a thorough multi-agent review of local changes, or when preparing work for human review.

    131 GitHub starsUsed in 1 repo~10k tokens
    Auto-check passed
  • Test Roadmap

    Ovid/paad

    EXPERIMENTAL. An agent skill from Ovid/paad.

    131 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Alignment

    Ovid/paad

    A skill your agent uses when verifying that requirements/specs/PRDs and their implementation plans match — before starting work, after a spec or plan update, or when suspecting coverage gaps, scope…

    131 GitHub stars~4.9k tokensUpdated yesterday
    Auto-check passed
  • Backlog

    Ovid/paad

    EXPERIMENTAL. An agent skill from Ovid/paad.

    131 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Makefile

    Ovid/paad

    A skill your agent uses when creating or updating a Makefile for a project, especially when standard targets (build, test, lint, format, etc.) are missing or when modifying targets that may already…

    131 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Rethink

    Ovid/paad

    EXPERIMENTAL. An agent skill from Ovid/paad.

    131 GitHub stars~4.3k tokensUpdated yesterday
    Auto-check passed

Questions about Handoff

What does Handoff do?

EXPERIMENTAL. An agent skill from Ovid/paad. Handoff is an agent skill from Ovid/paad. EXPERIMENTAL.

When should I use Handoff?

Handoff fits situations like: A session is running out of context and the work needs to continue in a fresh one; starting a session meant to pick up where an earlier one stopped.

How do I install Handoff in Claude Code?

Run `npx skills add Ovid/paad --skill handoff -a claude-code`. Or copy the skill folder (plugins/paad/skills/handoff in Ovid/paad) into .claude/skills/handoff in your project. Claude Code loads it when a task matches its description.

How do I install Handoff in Codex?

Run `npx skills add Ovid/paad --skill handoff -a codex`. Or copy the skill folder (plugins/paad/skills/handoff in Ovid/paad) into .agents/skills/handoff in your project. Codex loads it when a task matches its description.

Can I use Handoff in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Ovid/paad --skill handoff -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/handoff, .gemini/skills/handoff, .github/skills/handoff and .opencode/skills/handoff in your project.

What does Handoff need to run?

Going by SKILL.md and its folder, Handoff needs the command-line tools its instructions call (git and bash).

Does Handoff access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Handoff safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Handoff use?

Handoff is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Handoff use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Handoff?

Skills that share tags, products or a category with Handoff: Session Handoff Document (thedotmack/claude-mem, 98k stars), Handoff (nexu-io/open-design, 100k stars), Handoff (alirezarezvani/claude-skills, 28k stars) and Handoff (alirezarezvani/claude-skills, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Handoff?

Ovid (a GitHub user) maintains it in Ovid/paad, which has 131 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 7, 2026.

Source: Ovid/paad on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.