Using git worktrees
Skill the-inconvenience-store/superbeads/skills/using-git-worktrees
Use when implementation work needs an isolated Beads-aware Git worktree.From its SKILL.md
npx -y skills add the-inconvenience-store/superbeads --skill using-git-worktreesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.8 KB, as published. Nobody here has run it
Using Git Worktrees
Overview
Git worktrees create isolated workspaces sharing the same repository, allowing work on multiple branches simultaneously without switching.
Core principle: Systematic directory selection + safety verification = reliable isolation.
Announce at start: "I'm using the using-git-worktrees skill to set up an isolated workspace."
Iron Law: Use bd worktree, NOT git worktree
ALWAYS use bd worktree commands. NEVER use raw git worktree commands.
Why: bd worktree create does everything git worktree add does PLUS:
- Worktree automatically shares the main repo's beads database via git common directory discovery
- Adds the worktree path to
.gitignoreautomatically - Ensures consistent issue state across all worktrees
Raw git worktree add misses .gitignore setup and safety checks — while beads database sharing works via git common directory, you lose the automation bd worktree create provides.
| Action | Use This | NOT This |
|---|---|---|
| Create worktree | bd worktree create .worktrees/<name> | git worktree add |
| List worktrees | bd worktree list | git worktree list |
| Remove worktree | bd worktree remove <name> | git worktree remove |
| Worktree info | bd worktree info |
Note: Claude Code provides a native
EnterWorktreetool for worktree management. For non-beads projects, this is a viable alternative. For beads-integrated projects,bd worktree createremains mandatory — it handles database sharing and.gitignoremanagement thatEnterWorktreedoes not provide.Deliberate divergence from upstream: superpowers v6.0.3 rewrote this skill to prefer the harness-native worktree tool first (
EnterWorktree→ existing.worktrees/→ rawgit worktree). We do not adopt that native-tool-first selection order — it bypassesbd worktree's beads-database sharing across worktrees. The Iron Law above (alwaysbd worktree) is intentional and takes precedence.
Directory Selection
Always create project worktrees under .worktrees/ by passing the full path to bd worktree create:
- Use
bd worktree create .worktrees/<name>for every worktree path - Do NOT rely on
bd worktree create <name>; beads defaults to./<name>, which pollutes the repository root bd worktree createadds the path to.gitignoreautomatically
For this skill, .worktrees/<name> is the project worktree directory. Do not substitute the bd default path.
Safety Verification
bd worktree create automatically adds the worktree path to .gitignore when inside the repo root. Verify as a safety net:
git check-ignore -q <worktree-path> 2>/dev/null
If NOT ignored (edge case — bd worktree create should have handled this): add the path to .gitignore and commit.
Pre-Flight Checks
Run these checks BEFORE creating any worktree.
Detect Existing Worktree Isolation
Check whether you are already inside a worktree:
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
if [ "$GIT_DIR" != "$GIT_COMMON" ]; then
echo "WARNING: Already inside a worktree."
fi
If already in a worktree, warn and ask via your structured question tool whether to proceed (creating a nested worktree) or abort.
Submodule Guard
Check whether you are inside a git submodule:
SUPERPROJECT=$(git rev-parse --show-superproject-working-tree 2>/dev/null)
if [ -n "$SUPERPROJECT" ]; then
echo "WARNING: Inside a git submodule. Worktrees behave unpredictably here."
fi
If inside a submodule, warn and stop. Do NOT create worktrees inside submodules.
Consent Flow
- User-initiated (manual worktree creation): Ask via your structured question tool before creating — "I'd like to create a worktree at
<path>. Proceed?" - Dispatched by subagent-driven-development: Consent is implicit — the orchestrator authorized worktree creation. Skip the prompt.
Creation Steps
0. Claim the bead first
Before creating the worktree, claim the issue you're about to work on. This prevents ownerless work — you own the bead before any environment exists.
bd update <issue-id> --claim
Before this workflow's first Beads read/write or claim decision, read Beads Read/Write Economy and Claim Boundary; do not load it when no tracker operation is needed.
1. Create Worktree with bd worktree create
# Simple — creates worktree at .worktrees/<name> with matching branch
bd worktree create .worktrees/<feature-name>
# With explicit branch name
bd worktree create .worktrees/<feature-name> --branch <branch-name>
# Then cd into it
cd .worktrees/<feature-name>
What bd worktree create does automatically:
- Creates the git worktree with a new branch
- Worktree automatically discovers the main repo's beads database via git common directory (no redirect file needed)
- Adds worktree path to
.gitignore(if inside repo root)
2. Run Project Setup
Auto-detect and run appropriate setup:
# Node.js
if [ -f package.json ]; then npm install; fi
# Rust
if [ -f Cargo.toml ]; then cargo build; fi
# Python
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f pyproject.toml ]; then poetry install; fi
# Go
if [ -f go.mod ]; then go mod download; fi
3. Verify Clean Baseline
Run tests to ensure worktree starts clean:
# Examples - use project-appropriate command
npm test
cargo test
pytest
go test ./...
If tests fail: Report failures, then use your structured question tool to ask: Question: "Baseline tests failing in worktree (<N> failures). How should I proceed?" Options: "Investigate failures" (debug before starting feature work), "Proceed anyway" (start implementation despite pre-existing failures) A skipped, dismissed, or auto-resolved answer is not consent — stop and ask in plain text.
If tests pass: Report ready.
4. Report Location
Worktree ready at <full-path>
Tests passing (<N> tests, 0 failures)
Ready to implement <feature-name>
Multiple Worktrees for Parallel Subagents
When Subagent-Driven Development runs independent tasks in parallel, the orchestrator creates and manages multiple worktrees. Subagents never create or destroy worktrees — they receive a path and work within it.
Pattern:
# 1. Orchestrator creates epic worktree (once)
bd worktree create .worktrees/<epic-name>
# 2. For each parallel task (max 5 concurrent):
bd worktree create .worktrees/<task-name> --branch feature/<epic>/<task>
# 3. Subagent receives path in its prompt:
# "Work from: <task-worktree-path>"
# 4. After task passes review — orchestrator merges and cleans up:
cd <epic-worktree-path>
git merge feature/<epic>/<task>
bd worktree remove <task-name>
Constraints:
- Maximum 5 concurrent task worktrees (resource limit)
- Orchestrator manages the full lifecycle — subagents never run
bd worktreecommands - All task worktrees branch from the same HEAD commit (created before any subagent commits)
- After merge, run the full test suite on the epic worktree to catch integration issues
See also: superbeads:subagent-driven-development → Parallel Batch Mode section for the full orchestration flow.
Quick Reference
| Situation | Action |
|---|---|
| Creating a worktree | bd worktree create .worktrees/<name> — always use .worktrees/* |
| Custom location temptation | Do not use another path; keep .worktrees/<name> |
| Directory not ignored | Add to .gitignore + commit (edge case) |
| Tests fail during baseline | Report failures + ask |
| No package.json/Cargo.toml | Skip dependency install |
| Parallel subagent work | Create one bd worktree per task, orchestrator manages lifecycle (max 5) |
| Working across worktrees | bd -C .worktrees/<name> ready — run bd in a worktree without cd |
Common Mistakes
Using git worktree instead of bd worktree
- Problem: Raw
git worktree addmisses.gitignoresetup and safety checks — while beads database sharing works via git common directory, you lose the automationbd worktree createprovides - Fix: ALWAYS use
bd worktree create. If you catch yourself typinggit worktree, stop and usebd worktreeinstead.
Skipping ignore verification
- Problem: Worktree contents get tracked, pollute git status
- Fix: Verify with
git check-ignoreafter creation (bd worktree createhandles this automatically, but verify as a safety net)
Relying on bd worktree create default path logic
- Problem:
bd worktree create <name>creates at./<name>, cluttering the repository root - Fix: Always pass the full
.worktrees/<name>path:bd worktree create .worktrees/<name>
Proceeding with failing tests
- Problem: Can't distinguish new bugs from pre-existing issues
- Fix: Report failures, get explicit permission to proceed
Hardcoding setup commands
- Problem: Breaks on projects using different tools
- Fix: Auto-detect from project files (package.json, etc.)
Example Workflow
You: I'm using the using-git-worktrees skill to set up an isolated workspace.
[Create worktree: bd worktree create .worktrees/auth --branch feature/auth]
✓ Created worktree at .worktrees/auth
✓ Beads database shared via git common directory
✓ Added to .gitignore
[cd .worktrees/auth]
[Run npm install]
[Run npm test - 47 passing]
Worktree ready at /Users/jesse/myproject/.worktrees/auth
Tests passing (47 tests, 0 failures)
Ready to implement auth feature
When this workflow closes after producing durable insights, read Durable Memory and apply it; otherwise do not load it.
Red Flags
Never:
- Use raw
git worktreecommands — ALWAYS usebd worktree - Create worktrees outside
.worktrees/* - Create worktree without verifying it's ignored (project-local)
- Skip baseline test verification
- Proceed with failing tests without asking
- Assume directory location when ambiguous
- Skip CLAUDE.md check
Always:
- Use
bd worktree create/bd worktree list/bd worktree remove - Pass
.worktrees/<name>as the worktree path - Auto-detect and run project setup
- Verify clean test baseline
Integration
Invoked by: Any task needing workspace isolation, or user on-demand.
Required by:
- subagent-driven-development — must create worktree before delegating to implementer subagents.
- executing-plans — workspace isolation before starting plan execution.
Pairs with: subagent-driven-development — parallel batch mode creates multiple worktrees (one per task) for concurrent subagent execution.