---
name: worktree
description: Creates git worktrees for isolated development. Use when user wants to "create a worktree", "start a new feature branch", "work on a fix in isolation", or needs a parallel development environment.
---

# Git Worktree Skill

Create isolated worktrees for parallel development. Ends by providing commands to continue in the new worktree.

## Workflow

1. **Detect repo info**
   ```bash
   REPO_NAME=$(basename -s .git $(git config --get remote.origin.url) 2>/dev/null || basename $(pwd))
   SOURCE_REPO=$(git rev-parse --show-toplevel)
   ```

2. **Parse user description**
   - Type: `fix` (bug, patch, fix) | `feat` (feature, add, implement) | `misc` (default)
   - Branch: `{type}/{kebab-description}` (max 30 chars)
   - Folder: `{type}-{kebab-description}`
   - Path: `{SOURCE_REPO}/../{REPO_NAME}-worktrees/{folder}/`
   - Version: `{kebab-description}` (for docker image tag)

3. **Create worktree**
   ```bash
   git fetch origin main
   mkdir -p "$(dirname "$WORKTREE_PATH")"
   # --no-track: do NOT set the new branch's upstream to origin/main.
   # Without it, a later `git push -u origin {branch}` can be reported by
   # the server as also fast-forwarding main, landing commits on main.
   git worktree add --no-track -b "{branch}" "$WORKTREE_PATH" origin/main
   ```

4. **Copy config files**
   - **unstract repo:** Run `"$SOURCE_REPO/.claude/skills/worktree/worktree-setup.sh" "$WORKTREE_PATH" "$SOURCE_REPO"`
   - **Other repos:** Ask user which config files to copy, then copy them

5. **Detect services from request** (unstract only)

   Match keywords in user's request to services:

   | Keywords                       | Services                   |
   | ------------------------------ | -------------------------- |
   | frontend, UI, react, component | frontend                   |
   | backend, API, django           | backend                    |
   | platform, adapter, LLM         | platform-service           |
   | prompt, studio                 | prompt-service             |
   | worker, celery, task           | backend (includes workers) |
   | x2text, extraction             | x2text-service             |

   Default if unclear: `backend frontend`

6. **Print summary with commands**

   ```text
   Worktree created!

   Branch: {branch}
   Path: {worktree_path}

   ─────────────────────────────────────────────────────────
   Continue in new worktree and paste your prompt:

   cd {worktree_path} && claude

   {user_request_slightly_made_better_for_new_agent_to_understand}
   ─────────────────────────────────────────────────────────
   Build & run services:

   cd {worktree_path}/docker && \
   VERSION={version} docker compose -f docker-compose.yaml -f compose.override.yaml build {services} && \
   VERSION={version} docker compose -f docker-compose.yaml -f compose.override.yaml watch {services}
   ─────────────────────────────────────────────────────────

   Cleanup later: git worktree remove {worktree_path}
   ```

   IMPORTANT: Escape any quotes in `{user_request}` for shell safety.

## Examples

**User:** "worktree for fixing login validation in frontend"
- Branch: `fix/login-validation`
- Version: `login-validation`
- Services: `frontend`

**User:** "create worktree to add workflow export API"
- Branch: `feat/workflow-export-api`
- Version: `workflow-export-api`
- Services: `backend`

## Reference

```bash
git worktree list          # List worktrees
git worktree remove {path} # Remove worktree
git worktree prune         # Prune stale entries
```
