3321 WorktreeCreate3321 WorktreeCreate
3322</h3>3322</h3>
3323 3323
3324Se ejecuta cuando se está creando un worktree, ya sea desde `claude --worktree`, desde un [subagente que usa `isolation: "worktree"`](/docs/es/sub-agents#choose-the-subagent-scope), o para una [sesión en segundo plano](/docs/es/agent-view#how-file-edits-are-isolated) que Claude Code aísla en su propio worktree. De forma predeterminada, Claude Code crea la copia de trabajo aislada con `git worktree`. Configurar un hook WorktreeCreate reemplaza ese comportamiento predeterminado de git, lo que te permite usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.3324Se ejecuta cuando Claude Code crea un worktree en casos como estos:
3325
3326* Inicias una sesión con `claude --worktree`
3327* Claude crea un worktree durante una sesión y cambia a él con la herramienta [`EnterWorktree`](/docs/es/tools-reference)
3328* Un [subagente usa `isolation: "worktree"`](/docs/es/sub-agents#choose-the-subagent-scope)
3329* Un [flujo de trabajo](/docs/es/workflows#migrate-many-files-in-parallel) ejecuta un agente en su propio worktree
3330* Claude Code aísla una [sesión en segundo plano](/docs/es/agent-view#how-file-edits-are-isolated) en su propio worktree
3331* [`claude remote-control`](/docs/es/remote-control#start-a-remote-control-session) en modo `worktree` inicia una sesión en su propio worktree
3332
3333Cuando Claude ejecuta `git worktree add` mediante la herramienta Bash en lugar de llamar a `EnterWorktree`, tu hook WorktreeCreate no se ejecuta. Para inspeccionar o bloquear ese comando, agrega un hook [`PreToolUse`](#pretooluse) con el matcher `Bash`.
3334
3335De forma predeterminada, Claude Code crea la copia de trabajo aislada con `git worktree`. Configurar un hook WorktreeCreate reemplaza ese comportamiento predeterminado de git, lo que te permite usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.
3325 3336
3326Como el hook reemplaza por completo el comportamiento predeterminado, [`.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) no se procesa. Si necesitas copiar archivos de configuración locales como `.env` al nuevo worktree, hazlo dentro de tu script del hook.3337Como el hook reemplaza por completo el comportamiento predeterminado, [`.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) no se procesa. Si necesitas copiar archivos de configuración locales como `.env` al nuevo worktree, hazlo dentro de tu script del hook.
3327 3338
3390* Sales de una [sesión de worktree](/docs/es/worktrees#start-claude-in-a-worktree) interactiva y eliges eliminar el worktree cuando Claude Code te lo pregunta3401* Sales de una [sesión de worktree](/docs/es/worktrees#start-claude-in-a-worktree) interactiva y eliges eliminar el worktree cuando Claude Code te lo pregunta
3391* Sales de una sesión de worktree interactiva a la que no le has [puesto nombre](/docs/es/sessions#name-your-sessions), Claude Code no encuentra archivos modificados ni sin seguimiento, y elimina el worktree sin preguntarte3402* Sales de una sesión de worktree interactiva a la que no le has [puesto nombre](/docs/es/sessions#name-your-sessions), Claude Code no encuentra archivos modificados ni sin seguimiento, y elimina el worktree sin preguntarte
3392* Eliminas una [sesión en segundo plano](/docs/es/agent-view#what-deleting-a-session-removes) que se ejecuta en el worktree3403* Eliminas una [sesión en segundo plano](/docs/es/agent-view#what-deleting-a-session-removes) que se ejecuta en el worktree
3404* Le pides a Claude que salga y elimine el worktree durante una sesión, y Claude lo elimina con la herramienta [`ExitWorktree`](/docs/es/tools-reference)
3405* Una sesión que [`claude remote-control`](/docs/es/remote-control#start-a-remote-control-session) inició en modo `worktree` termina sin fallar, y Claude Code no encuentra archivos modificados ni sin seguimiento ni commits nuevos en su worktree
3406* Detienes `claude remote-control` mientras las sesiones que inició en modo `worktree` siguen en ejecución, y Claude Code no encuentra archivos modificados ni sin seguimiento ni commits nuevos en sus worktrees
3407
3408Cuando un subagente o un agente de un flujo de trabajo termina, Claude Code conserva el worktree que tu hook WorktreeCreate creó para él y no ejecuta tu hook WorktreeRemove. Elimina esos worktrees tú mismo cuando el trabajo esté terminado.
3409
3410Claude Code no te pregunta antes de que tu hook se ejecute para una llamada a `ExitWorktree` o una limpieza de `claude remote-control`. `ExitWorktree` se niega a eliminar un worktree creado por un hook a menos que la llamada pase [`discard_changes: true`](/docs/es/agent-sdk/typescript#exitworktree), lo que convierte a tu hook en la última comprobación en esa ruta.
3393 3411
3394Claude Code usa git para buscar archivos modificados o sin seguimiento, por lo que no encuentra ninguno en un worktree que no sea un checkout de git ni esté dentro de uno, incluso cuando el directorio contiene trabajo sin confirmar. Comprueba si existe ese trabajo en tu hook WorktreeRemove antes de que elimine cualquier cosa.3412Claude Code usa git para buscar archivos modificados o sin seguimiento, por lo que no encuentra ninguno en un worktree que no sea un checkout de git ni esté dentro de uno, incluso cuando el directorio contiene trabajo sin confirmar. Comprueba si existe ese trabajo en tu hook WorktreeRemove antes de que elimine cualquier cosa.
3395 3413
3396Para los worktrees basados en git, Claude Code gestiona la limpieza automáticamente con `git worktree remove`. Si configuraste un hook WorktreeCreate, combínalo con un hook WorktreeRemove para controlar la limpieza de los worktrees que crea:3414Para los worktrees basados en git, Claude Code gestiona la limpieza automáticamente con `git worktree remove`. Si configuraste un hook WorktreeCreate, combínalo con un hook WorktreeRemove para controlar la limpieza:
3397 3415
3398* **Sin hook WorktreeRemove**: cuando Claude Code elimina el worktree al salir de una sesión de worktree, recurre a `git worktree remove --force` sobre la ruta que devolvió tu hook WorktreeCreate, por lo que se elimina un worktree que git reconoce. Un worktree que git no reconoce, por ejemplo uno que tu hook creó con un sistema de control de versiones que no es git, permanece en el disco. Para saber qué hace la eliminación de una [sesión en segundo plano](/docs/es/agent-view#what-deleting-a-session-removes) con un worktree creado por un hook, consulta las reglas de eliminación de la vista de agentes.3416* **Sin hook WorktreeRemove**: Claude Code recurre a git para una eliminación al salir o mediante `ExitWorktree`, y conserva el worktree cuando `claude remote-control` hace la limpieza:
3417 * **Sales de una sesión de worktree, o Claude llama a `ExitWorktree`**: Claude Code elimina la ruta que devolvió tu hook WorktreeCreate como lo haría `git worktree remove --force`, así que se elimina un worktree que git reconoce. Un worktree que git no reconoce, por ejemplo uno que tu hook creó con un sistema de control de versiones distinto de git, se queda en el disco.
3418 * **`claude remote-control` limpia el worktree de una sesión**: el worktree se queda en el disco, y la terminal que ejecuta `claude remote-control` muestra `worktree removal failed, kept: <path>`.
3419 * **Eliminas una sesión en segundo plano**: consulta [Qué elimina borrar una sesión](/docs/es/agent-view#what-deleting-a-session-removes).
3399* **El hook termina con 0**: el worktree se considera eliminado. Claude Code no lee nada más del hook, así que asegúrate de que tu hook haya eliminado el directorio.3420* **El hook termina con 0**: el worktree se considera eliminado. Claude Code no lee nada más del hook, así que asegúrate de que tu hook haya eliminado el directorio.
3400* **El hook termina con un código distinto de cero**: la eliminación falla si el directorio en `worktree_path` sigue existiendo después, y el worktree permanece en el disco sin recurrir a git. Un hook que eliminó el directorio antes de terminar con un código distinto de cero se considera eliminado. Para saber cómo se informa el fallo, consulta [Entrada de WorktreeRemove](#worktreeremove-input).3421* **El hook termina con un código distinto de cero**: la eliminación falla si el directorio en `worktree_path` sigue existiendo después, y el worktree permanece en el disco sin recurrir a git. Un hook que eliminó el directorio antes de terminar con un código distinto de cero se considera eliminado. Para saber cómo se informa el fallo, consulta [Entrada de WorktreeRemove](#worktreeremove-input).
3401 3422
3403 3424
3404Claude Code descarta los [campos de salida JSON](#json-output) de un hook WorktreeRemove, como `systemMessage` y `continue`.3425Claude Code descarta los [campos de salida JSON](#json-output) de un hook WorktreeRemove, como `systemMessage` y `continue`.
3405 3426
3406Al eliminar una sesión en segundo plano, Claude Code verifica la ruta del worktree almacenada antes de ejecutar el hook y rechaza una ruta que sea un enlace simbólico o que pase por uno debajo de la raíz del repositorio. El hook se ejecuta para un worktree que todavía contiene archivos solo cuando confirmas la eliminación en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes); para un worktree así, [`claude rm`](/docs/es/agent-view#manage-sessions-from-the-shell) conserva la sesión y el worktree. Antes de v2.1.216, el hook se ejecutaba sobre la ruta almacenada sin estas comprobaciones.3427Al eliminar una sesión en segundo plano, Claude Code verifica la ruta del worktree almacenada antes de ejecutar el hook y rechaza una ruta que sea un enlace simbólico o que pase por uno por debajo de la raíz del repositorio. En esa ruta, el hook se ejecuta para un worktree que aún contiene archivos solo cuando confirmas la eliminación en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes); para un worktree así, [`claude rm`](/docs/es/agent-view#manage-sessions-from-the-shell) conserva la sesión y el worktree en su lugar. Antes de v2.1.216, el hook se ejecutaba sobre la ruta almacenada sin estas comprobaciones.
3407 3428
3408Claude Code pasa la ruta devuelta por WorktreeCreate como `worktree_path` en la entrada del hook. Este ejemplo lee esa ruta y elimina el directorio:3429Claude Code pasa la ruta devuelta por WorktreeCreate como `worktree_path` en la entrada del hook. Este ejemplo lee esa ruta y elimina el directorio:
3409 3430
3444 3465
3445* El worktree permanece en el disco, y el comando del hook y su stderr van al [registro de depuración](#debug-hooks).3466* El worktree permanece en el disco, y el comando del hook y su stderr van al [registro de depuración](#debug-hooks).
3446* Si estabas eliminando una sesión en segundo plano, la sesión también permanece. El mensaje de rechazo en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes) informa cómo terminó el hook, como `exited 1`, cita el inicio de su stderr e indica si volver a eliminar la sesión elimina el directorio de todos modos.3467* Si estabas eliminando una sesión en segundo plano, la sesión también permanece. El mensaje de rechazo en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes) informa cómo terminó el hook, como `exited 1`, cita el inicio de su stderr e indica si volver a eliminar la sesión elimina el directorio de todos modos.
3468* Si `claude remote-control` estaba limpiando el worktree de una sesión, la terminal que lo ejecuta muestra `worktree removal failed, kept: <path>`.
3447 3469
3448<h3 id="precompact">3470<h3 id="precompact">
3449 PreCompact3471 PreCompact