From ship-kit
Take a finished change from working tree to a green, mergeable PR by chaining simplify → verify → code-review → smart-commit → branch hygiene → PR → babysit → reflect. Use when the user says "ship", "ship it", "ship this", or wants the full clean→verify→review→commit→PR→green pipeline in one command. Default stops at approved + CI green + mergeable; does NOT merge unless --merge.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ship-kit:ship [--fast] [--merge] [--effort low|medium|high] [--no-verify][--fast] [--merge] [--effort low|medium|high] [--no-verify]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Orchestrate the existing skills in order. **Invoke each stage via the Skill tool — never re-implement a stage's logic inline.** This skill only owns sequencing, gates, state, and the final report.
Orchestrate the existing skills in order. Invoke each stage via the Skill tool — never re-implement a stage's logic inline. This skill only owns sequencing, gates, state, and the final report.
| Flag | Effect |
|---|---|
--fast | Skip Stage 1 (simplify) and Stage 3 (code-review) — for tiny changes |
--merge | Squash-merge once green (default: stop at green, human merges) |
--effort low|medium|high | Pass through to code-review (default: medium) |
--no-verify | Skip Stage 2b (runtime verify) — docs/config-only changes. The Stage 2a rebase check still runs |
/ship — regardless of whether the work is already committed or a PR is already open. --fast is the only way to skip them. "The change being shipped" = uncommitted working-tree edits plus any already-committed-but-unmerged work (git diff <base>...HEAD), not just what's currently uncommitted — so your code gets simplified and reviewed even after you've committed or opened the PR. Any fixes they produce are committed (Stage 4) and pushed (Stage 7) like any other work..claude/ship-state.json (repo-local, like /release's): write {branch, head_sha, flags, completed_stages: []} after each stage; on invocation, if it exists and branch matches the current branch, offer to resume from the next stage; delete it on success.git status + git log @{u}.. 2>/dev/null + gh pr view --json url,state 2>/dev/null. If the tree is clean, nothing is unpushed, AND no open PR exists for this branch → say "nothing to ship" and stop.git diff origin/<base>...HEAD), not just the working tree — regardless of the PR's current approval state. If they produce fixes, commit (Stage 4) and continue; if they produce nothing, say so and continue.--merge) is the user's last chance to decline burning the green.--merge authorizes it as usual. Stage 7 is just git push — no PR creation.main/master with uncommitted work, create a working branch NOW (git checkout -b wip/ship-<short-desc>) before any stage mutates files. The final name is fixed in Stage 5 — don't bikeshed it here.sc worktree status --json (target_branch); otherwise use the repo default. Record it for Stage 7. (The fast-path needs this too — resolve it before the behind-base check.)Invoke the simplify skill on the full change being shipped (see Always simplify + review in Cross-cutting rules — working-tree edits plus already-committed-but-unmerged work, git diff <base>...HEAD, not just uncommitted). It applies quality cleanups to those files; if the change was already fully committed, its edits land in the working tree and are picked up by Stage 4.
2a. Rebase check (runs even with --no-verify): verification against a stale base is worthless, so first check whether the branch should rebase onto the Stage 0 base branch:
git fetch origin <base>
git rev-list --count HEAD..origin/<base> # commits we're behind
git diff --name-only HEAD...origin/<base> # files base changed since we diverged
git diff --name-only <merge-base> HEAD + working-tree changes) → rebase now (git stash if dirty → git rebase origin/<base> → git stash pop). Overlap means the verify result would be a lie without it.2b. Verify: invoke the verify skill: run the app/tests and observe the change actually working (post-rebase, if one happened).
Gate: if verification fails → STOP. Report exactly what failed and why the pipeline halted. Do not continue to review or commit broken work.
Invoke the code-review skill with --fix at the requested effort (default medium), reviewing the full change being shipped (the diff vs base, per Always simplify + review in Cross-cutting rules) — so already-committed code is reviewed too, not just uncommitted edits.
If it applied fixes AND Stage 2 ran: re-run the cheap verification (tests, not the full app walk) so review fixes are never committed unverified. Same gate as Stage 2.
Invoke the smart-commit skill to cluster and commit with conventional messages.
Honor project CLAUDE.md: where a tracked CHANGELOG is forbidden, tell smart-commit to skip its changelog step.
The branch must match <type>/<kebab-slug> where <type> ∈ {feat, fix, docs, chore, refactor, test, perf} — derive it from the dominant conventional-commit type of the commits being shipped; slug = short kebab-case summary of the change.
git branch -m <type>/<slug> BEFORE pushing.git push origin :<old-name>).Present a compact summary: stages run (and skipped, with flags), verification evidence, review findings fixed, commit list, final branch name, drafted PR title + body.
Ask once (AskUserQuestion): proceed to push + open PR? This is the only outward-facing gate. Authorization rules:
--merge on the invocation is standing authorization for all outward-facing steps (push, PR, merge) — do not re-ask at the checkpoint. The user opted into hands-off end-to-end by passing it.--merge and with new work to push: the checkpoint question is mandatory. If running non-interactively (under /loop, headless), stop here and report "staged and waiting" rather than guessing.git push -u origin <branch>.gh pr create against the Stage 0 base branch. Body: what changed, why, how it was verified (cite the Stage 2 evidence). PR title must be conventional-format (some repos gate on it with a pr-title check). End the body with the standard Claude Code attribution footer.Run babysit under the loop skill so it self-paces until the goal: invoke the loop skill with args /babysit <PR#> [owner/repo] (the Stage 6 checkpoint already authorized hands-off continuation — don't ask again). Babysit defines the goal (fresh APPROVED + all CI green + mergeable) and ends the loop itself when it's met; each pass verifies every review finding before fixing, pushes back with evidence on false positives, and replies on every thread.
If the user wants a single status pass instead of the full loop, invoke babysit directly once.
gh pr merge <PR#> --squash --delete-branch once green, then report the merge..claude/ship-state.json.Invoke the reflect skill as the very last action, after the end-state report — so every ship ends by capturing what the session taught (gotchas, new patterns, integration quirks) into the knowledge base.
Reflect is safe to run on every ship: it self-gates (scans the session and early-exits with "No new knowledge" when the work was routine) and never auto-applies — it proposes, then waits for a plain chat ok/ko before writing anything. Under --merge or headless//loop runs it will still only surface suggestions and wait; it never mutates knowledge files without approval, so there's nothing to gate.
Provides 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.
npx claudepluginhub nsollazzo/ship-kit --plugin ship-kit