Agent skill

Handoff

by davepoon in davepoon/buildwithclaude

End-of-session ritual. An agent skill from davepoon/buildwithclaude.

MITAuto-check: notesAgent Workflows

Install Handoff

skills CLI
$ npx skills add davepoon/buildwithclaude --skill handoff -a claude-code

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

GitHub CLI
$ gh skill install davepoon/buildwithclaude 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/davepoon/buildwithclaude.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/origin/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
3.6k
Token cost
~2.3k tokens
SKILL.md length
873 words
Files
1
Skills in repo
246
Repo updated
First seen
Licence
MIT

At a glance

End-of-session ritual. An agent skill from davepoon/buildwithclaude.

  • Works in 9 steps: Detect project + last handoff time → Gather session context (parallel, only… → Infer, do not ask → …
  • Agent Workflows work in your project
  • SKILL.md covers Steps, When to use, When NOT to use and Notes on the three artifact…
  • Calls git

What it does

Handoff is an agent skill from davepoon/buildwithclaude. End-of-session ritual. Captures decisions, lessons, gotchas, and open threads. Writes a narrative session log to ~/.origin/sessions/ and stores granular memories via Origin MCP. Previews any unconfirmed captures from the current session before closing. Invoked as /handoff.

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

It sits in Agent Workflows. It works with Model Context Protocol and Git. The repository describes itself as: A single hub to find Claude Skills, Agents, Commands, Hooks, Plugins, and Marketplace collections to extend Claude Code, Claude Desktop, Agent SDK and OpenClaw. The licence is MIT.

When your agent uses it

  • Agent Workflows work in your project

Example prompts

  • “/handoff”

Requirements

  • Pre-approved tools (allowed-tools): Bash, mcp__plugin_origin_origin__capture, mcp__plugin_origin_origin__list_pending

Workflow steps

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

  1. Detect project + last handoff time
  2. Gather session context (parallel, only if git repo)
  3. Infer, do not ask
  4. MCP captures (one per item)
  5. Write session log
  6. Update project status
  7. Write timestamp
  8. Auto-commit ~/.origin/
  9. Confirm

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • mcp__plugin_origin_origin__capture
    • mcp__plugin_origin_origin__list_pending

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    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 2.3k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 873 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, mcp__plugin_origin_origin__capture, mcp__plugin_origin_origin__list_pending

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 davepoon/buildwithclaude at commit 616deb5, republished under its MIT licence (© davepoon). 873 words, ~2,301 tokens.

Download SKILL.mdSave it as .claude/skills/handoff/SKILL.md (or your agent's skills folder).
name
handoff
description
End-of-session ritual. Captures decisions, lessons, gotchas, and open threads. Writes a narrative session log to ~/.origin/sessions/ and stores granular memories via Origin MCP. Previews any unconfirmed captures from the current session before closing. Invoked as `/handoff`.
allowed-tools
Bash, mcp__plugin_origin_origin__capture, mcp__plugin_origin_origin__list_pending

/handoff

End-of-session debrief. Three artifacts each pass:

  1. Granular MCP captures — one per decision/lesson/gotcha (DB authoritative).
  2. Session log md — narrative thread at ~/.origin/sessions/<YYYY-MM-DD-HHmm>-<slug>.md.
  3. Project status md + json — current goals + last-handoff timestamp at ~/.origin/sessions/_status/.

These are orthogonal: captures are queryable atoms, session log is the narrative thread, status file lets the next session see where we left off.

Steps

1. Detect project + last handoff time
Bash: cd_repo=$(git -C "$PWD" rev-parse --show-toplevel 2>/dev/null); echo "${cd_repo:-no-git}"
  • If output is a path → use the basename as <project> (e.g. origin).
  • If no-git → use the cwd basename. Skip git steps below; rely entirely on conversation context.

Read ~/.origin/sessions/_status/handoff-<project>.json for lastHandoff timestamp (ISO-8601). If file missing, default to "12 hours ago".

1.5 Pending-captures preview

After establishing <lastHandoff>, call:

list_pending(limit=50)

The MCP returns memory rows with source_id, content, created_at, and other metadata. Convert lastHandoff (ISO-8601 string, e.g. 2026-05-13T22:50:00Z) to a Unix epoch seconds integer before filtering:

Bash: date -j -f %Y-%m-%dT%H:%M:%SZ "$lastHandoff" +%s

Or in your scripting language of choice (Python's datetime.fromisoformat, JavaScript's Date.parse, etc.). Save the result as lastHandoffEpoch.

Then filter the response rows: keep where row.created_at >= lastHandoffEpoch. These are captures this session produced that the quality gate left unconfirmed (untrusted-source captures).

If the filtered list is empty, say nothing. Proceed to Step 2.

If non-empty, render a preview block once, before the existing capture flow:

Pending captures this session (<N> total, top 3 shown):

1. mem_xyz789  "..."  (untrusted source: <agent>)
2. ...

Default: proceed (captures stay pending). Opt in by running
`/review captures` before re-invoking /handoff if you want to walk them.

Do NOT prompt for per-item action inline. The user proceeds with /handoff regardless; the preview is informational only.

2. Gather session context (parallel, only if git repo)
Bash: git -C <repo> log --oneline --since=<lastHandoff>
Bash: git -C <repo> status --short
Bash: git -C <repo> diff --stat HEAD~5..HEAD 2>/dev/null
Bash: git -C <repo> worktree list

Capture output. Use it alongside conversation history to infer what happened. If not a git repo, skip — conversation context is the source.

3. Infer, do not ask

Synthesize silently from git output + conversation. Categorize each item into user-facing groups. Each maps to a daemon memory_type for the capture call:

Display labeldaemon memory_typeWhat belongs here
Decisionsdecisionarchitectural choice, tool/pattern selection (with WHY)
Lessonslessonroot cause discovered, workaround found, technical insight
Insightsgotchaunexpected behavior, debugging discovery, sharp edge
Correctionspreferenceuser pushed back, corrected approach or assumption
Factsfactdurable project/people/tool fact worth persisting

Non-memory items (not stored, session-log only):

  • Open threads — started but not finished, blockers.

Skip purely mechanical facts already in git (file paths, function names, config values). The commit log preserves those.

4. MCP captures (one per item)

For each non-trivial item, call with the mapped memory_type:

capture(content="<one self-contained sentence with WHY>", memory_type="<decision|lesson|gotcha|preference|fact>")

Atomic: one decision per call. Don't merge multiple items into one memory. The daemon dedups against existing knowledge, so re-storing known facts is a no-op.

Only surface items to the user BEFORE storing if they meet one of these bars:

  • Contradicts an existing memory (recall returned a conflicting fact).
  • Marks a critical incident, irreversible action, or production change.
  • You are uncertain whether the item is durable vs transient.

Otherwise just store and report counts at the end.

5. Write session log

Bash heredoc to ~/.origin/sessions/<YYYY-MM-DD-HHmm>-<slug>.md:

markdown
# Session <YYYY-MM-DD HH:MM> — <slug>

**Project:** <project>
**Range:** <lastHandoff> → <now>

## Accomplished
- <item>

## Decisions
- <decision and rationale>

## Lessons & Gotchas
- <root cause / workaround>

## Open Threads
- <what's unfinished>

## Captures stored
- <source_id_or_brief_summary>

## Git summary
<git log --oneline output>

<slug> = kebab-case 2-4 word summary (session-handoff-md-writer).

Show full SKILL.md (408 more words)Show less
6. Update project status

Overwrite ~/.origin/sessions/_status/<project>.md:

markdown
# <Project> — Current Status

## Last session (<date>)
- <accomplished bullet>

## Active
<!-- Items touched/spawned in the last 1-2 sessions. Real next-move candidates. -->
- <item> (added <YYYY-MM-DD>)
- <blocked item> (added <YYYY-MM-DD>) (gated: <trigger>)

## Backlog
<!-- Older accretion. Not gated, not picked. Promote back to Active when re-engaged. -->
- <item> (added <YYYY-MM-DD>)

Single file per project. New session overwrites — this is the current state, not a log.

Two sections, not one flat list: ## Active and ## Backlog separate the two types of tasks that get mixed otherwise. Active = fresh signal worth picking next. Backlog = older parked items, kept for reference but not in the "what next?" frame.

Date stamp every bullet with (added <YYYY-MM-DD>). Use today's date when adding a new item; preserve the original date when carrying an item forward. Dates make age visible at a glance and avoid relative-time drift.

Gated items stay inline-tagged with (gated: <trigger>) — no separate section. The tag tells the reader why it can't move yet; the bullet stays in whichever section reflects its recency.

Promotion / demotion rules:

  • New item this session → ## Active with today's date
  • Item in ## Active that wasn't touched this session AND wasn't touched the prior session → demote to ## Backlog (keep original date)
  • Item in ## Backlog that work resumed on → promote back to ## Active (keep original date — staleness is a property of the work, not the bullet text)
7. Write timestamp

Overwrite ~/.origin/sessions/_status/handoff-<project>.json:

json
{
  "lastHandoff": "<ISO-8601 now>",
  "project": "<project>",
  "summary": "<one-line>"
}

Per-project file prevents parallel sessions from clobbering each other.

8. Auto-commit ~/.origin/

After writing the files above, snapshot the change so the user can git log their memory's life timeline. Defensive — silent skip if git is missing or ~/.origin/ is not a repo yet.

Bash: git -C ~/.origin add -A && \
      git -C ~/.origin -c user.name=Origin -c user.email=daemon@origin.local \
          commit --quiet -m "session: <slug>" 2>/dev/null || \
      (sleep 1 && git -C ~/.origin add -A && \
       git -C ~/.origin -c user.name=Origin -c user.email=daemon@origin.local \
           commit --quiet -m "session: <slug>" 2>/dev/null) || true

The retry handles index.lock races — the daemon may be writing to ~/.origin/ at the same moment (auto-commit from captures). One-second wait is enough for the daemon to release the lock.

9. Confirm

Print one summary block with captures grouped by display label:

Handoff stored.
  Decisions:   <N> (brief list)
  Lessons:     <N> (brief list)
  Insights:    <N> (brief list)
  Corrections: <N> (brief list)
  Facts:       <N> (brief list)
  Session:     ~/.origin/sessions/<filename>
  Status:      ~/.origin/sessions/_status/<project>.md
  Git:         <commit hash> session: <slug>

Show each label only if non-empty. List items as short phrases, not full sentences — the session log has the details.

When to use

  • "Wrapping up", "let's call it", "we're done".
  • Session about to close and useful state would otherwise be lost.

When NOT to use

  • Mid-flow capture during work → use /capture (single memory).
  • Search / lookup → use /recall.
  • One-off chat with no decisions or lessons — captures alone are enough.

Notes on the three artifact classes

  • Memories (MCP captures) live in the daemon DB only. Confirmation flips a stability flag — they never get exported to md.
  • Pages are wiki-style syntheses written to ~/.origin/pages/ by the daemon when /distill runs. Citations link back to source memory ids.
  • Sessions (this skill) live only at ~/.origin/sessions/. They are the narrative axis: chronological, not topical. Browse them as a changelog of your work.

© davepoon, 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/origin/skills/handoff of davepoon/buildwithclaude.

Open the folder on GitHubat commit 616deb5

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 skilldavepoon/buildwithclaude3.6k—~2.3kAutomated safety check: NotesMIT
Agent Repo Initstudy8677/repobrain1.3k1 repos~404Automated safety check: NotesMIT
Agent Deckasheshgoplani/agent-deck1k—~1.7kAutomated safety check: PassMIT
Foremergenaw103/foremerge538—~2.4kAutomated safety check: PassApache-2.0
Puppetmaster Agent Orchestrationprofessorpalmer/Puppetmaster467—~3.2kAutomated safety check: PassMIT
Agtx Task Sweepfynnfluegge/agtx1.7k—~1.7kAutomated safety check: PassApache-2.0

Similar skills

  • Agent Repo Init

    study8677/repobrain

    One-click initialization of a multi-agent repository from the RepoBrain template.

    1.3k GitHub starsUsed in 1 repo~404 tokens
    Agent WorkflowsAuto-check: notes
  • Agent Deck

    asheshgoplani/agent-deck

    agent-deck, the terminal session manager for AI coding agents.

    1k GitHub stars~1.7k tokensUpdated 3 days ago
    Agent WorkflowsAuto-check passed
  • Foremerge

    naw103/foremerge

    Coordinate parallel coding agents with Foremerge's local Git-compatible CLI and MCP server.

    538 GitHub stars~2.4k tokensUpdated 4 days ago
    Agent WorkflowsAuto-check passed
  • Puppetmaster Agent Orchestration

    professorpalmer/Puppetmaster

    Operates and supervises Puppetmaster, a multi-agent orchestrator, through its MCP tools or CLI, picking the right verb for edits, reviews, audits and long-running jobs.

    467 GitHub stars~3.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Agtx Task Sweep

    fynnfluegge/agtx

    Breaks a conversation's results into feature-level tasks and pushes them to the agtx kanban board, where each task gets its own worktree and agent session.

    1.7k GitHub stars~1.7k tokensUpdated 6 days ago
    Agent WorkflowsAuto-check passed
  • Dotagents

    getsentry/sentry-wizard

    Official

    Manage agent skill dependencies with dotagents. An agent skill from getsentry/sentry-wizard.

    295 GitHub stars~900 tokensUpdated today
    Agent WorkflowsAuto-check passed

More from davepoon/buildwithclaude

All 246 skills in this repo
  • iOS Hig Design Guide

    davepoon/buildwithclaude

    Build, update, and apply iOS design specifications using Apple Human Interface Guidelines (HIG) source data.

    3.6k GitHub stars~735 tokensUpdated today
    Auto-check passed
  • Video Downloader

    davepoon/buildwithclaude

    Download YouTube videos with customizable quality and format options.

    3.6k GitHub starsUsed in 1 repo~871 tokens
    Auto-check passed
  • Qwen Vision

    davepoon/buildwithclaude

    A skill your agent uses when the user asks to "analyze video", "watch this video", "what happens in this video", "describe this clip", "review this footage", "classify these videos", "compare…

    3.6k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Atlas Cloud Media

    davepoon/buildwithclaude

    Discover Atlas Cloud image and video models, inspect their live schemas, and submit one confirmed media generation request with bounded GET polling.

    3.6k GitHub stars~852 tokensUpdated today
    Auto-check passed
  • Browser Extension Launch

    davepoon/buildwithclaude

    面向没有编程经验的用户,把想法做成可试用的浏览器插件,并完成检查、商店材料、审核提交和上线验证;也用于继续已有插件、排错和发布新版。用户说“帮我做个插件”“把插件上架”“继续我的插件”时使用。普通网站开发、仅查询插件知识不触发。

    3.6k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Slack Gif Creator

    davepoon/buildwithclaude

    Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives.

    3.6k GitHub starsUsed in 12 repos~4.3k tokens
    Auto-check passed

Categories

Questions about Handoff

What does Handoff do?

End-of-session ritual. An agent skill from davepoon/buildwithclaude. Handoff is an agent skill from davepoon/buildwithclaude. End-of-session ritual.

When should I use Handoff?

Handoff fits situations like: agent Workflows work in your project.

How do I install Handoff in Claude Code?

Run `npx skills add davepoon/buildwithclaude --skill handoff -a claude-code`. Or copy the skill folder (plugins/origin/skills/handoff in davepoon/buildwithclaude) 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 davepoon/buildwithclaude --skill handoff -a codex`. Or copy the skill folder (plugins/origin/skills/handoff in davepoon/buildwithclaude) 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 davepoon/buildwithclaude --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). Its frontmatter pre-approves these tools: Bash, mcp__plugin_origin_origin__capture, mcp__plugin_origin_origin__list_pending.

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 notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. 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 2.3k tokens (SKILL.md is roughly 9.2k 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: Agent Repo Init (study8677/repobrain, 1.3k stars), Agent Deck (asheshgoplani/agent-deck, 1k stars), Foremerge (naw103/foremerge, 538 stars) and Puppetmaster Agent Orchestration (professorpalmer/Puppetmaster, 467 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Handoff?

davepoon (a GitHub user) maintains it in davepoon/buildwithclaude, which has 3,605 GitHub stars. The repository holds 246 skills in this directory. The repository was last updated on October 9, 2026.

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