/skill:ship — Deliver Completed Work
Purpose: Move completed work through the repo's actual delivery flow. Runs checkpoint, creates a clean commit, pushes, creates a PR, and optionally runs release steps — all using the project's configured commands.
When to Use
- Repo has a configured delivery flow (
ship.config.md or CLAUDE.md Ship section)
- Work needs project-specific release steps beyond a standard PR
- You want a single command from completion through release
When NOT to Use
- No ship config exists — use
/skill:pr for the standard PR flow
- You only need the quality gate — use
/skill:checkpoint
- You want to be walked through integration options (merge vs PR vs discard) rather than the automated delivery flow — use superpowers:finishing-a-development-branch
- Work is mid-implementation — finish first
Pre-flight Required Config
Before proceeding, verify:
Check <project>/.claude/ship.config.md exists, OR check that <project>/CLAUDE.md has a ## Ship or ## Delivery section with build/test/ship commands.
If neither exists, halt:
This skill needs delivery commands for your project.
Set up interactively:
/skill:configure ship
Or copy the template and edit:
cp claude/ship/config.template.md <project>/.claude/ship.config.md
Verify build_command, test_command, and ship_command are present and non-placeholder.
If healthy, proceed silently.
Arguments
- (no argument) — run the full delivery flow
--skip-checkpoint — skip lint/build/test gate (use with care)
--draft — create a draft PR instead of a ready PR
Rubrics
This skill references:
_internal/repo-delivery — ship contract and guardrails
Workflow
Step 1: Confirm State
- Check current branch, staged changes, and working tree
- Verify we're not on the default branch (main/master)
- Show what will be shipped: files changed, commit count
Step 2: Checkpoint
Unless --skip-checkpoint:
- Run the project's build command
- Run the project's test command
- Run lint if configured
- Report PASS/FAIL per check
- Halt on failure — do not ship broken code
Step 2.5: Security Quick Check (when warranted)
Apply the security-quick-check rubric
(_internal/security-quick-check/SKILL.md) when the diff matches the
canonical trigger criteria defined there (sensitive functional
surfaces or sensitive paths). Skip criteria are also defined there;
do not restate them here.
Halt on findings; do not ship until resolved.
Step 3: Commit
- Create a clean commit with a message that reflects the actual changes
- Follow the project's commit conventions if defined in CLAUDE.md
Step 4: Push
- Push to the remote with upstream tracking
- Report the remote branch name
Step 5: Create PR
- Create a PR with a summary based on the commit(s)
- Use
--draft if requested
- Report the PR URL
Step 6: Release Steps (Optional)
If the project config defines tag_command, release_command, or deploy_command, offer to run them:
"Project has release steps configured. Run them? (tag / release / deploy)"
Only run with user confirmation.
CRITICAL: Do Not Guess
- Do NOT assume the package manager, branch name, or script names. Read from config.
- Do NOT auto-ship unrelated changes.
- Do NOT claim success without build/test passing.
- Do NOT run release steps without user confirmation.
- Do NOT push to main/master without explicit user instruction.
Contract
- Inputs: current working tree with uncommitted changes (or commits ahead of default). Optional release flags. Calls
/skill:checkpoint (mandatory) and _internal/security-quick-check (conditional, per its trigger criteria).
- Preconditions: CLAUDE.md
## Commands declares lint/build/test/default_branch/package_manager (per _internal/repo-delivery); remote configured; gh CLI authenticated when opening a PR.
- Outputs: clean commit, pushed branch, optionally a PR (delegated to
/skill:pr), optionally tag/release/deploy steps when configured and confirmed.
- Postconditions: code is on the remote on the user-confirmed branch; release steps run only after explicit confirmation.
- Failure modes:
/skill:checkpoint FAIL → halt. Security findings → halt until resolved. Push to main/master without explicit instruction → refuse. Never git push --force to a shared branch.
1---2name: ship-23description: Ship completed work through the repo's actual delivery flow: checkpoint, commit, push, PR, and release steps. Reads project-specific delivery commands from config.4---567# /skill:ship — Deliver Completed Work89**Purpose:** Move completed work through the repo's actual delivery flow. Runs checkpoint, creates a clean commit, pushes, creates a PR, and optionally runs release steps — all using the project's configured commands.1011## When to Use1213- Repo has a configured delivery flow (`ship.config.md` or `CLAUDE.md` Ship section)14- Work needs project-specific release steps beyond a standard PR15- You want a single command from completion through release1617## When NOT to Use1819- No ship config exists — use `/skill:pr` for the standard PR flow20- You only need the quality gate — use `/skill:checkpoint`21- You want to be walked through integration options (merge vs PR vs discard) rather than the automated delivery flow — use superpowers:finishing-a-development-branch22- Work is mid-implementation — finish first2324## Pre-flight Required Config2526Before proceeding, verify:27281. Check `<project>/.claude/ship.config.md` exists, OR check that `<project>/CLAUDE.md` has a `## Ship` or `## Delivery` section with build/test/ship commands.2930 If neither exists, halt:31 > This skill needs delivery commands for your project.32 >33 > Set up interactively:34 > ```35 > /skill:configure ship36 > ```37 >38 > Or copy the template and edit:39 > ```40 > cp claude/ship/config.template.md <project>/.claude/ship.config.md41 > ```42432. Verify `build_command`, `test_command`, and `ship_command` are present and non-placeholder.44453. If healthy, proceed silently.4647## Arguments4849- (no argument) — run the full delivery flow50- `--skip-checkpoint` — skip lint/build/test gate (use with care)51- `--draft` — create a draft PR instead of a ready PR5253## Rubrics5455This skill references:56- `_internal/repo-delivery` — ship contract and guardrails5758## Workflow5960### Step 1: Confirm State6162- Check current branch, staged changes, and working tree63- Verify we're not on the default branch (main/master)64- Show what will be shipped: files changed, commit count6566### Step 2: Checkpoint6768Unless `--skip-checkpoint`:69- Run the project's build command70- Run the project's test command71- Run lint if configured72- Report PASS/FAIL per check73- Halt on failure — do not ship broken code7475### Step 2.5: Security Quick Check (when warranted)7677Apply the **security-quick-check** rubric78(`_internal/security-quick-check/SKILL.md`) when the diff matches the79canonical trigger criteria defined there (sensitive functional80surfaces or sensitive paths). Skip criteria are also defined there;81do not restate them here.8283Halt on findings; do not ship until resolved.8485### Step 3: Commit8687- Create a clean commit with a message that reflects the actual changes88- Follow the project's commit conventions if defined in CLAUDE.md8990### Step 4: Push9192- Push to the remote with upstream tracking93- Report the remote branch name9495### Step 5: Create PR9697- Create a PR with a summary based on the commit(s)98- Use `--draft` if requested99- Report the PR URL100101### Step 6: Release Steps (Optional)102103If the project config defines `tag_command`, `release_command`, or `deploy_command`, offer to run them:104> "Project has release steps configured. Run them? (tag / release / deploy)"105106Only run with user confirmation.107108## CRITICAL: Do Not Guess109110- Do NOT assume the package manager, branch name, or script names. Read from config.111- Do NOT auto-ship unrelated changes.112- Do NOT claim success without build/test passing.113- Do NOT run release steps without user confirmation.114- Do NOT push to main/master without explicit user instruction.115116## Contract117118- **Inputs:** current working tree with uncommitted changes (or commits ahead of default). Optional release flags. Calls `/skill:checkpoint` (mandatory) and `_internal/security-quick-check` (conditional, per its trigger criteria).119- **Preconditions:** CLAUDE.md `## Commands` declares lint/build/test/default_branch/package_manager (per `_internal/repo-delivery`); remote configured; `gh` CLI authenticated when opening a PR.120- **Outputs:** clean commit, pushed branch, optionally a PR (delegated to `/skill:pr`), optionally tag/release/deploy steps when configured and confirmed.121- **Postconditions:** code is on the remote on the user-confirmed branch; release steps run only after explicit confirmation.122- **Failure modes:** `/skill:checkpoint` FAIL → halt. Security findings → halt until resolved. Push to main/master without explicit instruction → refuse. Never `git push --force` to a shared branch.