[PATCH v1 0/3] worktree: add post-worktree-add and post-worktree-remove hooks
From: Domen Kožar <hidden>
Date: 2026-07-09 23:39:17
Hi everyone, I maintain devenv, a developer environment manager, and lately the workflow we see most is people letting AI coding agents loose on a repository, one linked worktree per task, created and discarded at a pace no human would type. Each of those worktrees expects a working environment: processes, sockets, and stateful services such as a database seeded from a dump. Today there is no reliable trigger to set that up when a worktree appears: post-checkout does not fire for --no-checkout or --orphan and cannot be told apart from a plain checkout. Nothing at all fires when a worktree goes away, so stale databases and services pile up after "git worktree remove" or a manual rm followed by "git worktree prune". Wrapping the worktree commands only helps when every tool, human or agent, goes through the wrapper. Patch 1 adds a post-worktree-add hook that fires after the working tree is fully set up. Patch 2 adds post-worktree-remove for "git worktree remove". Patch 3 extends it to "git worktree prune" so that manually deleted worktrees are also observed. Two design points I would especially appreciate feedback on: * post-worktree-add runs after post-checkout and is skipped when post-checkout fails. An argument could be made that it should run whenever the worktree was created, regardless of the earlier hook's exit status, since tooling registering worktrees would otherwise miss one that does exist. * for entries pruned because their gitdir file points to a location that no longer exists, the hook receives the recorded path; when the path cannot be determined at all (missing or corrupt gitdir file) it receives an empty string. Thanks, Domen Domen Kožar (3): worktree: add post-worktree-add hook worktree: add post-worktree-remove hook worktree: run post-worktree-remove hook when pruning Documentation/githooks.adoc | 41 +++++++++++++ builtin/worktree.c | 73 ++++++++++++++++++----- t/t2400-worktree-add.sh | 113 ++++++++++++++++++++++++++++++++++++ t/t2401-worktree-prune.sh | 88 ++++++++++++++++++++++++++++ t/t2403-worktree-move.sh | 44 ++++++++++++++ worktree.c | 1 - worktree.h | 6 +- 7 files changed, 347 insertions(+), 19 deletions(-) base-commit: f85a7e662054a7b0d9070e432508831afa214b47 -- 2.54.0