From Shipyard
Leave a clean, resumable state when PAUSING work mid-feature — the pause-endgame counterpart to `shipyard:ship-pr`'s ship-endgame. Use this skill whenever the user wants to "wrap up", "stop here", "leave it clean", "hand this off", "pick this up later", "save my place", "I'm done for now", "end the session", or otherwise stop work that isn't ready to ship. It captures what's done / in-progress / next / blocked, ensures a RESUMABLE git state (never leaves uncommitted work in a worktree, where it can be lost — commits a marked WIP or confirms a clean tree), scans for debug cruft introduced this session, confirms the standard startup path still works (via `shipyard:preflight`), and records the handoff in a DURABLE place that survives across machines/worktrees/sessions — a comment on the tracking issue (durable cross-session tracking belongs in the issue tracker, never a checked-in HANDOFF.md/PLAN.md), optionally a project memory for AI continuity. It never pushes, opens, or merges a PR (that's `shipyard:ship-pr` / a human call) and never checks in a plan file. Reach for `shipyard:ship-pr` instead when the work is actually ready to ship; reach for this when you're stopping partway.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shipyard:handoffThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The mirror image of `shipyard:ship-pr`. Ship-PR is for "I'm done — land it." Handoff is for
The mirror image of shipyard:ship-pr. Ship-PR is for "I'm done — land it." Handoff is for
"I'm stopping partway — leave it so the next session (me, a teammate, or a fresh agent)
resumes in seconds, not minutes." A session that ends in a messy, half-staged, undocumented
state taxes every session after it; this skill prevents that.
Learn the repo per ${CLAUDE_PLUGIN_ROOT}/reference/discover-project.md, focusing on
the issue tracker / PR tool (where the durable handoff goes), the build/test
commands (to record their state), and whether the project has a setup/preflight path
(to confirm startup still works).
shipyard:ship-pr.shipyard:preflight / shipyard:local-reset.Durable cross-session tracking goes in a tracking issue, never a checked-in
HANDOFF.md / PLAN.md / NOTES.md.
| Layer | Carries | Survives |
|---|---|---|
| Tracking issue comment (primary) | the prose state: done / next / blocked, branch, last SHA | across machines, worktrees, people |
| WIP commit (code) | the actual in-progress code | the branch (and any push) |
| Project memory (optional) | a one-line "feature X in progress" for AI continuity | future agent sessions |
Never write a handoff into a tracked file in the repo. If there's no issue yet and the work is worth resuming, create one first. (If the project has no issue tracker, record the handoff where its durable cross-session state lives, and say where.)
git rev-parse --abbrev-ref HEAD # branch (must be a feature branch, not the base)
git status --porcelain # working-tree state
gh issue list --state open --search "<feature>" 2>/dev/null # find the tracking issue
If on the base branch, stop — handoff is for feature work on a feature branch.
Write four short lists, grounded in what actually happened this session:
The next session must not discover breakage by surprise. Capture:
shipyard:preflight)? If not, that's
the top "blocked" item.State the truth: "build red — Foo.cs:42 CS8602" is a good handoff; "looks fine" is not.
A worktree can be pruned; uncommitted changes in it are not safe. End on one of two states, never a dirty tree:
Already clean (everything committed) — nothing to do.
Work in progress — make a marked WIP commit so nothing is lost:
git add -A
git commit -m "wip(<area>): <one-line current state> — see #<issue>"
Use a wip:-prefixed message so it's obviously not a finished commit (squash/amend when
work resumes). Don't fold in unrelated changes; surface them. Don't push unless the user asks.
Scan what you touched this session for leftovers that would mislead the next reader, and
remove (or explicitly flag) them: stray debug prints / console.log / debugger;
commented-out blocks left "just in case"; a focused/.only/skip left on a test; temp
files or scratch scripts outside the repo's tracked surfaces. A real // TODO you intend to
leave is fine — but put it in the Next list too, so it's tracked, not buried.
Post the state as a comment on the tracking issue:
gh issue comment <N> --body "$(cat <<'EOF'
## Handoff — <date> — branch `<branch>` @ `<short-sha>`
**Done**
- …
**In progress**
- …
**Next**
- … (start here)
**Blocked / unverified**
- … (build/tests/startup state)
EOF
)"
Optionally, write a one-line project memory so a future agent session recalls the
in-flight work without reading the issue: <feature> in progress on <branch> — next: <action>; see #<N>.
Give the user a four-line close-out:
Paused <feature> on `<branch>` @ `<sha>`. Build: <green/red>. Startup: <preflight ok?>.
Handoff → issue #<N> (comment). WIP commit: <sha or "none, tree clean">.
Next: <the single next action>.
Blocked: <red items, or "none">.
HANDOFF.md, PLAN.md, …). The durable record is
the issue comment.wip: or confirm clean. Lost uncommitted work
is the failure mode this skill exists to prevent.shipyard:ship-pr / a human call.npx claudepluginhub tracstarr/shipyard --plugin shipyardProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.