3321 WorktreeCreate3321 WorktreeCreate
3322</h3>3322</h3>
3323 3323
3324S'exécute lors de la création d'un worktree, que ce soit depuis `claude --worktree`, depuis un [sous-agent utilisant `isolation: "worktree"`](/docs/fr/sub-agents#choose-the-subagent-scope), ou pour une [session en arrière-plan](/docs/fr/agent-view#how-file-edits-are-isolated) que Claude Code isole dans son propre worktree. Par défaut, Claude Code crée la copie de travail isolée avec `git worktree`. Configurer un hook WorktreeCreate remplace ce comportement git par défaut, ce qui vous permet d'utiliser un autre système de gestion de versions comme SVN, Perforce ou Mercurial.3324S'exécute lorsque Claude Code crée un worktree, par exemple dans les cas suivants :
3325
3326* Vous démarrez une session avec `claude --worktree`
3327* Claude crée un worktree pendant une session et y bascule avec l'outil [`EnterWorktree`](/docs/fr/tools-reference)
3328* Un [sous-agent utilise `isolation: "worktree"`](/docs/fr/sub-agents#choose-the-subagent-scope)
3329* Un [workflow](/docs/fr/workflows#migrate-many-files-in-parallel) exécute un agent dans son propre worktree
3330* Claude Code isole une [session en arrière-plan](/docs/fr/agent-view#how-file-edits-are-isolated) dans son propre worktree
3331* [`claude remote-control`](/docs/fr/remote-control#start-a-remote-control-session) en mode `worktree` démarre une session dans son propre worktree
3332
3333Lorsque Claude exécute `git worktree add` via l'outil Bash au lieu d'appeler `EnterWorktree`, votre hook WorktreeCreate ne s'exécute pas. Pour inspecter ou bloquer cette commande, ajoutez un hook [`PreToolUse`](#pretooluse) avec le matcher `Bash`.
3334
3335Par défaut, Claude Code crée la copie de travail isolée avec `git worktree`. La configuration d'un hook WorktreeCreate remplace ce comportement git par défaut, ce qui vous permet d'utiliser un autre système de gestion de versions comme SVN, Perforce ou Mercurial.
3325 3336
3326Comme le hook remplace entièrement le comportement par défaut, [`.worktreeinclude`](/docs/fr/worktrees#copy-gitignored-files-into-worktrees) n'est pas traité. Si vous devez copier des fichiers de configuration locaux comme `.env` dans le nouveau worktree, faites-le dans votre script de hook.3337Comme le hook remplace entièrement le comportement par défaut, [`.worktreeinclude`](/docs/fr/worktrees#copy-gitignored-files-into-worktrees) n'est pas traité. Si vous devez copier des fichiers de configuration locaux comme `.env` dans le nouveau worktree, faites-le dans votre script de hook.
3327 3338
3390* Vous quittez une [session de worktree](/docs/fr/worktrees#start-claude-in-a-worktree) interactive et choisissez de supprimer le worktree lorsque Claude Code vous le demande3401* Vous quittez une [session de worktree](/docs/fr/worktrees#start-claude-in-a-worktree) interactive et choisissez de supprimer le worktree lorsque Claude Code vous le demande
3391* Vous quittez une session de worktree interactive que vous n'avez pas [nommée](/docs/fr/sessions#name-your-sessions), Claude Code ne trouve aucun fichier modifié ou non suivi, et supprime le worktree sans vous le demander3402* Vous quittez une session de worktree interactive que vous n'avez pas [nommée](/docs/fr/sessions#name-your-sessions), Claude Code ne trouve aucun fichier modifié ou non suivi, et supprime le worktree sans vous le demander
3392* Vous supprimez une [session en arrière-plan](/docs/fr/agent-view#what-deleting-a-session-removes) qui s'exécute dans le worktree3403* Vous supprimez une [session en arrière-plan](/docs/fr/agent-view#what-deleting-a-session-removes) qui s'exécute dans le worktree
3404* Vous demandez à Claude de quitter et de supprimer le worktree pendant une session, et Claude le supprime avec l'outil [`ExitWorktree`](/docs/fr/tools-reference)
3405* Une session démarrée par [`claude remote-control`](/docs/fr/remote-control#start-a-remote-control-session) en mode `worktree` se termine sans plantage, et Claude Code ne trouve dans son worktree aucun fichier modifié ou non suivi ni aucun nouveau commit
3406* Vous arrêtez `claude remote-control` alors que des sessions qu'il a démarrées en mode `worktree` sont toujours en cours d'exécution, et Claude Code ne trouve dans leurs worktrees aucun fichier modifié ou non suivi ni aucun nouveau commit
3407
3408Lorsqu'un sous-agent ou un agent de workflow se termine, Claude Code conserve le worktree que votre hook WorktreeCreate a créé pour lui et n'exécute pas votre hook WorktreeRemove. Supprimez vous-même ces worktrees une fois le travail terminé.
3409
3410Claude Code ne vous demande rien avant l'exécution de votre hook pour un appel `ExitWorktree` ou un nettoyage `claude remote-control`. `ExitWorktree` refuse de supprimer un worktree créé par un hook à moins que l'appel ne passe [`discard_changes: true`](/docs/fr/agent-sdk/typescript#exitworktree), ce qui fait de votre hook la dernière vérification sur ce chemin.
3393 3411
3394Claude Code utilise git pour rechercher les fichiers modifiés ou non suivis ; il n'en trouve donc aucun dans un worktree qui n'est pas un checkout git ni situé dans l'un d'eux, même lorsque le répertoire contient du travail non commité. Vérifiez la présence de ce travail dans votre hook WorktreeRemove avant qu'il ne supprime quoi que ce soit.3412Claude Code utilise git pour rechercher les fichiers modifiés ou non suivis ; il n'en trouve donc aucun dans un worktree qui n'est pas un checkout git ni situé dans l'un d'eux, même lorsque le répertoire contient du travail non commité. Vérifiez la présence de ce travail dans votre hook WorktreeRemove avant qu'il ne supprime quoi que ce soit.
3395 3413
3396Pour les worktrees basés sur git, Claude Code gère automatiquement le nettoyage avec `git worktree remove`. Si vous avez configuré un hook WorktreeCreate, associez-le à un hook WorktreeRemove pour contrôler le nettoyage des worktrees qu'il crée :3414Pour les worktrees basés sur git, Claude Code gère automatiquement le nettoyage avec `git worktree remove`. Si vous avez configuré un hook WorktreeCreate, associez-le à un hook WorktreeRemove pour contrôler le nettoyage :
3397 3415
3398* **Aucun hook WorktreeRemove** : lorsque Claude Code supprime le worktree au moment où vous quittez une session de worktree, il se rabat sur `git worktree remove --force` sur le chemin renvoyé par votre hook WorktreeCreate, de sorte qu'un worktree reconnu par git est supprimé. Un worktree que git ne reconnaît pas, par exemple un worktree créé par votre hook avec un système de gestion de versions autre que git, reste sur le disque. Pour savoir ce que fait la suppression d'une [session en arrière-plan](/docs/fr/agent-view#what-deleting-a-session-removes) avec un worktree créé par un hook, consultez les règles de suppression de la vue des agents.3416* **Aucun hook WorktreeRemove** : Claude Code se rabat sur git pour une suppression à la sortie ou via `ExitWorktree`, et conserve le worktree lorsque `claude remote-control` effectue le nettoyage :
3417 * **Vous quittez une session worktree, ou Claude appelle `ExitWorktree`** : Claude Code supprime le chemin renvoyé par votre hook WorktreeCreate comme le ferait `git worktree remove --force`, de sorte qu'un worktree reconnu par git est supprimé. Un worktree que git ne reconnaît pas, par exemple un worktree créé par votre hook avec un système de gestion de versions autre que git, reste sur le disque.
3418 * **`claude remote-control` nettoie le worktree d'une session** : le worktree reste sur le disque, et le terminal qui exécute `claude remote-control` affiche `worktree removal failed, kept: <path>`.
3419 * **Vous supprimez une session en arrière-plan** : consultez [Ce que supprime la suppression d'une session](/docs/fr/agent-view#what-deleting-a-session-removes).
3399* **Le hook se termine avec 0** : le worktree est considéré comme supprimé. Claude Code ne lit rien d'autre du hook, assurez-vous donc que votre hook a bien supprimé le répertoire.3420* **Le hook se termine avec 0** : le worktree est considéré comme supprimé. Claude Code ne lit rien d'autre du hook, assurez-vous donc que votre hook a bien supprimé le répertoire.
3400* **Le hook se termine avec un code non nul** : la suppression échoue si le répertoire situé à `worktree_path` existe toujours ensuite, et le worktree reste sur le disque sans solution de repli git. Un hook qui a supprimé le répertoire avant de se terminer avec un code non nul est considéré comme ayant supprimé le worktree. Pour savoir comment l'échec est signalé, consultez [Entrée de WorktreeRemove](#worktreeremove-input).3421* **Le hook se termine avec un code non nul** : la suppression échoue si le répertoire situé à `worktree_path` existe toujours ensuite, et le worktree reste sur le disque sans solution de repli git. Un hook qui a supprimé le répertoire avant de se terminer avec un code non nul est considéré comme ayant supprimé le worktree. Pour savoir comment l'échec est signalé, consultez [Entrée de WorktreeRemove](#worktreeremove-input).
3401 3422
3403 3424
3404Claude Code ignore les [champs de sortie JSON](#json-output) d'un hook WorktreeRemove, tels que `systemMessage` et `continue`.3425Claude Code ignore les [champs de sortie JSON](#json-output) d'un hook WorktreeRemove, tels que `systemMessage` et `continue`.
3405 3426
3406Pour la suppression d'une session en arrière-plan, Claude Code vérifie le chemin de worktree enregistré avant d'exécuter le hook et refuse un chemin qui est un lien symbolique ou qui passe par un lien symbolique sous la racine du dépôt. Le hook s'exécute pour un worktree qui contient encore des fichiers uniquement lorsque vous confirmez la suppression dans la [vue des agents](/docs/fr/agent-view#what-deleting-a-session-removes) ; pour un tel worktree, [`claude rm`](/docs/fr/agent-view#manage-sessions-from-the-shell) conserve au contraire la session et le worktree. Avant la v2.1.216, le hook s'exécutait sur le chemin enregistré sans ces vérifications.3427Lors de la suppression d'une session en arrière-plan, Claude Code vérifie le chemin de worktree enregistré avant d'exécuter le hook et refuse un chemin qui est un lien symbolique ou qui passe par un lien symbolique situé sous la racine du dépôt. Sur ce chemin, le hook ne s'exécute pour un worktree qui contient encore des fichiers que lorsque vous confirmez la suppression dans la [vue des agents](/docs/fr/agent-view#what-deleting-a-session-removes) ; pour un tel worktree, [`claude rm`](/docs/fr/agent-view#manage-sessions-from-the-shell) conserve au contraire la session et le worktree. Avant la v2.1.216, le hook s'exécutait sur le chemin enregistré sans ces vérifications.
3407 3428
3408Claude Code transmet le chemin renvoyé par WorktreeCreate en tant que `worktree_path` dans l'entrée du hook. Cet exemple lit ce chemin et supprime le répertoire :3429Claude Code transmet le chemin renvoyé par WorktreeCreate en tant que `worktree_path` dans l'entrée du hook. Cet exemple lit ce chemin et supprime le répertoire :
3409 3430
3444 3465
3445* Le worktree reste sur le disque, et la commande et le stderr du hook sont envoyés au [log de débogage](#debug-hooks).3466* Le worktree reste sur le disque, et la commande et le stderr du hook sont envoyés au [log de débogage](#debug-hooks).
3446* Si vous supprimiez une session en arrière-plan, la session est également conservée. Le message de refus dans la [vue des agents](/docs/fr/agent-view#what-deleting-a-session-removes) indique comment le hook s'est terminé, par exemple `exited 1`, cite le début de son stderr et précise si une nouvelle suppression de la session supprime quand même le répertoire.3467* Si vous supprimiez une session en arrière-plan, la session est également conservée. Le message de refus dans la [vue des agents](/docs/fr/agent-view#what-deleting-a-session-removes) indique comment le hook s'est terminé, par exemple `exited 1`, cite le début de son stderr et précise si une nouvelle suppression de la session supprime quand même le répertoire.
3468* Si `claude remote-control` nettoyait le worktree d'une session, le terminal qui l'exécute affiche `worktree removal failed, kept: <path>`.
3447 3469
3448<h3 id="precompact">3470<h3 id="precompact">
3449 PreCompact3471 PreCompact