Installable skillMIT

Clean Worktrees

Remove stale or merged worktrees and reclaim disk space

BY eitatechUPDATED Oct 28, 2026
INTENDED FOR◈OpenClawInstall in a listed agent.

instructions.md

---
name: speckit-worktree-clean-c837db31727f
description: Remove stale or merged worktrees and reclaim disk space
compatibility: Requires spec-kit project structure with .specify/ directory
metadata:
  author: github-spec-kit
  source: worktree:commands/speckit.worktree.clean.md
---

# Clean Worktrees

Remove worktrees for branches that have been merged or are no longer needed. Safely cleans up `.worktrees/` directory entries and reclaims disk space.

## User Input

```text
$ARGUMENTS
```

You **MUST** consider the user input before proceeding (if not empty). The user may specify a branch name to clean (e.g., "005-api-gateway"), "merged" to clean all merged worktrees, or "all" to clean everything.

## Prerequisites

1. Verify a spec-kit project exists by checking for `.specify/` directory
2. Verify git is available and the project is a git repository
3. Verify `.worktrees/` directory exists and contains worktrees

## Outline

1. **Scan worktrees**: List all worktrees and classify them:
   - **Merged**: Branch has been merged into main/master — safe to remove
   - **Orphaned**: Branch has been deleted but worktree still exists — safe to remove
   - **Stale**: No commits for 30+ days, not merged — warn before removing
   - **Active**: Recent activity, not merged — refuse to remove unless forced

2. **Build cleanup plan**: Based on user input, determine what to remove:

   | User Input | Action |
   |-----------|--------|
   | Specific branch name | Remove that worktree only (with confirmation) |
   | `merged` | Remove all merged worktrees |
   | `stale` | Remove all stale worktrees (30+ days inactive) |
   | `all` | Remove all worktrees except main (with strong warning) |
   | No input | Remove merged and orphaned only (safest default) |

3. **Present cleanup plan**: Show a preview before making any changes:

   ```markdown
   # Worktree Cleanup Plan

   | # | Branch | Status | Action | Disk Size |
   |---|--------|--------|--------|-----------|
   | 1 | 005-api-gateway | ✅ Merged | Remove | ~45 MB |
   | 2 | 002-old-feature | ❌ Orphaned | Remove | ~32 MB |
   | 3 | 004-chat-system | 🟡 Idle | Keep (not merged) | ~41 MB |

   **Will remove**: 2 worktrees (~77 MB)
   **Will keep**: 1 worktree
   ```

4. **Confirm with user**: Ask for explicit confirmation before proceeding. Removing worktrees with uncommitted changes is destructive.

5. **Check for uncommitted changes**: Before removing each worktree:
   - Run `git -C .worktrees/{branch}/ status --porcelain` to check for uncommitted work
   - If uncommitted changes exist, **warn the user** and skip unless they confirm
   - List the uncommitted files so the user knows what would be lost

6. **Execute cleanup**: For each worktree to remove:
   - Run `git worktree remove .worktrees/{branch-name}` to safely remove
   - If the worktree is locked, run `git worktree unlock .worktrees/{branch-name}` first
   - Remove the entry from `.worktrees/` directory
   - Run `git worktree prune` after all removals to clean up stale references

7. **Report**: Output a summary:
   - How many worktrees were removed
   - How much disk space was reclaimed (approximate)
   - How many worktrees remain
   - Any worktrees that were skipped (with reason)

## Rules

- **Never remove without confirmation** — always show the plan first and wait for approval
- **Never remove the main working directory** — only clean feature worktrees in `.worktrees/`
- **Warn about uncommitted changes** — refuse to remove worktrees with uncommitted work unless user explicitly confirms
- **Safe defaults** — with no input, only remove merged and orphaned worktrees
- **Prune after cleanup** — always run `git worktree prune` to clean up stale administrative files
- **Never delete branches** — removing a worktree does not delete the git branch, only the working directory
COMPATIBILITY & REFERENCES

Platform guidance

Imported from the listed AgentSkill.sh category. Complete supplied package files and notices are retained. Required external tools and credentials are not installed. No bundled code was executed during import. Individual agent task behavior has not been tested.