git-worktrees

star 211

Create isolated git workspaces for feature development. Smart directory selection, safety verification, and cross-platform support (Windows/Unix).

xenitV1 By xenitV1 schedule Updated 1/24/2026

name: git-worktrees description: Create isolated git workspaces for feature development. Smart directory selection, safety verification, and cross-platform support (Windows/Unix). allowed-tools: Read, Write, Edit, Glob, Grep, Bash

# ๐ŸŒณ GIT WORKTREES: ISOLATED WORKSPACES > **Philosophy:** Isolation prevents contamination. Work on features without affecting the main workspace. Systematic directory selection + safety verification = reliable isolation. **ISOLATION INTEGRITY MANDATE (CRITICAL):** Never create worktrees in directories that are not explicitly ignored by Git. AI-generated workflows often fail by polluting the primary repository with tracked worktree data. You MUST verify that the destination directory is within `.gitignore` before execution. Furthermore, you MUST ensure a 'Clean Baseline' by running tests before starting any feature work in a new worktree to avoid cross-contamination of artifacts. --- ## ๐ŸŽฏ OVERVIEW Git worktrees create isolated workspaces sharing the same repository, allowing work on multiple branches simultaneously without switching. **Benefits:** - Work on feature branch without stashing changes - Test in isolation without affecting main workspace - Run long processes without blocking other work - Easy cleanup when feature is complete

๐Ÿ“‹ WHEN TO USE

Use before:

  • Starting new feature development
  • Implementing plans from @planning-mastery
  • Making experimental changes
  • Working on multiple features in parallel Skip for:
  • Quick bug fixes on current branch
  • Documentation updates
  • Configuration changes

๐Ÿ“ DIRECTORY SELECTION PROCESS

Follow this priority order:

1. Check Existing Directories

Unix/macOS:

ls -d .worktrees 2>/dev/null     # Preferred (hidden)
ls -d worktrees 2>/dev/null      # Alternative

Windows (PowerShell):

if (Test-Path ".worktrees") { ".worktrees" }
elseif (Test-Path "worktrees") { "worktrees" }

If found: Use that directory. If both exist, .worktrees wins.

2. Check CLAUDE.md

grep -i "worktree.*director" CLAUDE.md 2>/dev/null

If preference specified: Use it without asking.

3. Ask User

If no directory exists and no CLAUDE.md preference:

No worktree directory found. Where should I create worktrees?
1. .worktrees/ (project-local, hidden)
2. %USERPROFILE%\.config\maestro\worktrees\<project>\ (global location)
Which would you prefer?
## ๐Ÿ”’ SAFETY VERIFICATION ### For Project-Local Directories **MUST verify directory is ignored before creating worktree:** **Unix/macOS:** ```bash git check-ignore -q .worktrees 2>/dev/null || git check-ignore -q worktrees 2>/dev/null ``` **Windows (PowerShell):** ```powershell git check-ignore -q .worktrees 2>$null if ($LASTEXITCODE -ne 0) { git check-ignore -q worktrees 2>$null } ``` **If NOT ignored:** 1. Add appropriate line to .gitignore 2. Commit the change 3. Proceed with worktree creation **Why critical:** Prevents accidentally committing worktree contents to repository. ### For Global Directory No .gitignore verification needed - outside project entirely. ## ๐Ÿ”จ CREATION STEPS ### 1. Detect Project Name **Unix/macOS:** ```bash project=$(basename "$(git rev-parse --show-toplevel)") ``` **Windows (PowerShell):** ```powershell $project = Split-Path -Leaf (git rev-parse --show-toplevel) ``` ### 2. Create Worktree **Unix/macOS:** ```bash # Project-local path=".worktrees/$BRANCH_NAME" git worktree add "$path" -b "$BRANCH_NAME" cd "$path" # Or global path="$HOME/.config/maestro/worktrees/$project/$BRANCH_NAME" mkdir -p "$(dirname "$path")" git worktree add "$path" -b "$BRANCH_NAME" cd "$path" ``` **Windows (PowerShell):** ```powershell # Project-local $path = ".worktrees\$BRANCH_NAME" git worktree add $path -b $BRANCH_NAME Set-Location $path # Or global $path = "$env:USERPROFILE\.config\maestro\worktrees\$project\$BRANCH_NAME" New-Item -ItemType Directory -Force -Path (Split-Path $path) git worktree add $path -b $BRANCH_NAME Set-Location $path ``` ### 3. Run Project Setup Auto-detect and run appropriate setup: **Cross-platform:** ```bash # Node.js if [ -f package.json ]; then npm install; fi # Python if [ -f requirements.txt ]; then pip install -r requirements.txt; fi if [ -f pyproject.toml ]; then poetry install; fi # Rust if [ -f Cargo.toml ]; then cargo build; fi # Go if [ -f go.mod ]; then go mod download; fi ```

