Resume work from a handoff file written by /handoff. Read .claude/handoff.md, orient to project state, verify current conditions, and continue where the previous session left off. Use when user says "catchup", "continue from handoff", "read the handoff", "load handoff", or invokes /catchup.
Read a handoff file, verify current state against it, and continue working.
The "receive" side of the handoff/catchup pair — /handoff writes, /catchup reads.
.claude/handoff.md.claude/handoff-<arg>.md
ls -la .claude/handoff*.md 2>/dev/null/vault-catch-up instead or ask user for contextBefore launching the subagent, check the handoff file's age:
stat -c %Y .claude/handoff.md 2>/dev/null
Calculate days since last modified. Include the age in the subagent prompt so it appears in the briefing. Thresholds:
The read-and-digest phase runs inside an Explore subagent to keep raw file contents out of the main conversation context.
Launch an Explore agent with a prompt built from this template (fill in the
<placeholders> before sending):
Read the handoff file at <resolved-path>. The file is <N> days old.
Extract: frontmatter (created, project, branch) and all body sections. If the file is missing expected sections (Completed, Current State, Next Steps) or appears truncated/corrupted, note what's missing and work with what's there.
Also read PROJECT_STATE.md if it exists. Extract:
If PROJECT_STATE.md doesn't exist, note "No PROJECT_STATE.md found" and continue with handoff data only.
Also check VERIFICATION.md if it exists. Note:
Verify git state:
git branch --show-current 2>/dev/nullgit status --short 2>/dev/nullgit log --oneline -5 2>/dev/nullCompare to the handoff. Flag drift (branch mismatch, new commits, unexpected uncommitted changes). If not in a git repo, note that and skip.
Read each file from the "Relevant Files" section. Don't dump contents — just confirm each file exists, note if anything looks different from the handoff's description.
Return this briefing and nothing else:
**Project:** <name>
**Handoff written:** <timestamp> (<N days ago>)
**Branch:** <recorded> → **Current:** <actual>
**Drift:** <mismatches, or "None">
**Completed:** <bullet list from handoff>
**Current state:** <from handoff + drift observations>
**Data state:** <from handoff Data State section + PROJECT_STATE.md Data Accuracy table>
- Verified categories: <list>
- Failing categories: <list with issue summaries>
- Verification coverage: <X tests defined, Y have real values, Z are FILL_IN>
(If no database/data component, say "N/A — no database in this project")
**Open decisions:** <from handoff, or "None">
**Traps:** <from handoff, or "None">
**Files verified:** <each file, exists/missing/changed>
**Next steps:**
1. <from handoff>
2. ...
If the handoff is older than 3 days, add a warning line after the timestamp: "This handoff is stale. Git state and file contents may have diverged significantly."
The main conversation receives only this clean briefing.
Show the subagent's briefing under a ## Catchup Briefing header.
Priority callouts (show prominently if present):
Conditional Codex audit: If the handoff is older than 3 days, drift is detected, relevant files are missing, or verification coverage is weak, run a Codex stale-context check before implementation starts:
just codex_audit_handoff .claude/handoff.md
Treat the Codex result as a second opinion. Claude still owns the resume flow, but Codex should be used to challenge stale assumptions before code changes.
After presenting the briefing, ask the user to confirm before starting work:
Ready to start on [Next Step #1], or want to adjust the plan?
If data failures were flagged, suggest:
⚠️ There are failing data verification tests. Want to fix those first, or proceed with the planned next steps?
Once work begins, check for stale handoff files:
find .claude/ -name "handoff*.md" -mtime +7 2>/dev/null
If any files are older than 7 days, mention:
There are N handoff files older than 7 days. Want me to clean them up?
List the files with their ages and let the user decide. Do NOT auto-delete.
Also mention:
The current handoff file is still on disk. It'll be overwritten on the next
/handoff, or you can delete it manually.