| name | use-git-worktree |
| description | This skill should be used when starting feature work that needs isolation from current workspace - creates isolated git worktrees with smart directory selection and safety verification |
| user-invocable | false |
Git Worktree Management
Create and manage isolated git worktrees for task execution with automatic project setup and merge handling.
Overview
Git worktrees provide complete isolation for task work:
- Changes don't affect main workspace until merge
- Can switch between tasks without stashing
- Clean baseline for each task
- Safe to experiment
Workflow
Step 1: Determine Worktree Directory
Find or create the worktree directory using this priority order:
-
Check for existing directory:
ls -d .worktrees 2>/dev/null
ls -d worktrees 2>/dev/null
-
Check CLAUDE.md for directive:
worktree-dir: path/to/worktrees
-
Check README.md for configuration:
Look for worktree or development setup instructions.
-
Ask user if not found:
"Where should I create worktrees for isolated task work?
.worktrees/ (Recommended - hidden, less clutter)
worktrees/
- Custom location"
Step 2: Verify Directory is Gitignored
Critical: Ensure the worktree directory won't be committed.
git check-ignore -q <worktree-dir>
If not ignored:
- Add to
.gitignore with user confirmation
- Report the change
echo "<worktree-dir>/" >> .gitignore
Step 3: Create Branch and Worktree
Determine branch name from task:
- Input:
TASK-004 or 4
- Branch:
task/TASK-004
- Worktree path:
<dir>/TASK-004
Create from current HEAD:
BASE_BRANCH=$(git branch --show-current)
git worktree add -b task/TASK-NNN <dir>/TASK-NNN
Record context:
- Base branch (for later merge)
- Worktree path
- Task ID
Step 4: Auto-Detect and Run Project Setup
Change to worktree directory and detect project type:
| File Present | Setup Command |
|---|
package.json | npm install or yarn install |
Cargo.toml | cargo build |
requirements.txt | pip install -r requirements.txt |
Pipfile | pipenv install |
pyproject.toml | pip install -e . or poetry install |
go.mod | go mod download |
Gemfile | bundle install |
pom.xml | mvn install |
build.gradle | ./gradlew build |
Check for custom setup:
- Read CLAUDE.md for setup instructions
- Read README.md for development setup section
- Execute any documented setup steps
Step 5: Verify Baseline Tests Pass
Run the project's test suite to ensure a clean starting point:
npm test
cargo test
pytest
go test ./...
bundle exec rspec
If tests fail:
"Baseline tests are failing in the worktree. This may indicate:
- Setup incomplete - check dependencies
- Tests require specific environment
- Base branch has failing tests
Would you like to:
- Continue anyway (tests may already be failing)
- Abort and investigate"
Step 6: Return Worktree Context
Provide context for the calling skill:
## Worktree Created
**Task:** TASK-NNN
**Branch:** task/TASK-NNN
**Base Branch:** main
**Working Directory:** .worktrees/TASK-NNN
**Merge Mode:** [auto-merge|manual]
Project setup complete. Baseline tests passing.
Ready to begin work.
Merge Operations
Auto-Merge Flow
When task completes with auto-merge enabled:
cd <worktree-path>
git status --porcelain
cd <original-repo>
git checkout <base-branch>
git merge --no-ff task/TASK-NNN -m "Merge task/TASK-NNN: [Task Title]"
git worktree remove <worktree-path>
git branch -d task/TASK-NNN
Manual Verification Flow
When user wants to review before merge:
## Task Complete in Worktree
**Location:** .worktrees/TASK-NNN
**Branch:** task/TASK-NNN
All changes committed. To merge manually:
```bash
git checkout <base-branch>
git merge --no-ff task/TASK-NNN
git worktree remove .worktrees/TASK-NNN
git branch -d task/TASK-NNN
Or to continue working:
cd .worktrees/TASK-NNN
### Merge Conflict Handling
If merge conflicts occur:
```markdown
## Merge Conflict
The merge of task/TASK-NNN into <base-branch> has conflicts.
**Conflicting files:**
- path/to/file1.ts
- path/to/file2.ts
**Options:**
1. Resolve conflicts manually in the main repo
2. Abort merge and keep worktree for investigation
**To resolve:**
```bash
# In main repo after failed merge
git status # See conflicting files
# Edit files to resolve conflicts
git add <resolved-files>
git commit # Complete merge
# Then cleanup
git worktree remove .worktrees/TASK-NNN
git branch -d task/TASK-NNN
To abort:
git merge --abort
## Error Handling
| Error | Recovery |
|-------|----------|
| Branch already exists | Offer to reuse existing branch or create new name |
| Worktree path exists | Check if it's valid, offer cleanup or different path |
| Not a git repository | Cannot use worktrees, fall back to current directory |
| Uncommitted changes | Prompt to commit or stash before creating worktree |
| Setup command fails | Report error, offer to continue or abort |
## Cleanup Commands
**Remove a worktree:**
```bash
git worktree remove <path>
git branch -d <branch> # Safe delete (checks merge status)
git branch -D <branch> # Force delete
List all worktrees:
git worktree list
Prune stale worktrees:
git worktree prune