
worktree-manager
by EdanStarfire
Attempting to build a WebUI for Claude Code (and future for Gemini CLI as well probably) that can be used from another machine or a phone, etc.
SKILL.md
name: worktree-manager description: Manage git worktrees for isolated issue work. Create, list, and remove worktrees safely.
Worktree Manager
Instructions
When to Invoke This Skill
- Creating isolated worktree for issue work
- Listing all active worktrees
- Removing worktree after issue merged
- Checking worktree status
- Troubleshooting worktree issues
Git Worktree Overview
Git worktrees allow multiple working directories from a single repository:
- Each worktree can be on a different branch
- Changes in one worktree don't affect others
- Perfect for parallel issue work
- Cleaner than stashing or multiple clones
Standard Workflows
Creating a Worktree
1. Ensure Worktrees Directory Exists
mkdir -p worktrees
2. Verify Worktree Doesn't Already Exist
git worktree list | grep "worktrees/issue-$ISSUE_NUMBER"
If exists, inform user and ask if they want to remove and recreate.
3. Create Worktree from Main
# Ensure main is up to date
git fetch origin main
# Create worktree with new branch
git worktree add -b feature/issue-$ISSUE_NUMBER worktrees/issue-$ISSUE_NUMBER origin/main
Branch Naming Convention:
feature/issue-$N- New featuresfix/issue-$N- Bug fixesrefactor/issue-$N- Refactoringdocs/issue-$N- Documentation
Determine prefix by analyzing issue labels/title.
4. Verify Creation
git worktree list
ls -la worktrees/issue-$ISSUE_NUMBER
5. Report Success Inform user:
✅ Worktree created successfully
- Location: worktrees/issue-$ISSUE_NUMBER/
- Branch: feature/issue-$ISSUE_NUMBER
- Based on: origin/main
- Status: Ready for work
Listing Worktrees
1. Get All Worktrees
git worktree list
2. Parse Output Format shows:
/path/to/repo abc1234 [main]
/path/to/repo/worktrees/issue-123 def5678 [feature/issue-123]
/path/to/repo/worktrees/issue-456 ghi9012 [fix/issue-456]
3. Enhanced Status For each worktree, check:
# Get branch status
cd worktrees/issue-$N && git status --short --branch
# Get last commit
cd worktrees/issue-$N && git log -1 --oneline
4. Display Formatted List
📁 Active Worktrees
===================
worktrees/issue-123/
Branch: feature/issue-123
Status: 2 files modified, 1 file added
Last Commit: Add user authentication endpoint
worktrees/issue-456/
Branch: fix/issue-456
Status: Clean working directory
Last Commit: Fix session timeout bug
Removing a Worktree
CRITICAL: Only remove worktrees after PR is merged and branch is deleted.
1. Verify Worktree Exists
git worktree list | grep "worktrees/issue-$ISSUE_NUMBER"
2. Check for Uncommitted Changes
cd worktrees/issue-$ISSUE_NUMBER && git status --short
If uncommitted changes exist:
- STOP - Warn user
- Ask if they want to:
- Commit changes first
- Discard changes
- Abort removal
3. Remove Worktree
git worktree remove worktrees/issue-$ISSUE_NUMBER
4. If Locked (Process Using It)
# Force removal if locked and confirmed by user
git worktree remove --force worktrees/issue-$ISSUE_NUMBER
5. Prune Stale References
git worktree prune
6. Verify Removal
git worktree list
ls worktrees/
7. Clean Up Empty Directory
# If worktrees/ is now empty, optionally remove it
if [ -z "$(ls -A worktrees/)" ]; then
rmdir worktrees/
fi
8. Report Success
✅ Worktree removed successfully
- Removed: worktrees/issue-$ISSUE_NUMBER/
- Branch reference pruned
- Ready for new worktrees
Troubleshooting Worktrees
Locked Worktree
# Check lock reason
cat worktrees/issue-$N/.git | head -1
# Remove lock if safe
rm -f .git/worktrees/issue-$N/lock
Orphaned Worktree (directory exists but not in git)
# Prune git references
git worktree prune
# Manually remove directory
rm -rf worktrees/issue-$N/
Corrupted Worktree
# Remove and recreate
git worktree remove --force worktrees/issue-$N
git worktree prune
git worktree add -b feature/issue-$N worktrees/issue-$N origin/main
Best Practices
Before Creating:
- Always base on latest origin/main
- Use consistent naming:
worktrees/issue-$N/ - Use semantic branch names:
feature/issue-$N
During Use:
- Each worktree is independent
- Don't move or rename worktree directories manually
- Commit regularly within worktree
Before Removing:
- Verify PR is merged
- Verify remote branch is deleted
- Check for uncommitted changes
- Consider archiving important local changes
Directory Structure:
repository/
├── .git/
├── src/ # Main repo files
├── worktrees/ # All worktrees
│ ├── issue-123/ # Worktree for issue 123
│ │ ├── src/
│ │ └── .git # Worktree git link
│ └── issue-456/ # Worktree for issue 456
│ ├── src/
│ └── .git
Safety Checks
Always verify before creating:
- Main branch is up to date
- Worktree path doesn't already exist
- Branch name is unique
Always verify before removing:
- PR is merged (ask user to confirm)
- No uncommitted changes or user approves discarding
- No processes using the worktree
Never:
- Create worktree with existing branch name
- Remove worktree while process is running in it
- Manually delete worktree directory (use git worktree remove)
- Share worktrees between different repositories
Examples
Example 1: Create worktree for new feature
Context: Issue #123 is a new user profile feature
Actions:
1. mkdir -p worktrees
2. git fetch origin main
3. git worktree add -b feature/issue-123 worktrees/issue-123 origin/main
4. Verify with git worktree list
Result: Clean worktree ready for development
Example 2: Create worktree for bug fix
Context: Issue #456 is a bug in session management
Actions:
1. mkdir -p worktrees
2. git fetch origin main
3. git worktree add -b fix/issue-456 worktrees/issue-456 origin/main
4. Verify creation
Result: Isolated environment for bug fix
Example 3: Remove worktree after merge
Context: Issue #123 PR was merged and branch deleted
Actions:
1. cd worktrees/issue-123 && git status --short
2. Verify no uncommitted changes
3. cd ../..
4. git worktree remove worktrees/issue-123
5. git worktree prune
6. Verify removal
Result: Worktree cleanly removed
Example 4: Handle uncommitted changes before removal
Context: Worktree has uncommitted changes, PR is merged
Actions:
1. cd worktrees/issue-456 && git status
2. Detect uncommitted changes
3. Ask user: "Uncommitted changes found. Options:
- Commit them to a local branch for reference
- Discard changes
- Abort removal"
4. Based on user choice:
- Commit: git checkout -b archive/issue-456 && git commit
- Discard: git worktree remove --force
- Abort: Stop and return
Result: User decides fate of uncommitted work
Example 5: List all active worktrees with status
Context: User wants to see all active issue work
Actions:
1. git worktree list
2. For each worktree:
- cd into it
- git status --short --branch
- git log -1 --oneline
3. Format output
Result:
📁 Active Worktrees
===================
worktrees/issue-123/
Branch: feature/issue-123 (ahead 3)
Status: M src/auth.py, A src/profile.py
Last Commit: Add profile endpoint
worktrees/issue-456/
Branch: fix/issue-456 (ahead 1)
Status: Clean
Last Commit: Fix session timeout
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です