Pull older handoffs from .claude/handoff_history/ into the current session's context. Requires the scripts/hooks installed by this repo's ./install.sh — the history it reads only exists once those are in place. Use when the auto-loaded handoff_current.md is thin (placeholder Notes, missing context the user is referencing), when the user references work from "yesterday" or "the session before this one," or whenever the user explicitly invokes /handoff-more. Reads up to N older snapshots (defau...
Scanned 9/3/2026
Install to Claude Code
npx -y skills add Sting25/claude-code-handoff --skill handoff-more --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Handoff More?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/sting25-handoff-more)More formats (shields.io, HTML) on the badges page.
---
name: handoff-more
description: Pull older handoffs from .claude/handoff_history/ into the current session's context. Requires the scripts/hooks installed by this repo's ./install.sh — the history it reads only exists once those are in place. Use when the auto-loaded handoff_current.md is thin (placeholder Notes, missing context the user is referencing), when the user references work from "yesterday" or "the session before this one," or whenever the user explicitly invokes /handoff-more. Reads up to N older snapshots (default 5).
---
# /handoff-more — load older handoffs into context
> **Prerequisite:** this skill reads history that only exists when the
> scripts and hooks from https://github.com/Sting25/claude-code-handoff
> are installed — `write_handoff.sh` is what rotates snapshots into
> `handoff_history/`. That toolchain lives under `~/.claude/bin/`
> (script install) or the plugin's `bin/` (plugin install) and is NOT
> part of this file alone; run `./install.sh` from that repo (or
> install the plugin) once per machine first.
The `SessionStart` hook auto-loads `handoff_current.md` (the most
recent handoff). This skill pulls in the older snapshots that
`write_handoff.sh` rotated into `<repo>/.claude/handoff_history/`
before each new write.
## When to invoke
- **User asks explicitly** (`/handoff-more`, "load more handoff
context," "what did we do two sessions ago," etc.).
- **Auto-loaded handoff is thin.** If `handoff_current.md` was the
result of an automatic `SessionEnd` write (no model in the loop to
add curated Notes), the SessionStart hook already loaded the prior
one as a fallback. But if the user is referencing decisions or work
the assistant still can't account for, run this skill to pull
further back.
- **Continuity gap.** User mentions a track, decision, or artifact you
have no context on, and the current handoff doesn't reference it.
## Steps
1. List the history dir:
```bash
ls -la <repo-root>/.claude/handoff_history/
```
If the directory is missing or empty, check whether that's "no
history yet" or "toolchain never installed". Script installs put
the scripts under `~/.claude/bin/`; plugin installs put them under
the plugin's `bin/`. `CLAUDE_PLUGIN_ROOT` would name that location,
but measurement (2026-08-11, plugin-enabled headless session) shows
the CLI does NOT export it to model-driven Bash calls — the env-var
check stays only as cheap future-proofing, and in plugin mode the
cache-glob is the branch that actually resolves:
```bash
hb=""
if [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -f "${CLAUDE_PLUGIN_ROOT}/bin/write_handoff.sh" ]; then
hb="${CLAUDE_PLUGIN_ROOT}/bin"
elif [ -f "$HOME/.claude/bin/write_handoff.sh" ]; then
hb="$HOME/.claude/bin"
else
nb=0
for d in "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/plugins/cache/*/claude-code-handoff/*/bin; do
if [ -f "$d/write_handoff.sh" ]; then
t="$(stat -f %m "$d/write_handoff.sh" 2>/dev/null || stat -c %Y "$d/write_handoff.sh" 2>/dev/null || echo 0)"
[ "$t" -ge "$nb" ] && nb="$t" && hb="$d"
fi
done
fi
# env var wins when set (running from that plugin), legacy bin next (existing
# installs), cache glob last (plugin installed but env var not visible to
# skill Bash); among cached versions the newest mtime wins. NOT lexical
# last-match: glob order sorts 0.9.0 AFTER 0.14.0, so that silently ran an
# older cached version across a digit-count boundary (fixed v0.14.1).
[ -n "$hb" ] || echo "MISSING: handoff scripts not installed (neither ~/.claude/bin nor a plugin install found)"
echo "handoff-bin: $hb"
```
(This skill only reads directories — `$hb` isn't invoked elsewhere
in this file, so there's no cross-call persistence concern here.)
If it prints MISSING, stop and tell the user to clone
https://github.com/Sting25/claude-code-handoff and run `./install.sh`
(or install the plugin) — don't try to substitute for the missing
toolchain. If the scripts ARE installed, say there's simply no
history yet and stop — there's nothing to load.
2. Read each retained snapshot, newest first. The default retention
is 5 (configurable via `HANDOFF_HISTORY_KEEP` in the user's shell),
so this is normally 1–5 files. Use the `Read` tool on each.
3. Acknowledge in one line that older handoffs are now in context
(e.g. "Loaded 3 older handoffs from
`.claude/handoff_history/` — `handoff_2026-05-12_140312.md`,
`handoff_2026-05-11_180044.md`, `handoff_2026-05-10_223301.md` —
into context."). Then continue answering whatever the user
actually asked.
## What NOT to do
- Do not load history files that aren't in `handoff_history/`. The
raw turn-by-turn dumps under `handoff_backups/` are a different
artifact (verbose, per-turn, for forensic recovery) — use that
directly if you need that level of detail, not this skill.
- Do not summarize the loaded handoffs back to the user as a wall of
text. The point is to put the prose in context, not to recite it.
One acknowledgement line is enough.
- Do not invoke proactively at every session start. The SessionStart
hook already handles the "current handoff is thin → also include
previous" fallback automatically. This skill is for when *that*
fallback is also insufficient.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!