catchup — resume from context.md, verify against reality
The handoff skill writes the session-end snapshot; this skill is the other
half: a fresh agent reads it, checks it against the actual state of the
repo, and briefs the user. The handoff was written in the past — treat it as
testimony, not truth.
1. Read the record
CLAUDE.md— the house rules and registry (usually auto-loaded; skim if not).context.md— read §0 top 3 entries fully; skim the rest of §0 and the stable sections (§1+) for anything the top entries reference.SPEC.md(if present) — only the acceptance criteria and open decisions, to know what "done" means and what's undecided.
If context.md is missing or has no §0 entry: say so plainly, and offer to
reconstruct a status from git log + the working tree (then recommend running
handoff at session end so this doesn't happen again).
2. Verify against reality (read, don't trust)
git status --short # uncommitted / untracked work
git log --oneline -8 # what actually landed
git branch --show-current # off main?
git stash list # parked work
git log origin/$(git branch --show-current)..HEAD --oneline 2>/dev/null # unpushed?
Compare with the newest §0 entry and flag drift explicitly:
- Uncommitted or untracked files the entry doesn't mention.
- Commits newer than the entry's date (someone/something worked after the handoff).
- Entry says "pushed" but the branch is ahead of origin (or origin unreachable).
- Stashes the entry doesn't mention.
- Anything in
Next:that appears to have already been done.
No drift is a finding too: "context.md matches the repo."
3. Brief the user (≤ ~15 lines, then stop)
**Where we are:** <1–2 sentences from the newest entry, in plain language>
**State:** <committed/pushed status; what was verified vs only assumed>
**Drift:** <mismatches found, or "context.md matches reality">
**Next (from handoff):** <the Next: list, updated for anything already done>
**Blocked on you:** <open questions / ⚠️ items awaiting the user, if any>
Suggested next action: <the single most sensible step>. Want me to start?
Rules
- Never start building from a catchup. The briefing ends with one proposed next action and a question — the user decides. (Exception: the user's message already contained a work instruction alongside "catchup"; then brief first, work second.)
- Don't re-verify claims marked verified in the entry by re-running the app — trust the record for those; spend your skepticism on git-visible drift.
- Keep the briefing honest about the assumed items — they're the likely landmines of this session.
- Read-only: catchup changes nothing, commits nothing, writes nothing.