Windows (PowerShell):

# Node.js
if (Test-Path "package.json") { npm install }

# Python
if (Test-Path "requirements.txt") { pip install -r requirements.txt }
if (Test-Path "pyproject.toml") { poetry install }

# Rust
if (Test-Path "Cargo.toml") { cargo build }

# Go
if (Test-Path "go.mod") { go mod download }

4. Verify Clean Baseline

Run tests to ensure worktree starts clean:

# Use project-appropriate command
npm test
pytest
cargo test
go test ./...

If tests fail: Report failures, ask whether to proceed or investigate. If tests pass: Report ready.

5. Report Location

Worktree ready at <full-path>
Tests passing (<N> tests, 0 failures)
Ready to implement <feature-name>
## ๐Ÿ“Š QUICK REFERENCE | Situation | Action | |-----------|--------| | `.worktrees/` exists | Use it (verify ignored) | | `worktrees/` exists | Use it (verify ignored) | | Both exist | Use `.worktrees/` | | Neither exists | Check CLAUDE.md โ†’ Ask user | | Directory not ignored | Add to .gitignore + commit | | Tests fail during baseline | Report failures + ask | | No package.json/Cargo.toml | Skip dependency install | --- ## ๐Ÿงน CLEANUP When feature work is complete: **List worktrees:** ```bash git worktree list ``` **Remove worktree:** ```bash git worktree remove .worktrees/feature-name # or force if uncommitted changes git worktree remove --force .worktrees/feature-name ``` **Prune stale entries:** ```bash git worktree prune ``` --- ## ๐Ÿšซ COMMON MISTAKES

Skipping ignore verification

  • Problem: Worktree contents get tracked, pollute git status
    • Fix: Always use git check-ignore before creating project-local worktree

Assuming directory location

  • Problem: Creates inconsistency, violates project conventions
    • Fix: Follow priority: existing > CLAUDE.md > ask

Proceeding with failing tests

  • Problem: Can't distinguish new bugs from pre-existing issues
    • Fix: Report failures, get explicit permission to proceed

Hardcoding setup commands

  • Problem: Breaks on projects using different tools
    • Fix: Auto-detect from project files (package.json, etc.)

Forgetting to cleanup

  • Problem: Disk space consumed, stale branches accumulate
    • Fix: Remove worktree when feature is merged

๐Ÿ“ EXAMPLE WORKFLOW

You: I'm using the git-worktrees skill to set up an isolated workspace.
[Check .worktrees/ - exists]
[Verify ignored - git check-ignore confirms .worktrees/ is ignored]
[Create worktree: git worktree add .worktrees/auth -b feature/auth]
[Run npm install]
[Run npm test - 47 passing]
Worktree ready at C:\Users\Dev\myproject\.worktrees\auth
Tests passing (47 tests, 0 failures)
Ready to implement auth feature

๐Ÿšจ RED FLAGS

Never:

  • Create worktree without verifying it's ignored (project-local)
  • Skip baseline test verification
  • Proceed with failing tests without asking
  • Assume directory location when ambiguous
  • Skip CLAUDE.md check Always:
  • Follow directory priority: existing > CLAUDE.md > ask
  • Verify directory is ignored for project-local
  • Auto-detect and run project setup
  • Verify clean test baseline
  • Report full path when done

๐Ÿ”— INTEGRATION

Called by:

  • @brainstorming - After design approved, before implementation
  • @planning-mastery - When executing plan

Pairs with:

  • @planning-mastery - Work happens in this worktree
  • @tdd-mastery - Implementation methodology
  • @verification-mastery - Complete development after all tasks

๐Ÿ”— RALPH WIGGUM INTEGRATION

When Ralph Wiggum is active:

  1. Before first iteration: Create worktree for isolated work
  2. During iterations: All work happens in worktree
  3. After completion: Merge or create PR from worktree
  4. Cleanup: Remove worktree after merge

๐Ÿ”— RELATED SKILLS

  • @brainstorming - Design before worktree creation
  • @planning-mastery - Plan to execute in worktree
  • @verification-mastery - Verify before finishing branch
Install via CLI
npx skills add https://github.com/xenitV1/claude-code-maestro --skill git-worktrees
Repository Details
star Stars 211
call_split Forks 30
navigation Branch main
article Path SKILL.md
More from Creator