ship — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ship (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 |
.claude/ship-state.json (repo-local): 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.gh pr view finds an open PR (and the tree is clean), stages 1–7 are N/A — the work is already pushed and under review. Run a quick behind-base check (git fetch origin <base> + git rev-list --count HEAD..origin/<base>) and report the result only — do NOT rebase here: rebasing an open PR re-triggers CI + a fresh review, so once a PR is under review, babysit owns the decision of when an update-with-base is worth a re-review cycle (Stage 2a's rebase logic applies to the pre-PR path only). Then go straight to Stage 8. The final summary must still list stages 1–7 as "N/A (PR pre-existing)" — never silently omit them.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. It applies quality cleanups to the working tree.
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 divergedgit 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). 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 project conventions forbid a tracked CHANGELOG, 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 CI 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./reflect.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.