Commit and push the current work, open a ready PR, babysit it through CI and review, and admin-merge it once it's green and clean, then rotate the worktree to a fresh branch. Use when the user asks to ship, publish, or hand off local changes. Merging to main deploys beta automatically; production promotion is manual.
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
/ship means: get the requested work merged to main. That covers
committing, pushing, opening a ready PR, fixing CI and review feedback,
merging, and leaving the worktree ready for the next task. Don't stop at
"PR opened" or "CI green", and don't ask for approval of routine steps along
the way. The request to ship already authorized them.
In a dry run (see review-latest-feedback's "Dry run"), don't ship: no PR,
merge, or close-out.
gh api user --jq .login.Co-Authored-By, "codex", or agent labels to commits, branches, or PRs.git fetch origin --quiet
git status --short
git rev-list --count HEAD..origin/main/new-branch's naming. If HEAD is behind origin/main and has no
commits of its own, branch from fresh origin/main and carry the dirty
changes over. Otherwise branch at HEAD.origin/main (or from the PR's live
head when updating an existing PR), and carry only this task's changes.main is fine. Merge origin/main only when GitHub reports
CONFLICTING or a required check needs a fix that's already on main. Use
a normal merge, never a rebase.Run the focused checks for what changed (formatter, tests, typecheck, and the
guards pnpm guards selects). Batch every known fix into one push, because
each push restarts CI.
corepack pnpm ship:push -m "<subject naming the actual behavior change>"The helper refuses vague subjects. For an existing PR whose head isn't this
branch on origin, push to the verified head repo and ref instead (see
babysit-pr).
Open one ready (not draft) PR right after the first push, with a factual title and body: what changed, why, and how it was verified. Keep source checks, CI state, merge, and deployment as separate claims. Don't add unrelated comments, tags, assignees, or mentions.
Run /babysit-pr <number> in this same task. It's a step inside /ship, not
a handoff, so keep going until the merge. Every tick:
create_goal, or reuse one that covers this PR)
whose endpoint is "merged, in origin/main, worktree rotated", plus one
same-thread heartbeat (about every 5 minutes, backing off to 30 after three
unchanged wakes) so CI waits resume on their own. The heartbeat stays silent
unless something changed, and you delete it after the merge. In Claude Code,
keep working in the foreground.Merge when all of these have held on the unchanged head for 10 minutes:
MERGEABLE.REVIEW_REQUIRED alone doesn't block your own PR. Re-check the gate right
before merging, then:
gh pr merge <number> --squash --admin --match-head-commit <head-oid-you-just-checked>Write the checked OID into the transcript as ship_merge_head_oid before
running the merge. /new-branch's post-merge rotation uses it. If the head
changed, restart the 10 minutes. Never enable auto-merge.
If the user said to leave the PR open, or you only have permission to push to someone else's PR, stop at a green, review-clean, mergeable PR, and don't rotate.
origin/main contains the merge commit.Reports section, run /review-latest-feedback step
5 ("Close the loop") for exactly those threads. That step owns the reply
format, the skip rules, and the no-duplicate check. Never reply on threads
that aren't listed.origin/main (/new-branch), provided nothing is unpushed or dirty. Leave a
shared checkout's branch alone.~/.codex/worktrees) isn't rotated; it is left for
pnpm worktrees:prune --apply from the main checkout, which removes agent
worktrees that are clean, pushed or merged, idle, and not in use. Never
leave one dirty or unpushed on purpose.Merging to main publishes beta automatically
(deploy-beta-sites-prebuilt.yml), so "it'll be on beta shortly" is accurate
after a merge. Docs on main publish to production automatically. All other
production promotion is manual. Don't claim beta or production is live
without checking; use /ship-and-monitor when the user wants that proof.
Give the PR link, the merge commit, the checks run, the branch disposition, and anything left for a person, each in a line or two.
BuilderIO/agent-native
46ed84c
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.