Los worktrees requieren un repositorio de git; para otros sistemas de control de versiones, configure hooks para reemplazar la lógica de git. En la aplicación de escritorio, seleccione la opción worktree cuando inicie una sesión para darle su propio worktree.
Inicie Claude en un worktree
Pase--worktree o -w con un nombre para crear un worktree aislado e iniciar Claude en él. De forma predeterminada, el worktree se crea bajo .claude/worktrees/<name>/ en la raíz de su repositorio, en una nueva rama llamada worktree-<name>:
bright-running-fox.
Las ejecuciones interactivas requieren confianza del espacio de trabajo: si no ha ejecutado Claude en el directorio antes, ejecute claude una vez allí para aceptar el diálogo de confianza, o --worktree sale con un error pidiéndole que lo haga. Las ejecuciones no interactivas con -p omiten la verificación de confianza, por lo que claude -p --worktree procede sin ella.
Configure el entorno del worktree
Un worktree es un checkout fresco, por lo que inicialice su entorno de desarrollo allí: pida a Claude que instale dependencias, o ejecute la configuración de su proyecto usted mismo en el directorio del worktree bajo.claude/worktrees/. Para llevar archivos ignorados por git como .env a cada nuevo worktree automáticamente, agregue un archivo .worktreeinclude.
Pida a Claude que cree un worktree
También puede pedirle a Claude que “trabaje en un worktree” durante una sesión, y creará uno con la herramientaEnterWorktree. Una vez en un worktree, Claude puede cambiar directamente a otro bajo .claude/worktrees/ llamando a EnterWorktree con la ruta de destino; el worktree anterior permanece en el disco sin cambios.
Cuando Claude entra en una ruta fuera del directorio .claude/worktrees/ del repositorio, Claude Code solicita su aprobación primero, porque el movimiento toma el directorio de trabajo de la sesión, acceso de escritura, y configuración del proyecto como CLAUDE.md y configuración a esa ubicación. Una regla de permiso de EnterWorktree o elegir “no preguntar de nuevo” no suprime este aviso; solo el modo bypassPermissions lo omite. Antes de v2.1.206, Claude podía entrar en cualquier ruta de worktree existente sin preguntar.
Las rutas de hooks no siguen el worktree. Después de que Claude entra en un worktree, Claude Code mantiene
${CLAUDE_PROJECT_DIR} en sus hooks donde estaba y pasa la ruta del worktree a ellos de una manera diferente:${CLAUDE_PROJECT_DIR}permanece en su lugar: todavía apunta a la raíz del proyecto donde comenzó la sesión, por lo que un comando de hook como${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.shtodavía ejecuta el script en el checkout principal.cwdsigue a Claude: el campocwden el JSON de entrada del hook es la raíz del worktree, y se mueve nuevamente cuando Claude ejecutacd. Léalo cuando un hook necesite la ruta del worktree.
Limpie worktrees
Cuando sale de una sesión de worktree interactiva, Claude verifica el worktree para el trabajo que la eliminación eliminaría: archivos cambiados o sin seguimiento, trabajo sin confirmar dentro de submódulos extraídos y nuevos commits.- El worktree está limpio: para una sesión sin nombre, Claude elimina el worktree y su rama automáticamente. Una sesión nombrada le solicita primero para que pueda mantener el worktree para más tarde
- El worktree tiene trabajo en él: Claude le solicita que mantenga o elimine el worktree. Mantener preserva el directorio y la rama para que pueda regresar más tarde. Eliminar borra el directorio del worktree y su rama, junto con todo el trabajo en ellos
- El estado del worktree no se puede verificar: cuando Claude Code no puede contar los cambios del worktree o no puede inspeccionar los checkouts de sus submódulos, le solicita en lugar de eliminar el worktree automáticamente. La solicitud nombra lo que no pudo verificar
-p no tienen solicitud de salida, por lo que Claude no limpia sus worktrees, y Claude Code deja el bloqueo que tomó en cada uno en la creación en su lugar hasta que una limpieza de bloqueo obsoleto posterior lo libere. Para eliminar uno, ejecute git worktree remove; si git se niega porque el worktree está bloqueado, ejecute git worktree unlock en él primero.
En Windows, eliminar un worktree no elimina archivos fuera de él. Si una carpeta dentro del worktree es un enlace a otro lugar, como una unión NTFS o un enlace simbólico de directorio, Claude Code elimina solo el enlace y mantiene la carpeta a la que apunta. Antes de v2.1.205, eliminar un worktree con un enlace anidado en un subdirectorio podría eliminar la carpeta a la que apuntaba.
Reanude una sesión de worktree
Cuando reanuda una sesión que estaba dentro de un worktree, Claude Code devuelve la sesión a ese worktree. Esto se aplica a reanudaciones interactivas, a--continue y --resume en modo no interactivo con -p, y al Agent SDK. De vuelta dentro del worktree, Claude aún puede salir de él con la herramienta ExitWorktree.
Antes de devolver la sesión a su worktree, Claude Code verifica que el worktree siga siendo un checkout separado del principal, y se niega a reingresar a un worktree que falla la verificación. Para un git worktree, la verificación lee sus metadatos de git. Un worktree sin metadatos de git, como uno que un hook WorktreeCreate creó, puede pasar la verificación; los casos que Claude Code aún se niega están listados con sus recuperaciones bajo Claude Code se niega a usar un worktree. Para los mensajes y cómo recuperarse de cada uno, consulte La sesión se reanuda fuera de su worktree.
Dónde lanza y cómo reanuda, cambian lo que Claude Code reingresa:
- Directorio de lanzamiento: reanude desde el checkout principal u otro directorio del repositorio. Claude Code reingresa a un worktree que creó con git bajo
.claude/worktrees/incluso cuando lanza desde dentro de él. Cuando lanza desde dentro de cualquier otro worktree, Claude Code lo reingresa solo si puede respaldarlo desde allí: un worktree que es su propio repositorio, uno sin metadatos de git, o un lanzamiento desde un subdirectorio de un worktree que creó congit worktree addse niega, por lo que lance esos desde el checkout principal. --fork-session: la sesión bifurcada comienza en el directorio desde el que lanzó Claude, y Claude Code deja el worktree de la sesión original sin cambios.- Worktree eliminado: si el directorio del worktree ya no existe, Claude Code reanuda la sesión en el directorio desde el que lanzó Claude. Le dice que el worktree se ha ido y borra el enlace del worktree de la sesión.
Antes de v2.1.212, una reanudación no interactiva permanecía en el directorio de inicio y
ExitWorktree reportaba que no había una sesión de worktree activa para salir./cd lo hace, por lo que /desktop y --resume la encuentran allí. Salir la mueve de la misma manera. Un worktree creado por un hook WorktreeCreate mantiene su transcripción en el directorio de lanzamiento. Requiere Claude Code v2.1.198 o posterior.
Cómo Claude Code aplica el aislamiento
Mientras una sesión está aislada en un worktree, Claude Code bloquea las llamadas de herramientas que las verificaciones a continuación definen. Las mismas reglas se aplican si inició la sesión con--worktree, Claude entró en un worktree con EnterWorktree, o reanudó una sesión de worktree.
El mismo cumplimiento cubre cada subagente que Claude genera desde la sesión aislada. Se aplica si la sesión es interactiva o se ejecuta en el fondo. Los subagentes que se ejecutan en su propio worktree llevan las mismas verificaciones. Su historial de versiones está bajo Escribir archivos de subagentes.
Claude Code aplica cuatro verificaciones:
- Ediciones de archivos: Claude Code bloquea un
Edit,Write, oNotebookEditque apunta a una ruta en el checkout principal. - Directorio de trabajo del comando: Claude Code bloquea un comando Bash, PowerShell, o Monitor cuyo directorio de trabajo se resuelve al checkout principal, o cuyo directorio de trabajo no puede verificar que permanece fuera de él.
- Redirecciones de git: Claude Code bloquea un comando Bash o Monitor que redirige git al checkout principal. La redirección puede venir a través de
git -C,--git-dir, una variableGIT_DIRoGIT_WORK_TREE, o uncdal checkout principal antes de ejecutar git. - Forma del comando: Claude Code bloquea un comando Bash o Monitor cuando no puede verificar desde el texto del comando que cualquier git que ejecute el comando permanece dentro del worktree. Eso sucede, por ejemplo, cuando el nombre del comando se calcula en tiempo de ejecución, cuando la sintaxis no se puede analizar, o cuando una expansión como
${!name}o${ command; }podría ejecutar un comando que el texto no especifica. Claude Code le dice a Claude cómo reescribir el comando rechazado, como dividirlo en comandos simples y separados. No puede desactivar esta verificación.
Aisle subagentes con worktrees
Los subagentes pueden ejecutarse en sus propios worktrees para que las ediciones paralelas no entren en conflicto. Pida a Claude que “use worktrees para sus agentes”, o hágalo permanente para un subagente personalizado agregandoisolation: worktree a su frontmatter.
Este subagente en .claude/agents/ siempre se ejecuta en su propio worktree:
--worktree, por lo que se ramifican desde la rama predeterminada de su repositorio a menos que worktree.baseRef esté configurado en "head".
Limpie worktrees de subagentes y sesiones en segundo plano
Claude Code ejecuta un barrido periódico que elimina worktrees que Claude creó para subagentes y sesiones en segundo plano una vez que son más antiguos que su configuracióncleanupPeriodDays, siguiendo las reglas de barrido de retención.
Cuando envía al fondo una sesión --worktree, su worktree se convierte en un worktree de sesión en segundo plano que el barrido puede eliminar. El barrido deja un worktree en su lugar en estos casos:
- El worktree aún contiene trabajo: archivos cambiados o sin seguimiento, o commits no enviados.
- Un submódulo extraído en el worktree contiene archivos cambiados o sin seguimiento, o Claude Code no puede inspeccionar los submódulos del worktree. Esta verificación requiere Claude Code v2.1.274 o posterior.
- Uno de los cuatro casos que también bloquean la creación de worktree se aplica: Claude Code no puede determinar qué controladores de filtro define la configuración del repositorio, o encuentra una configuración allí que no puede desactivar.
- El worktree pertenece a una sesión
--worktreeque no ha enviado al fondo, sin importar su antigüedad. - Creó el worktree usted mismo con
git worktree add, incluso si luego ejecutó una sesión--worktree <name>en él y envió esa sesión al fondo.
WorktreeCreate creó. Antes de v2.1.246, el barrido no verificaba el marcador, y podría eliminar un worktree que creó usted mismo cuando un registro de sesión en segundo plano antiguo apuntaba a él.
Mientras un agente se está ejecutando, Claude Code mantiene un git worktree lock en su worktree para que la limpieza concurrente no pueda eliminarlo, y libera el bloqueo cuando el agente termina. Claude Code mantiene el mismo bloqueo en el worktree que creó para una sesión enviada al fondo mientras la sesión se ejecuta, por lo que el barrido deja el worktree en su lugar y git worktree remove se niega a eliminarlo.
El barrido también libera un bloqueo que Claude Code estableció para una sesión cuyo proceso ha salido, por lo que una sesión en segundo plano eliminada no deja su worktree permanentemente bloqueado. El barrido nunca libera un bloqueo que estableció usted mismo con git worktree lock. Antes de v2.1.210, un bloqueo dejado por una sesión eliminada permanecía en su lugar hasta que ejecutaba git worktree unlock.
Para limpiar un worktree que el barrido mantiene, ejecute git worktree remove, agregando --force si el worktree tiene cambios no confirmados o archivos sin seguimiento. Si git se niega porque el worktree está bloqueado, ejecute git worktree unlock en él primero.
Personalice la creación de worktrees
Los valores predeterminados de Claude Code para crear worktrees cubren la mayoría de sesiones: los crea bajo.claude/worktrees/, los ramifica desde la rama predeterminada de su repositorio, y verifica solo archivos rastreados. Las opciones en esta sección cambian esos valores predeterminados.
Elija la rama base
Los nuevos worktrees se ramifican desde la rama predeterminada del repositorio, por lo que la mayoría de sesiones no necesitan esta configuración. Establezcaworktree.baseRef en configuración para ramificarse desde su trabajo actual en su lugar. La configuración acepta dos valores:
"fresh"(predeterminado): ramifique desde la rama predeterminada del repositorio en el remoto, generalmentemain, para que el worktree comience desde un árbol limpio que coincida con el remoto."head": ramifique desde suHEADlocal actual, para que el worktree lleve sus commits no enviados y estado de rama de característica. Use esto cuando aisle subagentes que necesiten operar en trabajo en progreso. Dentro de un worktree,"head"se resuelve a eseHEADdel worktree, no al del checkout principal.
worktree.baseRef en un nombre de rama. Para iniciar un worktree desde una rama existente específica, créelo con git directamente.
Para una base "fresh", Claude Code mantiene origin/HEAD actual: cuando el repositorio no ha sido obtenido en las últimas 24 horas, obtiene la rama predeterminada, limitado a cinco segundos, y usa la ref almacenada localmente en caché si la obtención falla. Si no hay remoto configurado, u origin/HEAD no está almacenado en caché localmente y no se puede obtener, el worktree vuelve a su HEAD local actual. Antes de v2.1.208, un worktree fresco usaba lo que origin/HEAD ya estaba almacenado en caché localmente.
Este ejemplo hace que cada nuevo worktree se ramifique desde su trabajo actual:
Ramifique desde una solicitud de extracción
Para ramificarse desde una solicitud de extracción o solicitud de fusión específica, pase--worktree el número prefijado con #, una URL de solicitud de extracción de GitHub, o una URL de solicitud de fusión de GitLab como https://gitlab.com/group/repo/-/merge_requests/123. Claude Code obtiene el commit de cabeza de ese cambio de origin y crea el worktree en .claude/worktrees/pr-<number>. Entrecomille el argumento para que su shell no trate # como el inicio de un comentario:
origin del repositorio, y elige la ruta de obtención por el host de origin:
- github.com: obtiene
pull/<number>/head - gitlab.com: obtiene
merge-requests/<number>/head - GitHub Enterprise, GitLab autogestionado, u otro host: intenta
pull/<number>/headprimero, luegomerge-requests/<number>/head
#<number> y URLs de solicitud de extracción de estilo GitHub para --worktree, y siempre obtenía pull/<number>/head.
Copie archivos ignorados por git en worktrees
Un worktree es un checkout fresco, por lo que archivos sin seguimiento como.env o .env.local de su repositorio principal no están presentes. Para copiarlos automáticamente cuando Claude crea un worktree, agregue un archivo .worktreeinclude a la raíz de su proyecto.
El archivo utiliza la sintaxis de .gitignore. Solo se copian los archivos que coinciden con un patrón y también están ignorados por git, por lo que los archivos rastreados nunca se duplican.
Si escribe un patrón que comienza con **/ y los archivos que desea están dentro de un directorio que está ignorado por git en su totalidad, Claude Code los copia solo cuando ese directorio en sí coincide con el patrón, o cuando el primer nombre después de **/ es uno de los nombres en la ruta del directorio. Por ejemplo, si escribe **/.claude/skills/*.md, ese primer nombre es .claude, por lo que Claude Code copia los archivos coincidentes de un directorio .claude/ ignorado. Para copiar archivos de un directorio ignorado que un patrón **/ no alcanza, nombre el directorio en el patrón en su lugar: escriba vendor/**/config.json en lugar de **/config.json. Antes de v2.1.239, Claude Code copiaba archivos de un directorio completamente ignorado para un patrón **/ solo cuando el directorio en sí coincidía con el patrón.
Este .worktreeinclude copia dos archivos env y una configuración de secretos en cada nuevo worktree:
.worktreeinclude
--worktree, worktrees de subagentes, y sesiones paralelas en la aplicación de escritorio. Con un hook WorktreeCreate, copie los archivos dentro del script del hook.
Reutilice un nombre de worktree
Pasar--worktree un nombre cuyo directorio ya existe abre ese worktree existente en lugar de crear uno nuevo.
Con la base predeterminada "fresh", un worktree reabierto se reinicia a la rama predeterminada del repositorio en lugar de continuar en su punta anterior cuando se cumplen todas las siguientes condiciones:
- No tiene cambios sin confirmar ni archivos sin seguimiento.
- Todavía está en la rama que Claude Code creó para él.
- No tiene commits propios, o su solicitud de extracción o solicitud de fusión fue fusionada y su rama remota fue eliminada.
- El worktree falla cualquiera de las condiciones.
- Claude Code no puede verificar el estado del worktree.
worktree.baseRefes"head".- El nombre es una referencia de solicitud de extracción o solicitud de fusión.
Reemplace la creación de worktree con un hook
Configure un hookWorktreeCreate para reemplazar completamente la lógica predeterminada de git worktree, incluida la colocación de worktrees en algún lugar que no sea .claude/worktrees/. Para un ejemplo completo, consulte Control de versiones no-git.
Qué comparten los worktrees con el checkout principal
Un worktree obtiene sus propios archivos y rama, pero comparte lo siguiente con el checkout principal:-
El directorio
.gitdel repositorio: los comandos de git en un worktree escriben en el directorio.gitcompartido del repositorio principal, y el sandboxing permite esas escrituras, por lo que comandos comogit commitfuncionan desde dentro de un worktree con el sandbox habilitado. - Plugins: los plugins instalados en ámbito de proyecto desde el checkout principal también se cargan en worktrees del mismo repositorio, por lo que no necesita reinstalarlos por worktree. Requiere Claude Code v2.1.200 o posterior.
-
Aprobaciones de permisos: elegir “Sí, y no preguntar de nuevo” para un comando Bash en una sesión de worktree guarda la regla en el
.claude/settings.local.jsondel checkout principal, por lo que se aplica en el checkout principal y en cada otro worktree del repositorio, y sobrevive a la eliminación del worktree. En Windows y en los otros casos donde Claude Code no usa la raíz del repositorio, la regla permanece con ese worktree. Antes de v2.1.211, una aprobación otorgada en un worktree se guardaba dentro de ese worktree, no se aplicaba en otro lugar, y se perdía cuando se eliminaba el worktree. Consulte dónde se guardan las aprobaciones. -
Skills, agentes y comandos sin seguimiento: cuando el checkout del worktree no tiene un directorio
.claude/skillsen su raíz, por ejemplo porque su.claude/skillsestá en gitignore, Claude Code carga los skills de proyecto del checkout principal en la sesión del worktree. En un worktree con su propio directorio.claude/skills, solo se carga esa copia. La misma lectura de paso cubre.claude/agentsy.claude/commands. Para skills, la lectura de paso requiere Claude Code v2.1.277 o posterior.
--worktree, con git worktree add, o a través de la aplicación de escritorio.
Administre worktrees manualmente
Cree worktrees con Git directamente cuando necesite verificar una rama existente específica o colocar el worktree fuera del repositorio. Cree un worktree en una nueva rama:fix-issue-456 con una rama que ya existe en su repositorio:
Control de versiones no-git
El aislamiento de worktree usa git de forma predeterminada. Para SVN, Perforce, Mercurial u otros sistemas, configure hooksWorktreeCreate y WorktreeRemove para proporcionar lógica de creación y limpieza personalizada. Debido a que el hook reemplaza el comportamiento predeterminado de git, .worktreeinclude no se procesa cuando usa --worktree. Copie cualquier archivo de configuración local dentro de su script de hook en su lugar.
Este hook WorktreeCreate lee el nombre del worktree desde JSON en stdin con jq, verifica una copia de trabajo fresca de SVN, e imprime la ruta del directorio para que Claude Code pueda usarla como el directorio de trabajo de la sesión. Agregue la configuración a su settings.json:
WorktreeRemove para limpiar cuando la sesión termina. Consulte la referencia de hooks para el esquema de entrada y un ejemplo de eliminación.
Un hook WorktreeCreate también le permite ejecutar /batch fuera de un repositorio git. Cada subagente /batch luego publica su cambio con los comandos de control de versiones de su proyecto y, cuando no puede abrir una solicitud de extracción, informa qué publicó en su lugar. Ejecutar /batch fuera de un repositorio git requiere Claude Code v2.1.281 o posterior.
Solución de problemas
Claude Code reporta los errores a continuación cuando crea un worktree, entra en uno al iniciar, o devuelve una sesión reanudada a uno.Claude Code no puede entrar en el worktree al iniciar
Cuando Claude Code no puede entrar en el directorio del worktree al iniciar, imprime un error nombrando la ruta y sale con código 1. Esto puede suceder cuando un hookWorktreeCreate imprime algo que no sea el directorio que creó, o cuando el directorio fue eliminado después de que fue configurado.
La creación de worktree falla en una ruta con enlace simbólico
Claude Code se niega a crear un worktree cuando.claude, .claude/worktrees, o el directorio del worktree en sí es un enlace simbólico, y el error nombra la ruta con enlace simbólico. Elimine el enlace simbólico e intente de nuevo. Antes de v2.1.212, si el repositorio ya contenía un enlace simbólico confirmado en una de esas rutas, la creación de worktree lo seguía y podría crear archivos fuera del repositorio.
Los archivos Git LFS son archivos de puntero en un worktree que Claude Code creó
Si configura Git LFS congit lfs install --local, un worktree que Claude Code crea contiene archivos de puntero de LFS en lugar de los archivos reales. La bandera --local escribe el filtro de LFS en el .git/config del repositorio en lugar de su configuración de git global. Un git lfs install simple escribe en su configuración global y no se ve afectado. Lo mismo se aplica a cualquier otro controlador de filtro definido en la configuración del repositorio en sí.
Claude Code omite los controladores de filtro del repositorio en sí cuando crea un worktree porque un controlador de filtro es un comando de shell, y cualquier cosa que pueda escribir en el repositorio, incluido Claude, podría haber puesto uno allí. Antes de v2.1.247, Claude Code ejecutaba esos controladores durante la creación de worktree.
Para obtener los archivos reales, ejecute git lfs pull dentro del worktree.
En cuatro casos raros, Claude Code no crea ningún worktree en absoluto: no puede determinar qué controladores de filtro define la configuración del repositorio, o encuentra una configuración allí que no puede desactivar. Haga coincidir el error con su corrección:
Could not read the repository git config to neutralize filter drivers: Claude Code no pudo leer el.git/configdel repositorio, por ejemplo debido a sus permisos. Corrija eso e intente de nuevo.The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline): cambie el nombre o elimine ese controlador de filtro en.git/confige intente de nuevo.The repository git config has a conditional include (includeIf): mueva la configuración que elincludeIfen.git/configextrae directamente a ese archivo, elimine elincludeIf, e intente de nuevo. UnincludeIfen su configuración de git global no activa esto.Git was not run: the repository's own git config sets <key>: el mensaje nombra una clave que apunta Git LFS a un programa para ejecutar, comolfs.customtransfer.<name>.patholfs.standalonetransferagent. Si esa configuración es suya, muévala a su configuración de git global. Si no la reconoce, elimínela de la configuración de git del repositorio, ya que una herramienta o checkout que no confía puede haberla escrito. Reintente una vez que la clave se haya ido de la configuración del repositorio.
Claude Code se niega a usar un worktree
Un error que comienza conRefusing to use <path> as an isolation worktree significa que Claude Code verificó la identidad de git del directorio antes de adoptarlo como un checkout aislado de sesión o subagente, y se negó. La verificación se ejecuta si Claude Code está creando el worktree, entrando en uno existente, o reutilizando uno de una ejecución anterior.
En la mayoría de casos, el resto del mensaje dice que los metadatos de git del directorio se resuelven en el checkout principal: por ejemplo, su archivo .git apunta al directorio .git del repositorio principal en sí, o git resuelve su árbol de trabajo al checkout principal a través de una redirección core.worktree. Desde tal directorio, un comando de git ordinario como git reset --hard actuaría en el checkout principal en lugar del worktree. Claude Code también se niega cuando el directorio tiene una entrada .git que no puede leer, en lugar de asumir que el worktree es seguro.
Un directorio sin metadatos de git en absoluto, como uno que su hook WorktreeCreate crea, pasa la verificación solo cuando ningún repositorio de git lo contiene. Si el hook crea el directorio dentro de un repositorio, git lo resuelve al checkout de ese repositorio y Claude Code se niega con el mensaje git resolves its working tree to, así que haga que el hook cree sus directorios fuera de cualquier repositorio.
Claude Code deja el directorio rechazado en su lugar, ya que puede contener trabajo. Haga coincidir el mensaje con su recuperación, si sigue a Refusing to use <path> o aparece en un mensaje de reanudación; algunos finales ocurren solo en mensajes de reanudación:
- Dice
launch from the parent checkoutoRun the resume from the project checkout: lanzó Claude Code desde dentro del worktree. Lance desde el checkout principal en su lugar; el worktree no necesita recreación. - Dice
it cannot be resumed or re-entered: nada en esta sesión respalda el worktree desde donde lanzó. Recréelo; el directorio y su trabajo permanecen en el disco para recuperación manual, y cuando el worktree tiene un checkout principal, reanudar desde allí también funciona. - Dice
it contains the protected checkout: el directorio rechazado es un padre de su checkout principal, como su directorio de inicio. No lo elimine. Cambie la ruta del worktree, como la ruta que devuelve su hookWorktreeCreateo el destino deEnterWorktree, para que el worktree no contenga el checkout. - Dice
the protected checkout <path> has a .git entry that could not be examinedohas git metadata that could not be resolved: el problema es los metadatos de git del checkout principal, no los del worktree. No elimine el worktree, e ignore el consejo final del mensaje para recrearlo, que no se aplica a estos dos finales. Repare el checkout principal, por ejemplo un problema de permisos o un rechazo de gitdubious ownershipen su.git, e intente de nuevo. - Dice
its recorded path has a network spelling: Claude Code nunca reanuda en un worktree en una ruta de red. Recree el worktree en una ruta local. - Cualquier otro final: el mensaje nombra el problema y su corrección, como eliminar una redirección
core.worktreeo recrear el worktree; sígalo. Antes de eliminar un directorio cuyo mensaje dice que su identidad de git no pudo ser verificada, aborde la causa nombrada primero, por ejemplo un enlace simbólico en la ruta del worktree o git en sí fallando al ejecutarse, ya que el directorio puede estar saludable. Cuando recree, rescate cualquier cambio que necesite del directorio anterior primero; permanece en el disco.
La sesión se reanuda fuera de su worktree
Cuando reanuda una sesión de forma interactiva y Claude Code no puede devolverla a su worktree, Claude Code lo dice con uno de los mensajes a continuación. Cuando Claude Code borra el enlace del worktree, registra la limpieza en la transcripción de la sesión. Si suprime escrituras de transcripción, el mensaje dice en su lugar que el enlace no pudo ser borrado y que Claude Code volverá a verificar el worktree en una reanudación posterior.
En modo no interactivo con
-p, y en reanudaciones que el Agent SDK ejecuta, Claude Code detiene la reanudación con un error stderr para cada rechazo excepto un worktree desaparecido, en lugar de continuar sin aislamiento.
Con --output-format stream-json, el rechazo también llega en stdout como un mensaje result con subtipo error_during_execution cuyo array errors lleva el mismo texto, así que una aplicación Agent SDK recibe la razón en lugar de solo una salida distinta de cero. Antes de v2.1.260, un rechazo de reanudación de worktree no producía ningún mensaje result.
Los mensajes toman formas diferentes de los mensajes interactivos en la tabla:
-
Error: cannot resume into worktree <path>: ...This session was not started.para un rechazo que la tabla muestra comoDid not re-enter. Claude Code borra el enlace del worktree antes de salir, y el error lo dice; la próxima vez que reanude la conversación, la sesión continúa en el directorio actual sin aislamiento de worktree. Antes de v2.1.260, Claude Code no escribía el enlace borrado, así que cada reintento de la misma reanudación fallaba con el mismo error. Si suprime escrituras de transcripción, la limpieza no puede ser guardada. El error entonces dice que el mismo comando será rechazado de nuevo, y nombra--fork-sessione iniciar una nueva conversación como formas de continuar sin el worktree. -
Error: could not verify worktree <path> for this resume, so the resume was aborted...paraCould not verify -
Error: ...The worktree binding is kept.paraCould not re-enter -
Notice: the worktree <path> for this session no longer exists...para un worktree desaparecido; Claude Code lo imprime y continúa la sesión, como lo hace una reanudación interactiva
startup_failure_reason es worktree_unverified para el error could not verify worktree y worktree_resume_refused para los errores cannot resume into worktree y The worktree binding is kept. Una aplicación puede ramificarse en él en lugar de hacer coincidir el texto del error. Antes de v2.1.274, el resultado no llevaba ningún campo startup_failure_reason.
Véase también
Los worktrees manejan el aislamiento de archivos. Las páginas relacionadas a continuación cubren la delegación de trabajo en esos checkouts aislados, el paso de hallazgos entre ellos, y el cambio entre las sesiones que crea:- Subagentes: delegue trabajo a agentes aislados dentro de una sesión
- Mensajería entre sesiones: deje que las sesiones en sus worktrees pasen hallazgos entre sí
- Equipos de agentes: coordine múltiples sesiones de Claude automáticamente
- Administrar sesiones: nombre, reanude y cambie entre conversaciones
- Sesiones paralelas de escritorio: sesiones respaldadas por worktree en la aplicación de escritorio