Skip to content
Back to skills

Method Clean Branches

ASecurity

Deletes local git branches whose upstream is gone, and their worktrees, after confirmation. Use when the user asks to clean or prune gone branches.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 17, 2026
datagobashgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 17, 2026

npx -y skills add sajor2000/methodsmith --skill method-clean-branches --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Method Clean Branches?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Method Clean Branches
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sajor2000-method-clean-branches/badge)](https://www.skillsdirectory.com/skills/sajor2000-method-clean-branches)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: method-clean-branches
description: "Deletes local git branches whose upstream is gone, and their worktrees, after confirmation. Use when the user asks to clean or prune gone branches."
---

# Clean Gone Branches

> **Script paths are anchored to this skill's directory.** Run each command below from the user's project (the agent's working directory) with `SKILL_DIR` set to the directory containing this `SKILL.md`; do not change into the skill directory, because the script inspects the current repository.


## Skill Value

- **Problem it solves:** Stale local branches and orphaned worktrees accumulate after PRs merge or remotes are pruned.
- **Use when:** The user asks to clean gone branches, prune local branches, or remove branches whose remotes no longer exist.
- **Output:** A confirmed branch/worktree cleanup summary.
- **Ask only if:** Before deleting anything, confirm the exact branches and worktrees to remove.
- **Do not do:** Do not delete unmerged or user-owned work without confirmation.
- **Interaction:** Check repo/config/chat evidence first. Ask one decision-changing question at a time; use the current harness's blocking question UI when available, otherwise present numbered choices and wait.

Delete local branches whose remote tracking branch has been deleted, including any associated worktrees.

## Workflow

### Step 1: Discover gone branches

Run the discovery script to fetch the latest remote state and identify gone branches:

```bash
SKILL_DIR="<absolute path of the directory containing this SKILL.md>";
bash "$SKILL_DIR/scripts/clean-gone"
```

`scripts/clean-gone`

The script runs `git fetch --prune` first, then parses `git branch -vv` for branches marked `: gone]`.

If the script outputs `__NONE__`, report that no stale branches were found and stop.

### Step 2: Inspect safety and present branches

For every candidate, inspect the associated worktree with `git status --short` and compare unique commits against the default branch with `git log <default>..<branch> --oneline`. A gone upstream only means the remote ref disappeared; it does not prove the work was merged or the worktree is clean.

Classify each branch:

- **Safe:** no dirty worktree and no commits unique to the branch.
- **Needs force approval:** dirty worktree, unique commits, or merge state cannot be established.

Show the classification and evidence before asking for deletion. Never combine safe and force-required branches behind one yes/no question.

### Step 3: Confirm safe cleanup

Show the user the list of branches that will be deleted. Format as a simple list:

```
These local branches have been deleted from the remote:

  - feature/old-thing
  - bugfix/resolved-issue
  - experiment/abandoned

Delete all of them? (y/n)
```

When this skill asks a user-facing question, follow the Skill Value interaction rule above.

This confirmation applies only to branches classified Safe.

### Step 4: Delete confirmed safe branches

If the user confirms, delete each branch. For each branch:

1. Check whether it has an associated worktree.
2. If the worktree is clean and is not the main repository root, remove it with `git worktree remove "$worktree_path"` without `--force`.
3. Delete the branch with `git branch -d "$branch"`.

If either non-force command refuses, stop for that branch and report why. Do not escalate automatically.

### Step 5: Optional force cleanup

For each branch classified Needs force approval, present the dirty paths and unique commits and request a separate explicit force confirmation naming that branch. Only after that confirmation may `git worktree remove --force` or `git branch -D` be used. A general "delete all" answer from Step 3 is not force approval.

Report results as you go:

```
Removed worktree: .worktrees/feature/old-thing
Deleted branch: feature/old-thing
Deleted branch: bugfix/resolved-issue
Deleted branch: experiment/abandoned

Cleaned up 3 branches.
```

If the user declines, acknowledge and stop without deleting anything.

Files in this skill

  • SKILL.md3.9 KB
  • scripts/clean-gone1.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.