worktree
Git Worktree Manager
Manages the full lifecycle of git worktrees: creation, monitoring, cleanup, and maintenance.
Subcommands
| Command | Alias | Description |
|---|---|---|
/worktree create <name> |
/worktree <name> |
Create new worktree with conventional branch naming |
/worktree list |
/worktree ls |
Show all worktrees with status and branch info |
/worktree remove <path> |
/worktree rm |
Remove worktree + cleanup branches |
/worktree cleanup |
- | Interactive batch removal of multiple worktrees |
/worktree prune |
- | Remove stale worktree references |
/worktree lock <path> |
- | Prevent worktree from being auto-pruned |
/worktree unlock <path> |
- | Allow worktree to be pruned again |
Default: No subcommand or unrecognized arg = create
When to use
- Creating isolated workspace for new feature/fix
- Viewing all active worktrees across a repo
- Cleaning up after merging PRs
- Removing abandoned/stale worktrees
- Protecting important worktrees on portable storage
When not to use
- Simple branch switching (use
git checkout) - Temporary file exploration (use
git stashor read-only) - Submodule management (different concept)
Subcommand: create
Creates new worktree in sibling directory with conventional commit branch naming.
Workflow
-
Get name: From args or ask user (e.g., "alerts", "fix-login")
-
Prompt for type: Use AskUserQuestion
- Header: "Commit type"
- Options: feat, fix, chore, docs, refactor, test, perf, ci
-
Construct branch:
{type}/{name}(e.g.,feat/alerts) -
Determine path:
- Get repo name from remote/directory
- Path:
../{repo}-{type}-{name}(slashes → hyphens)
-
Create:
git worktree add -b {branch} {path} -
Confirm: Show branch name, path, and
cdcommand
Error handling
- Branch exists → offer to use existing or suggest new name
- Directory exists → warn and ask to proceed or rename
- Dirty working tree → warn but allow (worktree add works regardless)
Subcommand: list
Shows all worktrees with status information.
Workflow
-
Run:
git worktree list -v -
Parse and display:
- Path
- Branch name (or "detached HEAD")
- Status flags: locked, prunable, bare
- Commit SHA (short)
-
Enhance (optional): For each worktree, show:
- Uncommitted changes count:
git -C {path} status --porcelain | wc -l - Ahead/behind upstream:
git -C {path} rev-list --left-right --count @{u}...HEAD
- Uncommitted changes count:
Example output
Worktrees for my-project:
/path/to/main [main] clean, up-to-date
/path/to/feat-alerts [feat/alerts] 3 uncommitted, 2 ahead
/path/to/old-feature [fix/old] prunable (directory missing)
Subcommand: remove
Removes single worktree with full branch cleanup.
Workflow
-
Identify target: From args or show list and ask
-
Check status:
git -C {path} status --porcelain- If uncommitted changes → warn and confirm force removal
-
Get branch name for cleanup:
git -C {path} branch --show-current -
Remove worktree:
git worktree remove {path} # clean git worktree remove -f {path} # if uncommitted changes git worktree remove -ff {path} # if locked -
Delete local branch:
git branch -d {branch} # safe (fails if unmerged) git branch -D {branch} # force (if user confirms) -
Offer remote branch deletion (AskUserQuestion):
- Check if remote exists:
git ls-remote --heads origin {branch} - If yes, ask: "Delete remote branch too?"
- If yes:
git push origin --delete {branch}
- Check if remote exists:
-
Confirm: Summarize what was removed
Safety checks
- Never remove main worktree (the original repo)
- Warn if branch has unpushed commits
- Warn if PR is still open for this branch
Subcommand: cleanup
Interactive batch removal of multiple worktrees.
Workflow
-
List all worktrees:
git worktree list --porcelain -
Filter candidates:
- Exclude main worktree
- Flag: prunable, merged branches, old (no commits in 2+ weeks)
-
Present selection (AskUserQuestion with multiSelect):
- Header: "Cleanup"
- Question: "Which worktrees should be removed?"
- Options: List each non-main worktree with status
-
For each selected: Run
removeworkflow -
Run prune:
git worktree prune -v -
Summary: Show what was cleaned up
Subcommand: prune
Removes stale worktree administrative files.
Workflow
-
Preview:
git worktree prune -n -v -
If stale entries found:
- Show what will be pruned
- Confirm with user
-
Prune:
git worktree prune -v -
Report: Show removed entries
When to use
- After manually deleting worktree directories
- After moving worktree without
git worktree move - Periodic maintenance
Subcommand: lock / unlock
Protects worktree from automatic pruning.
Lock workflow
-
Identify worktree: From args or list and ask
-
Prompt for reason (optional):
- "Why lock this worktree?" (e.g., "portable drive", "long-running experiment")
-
Lock:
git worktree lock --reason "{reason}" {path} # or without reason: git worktree lock {path} -
Confirm: Show locked status
Unlock workflow
-
Identify worktree: From args or list locked ones
-
Unlock:
git worktree unlock {path} -
Confirm: Show unlocked status
Validation checklist
- Correct subcommand identified from args
- Branch naming follows
{type}/{name}convention - Worktree path is sibling directory, not nested
- No uncommitted changes lost without warning
- Local branch deleted only after worktree removal
- Remote branch deletion is opt-in, not automatic
- Main worktree protected from removal
- Prune only runs after user confirmation
Examples
Example 1: Create
User: /worktree queue-alerts
Claude: [asks commit type] → User: feat
Claude: Created worktree
Branch: feat/queue-alerts
Path: ../my-project-feat-queue-alerts
Run: cd ../my-project-feat-queue-alerts
Example 2: List
User: /worktree list
Claude: Worktrees for my-project:
/Users/me/my-project [main] clean
/Users/me/my-project-feat-alerts [feat/alerts] 2 uncommitted
/Users/me/my-project-fix-bug [fix/bug-123] prunable
Example 3: Remove with cleanup
User: /worktree remove ../my-project-feat-alerts
Claude: Worktree has 2 uncommitted changes. Force remove?
User: yes
Claude: [asks about remote branch deletion] → User: yes
Claude: Removed:
- Worktree: ../my-project-feat-alerts
- Local branch: feat/alerts
- Remote branch: origin/feat/alerts
Example 4: Interactive cleanup
User: /worktree cleanup
Claude: [shows multiselect with 3 worktrees]
User: [selects 2]
Claude: Removed 2 worktrees, pruned 1 stale entry
- feat/old-feature (merged)
- fix/abandoned (no remote)
Notes
- Worktrees share git objects but have separate working directories
- Each worktree can have different branch checked out simultaneously
- Locked worktrees survive
git gcand won't be auto-pruned - Use
git worktree moveto relocate (not manual mv) - See WORKFLOWS.md for detailed step-by-step procedures
Evaluation Prompts
Test 1: Activation - create (should trigger)
User: /worktree new-dashboard
Expected: Skill activates, asks for commit type, creates worktree
Test 2: Activation - list (should trigger)
User: /worktree list
Expected: Skill activates, runs git worktree list, shows formatted output
Test 3: Activation - cleanup (should trigger)
User: /worktree cleanup
Expected: Skill activates, lists worktrees with multiselect, processes removals
Test 4: Activation - natural language (should trigger)
User: I need to clean up my old worktrees
Expected: Skill activates with cleanup subcommand context
Test 5: Non-activation (should NOT trigger)
User: How do I switch to a different branch?
Expected: Normal response about git checkout/switch, NOT worktree skill
Test 6: Non-activation (should NOT trigger)
User: Delete the feature-x branch
Expected: Normal git branch -d advice, NOT worktree removal
Test 7: Edge case - remove main worktree
User: /worktree remove .
Expected: Skill refuses with clear error "Cannot remove main worktree"
Test 8: Edge case - remove with uncommitted changes
User: /worktree remove ../project-feat-wip
Context: Worktree has uncommitted changes
Expected: Warning shown, asks for confirmation before force removal
Test 9: Edge case - no worktrees to cleanup
User: /worktree cleanup
Context: Only main worktree exists
Expected: "No worktrees available for cleanup" message
More from walletconnect/skills
security-audit-owasp-top-10
Performs comprehensive security audit of any codebase against OWASP Top 10 2025. Use when user asks for OWASP audit, OWASP Top 10 review, OWASP security check, or wants to audit code against OWASP categories. Do not trigger for PR review, npm/pip audit, SOC2 compliance, general security questions, or threat modeling.
26skill-writing
Designs and writes high-quality Agent Skills (SKILL.md + optional reference files/scripts). Use when asked to create a new Skill, rewrite an existing Skill, improve Skill structure/metadata, or generate templates/evaluations for Skills.
19code-simplifier
Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Focuses on recently modified code unless instructed otherwise.
16agent-creator
Guide for creating custom Claude Code subagents. Use when user wants to create a new agent (or update an existing agent) that handles specific types of tasks with custom prompts, tool restrictions, and permissions. Triggers on requests to create agents, subagents, custom agents, or when user wants specialized AI assistants for specific workflows.
15code-review
Provide actionable feedback on code changes. Focuses on bugs, security issues, and structural problems.
15command-creator
Guide for creating custom Claude Code slash commands. Use when user wants to create a new command (or update an existing command) that provides a reusable prompt snippet, workflow, or automation. Triggers on requests to create /commands, slash commands, custom commands, or when user wants to define frequently-used prompts as reusable commands.
15