Pickup
Resume the newest handoff in an isolated worktree, then load its context. Reuse the documented worktree/branch if it still exists; create a new one only when none is documented or it's gone. Orchestrates branch and session-resume — do not reimplement their internals.
Requires
branchandsession-resumefrom this collection (optionally/pm, see step 1 tip). Install alongside this skill.
Steps
Find the handoff. Use
session-resume's discovery (sharedhandoffs/dir, then legacy in-tree dirs). Prefer newest intentionalpause-*.md; fall back to a mechanicalauto-*.mdonly if none exists. Path arg → use it. Date/topic/slug arg → filter by it. No arg → newest intentional handoff. Multiple matches → list the 5 most recent and ask. None → say so, stop. Read the file. Tip: run/pmfirst for a picture of all in-flight lanes.WIP/worktree safety first. Run
git worktree listand read the shared journal ($(bash ~/.claude/coordination/resolve-coord-dir.sh)/journal.md; the in-treedocs/worktree-journal.mdis only a tombstone pointer). If another session has uncommitted WIP or an overlapping active worktree, surface it and pause. Never branch on top of another session's WIP.Resume-or-create. Check the handoff + journal for a documented branch/worktree (
Branch:/Worktree:line,## Parkedentry, or an "Active" journal entry):- Worktree present →
cdin, verifygit status/git branch, resume. No new branch. - Branch exists, worktree gone (parked on
origin/<branch>or local-only) → re-add:git worktree add ../<repo>-<slug> <branch>(or/branch <slug> --reuse). Resume on the existing branch. - Nothing documented, or both gone (shipped & pruned, or the handoff describes new work) → go to step 4.
Unsure which applies → state findings and ask.
- Worktree present →
(New work only) Create the worktree. Derive a slug — prefer an arg, else propose one from the handoff's "next" work (kebab-case,
^[a-z][a-z0-9-]*$; confirm if ambiguous). Invokebranchwith it — it owns the path convention, journal entry, and base (defaultmain). Don't hand-rollgit worktree add.Project setup, if the repo needs it (fresh/re-added worktree only). Fresh worktrees have no deps/secrets — check CLAUDE.md/the handoff for the convention (e.g. symlink
node_modules, copy.env/.dev.vars). Skip if not needed.Load the context. Summarize done / what's-next / first action. Rebuild TodoWrite from any unchecked
## Checklist/## Instructionsitems, mirror todocs/summaries/CHECKLIST.mdin the worktree. Heartbeat:/branch update --working-on "<next task>".Confirm before working. Present the first concrete next step and ask before proceeding — honor any design gate or
/branch-before-code rule the handoff carries.
Quick reference
| Invocation | Behavior |
|---|---|
/pickup |
Newest handoff → resume its worktree if documented, else new |
/pickup <slug> |
Same; slug used only when creating a NEW worktree |
/pickup 2026-06-14 / /pickup budget |
Filter handoffs by date/topic |
/pickup docs/summaries/handoff-….md |
Use that exact handoff |
Resume-or-create at a glance
| Handoff documents… | On disk | Action |
|---|---|---|
| active worktree | present | cd in, resume — no new branch |
| branch (parked/origin/local) | worktree gone | re-add worktree for it |
| nothing, or shipped+pruned | gone | create a fresh branch |
Common mistakes
- New branch when one exists — a pause handoff usually names in-flight work to resume; fork only for shipped-and-pruned handoffs with genuinely new work.
- Skipping the WIP check (step 2) — cross-session WIP causes Frankenstein commits.
- Reimplementing
branch/session-resume— call them; this skill only sequences them. - Auto-starting the work — honor any design-gate/sign-off the handoff requires.
- Hardcoding deps setup — node_modules/.env is project-specific; only do step 5 when needed.