Skip to content
Development
Skill

/ship

Commit, push, and optionally create or update a PR for the current staged changes. Use when the user asks to \"ship\", \"ship it\", \"ship changes\", \"commit push and PR\", or \"ship this\".

From plugin
turbo
41775 skills

Claude Code

$ npx -y skills add tobihagemann/turbo --skill ship --agent claude-code

SKILL.md

ship.SKILL.md
name: ship
description: "Commit, push, and optionally create or update a PR for the current staged changes. Use when the user asks to \"ship\", \"ship it\", \"ship changes\", \"commit push and PR\", or \"ship this\"."

Ship

Commit, push, and optionally create or update a PR for the current staged changes.

Task Tracking

At the start, use `TaskCreate` to create a task for each phase:

1. Determine intent 2. Branch (if needed) 3. Stage unstaged changes 4. Run `/commit-rules` skill 5. Commit 6. Update PR (if requested) 7. Push (if requested) 8. Create PR (if requested) 9. Link changelog entries to the PR (if needed)

Step 1: Determine Intent

Detect the repository state:

  • Default branch: `gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'`
  • Current branch name, and whether it tracks an upstream
  • Whether an open PR exists for the current branch (`gh pr view --json state`); a closed or merged one counts as none

Sample the prevailing workflow from recent default-branch history (`git log --first-parent origin/<default-branch> -n 30 --pretty=%s`): judge whether changes mostly land through pull requests (merge-PR commits or `(#N)`-suffixed squash commits) or are committed directly to the default branch.

Output a one-line summary of the detected state as text. Then use `AskUserQuestion` to choose how to proceed, offering these options:

  • **Commit, push, and create/update the PR** — say "create a PR" when no open PR exists for the current branch and "update the PR" when one does; on the default branch, Step 2 creates a feature branch first
  • **Commit and push** — commit, then push to the current branch's remote
  • **Commit only** — commit the staged changes, do not push

Recommend the option that fits this repo by listing it first and labeling it `(Recommended)`: when the current branch already has an open PR, recommend updating it; otherwise follow the prevailing workflow — recommend the PR path for a PR-based history, or commit and push for a direct-commit history.

If the user declines (chooses the free-form "Other" option or asks to abort), leave the changes staged and do not commit.

Step 2: Branch (if Needed)

If the chosen option creates a PR and the current branch is the default branch:

1. Suggest a branch name based on the changes and use `AskUserQuestion` to confirm or adjust 2. Create and switch to the new branch: `git checkout -b <branch-name>`

Step 3: Check for Unstaged Changes

Run `git status` to check for unstaged changes. Stage by path the files that belong to the current changeset; this catches files modified by auto-formatters that were not re-staged. When one also carries unrelated changes, write `git diff <file>` to a patch file, back the unrelated changes out of it (delete their `+` lines and turn their `-` lines into context lines), and stage it with `git apply --cached --recount <patch>`.

Step 4: Run `/commit-rules` Skill

Run the `/commit-rules` skill to load commit message rules and technical constraints.

Step 5: Commit

Commit the already-staged changes (do not stage additional files) with a message following the loaded rules. Keep the branch Step 2 left in place and commit on it, including when that is the default branch.

If the commit fails due to a pre-commit hook (formatter, linter), fix the issues — or run the project's format/lint script to auto-fix — then **re-stage by path the files the hook modified** before retrying. Pre-commit hooks may modify files in the working tree without updating the staging area.

Step 6: Update PR (if Requested)

If the chosen option updates the PR, run the `/pr` skill.

Step 7: Push (if Requested)

If the chosen option includes pushing, push to the current branch's remote:

git push

For a branch with no upstream, push with `git push -u origin <branch>`. When git reports that it could not write the upstream branch configuration, confirm the push landed with `git rev-parse --verify --quiet refs/remotes/origin/<branch>`, then run `git branch --set-upstream-to=origin/<branch>` via the Bash tool (`dangerouslyDisableSandbox: true`).

Step 8: Create PR (if Requested)

If the chosen option creates a PR, run the `/pr` skill.

When `/pr` hands the body file over for editing instead of posting, report that path and that no PR was opened yet, and leave Step 9 pending until the PR is posted or cancelled.

Step 9: Link Changelog Entries to the PR (if Needed)

When Step 8 opened a PR, including one posted after the user edited its body, and this branch added Unreleased changelog entries that carry no PR reference while the changelog's earlier entries carry one, run the `/changelog-rules` skill and add to each of those entries the references it calls for with the new PR. Stage the changelog by path and commit it with a message following the commit rules Step 4 loaded, handling a pre-commit hook as Step 5 does, then push to the current branch's remote.

Then use the TaskList tool and proceed to any remaining task.

Rules

  • Run the `/commit-rules` skill before every commit; do not commit without loading it first.
  • Never stage or commit files containing secrets (`.env`, credentials, API keys). Warn if detected.
  • Don't reference `.turbo/` content (filenames, acceptance criteria, step numbers, headings) in branch names. `.turbo/` is gitignored, so these references would be opaque to anyone reading without local copies.
Read more
@tobihagemann
Ships withturbo

Reusable workflows for planning, building, reviewing, and shipping with Claude Code and Codex.

Stars on GitHub

Momentum

stars in total
417
Star history of tobihagemann/turbo on GitHub, a chart by star-history.com

Other skills on turbo.

apply-turbo-handoffs

apply-turbo-handoffs

Audit the turbo skill lessons that /self-improve writes into this repo's .turbo/handoff/ from other projects, apply the ones the…

@tobihagemann@tobihagemannInstall Skill
apply-findings

apply-findings

Apply findings by making the suggested code changes. Applies accepted verdicts, escalates ambiguous findings to the user, and…

@tobihagemann@tobihagemannInstall Skill
assess-technical-debt

assess-technical-debt

Assess project-wide structural technical debt: complexity hotspots, deprecated API usage, duplication clusters, architecture rot,…

@tobihagemann@tobihagemannInstall Skill
changelog-rules

changelog-rules

Shared changelog conventions and formatting rules referenced by /create-changelog and /update-changelog. Not typically invoked…

@tobihagemann@tobihagemannInstall Skill
code-style

code-style

Enforce existence, reuse, mirror, and symmetry principles to keep new code minimal and consistent with surrounding code. Use when…

@tobihagemann@tobihagemannInstall Skill
codex-exec

codex-exec

Run autonomous task execution using the codex CLI. Use when the user asks to \"codex exec\", \"run codex exec\", \"execute a task…

@tobihagemann@tobihagemannInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about ship.

Which coding agents can use ship?
ship installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.