Output validation — if the project CLAUDE.md names an output-validation script, run it; mark N/A if the project has none
Build succeeds — if frontend changes, does next build / npm run build pass?
Tested manually — did we actually run the code and verify it works, or just write it?
No unrelated changes — diff is clean, no accidental files or side-effect edits
Commit messages are clear — do the commits tell the story of what happened?
Decision recorded — if this branch chose among real alternatives, abandoned a design on evidence, or set a cross-component convention, a docs/decisions/ record is in the diff (invoke /record-decision); mark N/A with "no decision record needed" if the worthiness test fails
Output format
## Achievement
<bullet summary>
## Ship verdict: <Ship it | Ship with caveats | Not yet>
<one-line reasoning>
## Significance: <Major | Minor | Trivial>
<one-line impact>
## Due diligence: X/10 passed
<checklist with evidence>
## Recommendation
<what to do next — push, fix something first, or keep working>
Rules
If tests fail or secrets are exposed, verdict is Not yet regardless of everything else.
If the work is incomplete (TODO comments, placeholder logic, half-implemented features), say so directly.
If you didn't actually run tests or build, mark those items SKIPPED — don't pretend.
Resolve the target: the branch name if the user named one, else the current branch.
1---2name: ship-check3description: Pre-push sanity check — what did we achieve, is it worth shipping, did we do enough QA4---56Run a **ship-check** on the current branch. Answer these four questions honestly, with evidence.78## 1. What exactly have we achieved?910- Resolve the default branch (`git symbolic-ref refs/remotes/origin/HEAD` or `git remote show origin`); call it BASE11- Run `git diff BASE...HEAD --stat` to see all changes12- Run `git log BASE..HEAD --oneline` to list all commits13- Summarize the work in 2-3 bullet points: what changed, what's new, what was fixed14- If there are uncommitted changes, flag them1516## 2. Is it worth pushing to main/master yet?1718Rate the work on a scale:1920| Rating | Meaning |21|--------|---------|22| **Ship it** | Complete, tested, improves the project |23| **Ship with caveats** | Functional but has known gaps — list them |24| **Not yet** | Incomplete, broken, or needs more work — say what's missing |2526Be honest. Half-finished features that break existing behavior = not yet.2728## 3. How significant is this piece of work?2930Classify:31- **Major**: new feature, breaking change, architectural shift, large refactor32- **Minor**: bug fix, small enhancement, config change, dependency update33- **Trivial**: formatting, typo, comment update3435Then one sentence on the real-world impact: does this affect users, performance, reliability, or developer experience?3637## 4. Due diligence checklist3839Check each item by actually verifying, not assuming. Mark `[x]` PASS or `[ ]` SKIPPED/FAIL with a reason.4041- [ ] **Tests pass** — run the test suite, report result42- [ ] **CI green** — if a PR or pushed branch exists, run `gh pr checks` (or the repo's CI status); a red required check forces **Not yet**43- [ ] **Linter clean** — run linter/formatter, report result44- [ ] **No secrets exposed** — grep changed files for `sk-`, `api_key=`, `password=`, `token=`, `secret=`, `ghp_`, `github_pat_`, `xoxb-`, `AKIA`, `npm_`, `-----BEGIN` (private keys)45- [ ] **Output validation** — if the project CLAUDE.md names an output-validation script, run it; mark N/A if the project has none46- [ ] **Build succeeds** — if frontend changes, does `next build` / `npm run build` pass?47- [ ] **Tested manually** — did we actually run the code and verify it works, or just write it?48- [ ] **No unrelated changes** — diff is clean, no accidental files or side-effect edits49- [ ] **Commit messages are clear** — do the commits tell the story of what happened?50- [ ] **Decision recorded** — if this branch chose among real alternatives, abandoned a design on evidence, or set a cross-component convention, a `docs/decisions/` record is in the diff (invoke `/record-decision`); mark N/A with "no decision record needed" if the worthiness test fails5152## Output format5354```55## Achievement56<bullet summary>5758## Ship verdict: <Ship it | Ship with caveats | Not yet>59<one-line reasoning>6061## Significance: <Major | Minor | Trivial>62<one-line impact>6364## Due diligence: X/10 passed65<checklist with evidence>6667## Recommendation68<what to do next — push, fix something first, or keep working>69```7071## Rules7273- If tests fail or secrets are exposed, verdict is **Not yet** regardless of everything else.74- If the work is incomplete (TODO comments, placeholder logic, half-implemented features), say so directly.75- If you didn't actually run tests or build, mark those items SKIPPED — don't pretend.7677---7879Resolve the target: the branch name if the user named one, else the current branch.
Run npx skillmds@latest add kitfunso/ship-check in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Pre-push sanity check — what did we achieve, is it worth shipping, did we do enough QA It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
kitfunso (@kitfunso) published this skill. Their other Agent Skills are listed on their SkillMD profile.