Log Every Worktree Created, With Parent Branch and Requester
Distinct from the blocking worktree hooks above: this one never fails creation, it just keeps a durable register of every worktree ever created in the project, with its parent branch — the raw material for noticing if the number of live worktrees quietly grows unbounded.
1. Save this as the hook script
#!/usr/bin/env python3
"""WorktreeCreate hook — logs every worktree creation. Always exits 0."""
import json, sys, datetime
from pathlib import Path
data = json.load(sys.stdin)
log_path = Path(data.get("parent_path", ".")) / ".claude" / "worktree_log.jsonl"
log_path.parent.mkdir(parents=True, exist_ok=True)
entry = {
"ts": datetime.datetime.utcnow().isoformat() + "Z",
"worktree_name": data.get("worktree_name"),
"from_branch": data.get("from_branch"),
}
with open(log_path, "a") as f:
f.write(json.dumps(entry) + "\n")
sys.exit(0)
Save to a path inside your project, e.g. .claude/hooks/log-worktree-created-parent-branch.sh, then chmod +x it.
2. Wire it into .claude/settings.json
{
"hooks": {
"WorktreeCreate": [
{
"hooks": [
{"type": "command", "command": "python3 .claude/hooks/log-worktree-created-parent-branch.py"}
]
}
]
}
}
Before you use this
A hook runs with your local shell's permissions — review the script above before adding it, the same way you'd review any script you didn't write yourself. See our guide on hook security risks for the specific CVEs this category of feature has already produced.
Related hooks