Worktree Cleanup Command banner
michael-harris michael-harris

Worktree Cleanup Command

Development community intermediate

Description

**Debug/Expert Command** - Manually clean up development track worktrees. > **Note:** This command is rarely needed. Worktrees are cleaned up automatically after `/devteam:implement` merges all tracks

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

Repository README

This is the README for michael-harris/devteam, shared by 20 entries in this directory. It describes the repository, not this entry specifically.

Worktree Cleanup Command

**Debug/Expert Command** - Manually clean up development track worktrees.

**Note:** This command is rarely needed. Worktrees are cleaned up automatically after `/devteam:implement` merges all tracks. Use this only if automatic cleanup failed or you need manual control.

Command Usage

/devteam:worktree cleanup            # Clean up all worktrees
/devteam:worktree cleanup 01         # Clean up specific track
/devteam:worktree cleanup --all      # Clean up worktrees AND delete branches

Warning

This command is destructive. Use with caution.

Your Process

Step 1: Load State and Validate

  1. Load state from SQLite database (.devteam/devteam.db) via source scripts/state.sh
  2. Verify worktree mode enabled
  3. If specific track, verify track exists
  4. Check if tracks are complete (warning if not)

Step 2: Safety Checks

For each worktree to be removed:

cd "$worktree_path"

# Check for uncommitted changes
if [ -n "$(git status --porcelain)" ]; then
    echo "❌ ERROR: Uncommitted changes in $worktree_path"
    echo "  Please commit or stash changes first"
    exit 1
fi

# Check if pushed to remote
if git status | grep "Your branch is ahead"; then
    echo "⚠️  WARNING: Unpushed commits in $worktree_path"
    echo "  Recommend pushing before cleanup"
    read -p "Continue anyway? (y/N): " confirm
    if [ "$confirm" != "y" ]; then
        exit 1
    fi
fi

Step 3: Remove Worktrees

For each worktree:

cd "$MAIN_REPO"

echo "Removing worktree: $worktree_path"
git worktree remove "$worktree_path"

if [ $? -eq 0 ]; then
    echo "✓ Removed: $worktree_path"
else
    echo "❌ Failed to remove: $worktree_path"
    echo "  Try: git worktree remove --force $worktree_path"
fi

Step 4: Remove Empty Directory

if [ -d ".multi-agent" ] && [ -z "$(ls -A .multi-agent)" ]; then
    rmdir .multi-agent
    echo "✓ Removed empty .multi-agent/ directory"
fi

Step 5: Optionally Delete Branches

If `--all` flag:

for track in tracks:
    branch = "dev-track-${track:02d}"

    # Safety: verify branch is merged
    if git branch --merged | grep -q "$branch"; then
        git branch -d "$branch"
        echo "✓ Deleted branch: $branch"
    else
        echo "⚠️  Branch $branch not fully merged - keeping for safety"
        echo "  To force delete: git branch -D $branch"
    fi
done

Step 6: Update State in SQLite

# Update state in SQLite database (.devteam/devteam.db)
source scripts/state.sh

set_kv_state "cleanup_info.cleaned_at" "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
set_kv_state "cleanup_info.worktrees_removed" "1,2,3"
set_kv_state "cleanup_info.branches_deleted" "true"  # or "false"

Output Format

**Success:**

═══════════════════════════════════════════
 Worktree Cleanup
═══════════════════════════════════════════

Cleaning up worktrees for all tracks...

Track 1:
  ✓ Verified no uncommitted changes
  ⚠️  Warning: 3 unpushed c