git-worktree
This skill manages Git worktrees for isolated parallel development. It handles creating, listing, switching, and cleaning up worktrees with automatic .env file copying and shared-context configuration. Use when spinning up parallel feature branches, code review in isolation, or multi-agent development.
From harness-engineeringnpx claudepluginhub lattice-technologies-inc/harness-engineering --plugin harness-engineeringThis skill uses the workspace's default tool permissions.
scripts/worktree-manager.shGit Worktree Manager
Manage Git worktrees for isolated parallel development with environment file management and shared-context support for multi-agent workflows.
When to Use
- Spinning up a parallel feature branch without disrupting current work
- Isolated code review of a PR
- Multi-agent development where each agent works in its own worktree
- Any time
git stash/ branch-switching friction is slowing things down
CRITICAL: Always Use the Manager Script
Never call git worktree add directly. Always use the manager script — it handles
env file copying, .gitignore management, and writes .worktree-config for agent use.
# Correct
bash .claude/skills/git-worktree/scripts/worktree-manager.sh create feature-name
# Wrong
git worktree add .worktrees/feature-name -b feature-name main
Commands
SCRIPT=".claude/skills/git-worktree/scripts/worktree-manager.sh"
# Create new worktree (copies .env files, writes .worktree-config)
bash $SCRIPT create <branch-name> [from-branch]
# List all worktrees
bash $SCRIPT list
# Switch to a worktree
bash $SCRIPT switch <name>
# Refresh .env files from main repo
bash $SCRIPT copy-env [name]
# Clean up inactive worktrees
bash $SCRIPT cleanup
What Happens on Create
- Updates the base branch from remote
- Creates worktree at
.worktrees/<branch-name>/ - Copies all
.env*files from main repo (except.env.example) - Writes
.worktree-configwithMAIN_REPOpath - Adds
.worktreesto.gitignoreif missing
Shared Context Pattern
Worktrees are isolated file trees — they do NOT share docs/, plans/, or other
non-git content with the main repo. To avoid drift and duplication:
For Agents Working in a Worktree
- Read
.worktree-configto getMAIN_REPOpath - Reference shared docs from
$MAIN_REPO/docs/— do not duplicate them into the worktree - When creating or editing plans, write to
$MAIN_REPO/docs/plans/ - The worktree is for code changes only; docs live in the main repo
# Example: read MAIN_REPO from config
source .worktree-config
cat "$MAIN_REPO/docs/plans/my-plan.md"
Why Not Symlinks?
Symlinks point one direction. If worktree/docs → main/docs, edits in the worktree
modify main's files directly. With multiple agents in multiple worktrees, this creates
race conditions. The config-based approach is explicit and safe.
Directory Structure
project-root/
├── .worktrees/ # gitignored
│ ├── feat/new-feature/ # worktree 1
│ │ ├── .git
│ │ ├── .env # copied from main
│ │ ├── .worktree-config # MAIN_REPO pointer
│ │ └── src/
│ └── fix/bug-123/ # worktree 2
│ ├── .git
│ ├── .env
│ ├── .worktree-config
│ └── src/
├── docs/ # single source of truth
│ ├── plans/
│ └── references/
└── .gitignore # includes .worktrees
Integration Notes
- Worktrees share git objects with the main repo (lightweight, no duplication)
- Each worktree has its own branch — commits from one don't affect others
- Push from any worktree normally
.worktree-configis auto-generated and should not be committed