$npx -y skills add REMvisual/claude-handoff --skill handoffCreate a structured session handoff when context is running low or work is pausing. Deep context mining, self-validation, multi-file splitting. Captures everything the next session needs.
| 1 | # Session Handoff |
| 2 | |
| 3 | **Guards:** |
| 4 | - **Not plan mode.** This skill writes files. If in Claude Code plan mode, exit first. |
| 5 | - **Not shadowing.** NEVER generate handoff-like documents freeform. Freeform summaries look right but lack chain tracking, self-validation, and evidence mining. Only this skill produces handoffs. |
| 6 | - **Not when discussing.** Only run when the user explicitly asks to CREATE a handoff right now. If ambiguous ("what does handoff do", "edit the handoff file"), ask first. |
| 7 | |
| 8 | Typical use: ~75% context. You have a lot of conversation to mine — extract maximum value before closing. On 1M context that's ~750K tokens of history. |
| 9 | |
| 10 | The user should not need to provide anything — `/handoff` alone is sufficient. |
| 11 | |
| 12 | **Arguments:** $ARGUMENTS |
| 13 | |
| 14 | --- |
| 15 | |
| 16 | ## Agent Strategy |
| 17 | |
| 18 | Parallelize independent research. Launch in one message. |
| 19 | |
| 20 | | What | Mode | Why | |
| 21 | |---|---|---| |
| 22 | | Step 1A (git/beads/ls) | **Parallel Bash, never agents** | Cheap commands; agent bootup wastes 15K+ each | |
| 23 | | Step 1B context agents (OV, stale-refs, bible) | Parallel Bash inline; agents only if parent handoff >500 lines | Independent research | |
| 24 | | Step 1C (conversation mining) | Main agent only | Only you have the history | |
| 25 | | Steps 5+6 (beads/memory writes) | Parallel Bash | Independent writes | |
| 26 | |
| 27 | --- |
| 28 | |
| 29 | ## Step 1: Deep Context Gathering |
| 30 | |
| 31 | ### 1A: External State (parallel Bash — never agents) |
| 32 | |
| 33 | Run in one message as inline Bash calls: |
| 34 | |
| 35 | | Commands | Returns | |
| 36 | |---|---| |
| 37 | | `git log --oneline -20`, `git diff --stat`, `git status -s \| head -30`, `git branch --show-current` | Branch, recent commits, uncommitted changes | |
| 38 | | `bd list --status=in_progress`, `bd list --status=open --priority=0,1`, `bd stats` (skip if bd unavailable) | Active/open beads | |
| 39 | | `ls plans/handoffs/`, `ls .claude/handoffs/`, `ls plans/*.md` | Existing handoff files | |
| 40 | |
| 41 | ### 1B: Chain Detection |
| 42 | |
| 43 | **Resolve the chain tag** (use first that applies): |
| 44 | 1. Epic exists → use epic name/ID |
| 45 | 2. 1-4 beads → use all bead IDs (e.g., `myproject-xxxx, myproject-yyyy`) |
| 46 | 3. 5+ beads → pick 2-3 most relevant to the primary work stream |
| 47 | 4. No beads/epic → generate fallback: `python -c "import secrets; print(secrets.token_hex(4))"` → `standalone-{hex}` |
| 48 | |
| 49 | **Find prior handoff in this chain** (two tiers, stop at first match): |
| 50 | |
| 51 | - **Tier A — Paste Prompt (deterministic).** Did the user start this session by pasting something like `Read HANDOFF_foo_date.md (seq 2, chain-x) and continue...`? If yes, that file is the parent. Read its header. Continuation — seq = parent's + 1. |
| 52 | |
| 53 | - **Tier B — Bead/Epic Scan (heuristic, skips auto-handoffs).** |
| 54 | ```bash |
| 55 | grep -l "Chain:.*{chain_tag}" plans/handoffs/HANDOFF_*.md 2>/dev/null \ |
| 56 | | xargs grep -L "^\*\*Auto:\*\* true" 2>/dev/null |
| 57 | ``` |
| 58 | |
| 59 | **A shared bead is a CANDIDATE, not proof of continuation.** Before claiming the match as parent: |
| 60 | 1. Read the candidate's `## Where We're Going` section. |
| 61 | 2. Is current session work a direct follow-on of those steps? (Same feature/fix, continuing the named next-actions?) |
| 62 | 3. **Clear continuation** → inherit chain, increment seq, set parent. |
| 63 | 4. **Unclear or unrelated** → treat this as seq 1 (new chain). Add a `## Related Handoffs` section listing the sibling file as reference only, NOT parent. A bead can host many independent work streams (brainstorm → impl → testing) — don't conflate them. |
| 64 | 5. **Any doubt** → ask the user: "Found prior handoff `{file}` on same bead. Is this session a continuation? (default: new chain)" |
| 65 | |
| 66 | **Neither tier matches:** seq 1, parent: none. |
| 67 | |
| 68 | ### 1B-3/4: Context Agents (parallel, inline Bash unless parent is huge) |
| 69 | |
| 70 | Once chain tag resolved, launch in parallel: |
| 71 | |
| 72 | | Task | Returns | |
| 73 | |---|---| |
| 74 | | OV Recall (if available): `/memory-recall` with 2-3 keyword searches | Prior decisions, failed approaches | |
| 75 | | Parent Context (if parent exists): **READ FULL PARENT** — extract Goal, Where We Are, Key Decisions, What We Tried, Where We're Going, Open Questions, code identifiers | Parent summary for "Since Last Handoff" + identifier list | |
| 76 | | Reference Docs: `ls plans/*BIBLE* plans/*bible* *BIBLE* CLAUDE.md .claude/CLAUDE.md` and read if found | Project context | |
| 77 | | Stale Refs (if parent): Grep each parent identifier against current codebase | List of identifiers NOT found | |
| 78 | |
| 79 | **Parent reading is MANDATORY when a parent exists.** "Since Last Handoff" requires comparing what was planned vs what happened. Skip agents that don't apply. |
| 80 | |
| 81 | ### 1C: Conversation Mining |
| 82 | |
| 83 | If arguments were provided ($ARGUMENTS), use as a soft hint for framing. Conversation is ground truth. |
| 84 | |
| 85 | **Choo |