Skills

Install

$ npx ai-agents-skills add --skill ship-branch
Behavioral v1.0

Ship Branch

Structured close-out for a completed development branch. Verifies tests, presents exactly four delivery options, executes the chosen one, and cleans up.

When to Use

  • Implementation on a feature/fix branch is complete
  • Ready to deliver or close out the work
  • After plan execution finishes

Don’t use for:

  • Mid-implementation work (use writing-plans or subagent-orchestration)
  • Ongoing branches not ready for delivery

Critical Patterns

✅ REQUIRED [CRITICAL]: Verify Before Any Delivery Action

Tests must pass before presenting delivery options. Never proceed with failing tests.

# ❌ WRONG — skip verification
Branch is done. Pushing to origin.

# ✅ CORRECT — verify first
Ran: npm test → 18/18 passed ✅
Ran: npm run build → dist/ created ✅
Ready to present delivery options.

✅ REQUIRED [CRITICAL]: Present Exactly Four Options

Always present these four options — no more, no fewer. Let the user decide.

Branch: feature/user-auth — 18/18 tests passing ✅

Delivery options:
1. Merge locally into main (no remote push)
2. Push branch + open PR
3. Keep branch as-is (do nothing)
4. Discard branch (delete all work)

✅ REQUIRED: Require Explicit “discard” Confirmation

Option 4 requires the user to type the word “discard” explicitly. Never delete work on a single confirmation click or ambiguous response.

# ❌ WRONG
User: "yeah go ahead"
Action: Deletes branch.

# ✅ CORRECT
"Type 'discard' to confirm deletion of all work on this branch."
User: "discard"
Action: Deletes branch.

✅ REQUIRED: Clean Up Worktree After Delivery

After merge or discard, remove the worktree directory if one was used.

# After merge or discard:
git worktree remove .worktrees/feature-user-auth
# Verify:
ls .worktrees/ → feature-user-auth no longer present ✅

Decision Tree

Implementation complete?
  → Run full verification (tests + build)
  → Verification fails?
      → Stop. Report failures. Do not proceed to delivery.

Verification passes?
  → Present exactly 4 options: merge local / push+PR / keep / discard

User chooses option 1 (merge local)?
  → git checkout main → git merge branch-name → verify merge clean

User chooses option 2 (push + PR)?
  → git push origin branch-name → open PR with summary of changes

User chooses option 3 (keep as-is)?
  → Do nothing. Confirm branch is preserved.

User chooses option 4 (discard)?
  → Require explicit "discard" typed → delete branch → clean up worktree

Worktree was used?
  → Remove worktree after option 1, 2, or 4.

Conventions

Delivery summary for PRs

When opening a PR (option 2), include:

  • What was implemented (1-3 bullets)
  • Tests added or modified
  • Any known limitations or follow-up items

Branch naming in options

Always show the actual branch name in the options presentation so the user knows exactly what’s being acted on.


Example

## Ship Branch: feature/password-reset

### Verification
Ran: npm test → 24/24 passed ✅
Ran: npm run lint → 0 errors ✅
Ran: npm run build → dist/ created ✅

### Delivery options
Branch: feature/password-reset

1. Merge locally into main
2. Push branch + open PR
3. Keep branch as-is
4. Discard branch (type "discard" to confirm)

---

[User selects option 2]

Pushed: git push origin feature/password-reset ✅
PR opened: "Add password reset flow" — 3 commits, 24 tests passing
Worktree removed: .worktrees/feature-password-reset ✅

Edge Cases

Merge conflicts on option 1: Stop. Report conflicting files. Do not auto-resolve. Ask user how to proceed.

PR already exists: Notify user. Offer to update the existing PR or open a new one.

No worktree used: Skip cleanup step. Only clean up what was created.

Tests flaky on first run: Re-run once. If still failing, report as failing — do not retry silently until green.

User types something other than “discard” for option 4: Treat as cancel. Return to options menu.