WO
worktree-cleanup
>
Install
mkdir -p .claude/skills/worktree-cleanup && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16324" && unzip -o skill.zip -d .claude/skills/worktree-cleanup && rm skill.zipInstalls to .claude/skills/worktree-cleanup
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Enforce the correct order when removing a branch that's pinned by a git worktree: `git worktree remove --force <path>` THEN `git branch -D <branch>`. Trying to delete the branch first fails with `error: cannot delete branch X used by worktree at Y`. Trigger this skill when: - User says "remove branch", "delete branch", "cleanup worktree", "prune branches". - `gh pr merge --delete-branch` errors with `worktree` in the message. - `git branch -D` errors with `used by worktree`. - After merging a PR that has an associated worktree.533 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
About this skill
The rule
Sequence is ALWAYS:
git worktree remove --force <path> # step 1
git branch -D <branch> # step 2
If you skip step 1, step 2 fails. gh pr merge --delete-branch behaves like
step 2 — it also fails when a worktree pins the branch.
Behavior
- Detect the branch to clean up (from user's message or the PR).
- List worktrees touching the branch:
git worktree list --porcelain | grep -B2 "branch refs/heads/<branch>" - If a worktree exists at path
<path>:- Show it to the user.
- Run
git worktree remove --force <path>(the--forcehandles dirty state in the worktree; warn user if there are uncommitted changes). - THEN run
git branch -D <branch>.
- If no worktree exists for the branch:
- Just
git branch -D <branch>.
- Just
- Report what was removed.
Multiple worktrees on one branch
Impossible under git (each worktree pins its own unique branch). If detection
shows multiple, that's a stale entry — clean with git worktree prune first,
then retry.
Batch cleanup
If user asks "cleanup all merged branches with worktrees":
git branch --merged dev(ormain) for merged branches.- For each: check worktree via
git worktree list --porcelain. - Run sequence per branch.
- Report tally: N branches removed, M worktrees pruned.
Do not
- Never
git branch -Dbeforeworktree remove— always error, waste of round-trip. - Never
git worktree remove <path>without--forceunless the worktree is spotless — the flag is standard in Nimbus flow. - Never delete a branch with unmerged commits without warning the user + showing them the commits that would be lost.
- Never touch
main,dev,master— those are protected default branches.
Cross-repo cleanup
If user asks "cleanup old branches across all my repos", iterate:
for r in ~/Development/cidca/cidca-platform ~/Development/cidca/cidca-services \
~/Development/horus/horus-v2 ~/Development/zotea; do
cd "$r" && echo "=== $(basename $r) ===" && git branch --merged | grep -v -E "(main|dev|master|\*)"
done
Then present the list and let user choose which to remove.