Worktree
Production ready. AI Agent Workflow System for Claude Code
npx -y skills add ngocsangyem/MeowKit --skill worktreeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 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.
What its author says it does
Copied from the file, not written here
Manages git worktrees for parallel agent isolation. Creates isolated worktrees for parallel agents on parallel/{name}-{timestamp} branches, merges results with conflict detection, prunes stale metadata, and reports health status. NOT for user-initiated feature branches — use git worktree directly for that.
SKILL.md
7.1 KB, as published. Nobody here has run it
Git Worktree Manager
Manages git worktrees for parallel agent isolation. Each parallel agent works in its own
worktree to prevent file conflicts. Backed by scripts/worktree.cjs.
See references/commands.md for full option reference and JSON field docs.
Actions
create
Pre-flight: get repo info, then create a parallel worktree.
# Step 1: verify repo state
node .claude/skills/worktree/scripts/worktree.cjs info --json
# Step 2: create parallel agent worktree
node .claude/skills/worktree/scripts/worktree.cjs create "{agent-name}" --orchestrated --json
Before creating the first parallel worktree in a repo, verify .worktrees/ is in .gitignore.
If not, append it:
echo '.worktrees/' >> .gitignore
The script places the worktree at .worktrees/{agent-name} on branch
parallel/{agent-name}-{timestamp} per parallel-execution-rules.md Rule 3.
merge
Merge a completed parallel branch back to the feature branch using no-fast-forward:
git merge --no-ff {branch} -m "merge: parallel/{agent-name} into {feature-branch}"
On conflict: list conflicting files, STOP, report to orchestrator. Do NOT auto-resolve — human or lead agent decides.
On success: run the full test suite (parallel-execution-rules.md Rule 5). After integration
test passes, delegate to project-manager (background):
"Generate delivery status for plan at {plan-dir}. Write report to
{plan-dir}/status-reports/{YYMMDD}-status.md (create subdir if absent).
Load template from tasks/templates/pm-status-template.md.
Run in the background — do not block the caller."
Skip PM delegation if MEOWKIT_PM_AUTO=off is set in environment.
cleanup
Before removing a worktree, ensure the parallel agent has released its task ownership
in mk:task-queue. Then:
node .claude/skills/worktree/scripts/worktree.cjs remove "{agent-name}" --json
Never cleanup a worktree with uncommitted changes — commit or stash first.
list
node .claude/skills/worktree/scripts/worktree.cjs list --json
status
Health audit of all active worktrees (ahead/behind divergence, dirty state):
node .claude/skills/worktree/scripts/worktree.cjs status --json
prune
Clean stale worktree metadata. Always dry-run first:
# Safe first-pass
node .claude/skills/worktree/scripts/worktree.cjs prune --dry-run --json
# Execute if no surprises
node .claude/skills/worktree/scripts/worktree.cjs prune --json
review-pr
Create an isolated, detached, SHA-bound worktree from a PR head for a
high-assurance review (never mutates the user's checkout). The base remote is a
required argument — pull/N/head exists only on the PR's base repo, so a fork PR is
fetched from the base remote, never a fork remote. Writes a manifest to the persistent
session dir tasks/reviews/<session>/manifest.json (survives worktree removal) and a
.mewkit-review.json back-reference (ownership nonce) inside the worktree.
# Preview only (no fetch, no worktree) — validates inputs, prints the manifest
node .claude/skills/worktree/scripts/worktree.cjs review-pr --pr 123 --remote origin --session <id> --dry-run --json
# Create for real
node .claude/skills/worktree/scripts/worktree.cjs review-pr --pr 123 --remote origin --session <id> --json
review-pr-cleanup
Remove a review worktree. Accepts only a manifest path — nothing else. Removal
proceeds only when the manifest's nonce matches the in-worktree back-reference AND the
target is a detached .worktrees/review-pr-* worktree (never the main checkout, never a
feature worktree). Force is allowed (review worktrees are legitimately dirty after
build/test); ownership, not cleanliness, is the guard.
node .claude/skills/worktree/scripts/worktree.cjs review-pr-cleanup --manifest tasks/reviews/<id>/manifest.json --json
# Stale-session sweep — dry-run by default; --apply to execute
node .claude/skills/worktree/scripts/worktree.cjs review-pr-cleanup --sweep --dry-run --json
Gotchas
review-prworktrees are DETACHED (no branch) and owned by their manifest nonce;review-pr-cleanuprefuses any worktree whose in-worktree back-reference nonce does not match the manifest — this is what makes cross-session deletion impossible- Worktree creation fails if the branch name already exists — script handles this with BRANCH_CHECKED_OUT error; timestamps in orchestrated branches prevent collisions
git worktree removefails silently if the directory was already deleted manually — script checks existence first viagetWorktreeRecords()- Worktrees share the same
.git— force-pushing from a worktree affects the main checkout (Safety Rule: NEVER force-push) .worktrees/directory must be gitignored — add to.gitignorebefore first parallel run- Merge conflicts on
SKILL.md/CLAUDE.mdare common in parallel runs — always stop and report to orchestrator, never auto-resolve mk:task-queueownership must be released before worktree cleanup, or the next agent cannot claim that task- Max 3 active worktrees at any time (parallel-execution-rules.md Rule 2) —
statuscommand shows current count - On macOS, paths with
:in skill names need quoting in shell commands
Safety Rules
- NEVER create worktrees on
mainormaster— only on feature branches - ALWAYS cleanup worktrees after merge (don't leave stale worktrees)
- NEVER force-delete a worktree with uncommitted changes — commit or stash first
- NEVER force-push from a worktree — it affects the shared
.git - ALWAYS check
.worktrees/is in.gitignorebefore creating the first worktree - ALWAYS release
mk:task-queuetask ownership before calling cleanup
Integration
- Called by orchestrator (
mk:cook,mk:workflow-orchestrator) when decomposing COMPLEX tasks - Coordinates with
mk:task-queuefor task claiming and ownership enforcement during parallel runs - Delegates to
project-managerafter merge integration test passes (post-phase-delegation Rule 1, background mode) - Respects
MEOWKIT_PM_AUTO=off— skip PM delegation when set - Not invoked directly by users