AgentSkillsCN

worktrees

利用 Git 工作树进行多代理并行开发。适用于用户说“规划工作流”、“创建工作树”、“启动工作树”、“撰写状态”、“检查状态”、“协调代理”、“并行开发”,或询问如何管理多个 Claude 实例共同操作同一代码库时使用。

SKILL.md
--- frontmatter
name: worktrees
description: Multi-agent parallel development using git worktrees. Use when user says "plan workstreams", "create worktree", "spawn worktree", "write status", "check status", "coordinate agents", "parallel development", or asks about managing multiple Claude instances working on the same codebase.
metadata:
  author: tobiadeangelis
  version: "2.0"

Worktrees

Coordinate multiple Claude agents working in parallel on the same codebase using git worktrees.

Key Concept

Workers are separate Claude sessions, not subagents. The Manager creates worktrees, then the user opens a new terminal in each worktree and runs claude. Each Claude instance operates independently.

Concepts

  • PLAN.md — Coordination document listing workstreams, file ownership, and decisions
  • STATUS-{name}.md — Progress updates from each workstream (REQUIRED before merge)
  • Manager — Plans on main branch, creates/merges worktrees, monitors progress
  • Worker — Executes in worktree, respects file ownership, writes status

Determine Your Role

bash
git branch --show-current
  • main or masterManager
  • wt/* branch → Worker for that workstream

Manager Workflow

1. Pre-Flight Checklist

Before creating worktrees, ensure:

  • Foundation code committed on main
  • pnpm install (or npm/yarn) works
  • pnpm build passes
  • Shared files ready (types, utils, mock data)
  • No file ownership overlap between planned workstreams

2. Plan Workstreams

Create PLAN.md in project root. See references/plan-template.md for structure.

Critical: Define explicit file ownership to prevent merge conflicts. Be specific:

code
Good: apps/web/components/layout/*, apps/web/app/(dashboard)/layout.tsx
Bad:  apps/web/**  # Too broad, will conflict

3. Create Worktrees

bash
git worktree add ../projectname-{name} -b wt/{name}
cd ../projectname-{name} && pnpm install  # Install deps in each

Then tell the user:

code
Worktrees ready. Start workers:
  cd ~/projectname-{name} && claude
  cd ~/projectname-{other} && claude

4. Monitor Progress (Heartbeat)

Periodically check worker status:

bash
# Quick status check
echo "=== COMMITS ===" && git log wt/* --oneline -3
echo "=== STATUS FILES ===" && cat STATUS-*.md 2>/dev/null || echo "None yet"
echo "=== UNCOMMITTED ===" && for d in ../projectname-*; do echo "$d:"; git -C "$d" status --short | head -5; done

5. Merge and Cleanup

Only merge when STATUS file shows "Ready for merge: yes" and build passes.

bash
# Verify build in worktree first
cd ../projectname-{name}/apps/web && pnpm build

# Merge (back on main)
cd /path/to/main
git merge wt/{name} -m "Merge wt/{name}: Brief description"

# Cleanup
git worktree remove ../projectname-{name} --force
git branch -d wt/{name}

6. Update PLAN.md

Move completed workstream to "Completed Workstreams" section.


Worker Workflow

1. Orientation (Start of Session)

When you see you're on a wt/* branch:

code
You are Worker for `wt/{name}`.

1. Read PLAN.md for your scope and file ownership
2. ONLY modify files listed under your "Owns:" section
3. Commit frequently with clear messages
4. Write STATUS-{name}.md when done (REQUIRED)

Then:

  • Read PLAN.md — find your workstream, understand scope
  • Read STATUS-{name}.md if it exists (resuming previous session)

2. While Working

  • Only modify files assigned to your workstream — this is critical
  • Commit early and often (every logical chunk)
  • If you need something from another workstream, note it as a blocker

3. Before Finishing (REQUIRED)

Write STATUS-{name}.md in project root. See references/status-template.md.

Do not consider work complete without a STATUS file.

bash
# Final steps
pnpm build  # Verify build passes
git add . && git commit -m "Add worker status file"

File Ownership Rules

Merge conflicts kill productivity. Strict ownership prevents them.

PatternRisk
components/sidebar/*Safe — specific directory
lib/utils.tsSafe — specific file
components/**Dangerous — too broad
*.tsDangerous — overlaps everything

If two workstreams might touch the same file, either:

  1. Assign it to one workstream only
  2. Put it in "Shared Files (Manager Only)" section
  3. Split the file first

Quick Reference

CommandPurpose
git worktree add ../proj-api -b wt/apiCreate worktree
git worktree listList all worktrees
git log wt/* --oneline -3Check recent commits
git worktree remove ../proj-api --forceRemove worktree
git branch -d wt/apiDelete branch after merge

Troubleshooting

Worker can't read/write files: Check you're in the right directory. Worktrees are sibling directories, not subdirectories.

Merge conflicts: File ownership wasn't specific enough. Resolve manually, then tighten ownership rules for next time.

Worker didn't write STATUS: Work is not complete. Ask them to write it before merging.

Build fails after merge: Run build in each worktree before merging. Merge in dependency order (shared code first).