From superpowers
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
How this skill is triggered — by the user, by Claude, or both
Slash command
/superpowers:finishing-a-development-branchThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guide completion of development work by presenting clear options and handling chosen workflow.
Guide completion of development work by presenting clear options and handling chosen workflow.
Core principle: Verify tests → Present options → Execute choice → Clean up.
Announce at start: "I'm using the finishing-a-development-branch skill to complete this work."
Before presenting options, verify tests pass:
# Run project's test suite
npm test / cargo test / pytest / go test ./...
If tests fail:
Tests failing (<N> failures). Must fix before completing:
[Show failures]
Cannot proceed with merge/PR until tests pass.
Stop. Don't proceed to Step 2.
If tests pass: Continue to Step 2.
# Try common base branches
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null
Or ask: "This branch split from main - is that correct?"
Use the AskUserQuestion tool to present exactly these 4 options as a single-select question:
<base-branch> on this machineKeep descriptions concise.
# Switch to base branch
git checkout <base-branch>
# Pull latest
git pull
# Merge feature branch
git merge <feature-branch>
# Verify tests on merged result
<test command>
# If tests pass
git branch -d <feature-branch>
Then: Cleanup worktree (Step 5)
# Push branch
git push -u origin <feature-branch>
# Create PR
gh pr create --title "<title>" --body "$(cat <<'EOF'
## Summary
<2-3 bullets of what changed>
## Test Plan
- [ ] <verification steps>
EOF
)"
Then: Cleanup worktree (Step 5)
Report: "Keeping branch . Worktree preserved at ."
Don't cleanup worktree.
Confirm first:
This will permanently delete:
- Branch <name>
- All commits: <commit-list>
- Worktree at <path>
Type 'discard' to confirm.
Wait for exact confirmation.
If confirmed:
git checkout <base-branch>
git branch -D <feature-branch>
Then: Cleanup worktree (Step 5)
For Options 1, 2, 4:
CRITICAL SAFETY CHECK - Must happen BEFORE removing worktree:
# Detect if we're currently in a worktree
current_dir=$(pwd)
worktree_path=$(git worktree list | grep $(git branch --show-current) | awk '{print $1}')
# If we're IN the worktree we want to remove, MUST switch out first
if [ "$current_dir" = "$worktree_path" ] || [[ "$current_dir" == "$worktree_path"/* ]]; then
echo "Currently in worktree - switching to main repository first"
# Get main repository path (first worktree in list)
main_repo=$(git worktree list | head -1 | awk '{print $1}')
# Switch to main repo
cd "$main_repo"
# CRITICAL: Tell user session needs to be restarted in main repo
echo "⚠️ IMPORTANT: You need to restart Claude Code in the main repository."
echo "Main repo path: $main_repo"
echo "After restarting, I can remove the worktree at: $worktree_path"
exit 0
fi
# Only reach here if we're NOT in the worktree
# Safe to remove now
git worktree remove <worktree-path>
For Option 3: Keep worktree.
Why this matters:
| Option | Merge | Push | Keep Worktree | Cleanup Branch |
|---|---|---|---|---|
| 1. Merge locally | ✓ | - | - | ✓ |
| 2. Create PR | - | ✓ | ✓ | - |
| 3. Keep as-is | - | - | ✓ | - |
| 4. Discard | - | - | - | ✓ (force) |
Skipping test verification
Open-ended questions
Automatic worktree cleanup
Removing worktree while inside it
No confirmation for discard
Never:
Always:
Called by:
Pairs with:
npx claudepluginhub dkmaker/my-claude-plugins --plugin superpowersGuides completion of development work by verifying tests and presenting structured options for merging, creating a PR, or cleaning up the branch.
Guides finishing development branches: verifies tests pass, presents options for local merge, GitHub PR creation, keep as-is, or discard, executes git/gh commands, and cleans up worktrees.
Verifies tests pass on completed feature branch, presents options to merge locally, create GitHub PR, keep as-is or discard; executes choice and cleans up worktree.