| name | git-branches-cleanup |
| description | Delete local git branches whose remote tracking branch is gone or whose changes are already merged into the base branch. Use when the user asks to clean up branches, prune branches, delete stale branches, or /git-branches-cleanup. Also trigger on "tidy git branches", "remove old branches", "I'm done with these branches", "branch graveyard", or whenever the user complains about local branch clutter. Reports what will be deleted and asks before deleting anything. |
| tags | ["git"] |
| updated_at | "2026-06-04T00:00:00.000Z" |
Cleanup Branches
Prune locals = merged OR remote gone. Destructive -> preview + confirm.
Flow
- If user mentioned keep-patterns inline (e.g. "but keep
spike/*") -> capture them. Else assume none. Don't prompt up front.
- Parallel:
git fetch --all --prune
git branch --show-current
- Base: default
main. Fall back master. User names other -> use it.
- Candidates:
- Print grouped by reason (gone vs merged). Ask confirm.
- On confirm:
- Merged:
git branch -d <name>.
- Gone + unmerged:
git branch -D <name>. Explicit confirm only.
- Print summary: deleted + skipped (+ why).
Rules
- Always preview + confirm. Skip prompt only if user already said "yes delete" / "go ahead" same turn.
- Never delete current / base /
HEAD.
- Never
-D unmerged without explicit OK. Unsure -> list + let user decide.
- Never touch remote branches. Local only.
- Never
git reflog expire / gc --prune=now. Deleted stay recoverable via reflog.
- Empty candidate list -> say so + stop.
- User keep-patterns (
wip/*, spike/*) -> off-limits.