Create and bootstrap a git worktree for isolated development work.
View on GitHubky1ejs/claude-plugins
spec-workflow
January 21, 2026
Select agents to install to:
npx add-skill https://github.com/ky1ejs/claude-plugins/blob/main/plugins/spec-workflow/skills/create-worktree/SKILL.md -a claude-code --skill create-worktreeInstallation paths:
.claude/skills/create-worktree/# Create Worktree
Creates and bootstraps a git worktree for isolated development work.
## Arguments
- `name` (required): Name for the worktree directory and branch
- `--spec=<path>`: Path to a spec file to copy into the worktree's specs directory
- `--base=<branch>`: Base branch to create worktree from (default: current branch or configured default)
- `--no-bootstrap`: Skip the onBootstrap hook
## Configuration
Check for `.claude/spec-workflow/config.yaml`:
```yaml
paths:
worktrees: "./worktrees" # Where worktrees are created
specs: "./specs" # Where specs live (for copying)
worktree:
branchNaming: "{name}" # Branch naming pattern
defaultBase: null # Default base branch (null = current)
onBootstrap: null # Hook script to run after creation
```
### Branch Naming
The `branchNaming` pattern supports these tokens:
- `{name}` - The worktree name
- `{date}` - Current date (YYYY-MM-DD)
Examples:
- `"{name}"` → `my-feature`
- `"feature/{name}"` → `feature/my-feature`
- `"{date}-{name}"` → `2024-01-15-my-feature`
### Bootstrap Hook
If `worktree.onBootstrap` is configured, it runs after worktree creation with these environment variables:
| Variable | Description |
|----------|-------------|
| `WORKTREE_PATH` | Absolute path to the new worktree |
| `WORKTREE_NAME` | Name of the worktree |
| `SPEC_FILE` | Path to spec file (if --spec was provided) |
| `BASE_BRANCH` | Branch the worktree was created from |
Example hook script:
```bash
#!/bin/bash
cd "$WORKTREE_PATH"
npm install
# ... any other setup
```
---
## Steps
1. **Check if worktree exists**
- Check if a worktree with the given name already exists at the configured path
- If it does, respond with "Worktree already exists at [path]" and exit
- If it does not exist, proceed
2. **Determine paths and branch name**
- Worktree path: `{config.paths.worktrees}/{name}` (default: `./worktrees/{name}`)
- Branch name: Apply `branchNaming` patte