handoff
Skill4 starsChanged 2 months agoApache-2.0View on GitHub
Publish a deliberate, structured Handoff document for the current objective into the active notepad and force a git push so it syncs across machines. Use when wrapping a session, handing to a teammate or fresh agent, hitting a milestone, or asked to "create a handoff", "write a handoff", "checkpoint for next session", "hand this off". Writes to <notepad>/handoffs/<date>-<topic>.md (NOT a temp dir), redacts secrets, references artifacts by path/URL, suggests next skills. In agent-notepad this is the on-demand Handoff tier — distinct from the continuous Notes tier (NOTES.md + journal). WARNING - 'hooks keep it fresh' holds ONLY on the compaction path, where pre-compact.sh writes a mechanical floor to PRECOMPACT.md, which the compact restore emits first. On /clear nothing does, because PreCompact never fires - so NOTES.md is whatever the agent last wrote, and it MUST be refreshed in the same commit as the handoff.
- Commits and pushes
191 other projects use a version of this.
Adopted by
Most recently taken up by
- xiaoxiaosrm/dsh-mattpocock-skillstheir own version, first seen Nov 8, 2026
- ethosagent/ethostheir own version, first seen Nov 8, 2026
- dsifry/metaswarmtheir own version, first seen Nov 8, 2026
- glebis/claude-skillstheir own version, first seen Nov 8, 2026
- domengabrovsek/agent-configtheir own version, first seen Nov 8, 2026
- domengabrovsek/claudetheir own version, first seen Nov 8, 2026
Used with
Projects with it also use decision-mapping, setup-ts-deep-modules and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
FabienDehopreSkilldecision-mapping
Turn a loose idea into a sequenced map of investigation tickets, then drive them to resolution one at a time.
Also in 8 projects that use this
liufeng1976Skillsetup-ts-deep-modules
Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.
Also in 42 projects that use this
AWSSkillto-questionnaire
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
Also in 93 projects that use this
GoogleSkillask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Also in 87 projects that use this
RoentekSkillloop-me
Grill me about specs for the workflows I want to build, within this workspace.
Also in 51 projects that use this
LesaniSkillwriting-beats
Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.
Also in 54 projects that use this
Other versions191 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 191
- mattpocock/skills★ 309ksame name
- QuivrHQ/quivr★ 40ksame name
- The-Vibe-Company/quivr★ 40ksame name
- GreyDGL/PentestGPT★ 16ksame name
- ykdojo/claude-code-tips★ 10ksame name
- ArcReel/ArcReel★ 6.3ksame name
- vinvcn/mattpocock-skills-zh-CN★ 5.5ksame name
- withcoral/coral★ 4.9ksame name
- epicenter-md/epicenter★ 4.8ksame name
- EpicenterHQ/epicenter★ 4.8ksame name
181 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository43 other files it gives its agents.
- skills/vercel-react-best-practices/AGENTS.mdAGENTS.md
- agent-notepadSkill
- architecture-reviewerSkill
- backend-service-auditorSkill
- channel-listenerSkill
- code-reviewerSkill
- coder-file-transferSkill
- cold-start-generatorSkill
- creating-skillsSkill
- critical-thinkingSkill
- dark-factory-buildSkill
- dependency-risk-auditorSkill
- df-adversary-gateSkill
- df-app-walkthroughSkill
- df-context-storeSkill
- df-data-transform-lensSkill
- df-dispatch-subagentsSkill
- df-infrastructureSkill
- df-observabilitySkill
- df-product-ownerSkill
- df-qaSkill
- df-solution-architectSkill
- df-tdd-developerSkill
- df-ui-verifySkill
- df-video-intakeSkill
- dx-maintainability-reviewerSkill
- frontend-auditorSkill
- microservices-architectSkill
- production-readiness-reviewerSkill
- repo-docsSkill
- requirements-discoverySkill
- sc-auditSkill
- sc-devSkill
- scope-initSkill
- scope-retireSkill
- security-threat-modelerSkill
- service-mapperSkill
- test-quality-gatekeeperSkill
- vercel-react-best-practicesSkill
- vinculum-loopSkill
- vinculum-mapSkill
- web-design-guidelinesSkill
- work-autonomouslySkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 1 is distinctive, and 4 are very specific to this project.
0
Common
Most of the 172 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 66
The one next action: Not a menu.
- Very specific: line 116
If $PUBLISH_HANDOFF does not exist, agent-notepad is not installed — say so and stop.
- Very specific: line 117
Do not hand-roll the write: the helper owns the notepad-root guard, the redaction pass, the commit and the forced push, and the …
- Very specific: line 175
Best-effort push: every git step is || true.
- Very specific: line 177
Writes only under the notepad: Never touches ~/.claude, the palace, or any repo outside the notepad.
“Common” is measured: kept by at least 6 in 10 of the 172 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
handoff — publish a deliberate Handoff doc into the notepad
Notes vs Handoff — the terminology split (read first)
agent-notepad keeps working memory in two tiers, and this skill owns only the second:
- Notes — the continuous tier.
NOTES.md(compact, rewritten in place) plus the append-only journal (sessions/<ISO8601>_<id>.jsonl). Kept fresh automatically by the Stop / PreCompact / UserPromptSubmit hooks and auto-loaded every SessionStart. You do not invoke a skill for Notes — they just accrue. - Handoff — the deliberate tier. A single structured document you publish on
demand at a meaningful boundary (milestone, teammate hand-off, end of a work block).
This is what
/handoffproduces.
A Handoff summarizes the current Notes into a durable, shareable artifact; it does not replace them. Notes are the stream; a Handoff is a snapshot you deliberately cut and push. When in doubt: routine progress → let the Notes hooks capture it; a real checkpoint someone else (or a fresh you) will read cold → publish a Handoff.
What this does
- Resolves the active notepad (nearest ancestor of cwd with
NOTES.md). - Writes the structured handoff to
<notepad>/handoffs/<date>-<topic>.md— inside the notepad, never the OS temp dir — so it is versioned and syncs. - Redacts secrets (API keys, tokens, bearer/JWT, private keys,
password=…). - References artifacts by path or URL (PRDs, plans, ADRs, commits, diffs, per-repo
df-context-storefindings) instead of duplicating their content. - Suggests next skills the receiving agent should invoke.
- Forces a
git pushof the notepad (git add → commit → push, best-effort) so the ⚠️ Update
NOTES.mdyourself, and commit it WITH the handoff. Operator rule, 2026-07-29: "Commit the handoff together with the session's NOTES.md update and any deploy-evidence, so the checkpoint is one coherent commit."⛔ This is not bookkeeping — it is the only thing that makes the handoff reachable.
session-start.shinjectsNOTES.md,DIGEST.mdandrepos.manifest.json; it does not readhandoffs/. A handoff published without a Notes update is invisible to every cold session — and the restore that misses it looks completely healthy.MEASURED 2026-09-04: a
/clearrestored aNOTES.mdseven weeks stale while that day's handoff went unread. Nothing errored; the restore banner appeared and looked fine. ⚠️ A healthy restore banner is not evidence the payload is current. handoff is immediately available on other machines / to teammates.
When to use
- Wrapping a session or work block; handing to a teammate or a fresh agent.
- Hitting a milestone worth a durable checkpoint.
- Explicit asks: "create a handoff", "hand this off", "checkpoint for next session", "prep for a fresh agent", "summarize the session for continuation".
⚠️ The handoff is the SINGLE ENTRY POINT for a cold session
Operator decision, 2026-09-01. A handoff must be the only document a fresh session has to read to become oriented. Not the first of five — the only one. Everything else it needs, it reaches through the handoff.
That is a contract on what a handoff must contain:
- Where the work stands, in a few sentences a cold reader can act on.
- The one next action. Not a menu.
- A link to every artefact touched — the mission map, the tickets, the PRs, the files, the findings. By path or URL, in a list, so nothing has to be hunted for.
- What is blocked and on whom.
⚠️ It POINTS. It does not RESTATE. The Mission Map holds the decisions; the tracker holds ticket state; the repos hold the code. A handoff that copies those becomes a second store of the same facts, and two stores drift — which is the one-artifact-two-homes failure this whole model exists to remove. Entry point, not authority. If you find yourself explaining a decision rather than linking to where it was recorded, stop and link.
⚠️ Test it the only way that works: could someone who was NOT in this session pick up this file alone and continue? If they would have to already know which mission, which ticket, or which repo — it is not a handoff yet, however complete it feels from inside the session.
Why this matters more after compaction than at a milestone
Native compaction is lossy and unversioned. When it fires, the hooks re-inject what they have — so whatever the handoff does not carry is simply gone from the new window. A five-document read order degrades to whichever documents the compacted agent still remembers to open. One self-sufficient document does not have that failure mode.
For automatic survival across auto-compaction, the Notes and PreCompact hooks do the mechanical capture — you do not run this skill for that. But they capture session mechanics: files touched, recent intent. They cannot know which ticket was claimed or what "done" means here. That judgement is this skill's, which is why the 85% context gate tells you to call it rather than trusting the hooks alone.
How to run
Compose the handoff body (the sections below), then publish via the helper. The helper writes the file, redacts, commits, and pushes; it prints the path it wrote.
# Resolve the helper under BOTH install modes.
# plugin mode -> ${CLAUDE_PLUGIN_ROOT}/lib/...
# install.sh mode -> ~/.claude/hooks/agent-notepad/lib/...
# ⚠️ ${CLAUDE_PLUGIN_ROOT} is set ONLY when agent-notepad is loaded as a PLUGIN. Under
# install.sh it is EMPTY, and the bare "${CLAUDE_PLUGIN_ROOT}/lib/publish-handoff.sh" this
# file used to print collapsed to "/lib/publish-handoff.sh" — an absolute path that does not
# exist. Measured 2026-08-31: the installed copy on this estate's laptop is THIS file, and
# CLAUDE_PLUGIN_ROOT was unset, so the command this skill documented could not run. The
# corrected line already existed in the plugin-bundled twin, which nothing installs.
PUBLISH_HANDOFF="${CLAUDE_PLUGIN_ROOT:-$HOME/.claude/hooks/agent-notepad}/lib/publish-handoff.sh"
# body on stdin; args: <notepad-root> <topic>
printf '%s' "$HANDOFF_BODY" \
| "$PUBLISH_HANDOFF" "$NOTEPAD_ROOT" "Arb bot milestone"If $PUBLISH_HANDOFF does not exist, agent-notepad is not installed — say so and stop.
Do not hand-roll the write: the helper owns the notepad-root guard, the redaction
pass, the commit and the forced push, and the AGENT_NOTEPAD_* test overrides.
$NOTEPAD_ROOT is the current notepad (the nearest ancestor with NOTES.md; the
SessionStart hook already resolved it). The helper refuses (non-zero exit, no write)
if the target is not a notepad — a Handoff only belongs in a notepad. It also refuses an
empty body and any argument it does not take: there is no --body-file flag — pass the body
on stdin, or a file path as the third argument.
The durable record is written FOR you
The helper writes a session record to Engram after it commits, hanging it off the notepad anchor
and off the RUNNING mission when there is one. You do not run df-engram write for the handoff
itself — doing so would store the same handoff twice.
⚠️ It is best-effort by design, and the ordering matters. git runs first: the commit is the
promise, and the hub must never be able to fail a checkpoint already on disk. If the hub is
unreachable the record is queued under <notepad>/pending-engram/ and the helper says so — the
finding is not lost, it is unconfirmed. The next df-engram write reconciles it automatically.
⛔ A TIMEOUT PROVES NOTHING. Never re-run the handoff to "make sure the record landed". The lag between a timed-out write and a findable document is 60-90 s, and retrying inside it is what created duplicates by hand for months.
What is still yours to do, because neither can be inferred:
- A
CORRECTSedge, when this work supersedes a specific document. A correction is a claim, so it is only ever made because you named the id — and it takes the FULL document id, not the eight-hex prefix this estate's notes use, whichengram_linkrejects. Resolve the fulldocument_idfrom a search hit, then:df-engram write --kind knowledge --collection loom-behaviors --title "…" --body-file … --corrects <uuid> - A durable FINDING that deserves its own record rather than a line in a session summary. The handoff record summarises the session; a behaviour, trap or measured fact worth recalling on another machine in six weeks is its own document, and that judgement is yours.
What Engram is, and how a machine is authorised to reach it, is documented in exactly one place: Engram.
Suggested body sections
- Objective / current goal — one line; the done-criteria from
SCOPE.md. - State — what is done, what is in flight.
- Decisions — key choices + rationale (mirror durable ones into the code repo's
DECISIONS.mdvia context-management). - Next action — the single most important next step.
- Blocked — what is blocked and on whom. ⚠️ The heading must contain the word
Blocked:
handoff-completeness-gate.pylooks for a heading matching/blocked/, and "blockers" does not match it. Measured on four separate validate runs — a handoff written exactly as this list used to describe was rejected by the gate that reads it. - Artifacts — reference by
repo:file:line, PR/commit SHA, or URL. Do not paste their contents. - Suggested next skills — e.g.
df-tdd-developer,df-qa,context-management, plus whichever memory-recall skill the instance binds (Tier-2; do not assume a name).
Guarantees & boundaries
- Target-overridable / test-safe: the notepad root is an argument;
AGENT_NOTEPAD_DATEoverrides the date stamp andAGENT_NOTEPAD_PUSH_LOGrecords push attempts. Tests point all three at temp dirs — the helper never hardcodes a real repo or remote. - Best-effort push: every git step is
|| true; a missing/broken remote still leaves a written, committed handoff and a zero exit. - Writes only under the notepad. Never touches
~/.claude, the palace, or any repo outside the notepad. Live memory is read-only elsewhere; this skill only writes files and pushes the notepad's own git repo.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

