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…
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\".
Claude Code
$ npx -y skills add tobihagemann/turbo --skill ship --agent claude-code
Codex
$ npx skills add tobihagemann/turbo --skill ship -a codex -y
Cursor
$ npx skills add tobihagemann/turbo --skill ship -a cursor -y
Gemini CLI
$ npx skills add tobihagemann/turbo --skill ship -a gemini-cli -y
GitHub Copilot
$ npx skills add tobihagemann/turbo --skill ship -a github-copilot -y
OpenCode
$ npx skills add tobihagemann/turbo --skill ship -a opencode -y
Windsurf
$ npx skills add tobihagemann/turbo --skill ship -a windsurf -y
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\"."
Commit, push, and optionally create or update a PR for the current staged changes.
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)
Detect the repository state:
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:
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.
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>`
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>`.
Run the `/commit-rules` skill to load commit message rules and technical constraints.
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.
If the chosen option updates the PR, run the `/pr` skill.
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`).
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.
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.
Reusable workflows for planning, building, reviewing, and shipping with Claude Code and Codex.
Audit the turbo skill lessons that /self-improve writes into this repo's .turbo/handoff/ from other projects, apply the ones the…
Apply findings by making the suggested code changes. Applies accepted verdicts, escalates ambiguous findings to the user, and…
Assess project-wide structural technical debt: complexity hotspots, deprecated API usage, duplication clusters, architecture rot,…
Shared changelog conventions and formatting rules referenced by /create-changelog and /update-changelog. Not typically invoked…
Enforce existence, reuse, mirror, and symmetry principles to keep new code minimal and consistent with surrounding code. Use when…
Run autonomous task execution using the codex CLI. Use when the user asks to \"codex exec\", \"run codex exec\", \"execute a task…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.