3321 WorktreeCreate3321 WorktreeCreate
3322</h3>3322</h3>
3323 3323
3324Viene eseguito quando viene creato un worktree, sia da `claude --worktree`, sia da un [subagent che usa `isolation: "worktree"`](/docs/it/sub-agents#choose-the-subagent-scope), sia per una [sessione in background](/docs/it/agent-view#how-file-edits-are-isolated) che Claude Code isola nel proprio worktree. Per impostazione predefinita Claude Code crea la copia di lavoro isolata con `git worktree`. Configurare un hook WorktreeCreate sostituisce questo comportamento git predefinito, permettendoti di usare un sistema di controllo versione diverso come SVN, Perforce o Mercurial.3324Viene eseguito quando Claude Code crea un worktree in casi come questi:
3325
3326* Avvii una sessione con `claude --worktree`
3327* Claude crea un worktree durante una sessione e vi si sposta con lo strumento [`EnterWorktree`](/docs/it/tools-reference)
3328* Un [subagent usa `isolation: "worktree"`](/docs/it/sub-agents#choose-the-subagent-scope)
3329* Un [workflow](/docs/it/workflows#migrate-many-files-in-parallel) esegue un agente nel proprio worktree
3330* Claude Code isola una [sessione in background](/docs/it/agent-view#how-file-edits-are-isolated) nel proprio worktree
3331* [`claude remote-control`](/docs/it/remote-control#start-a-remote-control-session) in modalità `worktree` avvia una sessione nel proprio worktree
3332
3333Quando Claude esegue `git worktree add` tramite lo strumento Bash invece di chiamare `EnterWorktree`, il tuo hook WorktreeCreate non viene eseguito. Per ispezionare o bloccare quel comando, aggiungi un hook [`PreToolUse`](#pretooluse) con il matcher `Bash`.
3334
3335Per impostazione predefinita Claude Code crea la copia di lavoro isolata con `git worktree`. Configurare un hook WorktreeCreate sostituisce quel comportamento Git predefinito, permettendoti di usare un sistema di controllo versione diverso come SVN, Perforce o Mercurial.
3325 3336
3326Poiché l'hook sostituisce interamente il comportamento predefinito, [`.worktreeinclude`](/docs/it/worktrees#copy-gitignored-files-into-worktrees) non viene elaborato. Se devi copiare file di configurazione locali come `.env` nel nuovo worktree, fallo all'interno del tuo script hook.3337Poiché l'hook sostituisce interamente il comportamento predefinito, [`.worktreeinclude`](/docs/it/worktrees#copy-gitignored-files-into-worktrees) non viene elaborato. Se devi copiare file di configurazione locali come `.env` nel nuovo worktree, fallo all'interno del tuo script hook.
3327 3338
3390* Esci da una [sessione worktree](/docs/it/worktrees#start-claude-in-a-worktree) interattiva e scegli di rimuovere il worktree quando Claude Code te lo chiede3401* Esci da una [sessione worktree](/docs/it/worktrees#start-claude-in-a-worktree) interattiva e scegli di rimuovere il worktree quando Claude Code te lo chiede
3391* Esci da una sessione worktree interattiva a cui non hai [dato un nome](/docs/it/sessions#name-your-sessions), Claude Code non trova file modificati o non tracciati e rimuove il worktree senza chiedertelo3402* Esci da una sessione worktree interattiva a cui non hai [dato un nome](/docs/it/sessions#name-your-sessions), Claude Code non trova file modificati o non tracciati e rimuove il worktree senza chiedertelo
3392* Elimini una [sessione in background](/docs/it/agent-view#what-deleting-a-session-removes) che viene eseguita nel worktree3403* Elimini una [sessione in background](/docs/it/agent-view#what-deleting-a-session-removes) che viene eseguita nel worktree
3404* Chiedi a Claude di uscire e rimuovere il worktree durante una sessione, e Claude lo rimuove con lo strumento [`ExitWorktree`](/docs/it/tools-reference)
3405* Una sessione che [`claude remote-control`](/docs/it/remote-control#start-a-remote-control-session) ha avviato in modalità `worktree` termina senza arresti anomali, e Claude Code non trova file modificati o non tracciati né nuovi commit nel suo worktree
3406* Arresti `claude remote-control` mentre le sessioni che ha avviato in modalità `worktree` sono ancora in esecuzione, e Claude Code non trova file modificati o non tracciati né nuovi commit nei loro worktree
3407
3408Quando un subagent o un agente di un workflow termina, Claude Code mantiene il worktree che il tuo hook WorktreeCreate ha creato per esso e non esegue il tuo hook WorktreeRemove. Rimuovi tu stesso quei worktree quando il lavoro è terminato.
3409
3410Claude Code non ti chiede conferma prima che il tuo hook venga eseguito per una chiamata a `ExitWorktree` o per una pulizia di `claude remote-control`. `ExitWorktree` si rifiuta di rimuovere un worktree creato da un hook a meno che la chiamata non passi [`discard_changes: true`](/docs/it/agent-sdk/typescript#exitworktree), il che rende il tuo hook l'ultimo controllo su quel percorso.
3393 3411
3394Claude Code usa git per cercare file modificati o non tracciati, quindi non ne trova nessuno in un worktree che non è un checkout git né si trova all'interno di uno, anche quando la directory contiene lavoro non sottoposto a commit. Controlla la presenza di tale lavoro nel tuo hook WorktreeRemove prima che elimini qualsiasi cosa.3412Claude Code usa git per cercare file modificati o non tracciati, quindi non ne trova nessuno in un worktree che non è un checkout git né si trova all'interno di uno, anche quando la directory contiene lavoro non sottoposto a commit. Controlla la presenza di tale lavoro nel tuo hook WorktreeRemove prima che elimini qualsiasi cosa.
3395 3413
3396Per i worktree basati su git, Claude Code gestisce la pulizia automaticamente con `git worktree remove`. Se hai configurato un hook WorktreeCreate, abbinalo a un hook WorktreeRemove per controllare la pulizia dei worktree che crea:3414Per i worktree basati su Git, Claude Code gestisce la pulizia automaticamente con `git worktree remove`. Se hai configurato un hook WorktreeCreate, abbinalo a un hook WorktreeRemove per controllare la pulizia:
3397 3415
3398* **Nessun hook WorktreeRemove**: quando Claude Code rimuove il worktree mentre esci da una sessione worktree, ripiega su `git worktree remove --force` sul percorso restituito dal tuo hook WorktreeCreate, quindi un worktree riconosciuto da git viene rimosso. Un worktree che git non riconosce, ad esempio uno creato dal tuo hook con un sistema di controllo versione non git, rimane su disco. Per sapere cosa comporta l'eliminazione di una [sessione in background](/docs/it/agent-view#what-deleting-a-session-removes) per un worktree creato da un hook, consulta le regole di eliminazione della vista agente.3416* **Nessun hook WorktreeRemove**: Claude Code ripiega su Git per una rimozione all'uscita o tramite `ExitWorktree`, e mantiene il worktree quando è `claude remote-control` a eseguire la pulizia:
3417 * **Esci da una sessione in un worktree, oppure Claude chiama `ExitWorktree`**: Claude Code rimuove il percorso restituito dal tuo hook WorktreeCreate come farebbe `git worktree remove --force`, quindi un worktree riconosciuto da Git viene rimosso. Un worktree che Git non riconosce, ad esempio uno che il tuo hook ha creato con un sistema di controllo versione diverso da Git, rimane su disco.
3418 * **`claude remote-control` rimuove il worktree di una sessione**: il worktree rimane su disco e il terminale in cui è in esecuzione `claude remote-control` mostra `worktree removal failed, kept: <path>`.
3419 * **Elimini una sessione in background**: consulta [Cosa rimuove l'eliminazione di una sessione](/docs/it/agent-view#what-deleting-a-session-removes).
3399* **L'hook esce con 0**: il worktree viene considerato rimosso. Claude Code non legge nient'altro dall'hook, quindi assicurati che il tuo hook abbia eliminato la directory.3420* **L'hook esce con 0**: il worktree viene considerato rimosso. Claude Code non legge nient'altro dall'hook, quindi assicurati che il tuo hook abbia eliminato la directory.
3400* **L'hook esce con un codice diverso da zero**: la rimozione fallisce se la directory in `worktree_path` esiste ancora in seguito, e il worktree rimane su disco senza fallback git. Un hook che ha eliminato la directory prima di uscire con un codice diverso da zero viene considerato come rimosso. Per sapere come viene segnalato il fallimento, consulta [Input di WorktreeRemove](#worktreeremove-input).3421* **L'hook esce con un codice diverso da zero**: la rimozione fallisce se la directory in `worktree_path` esiste ancora in seguito, e il worktree rimane su disco senza fallback git. Un hook che ha eliminato la directory prima di uscire con un codice diverso da zero viene considerato come rimosso. Per sapere come viene segnalato il fallimento, consulta [Input di WorktreeRemove](#worktreeremove-input).
3401 3422
3403 3424
3404Claude Code scarta i [campi di output JSON](#json-output) di un hook WorktreeRemove, come `systemMessage` e `continue`.3425Claude Code scarta i [campi di output JSON](#json-output) di un hook WorktreeRemove, come `systemMessage` e `continue`.
3405 3426
3406Per l'eliminazione di una sessione in background, Claude Code verifica il percorso del worktree memorizzato prima di eseguire l'hook e rifiuta un percorso che è un collegamento simbolico o che ne attraversa uno sotto la radice del repository. L'hook viene eseguito per un worktree che contiene ancora file solo quando confermi l'eliminazione nella [vista agente](/docs/it/agent-view#what-deleting-a-session-removes); per un worktree di questo tipo, [`claude rm`](/docs/it/agent-view#manage-sessions-from-the-shell) mantiene invece la sessione e il worktree. Prima della v2.1.216, l'hook veniva eseguito sul percorso memorizzato senza questi controlli.3427Per l'eliminazione di una sessione in background, Claude Code verifica il percorso del worktree memorizzato prima di eseguire l'hook e rifiuta un percorso che è un collegamento simbolico o che ne attraversa uno sotto la root del repository. In quel caso, l'hook viene eseguito per un worktree che contiene ancora file solo quando confermi l'eliminazione nella [vista degli agenti](/docs/it/agent-view#what-deleting-a-session-removes); per un worktree di questo tipo, [`claude rm`](/docs/it/agent-view#manage-sessions-from-the-shell) mantiene invece la sessione e il worktree. Prima della v2.1.216, l'hook veniva eseguito sul percorso memorizzato senza questi controlli.
3407 3428
3408Claude Code passa il percorso restituito da WorktreeCreate come `worktree_path` nell'input dell'hook. Questo esempio legge quel percorso e rimuove la directory:3429Claude Code passa il percorso restituito da WorktreeCreate come `worktree_path` nell'input dell'hook. Questo esempio legge quel percorso e rimuove la directory:
3409 3430
3444 3465
3445* Il worktree rimane su disco, e il comando e lo stderr dell'hook finiscono nel [log di debug](#debug-hooks).3466* Il worktree rimane su disco, e il comando e lo stderr dell'hook finiscono nel [log di debug](#debug-hooks).
3446* Se stavi eliminando una sessione in background, anche la sessione rimane. Il messaggio di rifiuto nella [vista agente](/docs/it/agent-view#what-deleting-a-session-removes) riporta come è terminato l'hook, ad esempio `exited 1`, cita l'inizio del suo stderr e indica se eliminare di nuovo la sessione rimuove comunque la directory.3467* Se stavi eliminando una sessione in background, anche la sessione rimane. Il messaggio di rifiuto nella [vista agente](/docs/it/agent-view#what-deleting-a-session-removes) riporta come è terminato l'hook, ad esempio `exited 1`, cita l'inizio del suo stderr e indica se eliminare di nuovo la sessione rimuove comunque la directory.
3468* Se `claude remote-control` stava rimuovendo il worktree di una sessione, il terminale in cui è in esecuzione mostra `worktree removal failed, kept: <path>`.
3447 3469
3448<h3 id="precompact">3470<h3 id="precompact">
3449 PreCompact3471 PreCompact