3321 WorktreeCreate3321 WorktreeCreate
3322</h3>3322</h3>
3323 3323
3324É executado quando um worktree está sendo criado, seja a partir de `claude --worktree`, de um [subagente usando `isolation: "worktree"`](/docs/pt/sub-agents#choose-the-subagent-scope), ou para uma [sessão em segundo plano](/docs/pt/agent-view#how-file-edits-are-isolated) que o Claude Code isola em seu próprio worktree. Por padrão, o Claude Code cria a cópia de trabalho isolada com `git worktree`. Configurar um hook WorktreeCreate substitui esse comportamento padrão do git, permitindo que você use um sistema de controle de versão diferente, como SVN, Perforce ou Mercurial.3324É executado quando o Claude Code cria um worktree em casos como estes:
3325
3326* Você inicia uma sessão com `claude --worktree`
3327* O Claude cria um worktree durante uma sessão e muda para ele com a ferramenta [`EnterWorktree`](/docs/pt/tools-reference)
3328* Um [subagente usa `isolation: "worktree"`](/docs/pt/sub-agents#choose-the-subagent-scope)
3329* Um [fluxo de trabalho](/docs/pt/workflows#migrate-many-files-in-parallel) executa um agente em seu próprio worktree
3330* O Claude Code isola uma [sessão em segundo plano](/docs/pt/agent-view#how-file-edits-are-isolated) em seu próprio worktree
3331* [`claude remote-control`](/docs/pt/remote-control#start-a-remote-control-session) no modo `worktree` inicia uma sessão em seu próprio worktree
3332
3333Quando o Claude executa `git worktree add` por meio da ferramenta Bash em vez de chamar `EnterWorktree`, seu hook WorktreeCreate não é executado. Para inspecionar ou bloquear esse comando, adicione um hook [`PreToolUse`](#pretooluse) com o matcher `Bash`.
3334
3335Por padrão, o Claude Code cria a cópia de trabalho isolada com `git worktree`. Configurar um hook WorktreeCreate substitui esse comportamento padrão do git, permitindo que você use um sistema de controle de versão diferente, como SVN, Perforce ou Mercurial.
3325 3336
3326Como o hook substitui totalmente o comportamento padrão, o [`.worktreeinclude`](/docs/pt/worktrees#copy-gitignored-files-into-worktrees) não é processado. Se você precisar copiar arquivos de configuração locais como `.env` para o novo worktree, faça isso dentro do seu script de hook.3337Como o hook substitui totalmente o comportamento padrão, o [`.worktreeinclude`](/docs/pt/worktrees#copy-gitignored-files-into-worktrees) não é processado. Se você precisar copiar arquivos de configuração locais como `.env` para o novo worktree, faça isso dentro do seu script de hook.
3327 3338
3390* Você sai de uma [sessão de worktree](/docs/pt/worktrees#start-claude-in-a-worktree) interativa e opta por remover o worktree quando o Claude Code pergunta3401* Você sai de uma [sessão de worktree](/docs/pt/worktrees#start-claude-in-a-worktree) interativa e opta por remover o worktree quando o Claude Code pergunta
3391* Você sai de uma sessão de worktree interativa que não [nomeou](/docs/pt/sessions#name-your-sessions), o Claude Code não encontra arquivos alterados ou não rastreados, e remove o worktree sem perguntar3402* Você sai de uma sessão de worktree interativa que não [nomeou](/docs/pt/sessions#name-your-sessions), o Claude Code não encontra arquivos alterados ou não rastreados, e remove o worktree sem perguntar
3392* Você exclui uma [sessão em segundo plano](/docs/pt/agent-view#what-deleting-a-session-removes) que é executada no worktree3403* Você exclui uma [sessão em segundo plano](/docs/pt/agent-view#what-deleting-a-session-removes) que é executada no worktree
3404* Você pede ao Claude para sair e remover o worktree durante uma sessão, e o Claude o remove com a ferramenta [`ExitWorktree`](/docs/pt/tools-reference)
3405* Uma sessão que [`claude remote-control`](/docs/pt/remote-control#start-a-remote-control-session) iniciou no modo `worktree` termina sem travar, e o Claude Code não encontra arquivos alterados ou não rastreados nem novos commits em seu worktree
3406* Você para o `claude remote-control` enquanto sessões que ele iniciou no modo `worktree` ainda estão em execução, e o Claude Code não encontra arquivos alterados ou não rastreados nem novos commits em seus worktrees
3407
3408Quando um subagente ou um agente de fluxo de trabalho termina, o Claude Code mantém o worktree que seu hook WorktreeCreate criou para ele e não executa seu hook WorktreeRemove. Remova esses worktrees você mesmo quando o trabalho estiver concluído.
3409
3410O Claude Code não pede confirmação antes de seu hook ser executado para uma chamada `ExitWorktree` ou uma limpeza do `claude remote-control`. `ExitWorktree` se recusa a remover um worktree criado por hook, a menos que a chamada passe [`discard_changes: true`](/docs/pt/agent-sdk/typescript#exitworktree), o que torna seu hook a última verificação nesse caminho.
3393 3411
3394O Claude Code usa o git para procurar arquivos alterados ou não rastreados, então não encontra nenhum em um worktree que não seja um checkout git nem esteja dentro de um, mesmo quando o diretório contém trabalho não commitado. Verifique esse trabalho no seu hook WorktreeRemove antes que ele exclua qualquer coisa.3412O Claude Code usa o git para procurar arquivos alterados ou não rastreados, então não encontra nenhum em um worktree que não seja um checkout git nem esteja dentro de um, mesmo quando o diretório contém trabalho não commitado. Verifique esse trabalho no seu hook WorktreeRemove antes que ele exclua qualquer coisa.
3395 3413
3396Para worktrees baseados em git, o Claude Code cuida da limpeza automaticamente com `git worktree remove`. Se você configurou um hook WorktreeCreate, combine-o com um hook WorktreeRemove para controlar a limpeza dos worktrees que ele cria:3414Para worktrees baseados em git, o Claude Code faz a limpeza automaticamente com `git worktree remove`. Se você configurou um hook WorktreeCreate, combine-o com um hook WorktreeRemove para controlar a limpeza:
3397 3415
3398* **Sem hook WorktreeRemove**: quando o Claude Code remove o worktree ao sair de uma sessão de worktree, ele recorre a `git worktree remove --force` no caminho que seu hook WorktreeCreate retornou, de modo que um worktree que o git reconhece é removido. Um worktree que o git não reconhece, por exemplo um que seu hook criou com um sistema de controle de versão que não seja git, permanece no disco. Para saber o que a exclusão de uma [sessão em segundo plano](/docs/pt/agent-view#what-deleting-a-session-removes) faz com um worktree criado por hook, consulte as regras de exclusão do agent view.3416* **Sem hook WorktreeRemove**: o Claude Code recorre ao git para uma remoção na saída ou por meio de `ExitWorktree`, e mantém o worktree quando o `claude remote-control` faz a limpeza:
3417 * **Você sai de uma sessão de worktree, ou o Claude chama `ExitWorktree`**: o Claude Code remove o caminho que seu hook WorktreeCreate retornou como `git worktree remove --force` faria, de modo que um worktree que o git reconhece é removido. Um worktree que o git não reconhece, por exemplo um que seu hook criou com um sistema de controle de versão que não seja git, permanece no disco.
3418 * **O `claude remote-control` limpa o worktree de uma sessão**: o worktree permanece no disco, e o terminal que executa `claude remote-control` mostra `worktree removal failed, kept: <path>`.
3419 * **Você exclui uma sessão em segundo plano**: consulte [O que a exclusão de uma sessão remove](/docs/pt/agent-view#what-deleting-a-session-removes).
3399* **O hook sai com 0**: o worktree conta como removido. O Claude Code não lê mais nada do hook, então certifique-se de que seu hook excluiu o diretório.3420* **O hook sai com 0**: o worktree conta como removido. O Claude Code não lê mais nada do hook, então certifique-se de que seu hook excluiu o diretório.
3400* **O hook sai com código diferente de zero**: a remoção falha se o diretório em `worktree_path` ainda existir depois, e o worktree permanece no disco sem fallback para o git. Um hook que excluiu o diretório antes de sair com código diferente de zero conta como removido. Para saber como a falha é relatada, consulte [Entrada de WorktreeRemove](#worktreeremove-input).3421* **O hook sai com código diferente de zero**: a remoção falha se o diretório em `worktree_path` ainda existir depois, e o worktree permanece no disco sem fallback para o git. Um hook que excluiu o diretório antes de sair com código diferente de zero conta como removido. Para saber como a falha é relatada, consulte [Entrada de WorktreeRemove](#worktreeremove-input).
3401 3422
3403 3424
3404O Claude Code descarta os [campos de saída JSON](#json-output) de um hook WorktreeRemove, como `systemMessage` e `continue`.3425O Claude Code descarta os [campos de saída JSON](#json-output) de um hook WorktreeRemove, como `systemMessage` e `continue`.
3405 3426
3406Para a exclusão de uma sessão em segundo plano, o Claude Code verifica o caminho do worktree armazenado antes de executar o hook e recusa um caminho que seja um link simbólico ou que passe por um abaixo da raiz do repositório. O hook é executado para um worktree que ainda contém arquivos somente quando você confirma a exclusão no [agent view](/docs/pt/agent-view#what-deleting-a-session-removes); para esse tipo de worktree, [`claude rm`](/docs/pt/agent-view#manage-sessions-from-the-shell) mantém a sessão e o worktree. Antes da v2.1.216, o hook era executado no caminho armazenado sem essas verificações.3427Para a exclusão de uma sessão em segundo plano, o Claude Code verifica o caminho do worktree armazenado antes de executar o hook e recusa um caminho que seja um link simbólico ou passe por um abaixo da raiz do repositório. Nesse caminho, o hook é executado para um worktree que ainda contém arquivos somente quando você confirma a exclusão na [visualização de agentes](/docs/pt/agent-view#what-deleting-a-session-removes); para esse worktree, [`claude rm`](/docs/pt/agent-view#manage-sessions-from-the-shell) mantém a sessão e o worktree. Antes da v2.1.216, o hook era executado no caminho armazenado sem essas verificações.
3407 3428
3408O Claude Code passa o caminho retornado por WorktreeCreate como `worktree_path` na entrada do hook. Este exemplo lê esse caminho e remove o diretório:3429O Claude Code passa o caminho retornado por WorktreeCreate como `worktree_path` na entrada do hook. Este exemplo lê esse caminho e remove o diretório:
3409 3430
3444 3465
3445* O worktree permanece no disco, e o comando do hook e o stderr vão para o [log de depuração](#debug-hooks).3466* O worktree permanece no disco, e o comando do hook e o stderr vão para o [log de depuração](#debug-hooks).
3446* Se você estava excluindo uma sessão em segundo plano, a sessão também permanece. A mensagem de recusa no [agent view](/docs/pt/agent-view#what-deleting-a-session-removes) informa como o hook terminou, como `exited 1`, cita o início do stderr e diz se excluir a sessão novamente remove o diretório mesmo assim.3467* Se você estava excluindo uma sessão em segundo plano, a sessão também permanece. A mensagem de recusa no [agent view](/docs/pt/agent-view#what-deleting-a-session-removes) informa como o hook terminou, como `exited 1`, cita o início do stderr e diz se excluir a sessão novamente remove o diretório mesmo assim.
3468* Se o `claude remote-control` estava limpando o worktree de uma sessão, o terminal que o executa mostra `worktree removal failed, kept: <path>`.
3447 3469
3448<h3 id="precompact">3470<h3 id="precompact">
3449 PreCompact3471 PreCompact