About ship
ship is a workflow skill for validating, committing, and pushing code changes. It runs code and sensitive-data checks before committing by default, then groups changes into commits and verifies the push.
Key features
- 01Pre-commit code validation
- 02Sensitive-data scan of diffs
- 03Group changes into atomic commits
- 04Push and verify branch status
- 05Optional fast mode with restrictions
Use cases
- 01Run checks before committing code
- 02Separate unrelated changes into commits
- 03Push a branch and confirm its status
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ helderberto/ agent-skills --skill shipAfter installing, type/shipin Claude Code to confirm it loaded.
Details
From the project READMEShip Changes
Ship runs a pre-launch gate before committing. By default: validate-code + safe-repo. The gate ensures nothing broken or unsafe leaves the working tree.
Arguments
--fast— skip the pre-launch gate. Only for hotfixes, disposable branches (spike/prototype/CI), or when the gate already passed manually this session. Never on main/release. State the reason in the commit body.
Workflow
Phase 1 — Pre-launch gate (skipped if --fast)
- Validate code: invoke the validate-code skill. Auto-fixes formatting, verifies types, runs tests.
- If
validate-codereturns FAIL → report errors, STOP. Do not commit or push.
- If
- Sensitive data scan: invoke the safe-repo skill against the staged + unstaged diff only (not the whole repo).
- If sensitive data found → report findings, STOP. Do not commit or push.
Phase 2 — Commit
- Review all changes from status and diff
- Analyze recent commit style from log
- Group changed files by logical concern using commit grouping rules
- For each group: stage specific files by name, commit with HEREDOC format
- If all changes form one logical unit, stage files by name (never
git add -Aorgit add .)
Phase 3 — Push
- Push:
git push(current branch) - Run
git statusafter to verify
Rules
- Pre-launch gate runs by default; only skip via
--fastwith a stated reason; never--faston main/release branches - Group changes into atomic commits when they serve distinct purposes
- NEVER force push (
-for--force)
Error Handling
- If
git pushis rejected (non-fast-forward) → rungit pull --rebasethen retry push once - If pre-commit hook fails → fix reported issues, re-stage, create a NEW commit (never
--amend) - If
--fastis used → log "Pre-launch gate skipped via --fast" in agent output for traceability
Comments
Markdown supported