codex/skills/split-and-ship/SKILL.md
Execute an approved split plan, shipping each change group separately as its own branch and PR or as sequential commits on the current branch. Use when the user asks to "split and ship", "ship the split plan", "create separate PRs", or "split changes into branches".
npx skillsauth add tobihagemann/turbo split-and-shipInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Ship an approved split plan so each change group becomes its own reviewable unit, either as a separate branch and PR or as a sequential commit on the current branch.
A split plan must exist in the conversation. The plan specifies an ordered list of groups, each with a name, file list, and any dependencies on earlier groups.
At the start, use update_plan to track each phase, restating any remaining steps of a parent workflow alongside them:
Detect the repository state:
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'gh pr view)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 request_user_input to choose how to ship the groups:
Recommend the option that fits this repo by listing it first and labeling it (Recommended): a PR-based history recommends separate branches and PRs; a direct-commit history recommends committing each group on the current branch.
If the user declines (chooses the free-form "Other" option or asks to abort), leave the changes staged and do not commit.
Take this step only when the user chose separate branches and PRs.
git reset)git stash --include-untracked) so files can be selectively restored per groupVerify git stash list shows the saved changes before proceeding.
Use update_plan to track each group, restating any remaining steps of a parent workflow alongside them. Process groups in order.
For each group:
request_user_input to confirm the proposed branch name and create it from the appropriate base:
git checkout stash -- <files> restores and stages in one operation). For files with hunks belonging to different groups, restore the file, then use apply_patch to remove the unwanted hunks before staging: for an independent group, remove every other group's hunks; for a stacked group, remove only later groups' hunks (earlier groups' hunks are already in its base). After committing, reset the working tree (git checkout -- .) to clean up before the next group.$commit-rules skill to load commit message rules, commit the staged changes following them, then git push$update-pr skill$create-pr skill targeting the appropriate base (default branch for independent groups, previous group's branch for stacked groups)Then call update_plan to mark this step completed and continue with the next step of the active workflow.
Take this step only when the user chose to commit each group. This path stays on the current branch and creates no branches or PRs.
git reset)git stash --include-untracked) so files can be selectively restored per groupVerify git stash list shows the saved changes before proceeding.
Run the $commit-rules skill to load commit message rules. Use update_plan to track each group, restating any remaining steps of a parent workflow alongside them. Process groups in order.
For each group:
git checkout stash -- <files> restores and stages in one operation). For files with hunks belonging to different groups, restore the file, then use apply_patch to remove the hunks that belong to later groups before staging.git checkout -- .) to clean up before the next group.git push)Then call update_plan to mark this step completed and continue with the next step of the active workflow.
$commit-rules skill before every commit; do not commit without loading it first..turbo/ content (filenames, requirement IDs, shell references, headings) in branch names. .turbo/ is gitignored, so these references would be opaque to anyone reading without local copies.development
Apply a UX lens to a user-facing change: whether it serves the user's real goal and whether the path through it holds together, using the Understanding, Bridging, and Flowing contexts. Use when scoping, planning, or assessing any change that affects what a user sees or does. Loaded as a lens during planning and assessment.
development
Apply a UX lens to a user-facing change: whether it serves the user's real goal and whether the path through it holds together, using the Understanding, Bridging, and Flowing contexts. Use when scoping, planning, or assessing any change that affects what a user sees or does. Loaded as a lens during planning and assessment.
development
Assess project-wide structural technical debt: complexity hotspots, deprecated API usage, duplication clusters, and architecture rot. Ranks findings by impact and refactor effort into a report at .turbo/technical-debt.md. Use when the user asks to "assess technical debt", "find technical debt", "review technical debt", "what should we refactor", "find refactoring candidates", "where is the code rot", or "what's our worst code". Analysis-only — does not modify code.
development
Run a multi-agent review of code comments and markdown documentation for unnecessary content, then fix the issues. Covers what-restating comments, name-mirroring doc comments, status-update prose, and other documentation noise. Use when the user asks to "simplify docs", "simplify documentation", "clean up comments", "clean up docs", "review documentation", "strip unnecessary comments", "reduce doc noise", or "run simplify-docs".