Help us improve
Share bugs, ideas, or general feedback.
From playbooks-virtuoso
Manages git worktrees for isolated parallel development sessions with safety checks for uncommitted changes and unpushed commits.
npx claudepluginhub krzysztofsurdy/code-virtuoso --plugin agents-virtuosoHow this skill is triggered — by the user, by Claude, or both
Slash command
/playbooks-virtuoso:worktree-ops [command: create, list, switch, remove] [optional: worktree-name][command: create, list, switch, remove] [optional: worktree-name]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Git worktrees let you check out multiple branches of the same repository into separate directories simultaneously. Each worktree has its own working directory and index while sharing the same `.git` object store and history. This is useful for running parallel development sessions, reviewing a PR while mid-feature, or isolating experimental changes without stashing or committing half-finished w...
Manages git worktrees via unified bash script for parallel development: creates isolated feature environments, lists/switches status, copies .env files, cleans up merged/stale worktrees.
Manage Git worktrees for isolated parallel development. Automates creation, switching, and cleanup with .env copying and .gitignore management. Useful for code reviews and feature work.
Manages Git worktrees for parallel development: create from main with .env copying, list status, switch, cleanup interactively via bash script.
Share bugs, ideas, or general feedback.
Git worktrees let you check out multiple branches of the same repository into separate directories simultaneously. Each worktree has its own working directory and index while sharing the same .git object store and history. This is useful for running parallel development sessions, reviewing a PR while mid-feature, or isolating experimental changes without stashing or committing half-finished work.
| Principle | Meaning |
|---|---|
| Isolation without duplication | Worktrees share git history but keep working directories separate - no need to clone the repo again |
| Safety first | Always check for uncommitted changes and unpushed commits before removing a worktree |
| Clean up after yourself | Stale worktree entries and orphaned branches accumulate - prune regularly |
| Convention over configuration | Use a consistent directory layout (.worktrees/<name>/) and branch naming (worktree-<name>) |
| Command | What it does | When to use |
|---|---|---|
git worktree add <path> -b <branch> | Create a new worktree with a new branch | Starting parallel work on a new task |
git worktree list | Show all worktrees with their branches and paths | Checking what is active |
git worktree list --porcelain | Machine-readable worktree listing | Scripting or enriching with status info |
git worktree remove <path> | Remove a worktree directory and its admin files | Done with a parallel task |
git worktree remove <path> --force | Force-remove even with uncommitted changes | After explicit user confirmation |
git worktree prune | Clean up stale worktree entries | After manual directory deletion or errors |
git branch -D worktree-<name> | Delete the orphaned branch after worktree removal | Keeping branches clean |
Create a new worktree for an isolated parallel development session.
git rev-parse --is-inside-work-tree && git worktree list
If the current working directory is already a worktree (not the main working tree), warn the user and stop.feature-auth, bugfix-123)"git worktree add .worktrees/<name> -b worktree-<name>
Worktree created:
Directory: .worktrees/<name>/
Branch: worktree-<name>
Based on: <current HEAD>
composer install, npm install, pip install -r requirements.txt)list command to see all active worktreesremove command to clean up when doneList all active worktrees with their branches, paths, and status.
git worktree list --porcelain
git -C <worktree-path> status --short 2>/dev/null
Active worktrees:
| # | Name | Branch | Path | Status |
|---|--------------|----------------------|-------------------------------|---------------|
| 1 | (main) | main | /path/to/repo | clean |
| 2 | feature-auth | worktree-feature-auth| .worktrees/feature-auth | 3 uncommitted |
| 3 | bugfix-123 | worktree-bugfix-123 | .worktrees/bugfix-123 | clean |
create command to create one."Switch your working directory to a different existing worktree.
git worktree list
If only the main working tree exists, say: "No worktrees available to switch to. Use the create command to create one." and stop.<name> not found." and show the available list.Switched to worktree:
Directory: <worktree-path>
Branch: <branch-name>
git status --short
Remove one or all worktrees from the current repository.
git worktree list
If no worktrees exist beyond the main working tree, say: "No worktrees to clean up." and stop.all - remove all worktrees (except the main working tree).all to remove everything."git -C <worktree-path> status --short
git -C <worktree-path> log --oneline @{upstream}..HEAD 2>/dev/null
If there are uncommitted changes or unpushed commits, warn the user:
WARNING: Worktree "<name>" has uncommitted changes / unpushed commits:
- 2 modified files
- 1 unpushed commit
These will be permanently lost. Continue? (yes/no)
Wait for explicit confirmation before proceeding.git worktree remove <path> --force
git branch -D worktree-<name> 2>/dev/null
Use --force only after the user has confirmed in step 4.git worktree prune
Removed worktrees:
- feature-auth (branch worktree-feature-auth deleted)
- bugfix-123 (branch worktree-bugfix-123 deleted)
Remaining worktrees: 1 (main working tree only)
| Problem | Cause | Fix |
|---|---|---|
fatal: '<path>' is a missing but locked worktree | Worktree directory was deleted manually but the lock file remains | Run git worktree unlock <path> then git worktree prune |
Stale entries in git worktree list | Worktree directory was deleted without using git worktree remove | Run git worktree prune to clean up admin files |
fatal: '<branch>' is already checked out | Branch is active in another worktree | Switch the other worktree to a different branch first, or remove it |
| Worktree path exists but is empty | Interrupted creation or corrupted state | Run git worktree remove <path> --force then git worktree prune |
| Situation | Recommended Skill |
|---|---|
| When managing branches and commits | git-workflow |
| When executing a TDD implementation in an isolated worktree | test-driven-development |
| When following a full ticket workflow that uses worktrees | ticket-delivery |