SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 21:01 UTC

69 files changed +1,245 −433. View all changes and history on the product overview
2026
Sat 10 22:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

187 187 

188Claude determina qué herramientas llamar basándose en la tarea, pero usted controla si esas llamadas pueden ejecutarse. Puede aprobar automáticamente herramientas específicas, bloquear otras completamente o requerir aprobación para todo. Tres opciones funcionan juntas para determinar qué se ejecuta:188Claude determina qué herramientas llamar basándose en la tarea, pero usted controla si esas llamadas pueden ejecutarse. Puede aprobar automáticamente herramientas específicas, bloquear otras completamente o requerir aprobación para todo. Tres opciones funcionan juntas para determinar qué se ejecuta:

189 189 

190* **`allowed_tools` / `allowedTools`** aprueba automáticamente las herramientas listadas. Un agente de solo lectura con `["Read", "Glob", "Grep"]` en su lista de herramientas permitidas ejecuta esas herramientas sin solicitar. Las herramientas no listadas aún están disponibles, y las llamadas a ellas que necesitan aprobación se transfieren al modo de permiso y `canUseTool`.190* **`allowed_tools` / `allowedTools`** aprueba automáticamente las herramientas listadas. Un agente de solo lectura con `["Read", "Glob", "Grep"]` en su lista de herramientas permitidas ejecuta esas herramientas sin pedir confirmación, salvo las lecturas desde [rutas de red](/docs/es/permissions#network-paths). Las herramientas no listadas aún están disponibles, y las llamadas a ellas que necesitan aprobación se transfieren al modo de permisos y a `canUseTool`.

191* **`disallowed_tools` / `disallowedTools`** bloquea las herramientas listadas, independientemente de otras configuraciones. Vea [Permisos](/docs/es/agent-sdk/permissions) para el orden en que se verifican las reglas antes de que se ejecute una herramienta.191* **`disallowed_tools` / `disallowedTools`** bloquea las herramientas listadas, independientemente de otras configuraciones. Vea [Permisos](/docs/es/agent-sdk/permissions) para el orden en que se verifican las reglas antes de que se ejecute una herramienta.

192* **`permission_mode` / `permissionMode`** controla cuánta supervisión humana desea. El SDK evalúa el modo activo junto con sus reglas de permitir y denegar en un orden fijo, descrito en [Cómo se evalúan los permisos](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated). Vea [Modo de permiso](#permission-mode) para los modos disponibles.192* **`permission_mode` / `permissionMode`** controla cuánta supervisión humana desea. El SDK evalúa el modo activo junto con sus reglas de permitir y denegar en un orden fijo, descrito en [Cómo se evalúan los permisos](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated). Vea [Modo de permiso](#permission-mode) para los modos disponibles.

193 193 


263| `"default"` | Las llamadas de herramientas que necesitan aprobación y no están cubiertas por reglas de permitir activan su devolución de llamada `canUseTool`; sin devolución de llamada significa denegar | Aplicaciones interactivas con una devolución de llamada de aprobación personalizada |263| `"default"` | Las llamadas de herramientas que necesitan aprobación y no están cubiertas por reglas de permitir activan su devolución de llamada `canUseTool`; sin devolución de llamada significa denegar | Aplicaciones interactivas con una devolución de llamada de aprobación personalizada |

264| `"acceptEdits"` | Aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.); otros comandos de Bash siguen reglas predeterminadas | Confía en las ediciones de Claude y desea una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado |264| `"acceptEdits"` | Aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.); otros comandos de Bash siguen reglas predeterminadas | Confía en las ediciones de Claude y desea una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado |

265| `"plan"` | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivo nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` | Desea que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen |265| `"plan"` | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivo nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` | Desea que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen |

266| `"dontAsk"` | Nunca solicita. Las herramientas preaprobadas por [reglas de permiso](/docs/es/settings-reference#permission-settings) se ejecutan, y también lo hacen las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivo dentro de sus directorios de trabajo; toda llamada que de otro modo solicitaría se deniega. `AskUserQuestion`, herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) se deniegan incluso si las ha permitido | Desea una superficie de herramienta fija y explícita para un agente sin interfaz y prefiere una denegación dura sobre la dependencia silenciosa de que `canUseTool` esté ausente |266| `"dontAsk"` | Nunca pide confirmación. Las herramientas preaprobadas por [reglas de permisos](/docs/es/settings-reference#permission-settings) se ejecutan, y también lo hacen las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivo dentro de tus directorios de trabajo; toda llamada que de otro modo pediría confirmación se deniega. `AskUserQuestion`, las herramientas de conector [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) y las [lecturas desde rutas de red](/docs/es/permissions#network-paths) se deniegan incluso si las has permitido | Deseas una superficie de herramientas fija y explícita para un agente sin interfaz y prefieres una denegación estricta en lugar de depender silenciosamente de que `canUseTool` esté ausente |

267| `"auto"` | Usa un clasificador de modelo para revisar acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Vea [Modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para disponibilidad y el orden de decisión | Agentes autónomos que aún desean protecciones de seguridad en el uso de herramientas |267| `"auto"` | Usa un clasificador de modelo para revisar acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Vea [Modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para disponibilidad y el orden de decisión | Agentes autónomos que aún desean protecciones de seguridad en el uso de herramientas |

268| `"bypassPermissions"` | Ejecuta todas las herramientas permitidas sin preguntar, excepto herramientas coincidentes por una regla [`ask`](/docs/es/settings-reference#permission-settings) explícita, herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y herramientas que requieren interacción del usuario. Las [protecciones de mensajería entre sesiones](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) aún se aplican. Vea [Cómo se evalúan los permisos](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated) para el orden de precedencia. En el SDK de TypeScript, también requiere `allowDangerouslySkipPermissions: true` en `options`. No se puede usar cuando se ejecuta como root en Unix. Use solo en entornos aislados donde las acciones del agente no pueden afectar sistemas que le importan | CI, contenedores u otros entornos aislados |268| `"bypassPermissions"` | Ejecuta todas las herramientas permitidas sin preguntar, excepto herramientas coincidentes por una regla [`ask`](/docs/es/settings-reference#permission-settings) explícita, herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y herramientas que requieren interacción del usuario. Las [protecciones de mensajería entre sesiones](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) aún se aplican. Vea [Cómo se evalúan los permisos](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated) para el orden de precedencia. En el SDK de TypeScript, también requiere `allowDangerouslySkipPermissions: true` en `options`. No se puede usar cuando se ejecuta como root en Unix. Use solo en entornos aislados donde las acciones del agente no pueden afectar sistemas que le importan | CI, contenedores u otros entornos aislados |

269 269 

Details

424 Aprobar automáticamente herramientas específicas424 Aprobar automáticamente herramientas específicas

425</h3>425</h3>

426 426 

427De forma predeterminada, el agente puede solicitar permiso antes de usar ciertas herramientas. Este ejemplo aprueba automáticamente herramientas del sistema de archivos de solo lectura (Read, Glob, Grep) devolviendo `permissionDecision: 'allow'`, permitiéndoles ejecutarse sin confirmación del usuario mientras deja todas las otras herramientas sujetas a verificaciones de permiso normales:427De forma predeterminada, el agente puede solicitar permiso antes de usar ciertas herramientas. Este ejemplo aprueba automáticamente herramientas del sistema de archivos de solo lectura (Read, Glob, Grep) devolviendo `permissionDecision: 'allow'`, permitiéndoles ejecutarse sin confirmación del usuario, salvo las lecturas desde [rutas de red](/docs/es/permissions#network-paths), mientras deja todas las otras herramientas sujetas a verificaciones de permisos normales:

428 428 

429<CodeGroup>429<CodeGroup>

430 ```python Python theme={null}430 ```python Python theme={null}

Details

43 <Step title="Reglas de permiso">43 <Step title="Reglas de permiso">

44 Comprobar reglas `allow` (de `allowed_tools` y settings.json). Si una regla coincide, la herramienta se aprueba. Una llamada que la herramienta aprueba por sí sola también se resuelve en este paso, sin necesidad de regla: por ejemplo una lectura de archivo dentro de sus directorios de trabajo o un [comando Bash de solo lectura](/docs/es/permissions#read-only-commands).44 Comprobar reglas `allow` (de `allowed_tools` y settings.json). Si una regla coincide, la herramienta se aprueba. Una llamada que la herramienta aprueba por sí sola también se resuelve en este paso, sin necesidad de regla: por ejemplo una lectura de archivo dentro de sus directorios de trabajo o un [comando Bash de solo lectura](/docs/es/permissions#read-only-commands).

45 45 

46 Las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) nunca se aprueban por una regla de permiso. Si luego llegan a su devolución de llamada depende del modo de permiso: en una sesión del SDK del Agente en modo `auto`, por ejemplo, Claude Code las deniega por defecto sin llamarla. La tabla del modo [Rutas críticas](/docs/es/permission-modes#critical-paths) enumera lo que cada modo hace con ellas.46 Las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) nunca se aprueban por una regla de permiso. Si luego llegan a tu devolución de llamada depende del modo de permisos: en una sesión del Agent SDK en modo `auto`, por ejemplo, Claude Code las deniega por defecto sin llamarla. La tabla del modo [Rutas críticas](/docs/es/permission-modes#critical-paths) enumera lo que cada modo hace con ellas.

47 

48 Una regla de permiso no aprueba una lectura desde una [ruta de red](/docs/es/permissions#network-paths).

47 </Step>49 </Step>

48 50 

49 <Step title="Devolución de llamada canUseTool">51 <Step title="Devolución de llamada canUseTool">

50 Si no se resuelve por ninguno de los anteriores, llame a su devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para una decisión. En modo `dontAsk`, este paso se omite y la herramienta se deniega.52 Si no se resuelve por ninguno de los anteriores, llama a tu devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para una decisión. En modo `dontAsk`, este paso se omite y la herramienta se deniega.

51 53 

52 En el SDK de TypeScript, si establece [`permissionPrompts: 'none'`](/docs/es/agent-sdk/typescript#options), su devolución de llamada no se llama en este paso. Un hook [`PermissionRequest`](/docs/es/hooks#permissionrequest) aún tiene la oportunidad de decidir, y si no lo hace, Claude Code deniega la llamada. La opción requiere Claude Code v2.1.259 o posterior.54 En el SDK de TypeScript, si establece [`permissionPrompts: 'none'`](/docs/es/agent-sdk/typescript#options), su devolución de llamada no se llama en este paso. Un hook [`PermissionRequest`](/docs/es/hooks#permissionrequest) aún tiene la oportunidad de decidir, y si no lo hace, Claude Code deniega la llamada. La opción requiere Claude Code v2.1.259 o posterior.

53 </Step>55 </Step>


60Si pasa una devolución de llamada `canUseTool` en una configuración donde el SDK de TypeScript espera que el orden de evaluación apruebe automáticamente las llamadas antes de que se consulte la devolución de llamada, el SDK emite una advertencia de proceso de Node.js una vez cuando se construye la consulta. El código de la advertencia es `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dos configuraciones la activan:62Si pasa una devolución de llamada `canUseTool` en una configuración donde el SDK de TypeScript espera que el orden de evaluación apruebe automáticamente las llamadas antes de que se consulte la devolución de llamada, el SDK emite una advertencia de proceso de Node.js una vez cuando se construye la consulta. El código de la advertencia es `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dos configuraciones la activan:

61 63 

62* `permissionMode: 'bypassPermissions'`, que aprueba automáticamente cada llamada que llega al paso del modo de permiso aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)64* `permissionMode: 'bypassPermissions'`, que aprueba automáticamente cada llamada que llega al paso del modo de permiso aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)

63* Cada entrada `allowedTools` simple como `"Read"`, que aprueba automáticamente esa herramienta completa antes de que se consulte la devolución de llamada, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)65* Cada entrada `allowedTools` simple como `"Read"`, que aprueba automáticamente esa herramienta completa antes de que se consulte la devolución de llamada, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) y las [lecturas desde rutas de red](/docs/es/permissions#network-paths)

64 66 

65Las entradas con un especificador como `Bash(ls *)` y el modo `acceptEdits` no la activan, y las reglas de permiso provenientes de archivos de configuración no son visibles para la comprobación.67Las entradas con un especificador como `Bash(ls *)` y el modo `acceptEdits` no la activan, y las reglas de permiso provenientes de archivos de configuración no son visibles para la comprobación.

66 68 


79 81 

80| Opción | Efecto |82| Opción | Efecto |

81| :- | :- |83| :- | :- |

82| `allowed_tools=["Read", "Grep"]` | `Read` y `Grep` se aprueban automáticamente. Otras herramientas no listadas aquí siguen existiendo, y las llamadas a ellas que necesiten aprobación caen en el modo de permisos y `canUseTool`. |84| `allowed_tools=["Read", "Grep"]` | `Read` y `Grep` se aprueban automáticamente, aparte de las [lecturas desde rutas de red](/docs/es/permissions#network-paths). Otras herramientas no listadas aquí siguen existiendo, y las llamadas a ellas que necesiten aprobación caen en el modo de permisos y `canUseTool`. |

83| `disallowed_tools=["Bash"]` | La definición de la herramienta `Bash` se elimina de la solicitud. Claude no ve la herramienta y no puede intentarla. |85| `disallowed_tools=["Bash"]` | La definición de la herramienta `Bash` se elimina de la solicitud. Claude no ve la herramienta y no puede intentarla. |

84| `disallowed_tools=["Bash(rm *)"]` | `Bash` sigue disponible. Las llamadas que coincidan con `rm *` [tal como está escrito](/docs/es/permissions#bash-rule-limits) se deniegan en todos los modos de permisos, incluido `bypassPermissions`. Otras llamadas a `Bash`, incluido `/bin/rm`, caen en el modo de permisos. |86| `disallowed_tools=["Bash(rm *)"]` | `Bash` sigue disponible. Las llamadas que coincidan con `rm *` [tal como está escrito](/docs/es/permissions#bash-rule-limits) se deniegan en todos los modos de permisos, incluido `bypassPermissions`. Otras llamadas a `Bash`, incluido `/bin/rm`, caen en el modo de permisos. |

85| `disallowed_tools=["*"]` | Cada definición de herramienta se elimina de la solicitud. Los patrones globales de nombres de herramientas se admiten en reglas de denegación: `"*"` coincide con cada herramienta y `"mcp__*"` coincide con cada herramienta MCP en todos los servidores. |87| `disallowed_tools=["*"]` | Cada definición de herramienta se elimina de la solicitud. Los patrones globales de nombres de herramientas se admiten en reglas de denegación: `"*"` coincide con cada herramienta y `"mcp__*"` coincide con cada herramienta MCP en todos los servidores. |


95 97 

96 Una regla de permitir nunca aprueba automáticamente `AskUserQuestion`, herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool), herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), o removals de `rm` y `rmdir` dirigidos a una [ruta crítica](/docs/es/permission-modes#critical-paths). En modo `dontAsk` Claude Code deniega estas llamadas sin invocar la devolución de llamada. En otros modos los tres primeros llegan a la devolución de llamada. Dependiendo del [modo de permisos](/docs/es/permission-modes#critical-paths), un removal de ruta crítica llega a la devolución de llamada también o Claude Code lo deniega sin llamarlo, como lo hace por defecto para una sesión de Agent SDK en modo `auto`.98 Una regla de permitir nunca aprueba automáticamente `AskUserQuestion`, herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool), herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), o removals de `rm` y `rmdir` dirigidos a una [ruta crítica](/docs/es/permission-modes#critical-paths). En modo `dontAsk` Claude Code deniega estas llamadas sin invocar la devolución de llamada. En otros modos los tres primeros llegan a la devolución de llamada. Dependiendo del [modo de permisos](/docs/es/permission-modes#critical-paths), un removal de ruta crítica llega a la devolución de llamada también o Claude Code lo deniega sin llamarlo, como lo hace por defecto para una sesión de Agent SDK en modo `auto`.

97 99 

98 La cobertura depende de la forma de la entrada: un nombre simple como `Read` o `mcp__github__get_issue` aprueba automáticamente cada llamada a esa herramienta aparte de las excepciones anteriores, mientras que una regla delimitada como `Bash(npm test *)` aprueba automáticamente solo las llamadas coincidentes, y otras llamadas a `Bash` que necesiten aprobación aún caen en la devolución de llamada. Para comprobaciones que deben ejecutarse en cada llamada de herramienta, use un [hook `PreToolUse`](/docs/es/agent-sdk/hooks): los hooks se ejecutan antes de cada otro paso, y una denegación de hook se aplica incluso en modo `bypassPermissions`.100 La cobertura depende de la forma de la entrada: un nombre simple como `Read` o `mcp__github__get_issue` aprueba automáticamente cada llamada a esa herramienta aparte de esas excepciones y de las [lecturas desde rutas de red](/docs/es/permissions#network-paths), mientras que una regla delimitada como `Bash(npm test *)` aprueba automáticamente solo las llamadas coincidentes, y otras llamadas a `Bash` que necesiten aprobación aún caen en la devolución de llamada. Para comprobaciones que deben ejecutarse en cada llamada a herramienta, usa un [hook `PreToolUse`](/docs/es/agent-sdk/hooks): los hooks se ejecutan antes de cualquier otro paso, y una denegación de hook se aplica incluso en modo `bypassPermissions`.

99</Warning>101</Warning>

100 102 

101Para un agente bloqueado, empareje `allowedTools` con `permissionMode: "dontAsk"`:103Para un agente bloqueado, empareje `allowedTools` con `permissionMode: "dontAsk"`:


107};109};

108```110```

109 111 

110Las herramientas listadas se aprueban, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves), y cada otra llamada que solicitaría se deniega en su lugar. Las llamadas que no necesitan aprobación en modo `default` se ejecutan independientemente de si las lista o no, como [comandos Bash de solo lectura](/docs/es/permissions#read-only-commands), herramientas como `Agent` que no preguntan antes de ejecutarse, y lecturas de archivos dentro de sus directorios de trabajo. Para poner una herramienta fuera del alcance de Claude por completo, añada su nombre simple a `disallowedTools`.112Las herramientas listadas se aprueban, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) y de las [lecturas desde rutas de red](/docs/es/permissions#network-paths), y cualquier otra llamada que pediría confirmación se deniega en su lugar. Las llamadas que no necesitan aprobación en modo `default` se ejecutan independientemente de si las listas o no, como [comandos Bash de solo lectura](/docs/es/permissions#read-only-commands), herramientas como `Agent` que no preguntan antes de ejecutarse, y lecturas de archivos dentro de tus directorios de trabajo. Para eliminar una herramienta de la solicitud por completo, añade su nombre simple a `disallowedTools`.

111 113 

112<Warning>114<Warning>

113 **`allowed_tools` no restringe `bypassPermissions`.** `allowed_tools` aprueba previamente las herramientas que lista. Otras herramientas no listadas no son coincididas por ninguna regla de permitir y caen en el modo de permisos, donde `bypassPermissions` las aprueba. Configurar `allowed_tools=["Read"]` junto con `permission_mode="bypassPermissions"` aún aprueba cada herramienta, incluidas `Bash`, `Write` y `Edit`. Si necesita `bypassPermissions` pero desea que herramientas específicas se bloqueen, use `disallowed_tools`.115 **`allowed_tools` no restringe `bypassPermissions`.** `allowed_tools` aprueba previamente las herramientas que lista. Otras herramientas no listadas no son coincididas por ninguna regla de permitir y caen en el modo de permisos, donde `bypassPermissions` las aprueba. Configurar `allowed_tools=["Read"]` junto con `permission_mode="bypassPermissions"` aún aprueba cada herramienta, incluidas `Bash`, `Write` y `Edit`. Si necesita `bypassPermissions` pero desea que herramientas específicas se bloqueen, use `disallowed_tools`.


139| Modo | Descripción | Comportamiento de herramientas |141| Modo | Descripción | Comportamiento de herramientas |

140| :- | :- | :- |142| :- | :- | :- |

141| `default` | Comportamiento de permisos estándar | Sin aprobaciones automáticas basadas en modo; las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso activan su devolución de llamada `canUseTool` |143| `default` | Comportamiento de permisos estándar | Sin aprobaciones automáticas basadas en modo; las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso activan su devolución de llamada `canUseTool` |

142| `dontAsk` | Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación es denegada. Las llamadas aprobadas por `allowed_tools` o reglas se ejecutan, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de sus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que su organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y las herramientas que requieren interacción del usuario son denegadas incluso si las ha preaprobado, al igual que las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths). `canUseTool` nunca se llama |144| `dontAsk` | Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación es denegada. Las llamadas aprobadas por `allowed_tools` o reglas se ejecutan, al igual que las llamadas que no necesitan aprobación en modo `default`; las herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y las herramientas que requieren interacción del usuario son denegadas incluso si las has preaprobado, al igual que las [lecturas desde rutas de red](/docs/es/permissions#network-paths) y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths). `canUseTool` nunca se llama |

143| `acceptEdits` | Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y [operaciones del sistema de archivos](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) se aprueban automáticamente |145| `acceptEdits` | Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y [operaciones del sistema de archivos](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) se aprueban automáticamente |

144| `bypassPermissions` | Omitir verificaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves). Úselo con precaución |146| `bypassPermissions` | Omitir verificaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves). Úselo con precaución |

145| `plan` | Modo de planificación | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivos nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` |147| `plan` | Modo de planificación | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivos nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` |


286 Modo no preguntar (`dontAsk`)288 Modo no preguntar (`dontAsk`)

287</h4>289</h4>

288 290 

289Convierte cualquier solicitud de permisos en una denegación, sin llamar a `canUseTool`. Las herramientas preaprobadas por `allowed_tools`, reglas de permiso en `settings.json` o un hook se ejecutan normalmente, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de sus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que su organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) son denegadas incluso cuando una regla de permiso coincide. Un permiso de hook `PreToolUse` tampoco borra una eliminación de ruta crítica.291Convierte cualquier solicitud de permiso en una denegación, sin llamar a `canUseTool`. Las herramientas preaprobadas por `allowed_tools`, reglas de permiso en `settings.json` o un hook se ejecutan normalmente, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de tus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario, las [lecturas desde rutas de red](/docs/es/permissions#network-paths) y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) son denegadas incluso cuando una regla de permiso coincide. Un permiso de hook `PreToolUse` tampoco habilita una eliminación de ruta crítica ni una lectura desde una ruta de red.

290 292 

291**Úselo cuando:** desee una superficie de herramientas fija y explícita para un agente sin interfaz y prefiera una denegación definitiva sobre la dependencia silenciosa de que `canUseTool` esté ausente.293**Úselo cuando:** desee una superficie de herramientas fija y explícita para un agente sin interfaz y prefiera una denegación definitiva sobre la dependencia silenciosa de que `canUseTool` esté ausente.

292 294 

Details

518 print(session.summary)518 print(session.summary)

519```519```

520 520 

521<h3 id="fork_session">

522 `fork_session()`

523</h3>

524 

525Copia la transcripción de una sesión en una nueva sesión para que puedas llevar la conversación en otra dirección mientras la original permanece sin cambios. Para crear una rama desde un punto anterior de la conversación, pasa `up_to_message_id`. Sincrónico.

526 

527```python theme={null}

528def fork_session(

529 session_id: str,

530 directory: str | None = None,

531 up_to_message_id: str | None = None,

532 title: str | None = None,

533) -> ForkSessionResult

534```

535 

536<h4 id="parameters-9">

537 Parámetros

538</h4>

539 

540| Parámetro | Tipo | Predeterminado | Descripción |

541| :- | :- | :- | :- |

542| `session_id` | `str` | requerido | UUID de la sesión a bifurcar |

543| `directory` | `str \| None` | `None` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios del proyecto |

544| `up_to_message_id` | `str \| None` | `None` | Copia la transcripción hasta el mensaje con este UUID, inclusive, como un `uuid` de [`get_session_messages()`](#get_session_messages). Cuando se omite, copia toda la transcripción |

545| `title` | `str \| None` | `None` | Título para la bifurcación. Cuando se omite, el SDK deriva uno de la sesión original, seguido de `(fork)` |

546 

547Devuelve un `ForkSessionResult` cuyo `session_id` es el UUID de la nueva sesión. Pásalo como [`resume`](#claudeagentoptions) para continuar la bifurcación. La bifurcación no incluye los [checkpoints de archivos](/docs/es/agent-sdk/file-checkpointing) de la sesión original, por lo que no puedes retrocederla a un checkpoint capturado antes de la bifurcación.

548 

549`fork_session()` genera:

550 

551* `ValueError`: `session_id` o `up_to_message_id` no es un UUID válido

552* `ValueError`: la sesión no tiene mensajes, o `up_to_message_id` no coincide con ningún mensaje de la transcripción

553* `FileNotFoundError`: la sesión no se puede encontrar

554 

555<h4 id="example-8">

556 Ejemplo

557</h4>

558 

559Bifurca la sesión más reciente con un nuevo título y luego reanuda la bifurcación. La sesión original conserva su propio historial.

560 

561```python theme={null}

562from claude_agent_sdk import fork_session, list_sessions

563 

564sessions = list_sessions(directory="/path/to/project", limit=1)

565if sessions:

566 forked = fork_session(sessions[0].session_id, title="Try the OAuth approach")

567 print(forked.session_id) # pass as ClaudeAgentOptions(resume=...) to continue the fork

568```

569 

521<h2 id="classes">570<h2 id="classes">

522 Clases571 Clases

523</h2>572</h2>


919| Propiedad | Tipo | Predeterminado | Descripción |968| Propiedad | Tipo | Predeterminado | Descripción |

920| :- | :- | :- | :- |969| :- | :- | :- | :- |

921| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Configuración de herramientas. Usa `{"type": "preset", "preset": "claude_code"}` para las herramientas predeterminadas de Claude Code |970| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Configuración de herramientas. Usa `{"type": "preset", "preset": "claude_code"}` para las herramientas predeterminadas de Claude Code |

922| `allowed_tools` | `list[str]` | `[]` | Herramientas que se aprueban automáticamente sin pedir confirmación. Esto no restringe a Claude solo a estas herramientas. Si nombras aquí una de las [herramientas de seguimiento de tareas](/docs/es/agent-sdk/todo-tracking#model-availability), Claude Code también habilita esa función en la sesión. Las demás herramientas no listadas pasan a `permission_mode` y `can_use_tool`. Usa `disallowed_tools` para bloquear herramientas. Consulta [Permisos](/docs/es/agent-sdk/permissions#allow-and-deny-rules) |971| `allowed_tools` | `list[str]` | `[]` | Herramientas que se aprueban automáticamente sin pedir confirmación, excepto las lecturas desde [rutas de red](/docs/es/permissions#network-paths). Esto no restringe a Claude solo a estas herramientas. Si nombras aquí una de las [herramientas de seguimiento de tareas](/docs/es/agent-sdk/todo-tracking#model-availability), Claude Code también habilita esa función en la sesión. Las demás herramientas no listadas pasan a `permission_mode` y `can_use_tool`. Usa `disallowed_tools` para bloquear herramientas. Consulta [Permisos](/docs/es/agent-sdk/permissions#allow-and-deny-rules) |

923| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, `{"type": "preset", "preset": "claude_code"}` para el prompt del sistema de Claude Code con `"append"` opcional, `{"type": "custom", "prompt": "..."}` para un prompt personalizado que también puede establecer `"snapshot"`, o `{"type": "file", "path": "..."}` para cargar un prompt grande desde el disco. Consulta [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom) y [`SystemPromptFile`](#systempromptfile) |972| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, `{"type": "preset", "preset": "claude_code"}` para el prompt del sistema de Claude Code con `"append"` opcional, `{"type": "custom", "prompt": "..."}` para un prompt personalizado que también puede establecer `"snapshot"`, o `{"type": "file", "path": "..."}` para cargar un prompt grande desde el disco. Consulta [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom) y [`SystemPromptFile`](#systempromptfile) |

924| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configuraciones de servidores MCP o ruta al archivo de configuración |973| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configuraciones de servidores MCP o ruta al archivo de configuración |

925| `strict_mcp_config` | `bool` | `False` | Cuando es `True`, usa solo los servidores pasados en `mcp_servers` e ignora el `.mcp.json` del proyecto, la configuración del usuario, los servidores MCP proporcionados por plugins y los [conectores de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai). Corresponde al flag de la CLI `--strict-mcp-config` |974| `strict_mcp_config` | `bool` | `False` | Cuando es `True`, usa solo los servidores pasados en `mcp_servers` e ignora el `.mcp.json` del proyecto, la configuración del usuario, los servidores MCP proporcionados por plugins y los [conectores de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai). Corresponde al flag de la CLI `--strict-mcp-config` |


1849* `terminal_reason`: por qué terminó el bucle de consulta, como `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, o `"aborted_tools"`. Un valor de `"aborted_streaming"` o `"aborted_tools"` significa que el turno fue abortado antes de completarse. Las causas comunes son [`interrupt()`](#claudesdkclient) y una devolución de llamada de permiso que devuelve [`PermissionResultDeny`](#permissionresultdeny) con `interrupt=True`. `None` en versiones de CLI que preceden al campo, en resultados de comandos locales como `/voice` o `/usage`, que omiten el bucle de consulta, o en resultados de error sintetizados emitidos cuando la sesión falla fatalmente. Refleja el [`SDKResultMessage.terminal_reason`](/docs/es/agent-sdk/typescript#sdkresultmessage) del SDK de TypeScript, que enumera el conjunto completo de valores.1898* `terminal_reason`: por qué terminó el bucle de consulta, como `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, o `"aborted_tools"`. Un valor de `"aborted_streaming"` o `"aborted_tools"` significa que el turno fue abortado antes de completarse. Las causas comunes son [`interrupt()`](#claudesdkclient) y una devolución de llamada de permiso que devuelve [`PermissionResultDeny`](#permissionresultdeny) con `interrupt=True`. `None` en versiones de CLI que preceden al campo, en resultados de comandos locales como `/voice` o `/usage`, que omiten el bucle de consulta, o en resultados de error sintetizados emitidos cuando la sesión falla fatalmente. Refleja el [`SDKResultMessage.terminal_reason`](/docs/es/agent-sdk/typescript#sdkresultmessage) del SDK de TypeScript, que enumera el conjunto completo de valores.

1850* `origin`: origen del mensaje del usuario que activó este turno. En [modo de entrada de streaming](/docs/es/agent-sdk/streaming-vs-single-mode), verifica esto para distinguir el resultado de tu propio prompt, donde `origin` es `None` o `{"kind": "human"}`, del resultado de un turno inyectado como una notificación de tarea en segundo plano. Requiere Python Agent SDK 0.2.137 o posterior.1899* `origin`: origen del mensaje del usuario que activó este turno. En [modo de entrada de streaming](/docs/es/agent-sdk/streaming-vs-single-mode), verifica esto para distinguir el resultado de tu propio prompt, donde `origin` es `None` o `{"kind": "human"}`, del resultado de un turno inyectado como una notificación de tarea en segundo plano. Requiere Python Agent SDK 0.2.137 o posterior.

1851 1900 

1901Cuando varias tareas en segundo plano terminan con poco tiempo de diferencia, Claude Code puede responder a sus notificaciones en un solo turno en lugar de un turno por cada una. Aun así recibes un `ResultMessage` por notificación, en orden, cada uno con un `origin` cuyo `kind` es `"task-notification"`. Todos excepto el último tienen `num_turns` establecido en `0` y un `result` vacío, y el último lleva el turno que las responde a todas.

1902 

1852El dict `usage` cubre solo el bucle del agente principal y excluye subagentes y otras llamadas de modelo anidadas o auxiliares. En [modo de entrada de streaming](/docs/es/agent-sdk/streaming-vs-single-mode), los valores son por turno. Prefiere `model_usage` para contabilidad de token y costo. El dict `usage` contiene las siguientes claves cuando está presente:1903El dict `usage` cubre solo el bucle del agente principal y excluye subagentes y otras llamadas de modelo anidadas o auxiliares. En [modo de entrada de streaming](/docs/es/agent-sdk/streaming-vs-single-mode), los valores son por turno. Prefiere `model_usage` para contabilidad de token y costo. El dict `usage` contiene las siguientes claves cuando está presente:

1853 1904 

1854| Clave | Tipo | Descripción |1905| Clave | Tipo | Descripción |

Details

360* [`renameSession()`](/docs/es/agent-sdk/typescript#renamesession)360* [`renameSession()`](/docs/es/agent-sdk/typescript#renamesession)

361* [`tagSession()`](/docs/es/agent-sdk/typescript#tagsession)361* [`tagSession()`](/docs/es/agent-sdk/typescript#tagsession)

362* [`deleteSession()`](/docs/es/agent-sdk/typescript)362* [`deleteSession()`](/docs/es/agent-sdk/typescript)

363* [`forkSession()`](/docs/es/agent-sdk/typescript)363* [`forkSession()`](/docs/es/agent-sdk/typescript#forksession)

364* [`listSubagents()`](/docs/es/agent-sdk/typescript)364* [`listSubagents()`](/docs/es/agent-sdk/typescript)

365* [`getSubagentMessages()`](/docs/es/agent-sdk/typescript)365* [`getSubagentMessages()`](/docs/es/agent-sdk/typescript)

366 366 

Details

293 293 

294 Puede reanudar desde cualquier directorio de trabajo:294 Puede reanudar desde cualquier directorio de trabajo:

295 295 

296 * **Búsqueda entre directorios**: Claude Code busca más allá del directorio del proyecto actual para encontrar el ID; vea [Reanudar una sesión](/docs/es/sessions#resume-a-session) para el orden de búsqueda exacto y cómo se manejan las copias duplicadas.296 * **Búsqueda entre directorios**: Claude Code busca más allá del directorio del proyecto actual para encontrar el ID; consulta [Reanudar una sesión](/docs/es/sessions#where-the-session-picker-looks) para el orden de búsqueda exacto y cómo se manejan las copias duplicadas.

297 * **Solo la misma máquina**: el archivo de sesión aún necesita existir en la máquina actual.297 * **Solo la misma máquina**: el archivo de sesión aún necesita existir en la máquina actual.

298 298 

299 Antes de v2.1.223, la búsqueda estaba limitada al directorio del proyecto actual y sus git worktrees; las versiones del SDK que incluyen una CLI más antigua aún se comportan de esta manera.299 Antes de v2.1.223, la búsqueda estaba limitada al directorio del proyecto actual y sus git worktrees; las versiones del SDK que incluyen una CLI más antigua aún se comportan de esta manera.


423 423 

424* **Mover el archivo de sesión.** Persista `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` de la primera ejecución y restáurelo dentro de cualquier directorio bajo `~/.claude/projects/` en el nuevo host antes de llamar a `resume`.424* **Mover el archivo de sesión.** Persista `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` de la primera ejecución y restáurelo dentro de cualquier directorio bajo `~/.claude/projects/` en el nuevo host antes de llamar a `resume`.

425 425 

426 Claude Code busca más allá del directorio del proyecto actual para encontrar el ID; consulte [Reanudar una sesión](/docs/es/sessions#resume-a-session) para el orden de búsqueda exacto y cómo se manejan las copias duplicadas. Antes de v2.1.223, la búsqueda se limitaba al directorio del proyecto actual y sus git worktrees; las versiones del SDK que incluyen una CLI más antigua aún se comportan de esta manera.426 Claude Code busca más allá del directorio del proyecto actual para encontrar el ID; consulta [Reanudar una sesión](/docs/es/sessions#where-the-session-picker-looks) para conocer el orden de búsqueda exacto y cómo se manejan las copias duplicadas. Antes de v2.1.223, la búsqueda se limitaba al directorio del proyecto actual y sus git worktrees; las versiones del SDK que incluyen una CLI más antigua aún se comportan de esta manera.

427 427 

428* **No confíe en la reanudación de sesión.** Capture los resultados que necesita (salida de análisis, decisiones, diffs de archivos) como estado de aplicación y páselos al prompt de una sesión nueva. Esto a menudo es más robusto que enviar archivos de transcripción.428* **No confíe en la reanudación de sesión.** Capture los resultados que necesita (salida de análisis, decisiones, diffs de archivos) como estado de aplicación y páselos al prompt de una sesión nueva. Esto a menudo es más robusto que enviar archivos de transcripción.

429 429 

Details

124 124 

125Sin mensajes parciales habilitados, recibe todos los tipos de mensajes excepto `StreamEvent`. Los tipos comunes incluyen `SystemMessage` (inicialización de sesión), `AssistantMessage` (bloques de contenido completos), `ResultMessage` (resultado final), y un mensaje de límite compacto que indica cuándo se compactó el historial de conversación (`SDKCompactBoundaryMessage` en TypeScript; `SystemMessage` con subtipo `"compact_boundary"` en Python).125Sin mensajes parciales habilitados, recibe todos los tipos de mensajes excepto `StreamEvent`. Los tipos comunes incluyen `SystemMessage` (inicialización de sesión), `AssistantMessage` (bloques de contenido completos), `ResultMessage` (resultado final), y un mensaje de límite compacto que indica cuándo se compactó el historial de conversación (`SDKCompactBoundaryMessage` en TypeScript; `SystemMessage` con subtipo `"compact_boundary"` en Python).

126 126 

127<h3 id="handle-a-stream-that’s-cut-off">

128 Manejar un stream que se corta

129</h3>

130 

131Si un stream se corta a mitad de un mensaje, por ejemplo cuando interrumpes el turno o se cae la conexión, igualmente recibes el `message_stop` de ese mensaje antes de que termine el turno. Un bloque de texto o de pensamiento cortado también recibe su `content_block_stop`. Una llamada a herramienta cortada no lo recibe, así que si `message_stop` llega mientras el bloque de una llamada a herramienta sigue abierto, trata la entrada de esa llamada como incompleta.

132 

133Antes de Claude Code v2.1.290, un stream cortado podía terminar el turno sin `message_stop`, por lo que una respuesta que renderizas a partir de eventos de stream podía seguir mostrándose como en curso. El Agent SDK de TypeScript incluye Claude Code v2.1.290 o posterior a partir de v0.3.290, y el Agent SDK de Python a partir de v0.2.164. Si una respuesta sigue mostrándose como en curso después de que termina el turno, actualiza el SDK.

134 

127<h2 id="stream-tool-calls">135<h2 id="stream-tool-calls">

128 Transmitir llamadas de herramientas136 Transmitir llamadas de herramientas

129</h2>137</h2>

Details

464| `tag` | `string \| null` | requerido | Cadena de etiqueta, o `null` para borrar |464| `tag` | `string \| null` | requerido | Cadena de etiqueta, o `null` para borrar |

465| `options.dir` | `string` | `undefined` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios de proyecto |465| `options.dir` | `string` | `undefined` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios de proyecto |

466 466 

467<h3 id="forksession">

468 `forkSession()`

469</h3>

470 

471Copia la transcripción de una sesión en una nueva sesión para que puedas llevar la conversación en otra dirección mientras la original permanece sin cambios. Para crear una rama desde un punto anterior de la conversación, pasa `upToMessageId`.

472 

473```typescript theme={null}

474function forkSession(

475 sessionId: string,

476 options?: ForkSessionOptions

477): Promise<ForkSessionResult>;

478```

479 

480<h4 id="parameters-10">

481 Parámetros

482</h4>

483 

484| Parámetro | Tipo | Predeterminado | Descripción |

485| :- | :- | :- | :- |

486| `sessionId` | `string` | requerido | UUID de la sesión a bifurcar |

487| `options.dir` | `string` | `undefined` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios de proyecto |

488| `options.upToMessageId` | `string` | `undefined` | Copia la transcripción hasta el mensaje con este `uuid`, inclusive: un valor de [`getSessionMessages()`](#getsessionmessages), o un `uuid` que estableces en un [`SDKUserMessage`](#sdkusermessage) enviado en streaming. Cuando se omite, copia la transcripción completa |

489| `options.title` | `string` | `undefined` | Título para la bifurcación. Cuando se omite, el SDK deriva uno de la sesión original, seguido de `(fork)` |

490 

491Devuelve `{ sessionId }`, el UUID de la nueva sesión. Pásalo como [`resume`](#options) para continuar la bifurcación. La bifurcación no incluye los [checkpoints de archivos](/docs/es/agent-sdk/file-checkpointing) de la sesión original, por lo que no puedes rebobinarla a un checkpoint capturado antes de la bifurcación.

492 

493`forkSession()` lanza una excepción cuando:

494 

495* `sessionId` no es un UUID

496* no se puede encontrar la sesión, o no tiene mensajes

497* `upToMessageId` no coincide con ningún mensaje de la transcripción

498 

467<h3 id="resolvesettings">499<h3 id="resolvesettings">

468 `resolveSettings()`500 `resolveSettings()`

469</h3>501</h3>


486): Promise<ResolvedSettings>;518): Promise<ResolvedSettings>;

487```519```

488 520 

489<h4 id="parameters-10">521<h4 id="parameters-11">

490 Parámetros522 Parámetros

491</h4>523</h4>

492 524 


547| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | Define subagentes mediante programación |579| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | Define subagentes mediante programación |

548| `agentProgressSummaries` | `boolean` | `false` | Cuando es `true`, genera resúmenes de progreso de una línea para los subagentes y los reenvía en los eventos [`task_progress`](#sdktaskprogressmessage) mediante el campo `summary`. Se aplica a subagentes en primer plano y en segundo plano |580| `agentProgressSummaries` | `boolean` | `false` | Cuando es `true`, genera resúmenes de progreso de una línea para los subagentes y los reenvía en los eventos [`task_progress`](#sdktaskprogressmessage) mediante el campo `summary`. Se aplica a subagentes en primer plano y en segundo plano |

549| `allowDangerouslySkipPermissions` | `boolean` | `false` | Habilita la omisión de permisos. Es obligatorio al usar `permissionMode: 'bypassPermissions'`, ya sea al inicio o más tarde mediante `setPermissionMode()`. Consulta [modo plan](/docs/es/agent-sdk/permissions#plan-mode-plan) para ver cómo interactúa con `permissionMode: 'plan'` |581| `allowDangerouslySkipPermissions` | `boolean` | `false` | Habilita la omisión de permisos. Es obligatorio al usar `permissionMode: 'bypassPermissions'`, ya sea al inicio o más tarde mediante `setPermissionMode()`. Consulta [modo plan](/docs/es/agent-sdk/permissions#plan-mode-plan) para ver cómo interactúa con `permissionMode: 'plan'` |

550| `allowedTools` | `string[]` | `[]` | Herramientas que se aprueban automáticamente sin pedir confirmación. Esto no restringe a Claude a usar solo estas herramientas. Si nombras aquí una de las [herramientas de seguimiento de tareas](/docs/es/agent-sdk/todo-tracking#model-availability), Claude Code también habilita su uso en la sesión. Las demás herramientas no listadas pasan a `permissionMode` y `canUseTool`. Usa `disallowedTools` para bloquear herramientas. Consulta [Permisos](/docs/es/agent-sdk/permissions#allow-and-deny-rules) |582| `allowedTools` | `string[]` | `[]` | Herramientas que se aprueban automáticamente sin pedir confirmación, salvo las lecturas desde [rutas de red](/docs/es/permissions#network-paths). Esto no restringe a Claude a usar solo estas herramientas. Si nombras aquí una de las [herramientas de seguimiento de tareas](/docs/es/agent-sdk/todo-tracking#model-availability), Claude Code también habilita esa función en la sesión. Las demás herramientas no listadas pasan a `permissionMode` y `canUseTool`. Usa `disallowedTools` para bloquear herramientas. Consulta [Permisos](/docs/es/agent-sdk/permissions#allow-and-deny-rules) |

551| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | Habilita funciones beta |583| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | Habilita funciones beta |

552| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | Función de permisos personalizada, que se invoca solo cuando el [flujo de permisos](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated) llega a una solicitud de permiso. No se invoca para llamadas aprobadas automáticamente por `allowedTools`, reglas de permiso o `permissionMode`. Una regla de permiso no aprueba de antemano las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves). Consulta [`CanUseTool`](#canusetool) para más detalles |584| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | Función de permisos personalizada, que se invoca solo cuando el [flujo de permisos](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated) llega a una solicitud de permiso. No se invoca para llamadas aprobadas automáticamente por `allowedTools`, reglas de permiso o `permissionMode`. Una regla de permiso no aprueba de antemano las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves). Consulta [`CanUseTool`](#canusetool) para más detalles |

553| `continue` | `boolean` | `false` | Continúa la conversación más reciente |585| `continue` | `boolean` | `false` | Continúa la conversación más reciente |


1588 1620 

1589Asocia los mensajes de un subagente con sus eventos de tarea mediante `agent_id`, en lugar de emparejar el `parent_tool_use_id` de un mensaje con el `tool_use_id` de un evento de tarea. Cuando una llamada a herramienta reanuda el subagente, los eventos de tarea llevan el `tool_use_id` de esa llamada, mientras que los mensajes conservan el `parent_tool_use_id` de la llamada a herramienta que inició el subagente por primera vez, así que ambos ya no coinciden.1621Asocia los mensajes de un subagente con sus eventos de tarea mediante `agent_id`, en lugar de emparejar el `parent_tool_use_id` de un mensaje con el `tool_use_id` de un evento de tarea. Cuando una llamada a herramienta reanuda el subagente, los eventos de tarea llevan el `tool_use_id` de esa llamada, mientras que los mensajes conservan el `parent_tool_use_id` de la llamada a herramienta que inició el subagente por primera vez, así que ambos ya no coinciden.

1590 1622 

1591Claude Code establece `user_message_uuid` y `user_message_uuids` en el primer mensaje del asistente del turno, bajo las condiciones descritas en [`user_message_uuid`](#user_message_uuid). Cuando Claude Code vuelve a ejecutar un turno que un reinicio interrumpió, los mensajes del asistente de la nueva ejecución que llevan esos campos también llevan [`resume_reason`](#resume_reason).1623Claude Code establece `user_message_uuid` y `user_message_uuids` en el primer mensaje del asistente del turno, en las condiciones descritas en [`user_message_uuid`](#user_message_uuid). Cuando el turno continúa uno que un reinicio interrumpió, los mensajes del asistente que llevan esos campos también llevan [`resume_reason`](#resume_reason).

1592 1624 

1593`timestamp` es la hora ISO 8601 en que el contenido del mensaje terminó de generarse en el proceso que lo produjo. El valor proviene del reloj de esa máquina, así que úsalo solo para mostrarlo y no ordenes los mensajes según él. Un turno de API puede producir varios mensajes del asistente que comparten un `message.id`, cada uno con su propio `timestamp`. Cuando el campo está ausente, recurre a la hora en que recibiste el mensaje.1625`timestamp` es la hora ISO 8601 en que el contenido del mensaje terminó de generarse en el proceso que lo produjo. El valor proviene del reloj de esa máquina, así que úsalo solo para mostrarlo y no ordenes los mensajes según él. Un turno de API puede producir varios mensajes del asistente que comparten un `message.id`, cada uno con su propio `timestamp`. Cuando el campo está ausente, recurre a la hora en que recibiste el mensaje.

1594 1626 


1631 1663 

1632Establece `inline_pastes` para indicarle a Claude Code qué partes de `message.content` pegó el usuario en lugar de escribirlas, una cadena por cada pegado. El texto del prompt permanece donde el usuario lo puso. Claude Code puede envolver cada pegado listado en etiquetas `<pasted_content>` en su lugar, para que Claude pueda distinguir el material pegado de las propias palabras del usuario. Solo se envuelven los pegados del último bloque de texto del prompt. Requiere TypeScript Agent SDK v0.3.280 o posterior.1664Establece `inline_pastes` para indicarle a Claude Code qué partes de `message.content` pegó el usuario en lugar de escribirlas, una cadena por cada pegado. El texto del prompt permanece donde el usuario lo puso. Claude Code puede envolver cada pegado listado en etiquetas `<pasted_content>` en su lugar, para que Claude pueda distinguir el material pegado de las propias palabras del usuario. Solo se envuelven los pegados del último bloque de texto del prompt. Requiere TypeScript Agent SDK v0.3.280 o posterior.

1633 1665 

1666Cada campo de pegado tiene un límite de tamaño:

1667 

1668* `pasted_content`: si las entradas más los bloques de contenido que contienen suman más de 1,000, Claude Code ignora todo el campo.

1669* `inline_pastes`: Claude Code usa las primeras 100 entradas que no están en blanco e ignora el resto.

1670 

1634Establece `shouldQuery`, `client_composed` o `priority` para cambiar cómo Claude Code maneja un mensaje que envías:1671Establece `shouldQuery`, `client_composed` o `priority` para cambiar cómo Claude Code maneja un mensaje que envías:

1635 1672 

1636* `shouldQuery`: establécelo en `false` para añadir el mensaje a la transcripción sin activar un turno del asistente. El mensaje se retiene y se fusiona con el siguiente mensaje del usuario que sí activa un turno. Úsalo para inyectar contexto, como la salida de un comando que ejecutaste fuera de banda, sin gastar una llamada al modelo en él.1673* `shouldQuery`: establécelo en `false` para añadir el mensaje a la transcripción sin activar un turno del asistente. El mensaje se retiene y se fusiona con el siguiente mensaje del usuario que sí activa un turno. Úsalo para inyectar contexto, como la salida de un comando que ejecutaste fuera de banda, sin gastar una llamada al modelo en él.


1661* Una llamada a WebFetch o WebSearch que Claude Code pasó a segundo plano para entregar un mensaje `'now'`: el mensaje del usuario que lleva el `tool_result` de esa llamada tiene `tool_use_result` establecido en `{ detachedToolCall: true }`. La llamada sigue ejecutándose, y Claude recibe su resultado una vez que termina. No llega un segundo `tool_result` para ese `tool_use_id`, así que si tu aplicación dibuja una fila por cada llamada a herramienta, marca esta fila como movida a segundo plano cuando llegue este mensaje. Requiere Claude Code v2.1.287 o posterior.1698* Una llamada a WebFetch o WebSearch que Claude Code pasó a segundo plano para entregar un mensaje `'now'`: el mensaje del usuario que lleva el `tool_result` de esa llamada tiene `tool_use_result` establecido en `{ detachedToolCall: true }`. La llamada sigue ejecutándose, y Claude recibe su resultado una vez que termina. No llega un segundo `tool_result` para ese `tool_use_id`, así que si tu aplicación dibuja una fila por cada llamada a herramienta, marca esta fila como movida a segundo plano cuando llegue este mensaje. Requiere Claude Code v2.1.287 o posterior.

1662* Una herramienta MCP cuyo resultado contiene bloques `resource_link`: `tool_use_result` es un objeto con un arreglo `resourceLinks` de entradas [`SDKMcpResourceLink`](#sdkmcpresourcelink). Claude recibe cada enlace como una línea de texto en el bloque `tool_result`, así que lee `resourceLinks` para renderizar los archivos que devolvió el servidor en lugar de analizar ese texto. Claude Code omite `resourceLinks` cuando el resultado no tiene enlaces y en los resultados de subagentes, conserva como máximo 50 enlaces por resultado y deja de agregar enlaces una vez que el arreglo alcanza 64 KiB de JSON serializado. `resourceLinks` requiere Agent SDK v0.3.257 o posterior.1699* Una herramienta MCP cuyo resultado contiene bloques `resource_link`: `tool_use_result` es un objeto con un arreglo `resourceLinks` de entradas [`SDKMcpResourceLink`](#sdkmcpresourcelink). Claude recibe cada enlace como una línea de texto en el bloque `tool_result`, así que lee `resourceLinks` para renderizar los archivos que devolvió el servidor en lugar de analizar ese texto. Claude Code omite `resourceLinks` cuando el resultado no tiene enlaces y en los resultados de subagentes, conserva como máximo 50 enlaces por resultado y deja de agregar enlaces una vez que el arreglo alcanza 64 KiB de JSON serializado. `resourceLinks` requiere Agent SDK v0.3.257 o posterior.

1663* Una herramienta MCP que devuelve [`structuredContent`](#calltoolresult): `tool_use_result` es un objeto cuyo miembro `structuredContent` contiene lo que envió el servidor y cuyo miembro `content` contiene el valor [`McpOutput`](#mcpoutput). Los resultados de subagentes no llevan `structuredContent`.1700* Una herramienta MCP que devuelve [`structuredContent`](#calltoolresult): `tool_use_result` es un objeto cuyo miembro `structuredContent` contiene lo que envió el servidor y cuyo miembro `content` contiene el valor [`McpOutput`](#mcpoutput). Los resultados de subagentes no llevan `structuredContent`.

1664* Una herramienta MCP cuyo `structuredContent` se serializa en más de 1,048,576 caracteres de JSON: Claude Code deja `structuredContent` fuera de `tool_use_result` y establece `structuredContentOmitted: true` en su lugar, para que tu aplicación pueda distinguir un objeto descartado de una herramienta que no envió ninguno. Los demás miembros, como `content` y `resourceLinks`, se mantienen, y lo que Claude recibe no cambia. Las herramientas de [servidores SDK en proceso](/docs/es/agent-sdk/custom-tools) y las herramientas cuya entrada en `tools/list` declara un [recurso `_meta.ui` de MCP Apps](#mcpserverstatus) están exentas y entregan el objeto completo. Claude Code v2.1.287 o posterior aplica este límite.1701* Una herramienta MCP cuyo `structuredContent` se serializa en más de 1,048,576 caracteres de JSON: Claude Code deja `structuredContent` fuera de `tool_use_result` y establece `structuredContentOmitted: true` en su lugar, para que tu aplicación pueda distinguir un objeto descartado de una herramienta que no envió ninguno. Los demás miembros, como `content` y `resourceLinks`, se mantienen, y lo que recibe Claude no cambia. Claude Code v2.1.287 o posterior aplica este límite. Dos tipos de herramienta son distintos:

1702 * Las herramientas de [servidores SDK en proceso](/docs/es/agent-sdk/custom-tools) están exentas y entregan el objeto completo.

1703 * Una herramienta cuya entrada de `tools/list` declara un [recurso `ui://` de MCP Apps](#mcpserverstatus) tiene un límite de 8,388,608 caracteres en Claude Code v2.1.295 o posterior, y las versiones anteriores a v2.1.295 la eximen.

1665 1704 

1666<h3 id="sdkusermessagereplay">1705<h3 id="sdkusermessagereplay">

1667 `SDKUserMessageReplay`1706 `SDKUserMessageReplay`


1775* `ttft_stream_ms`: tiempo en milisegundos hasta el primer evento de streaming `message_start`, cuando se abre el stream de respuesta. Es menor que `ttft_ms`; la diferencia entre ambos es el tiempo dedicado a transmitir en streaming el primer mensaje. Presente solo en la rama de éxito.1814* `ttft_stream_ms`: tiempo en milisegundos hasta el primer evento de streaming `message_start`, cuando se abre el stream de respuesta. Es menor que `ttft_ms`; la diferencia entre ambos es el tiempo dedicado a transmitir en streaming el primer mensaje. Presente solo en la rama de éxito.

1776* `user_message_uuid`: el `uuid` del mensaje que enviaste y que este turno respondió. Consulta [`user_message_uuid`](#user_message_uuid) para saber qué resultados lo llevan.1815* `user_message_uuid`: el `uuid` del mensaje que enviaste y que este turno respondió. Consulta [`user_message_uuid`](#user_message_uuid) para saber qué resultados lo llevan.

1777* `user_message_uuids`: los `uuid` de cada mensaje que enviaste y que Claude Code respondió en este turno. Consulta [`user_message_uuids`](#user_message_uuids).1816* `user_message_uuids`: los `uuid` de cada mensaje que enviaste y que Claude Code respondió en este turno. Consulta [`user_message_uuids`](#user_message_uuids).

1778* `resume_reason`: por qué Claude Code volvió a ejecutar este turno después de que un reinicio lo interrumpiera. Presente en ambas ramas. Consulta [`resume_reason`](#resume_reason).1817* `resume_reason`: por qué este turno continúa uno que un reinicio interrumpió. Presente en ambas ramas. Consulta [`resume_reason`](#resume_reason).

1779* `local_command`: el nombre del comando que despachó el turno, en el resultado de éxito de un turno que un comando completó sin entrar en el bucle del agente, como `/compact`. El nombre se convierte a letras minúsculas y guiones bajos, así que `/reload-plugins` reporta `reload_plugins`. Un comando que proporciona un servidor MCP, y el `/mcp` integrado, reportan `mcp`. Un comando que definiste tú mismo reporta `custom`. Los argumentos nunca se incluyen. Ausente en todo turno que entró en el bucle del agente y en los envíos que no ejecutaron ningún comando. Requiere Agent SDK v0.3.268 o posterior.1818* `local_command`: el nombre del comando que despachó el turno, en el resultado de éxito de un turno que un comando completó sin entrar en el bucle del agente, como `/compact`. El nombre se convierte a letras minúsculas y guiones bajos, así que `/reload-plugins` reporta `reload_plugins`. Un comando que proporciona un servidor MCP, y el `/mcp` integrado, reportan `mcp`. Un comando que definiste tú mismo reporta `custom`. Los argumentos nunca se incluyen. Ausente en todo turno que entró en el bucle del agente y en los envíos que no ejecutaron ningún comando. Requiere Agent SDK v0.3.268 o posterior.

1780* `request_sent_wall_ms`: milisegundos de época en los que Claude Code despachó la solicitud de API, para cruzarlos con marcas de tiempo del lado del servidor. Presente solo junto con [`user_message_uuid`](#user_message_uuid), en un resultado de éxito con `is_error` en false cuyo turno envió una solicitud de API.1819* `request_sent_wall_ms`: milisegundos de época en los que Claude Code despachó la solicitud de API, para cruzarlos con marcas de tiempo del lado del servidor. Presente solo junto con [`user_message_uuid`](#user_message_uuid), en un resultado de éxito con `is_error` en false cuyo turno envió una solicitud de API.

1781* `first_content_frame_ms`: tiempo en milisegundos hasta el primer evento de streaming `content_block_start` o `content_block_delta`, contando los bloques de pensamiento como contenido. Presente solo en la rama de éxito, cuando `is_error` es false. Requiere Agent SDK v0.3.260 o posterior.1820* `first_content_frame_ms`: tiempo en milisegundos hasta el primer evento de streaming `content_block_start` o `content_block_delta`, contando los bloques de pensamiento como contenido. Presente solo en la rama de éxito, cuando `is_error` es false. Requiere Agent SDK v0.3.260 o posterior.


1825 1864 

1826* **Un mensaje normal que enviaste**, es decir, uno sin `isSynthetic: true`: el turno responde a ese mensaje durante toda su ejecución. Cuando envías varios mensajes en poco tiempo, Claude Code puede fusionarlos en un solo turno, y el campo entonces lleva solo el `uuid` del último mensaje. Para asociar la respuesta con cualquiera de los mensajes fusionados, usa [`user_message_uuids`](#user_message_uuids).1865* **Un mensaje normal que enviaste**, es decir, uno sin `isSynthetic: true`: el turno responde a ese mensaje durante toda su ejecución. Cuando envías varios mensajes en poco tiempo, Claude Code puede fusionarlos en un solo turno, y el campo entonces lleva solo el `uuid` del último mensaje. Para asociar la respuesta con cualquiera de los mensajes fusionados, usa [`user_message_uuids`](#user_message_uuids).

1827* **Un mensaje que enviaste con `isSynthetic: true`**: el turno responde a ese mensaje al principio. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde al mensaje recogido a partir de ese momento. Devolver el `uuid` de un mensaje sintético requiere Agent SDK v0.3.265 o posterior; las versiones anteriores no devuelven nada en los turnos sintéticos.1866* **Un mensaje que enviaste con `isSynthetic: true`**: el turno responde a ese mensaje al principio. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde al mensaje recogido a partir de ese momento. Devolver el `uuid` de un mensaje sintético requiere Agent SDK v0.3.265 o posterior; las versiones anteriores no devuelven nada en los turnos sintéticos.

1828* **El prompt que Claude Code genera para volver a ejecutar un turno interrumpido con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars)**: cuando el último prompt del turno interrumpido es un mensaje normal que enviaste, ya sea que abriera el turno o que Claude Code lo recogiera durante el turno, la nueva ejecución responde a ese mensaje al principio. [`resume_reason`](#resume_reason) distingue los frames de la nueva ejecución de los del intento interrumpido. Cuando el último prompt no es un mensaje normal tuyo, la nueva ejecución no responde a ningún mensaje tuyo al principio. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde al mensaje recogido a partir de ese momento. Devolver el prompt del turno interrumpido requiere Agent SDK v0.3.268 o posterior.1867* **El prompt que genera Claude Code para continuar un turno interrumpido con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars)**: cuando el último prompt del turno interrumpido es un mensaje normal que enviaste, ya sea que abriera el turno o que Claude Code lo recogiera durante el turno, el turno continuado responde a ese mensaje al principio. [`resume_reason`](#resume_reason) distingue los frames del turno continuado de los del intento interrumpido. Cuando el último prompt no es un mensaje normal tuyo, el turno continuado no responde a ningún mensaje tuyo al principio. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, a partir de entonces el turno responde al mensaje recogido. Repetir el prompt del turno interrumpido requiere el Agent SDK v0.3.268 o posterior.

1829* **Cualquier otro prompt que Claude Code haya generado por sí mismo**: el turno no responde a ningún mensaje tuyo al principio y sus frames no llevan eco. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde a ese mensaje a partir de ese momento. El eco de la recogida requiere Agent SDK v0.3.265 o posterior; las versiones anteriores no devuelven nada en estos turnos.1868* **Cualquier otro prompt que Claude Code haya generado por sí mismo**: el turno no responde a ningún mensaje tuyo al principio y sus frames no llevan eco. Si Claude Code recoge un mensaje normal tuyo entre llamadas a herramientas, el turno responde a ese mensaje a partir de ese momento. El eco de la recogida requiere Agent SDK v0.3.265 o posterior; las versiones anteriores no devuelven nada en estos turnos.

1830 1869 

1831Claude Code devuelve el `uuid` del mensaje respondido en tres tipos de frame:1870Claude Code devuelve el `uuid` del mensaje respondido en tres tipos de frame:


1857 `resume_reason`1896 `resume_reason`

1858</h4>1897</h4>

1859 1898 

1860Por qué Claude Code volvió a ejecutar este turno después de un reinicio. Claude Code establece este campo en un turno que volvió a ejecutar con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars), para que puedas distinguir la respuesta y el resultado de la nueva ejecución de los del intento interrumpido. Requiere Agent SDK v0.3.268 o posterior.1899Por qué este turno continúa uno que un reinicio interrumpió. Claude Code establece este campo en un turno que continúa uno interrumpido con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars), para que puedas distinguir la respuesta y el resultado del turno continuado de los del intento interrumpido. Requiere el Agent SDK v0.3.268 o posterior.

1861 1900 

1862Claude Code establece el campo en dos tipos de frame:1901Claude Code establece el campo en dos tipos de frame:

1863 1902 

1864* **El resultado de la nueva ejecución**: tanto en la rama de éxito como en la de error, lleve o no el resultado `user_message_uuid`.1903* **El resultado del turno continuado**: tanto en la rama de éxito como en la de error, lleve o no el resultado `user_message_uuid`.

1865* **Los frames de respuesta de la nueva ejecución**: aquellos que llevan [`user_message_uuid`](#user_message_uuid).1904* **Los frames de respuesta del turno continuado**: los que llevan [`user_message_uuid`](#user_message_uuid).

1866 1905 

1867El valor es un token breve en minúsculas que nombra por qué se volvió a ejecutar el turno, como `interrupted_turn`.1906El valor es un token corto en minúsculas, como `interrupted_turn`.

1868 1907 

1869<h4 id="queued_turn_count">1908<h4 id="queued_turn_count">

1870 `queued_turn_count`1909 `queued_turn_count`


2029};2068};

2030```2069```

2031 2070 

2032Claude Code establece `user_message_uuid` y `user_message_uuids` en el primer evento de streaming del turno que no es ping, y de nuevo cuando cambia el mensaje al que responde el turno, bajo las condiciones descritas en [`user_message_uuid`](#user_message_uuid). Cuando Claude Code vuelve a ejecutar un turno que un reinicio interrumpió, los eventos de streaming de la nueva ejecución que llevan esos campos también llevan [`resume_reason`](#resume_reason).2071Claude Code establece `user_message_uuid` y `user_message_uuids` en el primer evento de stream del turno que no es ping, y de nuevo cuando cambia el mensaje al que responde el turno, en las condiciones descritas en [`user_message_uuid`](#user_message_uuid). Cuando el turno continúa uno que un reinicio interrumpió, los eventos de stream que llevan esos campos también llevan [`resume_reason`](#resume_reason).

2033 2072 

2034<h3 id="sdkcompactboundarymessage">2073<h3 id="sdkcompactboundarymessage">

2035 `SDKCompactBoundaryMessage`2074 `SDKCompactBoundaryMessage`


3557| - | - | - |3596| - | - | - |

3558| `script` | `string` | Script de flujo de trabajo en línea. Debe comenzar con `export const meta = { name, description }` como un literal, seguido del cuerpo del script usando `agent()`, `parallel()`, `pipeline()` y `phase()`. Una matriz `phases` opcional en `meta` agrupa agentes bajo etapas nombradas en la vista de progreso |3597| `script` | `string` | Script de flujo de trabajo en línea. Debe comenzar con `export const meta = { name, description }` como un literal, seguido del cuerpo del script usando `agent()`, `parallel()`, `pipeline()` y `phase()`. Una matriz `phases` opcional en `meta` agrupa agentes bajo etapas nombradas en la vista de progreso |

3559| `name` | `string` | Nombre de un flujo de trabajo integrado o uno guardado en `.claude/workflows/`. Se resuelve a un script |3598| `name` | `string` | Nombre de un flujo de trabajo integrado o uno guardado en `.claude/workflows/`. Se resuelve a un script |

3560| `scriptPath` | `string` | Ruta a un archivo de script de flujo de trabajo en disco. Tiene precedencia sobre `script` y `name`. Claude Code persiste el script de cada invocación y devuelve la ruta en el resultado, para que puedas editar ese archivo e invocar nuevamente con el mismo `scriptPath` para iterar |3599| `scriptPath` | `string` | Ruta a un archivo de script de flujo de trabajo en disco, como el `scriptPath` que devolvió una ejecución anterior. Tiene precedencia sobre `script` y `name`. Claude Code rechaza `scriptPath` con un error cuando las herramientas de la sesión no incluyen `Read` |

3561| `args` | `unknown` | Valor de entrada expuesto al script como el `args` global, para flujos de trabajo nombrados parametrizados como una pregunta de investigación o una lista de rutas de archivo. Pasa matrices y objetos como valores JSON reales, no como una cadena codificada en JSON |3600| `args` | `unknown` | Valor de entrada expuesto al script como el `args` global, para flujos de trabajo nombrados parametrizados como una pregunta de investigación o una lista de rutas de archivo. Pasa matrices y objetos como valores JSON reales, no como una cadena codificada en JSON |

3562| `resumeFromRunId` | `string` | ID de ejecución de una invocación anterior de `Workflow` para reanudar. Las llamadas `agent()` completadas con entradas sin cambios normalmente devuelven resultados en caché; el resto se ejecuta en vivo. [Reanudar después de una pausa](/docs/es/workflows#resume-after-a-pause) cubre qué llamadas completadas se vuelven a ejecutar. Solo la misma sesión |3601| `resumeFromRunId` | `string` | ID de ejecución de una invocación anterior de `Workflow` para reanudar. Las llamadas `agent()` completadas con entradas sin cambios normalmente devuelven resultados en caché; el resto se ejecuta en vivo. [Reanudar después de una pausa](/docs/es/workflows#resume-after-a-pause) cubre qué llamadas completadas se vuelven a ejecutar. Solo la misma sesión |

3563| `title` | `string` | Ignorado; el bloque `meta` del script establece el título |3602| `title` | `string` | Ignorado; el bloque `meta` del script establece el título |

agent-view.md +18 −14

Details

152| Forma | Qué significa |152| Forma | Qué significa |

153| :- | :- |153| :- | :- |

154| `✻` o `✽` animado | El proceso de la sesión se está ejecutando, o la sesión necesita tu entrada |154| `✻` o `✽` animado | El proceso de la sesión se está ejecutando, o la sesión necesita tu entrada |

155| `∙` | El proceso ha terminado. Aún puedes echar un vistazo a la fila, y cuando respondas o te adjuntes, Claude se reinicia desde donde lo dejó |155| `∙` | El proceso ha terminado. Aún puedes echar un vistazo a la fila, y cuando respondas o te adjuntes, Claude lo reinicia a partir de su conversación guardada |

156| `✢` | Una sesión de [`/loop`](/docs/es/scheduled-tasks) en reposo entre iteraciones. La fila muestra su recuento de ejecuciones y una cuenta regresiva |156| `✢` | Una sesión de [`/loop`](/docs/es/scheduled-tasks) en reposo entre iteraciones. La fila muestra su recuento de ejecuciones y una cuenta regresiva |

157 157 

158La etiqueta `#N` o `!N` que puede aparecer en el borde derecho de una fila es un enlace al [pull request o merge request](#pull-request-status) de la sesión, no parte del icono de estado.158La etiqueta `#N` o `!N` que puede aparecer en el borde derecho de una fila es un enlace al [pull request o merge request](#pull-request-status) de la sesión, no parte del icono de estado.


256 256 

257Las sesiones adjuntas siempre se muestran en [modo de pantalla completa](/docs/es/fullscreen), independientemente de tu ajuste `tui`, porque una sesión en segundo plano no tiene historial de desplazamiento de terminal al que agregar contenido. Desplázate con `PgUp`, `PgDn` o la rueda del ratón, y presiona `Ctrl+O` para el modo de transcripción. El desplazamiento nativo de tu terminal y el modo de copia de tmux muestran solo la ventana visible actual, igual que cuando ejecutas cualquier aplicación de pantalla completa.257Las sesiones adjuntas siempre se muestran en [modo de pantalla completa](/docs/es/fullscreen), independientemente de tu ajuste `tui`, porque una sesión en segundo plano no tiene historial de desplazamiento de terminal al que agregar contenido. Desplázate con `PgUp`, `PgDn` o la rueda del ratón, y presiona `Ctrl+O` para el modo de transcripción. El desplazamiento nativo de tu terminal y el modo de copia de tmux muestran solo la ventana visible actual, igual que cuando ejecutas cualquier aplicación de pantalla completa.

258 258 

259Una sesión adjunta no [informa su estado a tu terminal](/docs/es/terminal-config#see-session-status-in-your-terminal).

260 

259Presiona `←` en un prompt vacío, o ejecuta `/exit`, para desconectarte y volver a la vista de agentes, ya sea que hayas abierto la sesión desde la vista de agentes o con `claude attach <id>` desde tu shell.261Presiona `←` en un prompt vacío, o ejecuta `/exit`, para desconectarte y volver a la vista de agentes, ya sea que hayas abierto la sesión desde la vista de agentes o con `claude attach <id>` desde tu shell.

260 262 

261`←` también te desconecta mientras la [superposición de `/btw`](/docs/es/interactive-mode#side-questions-with-%2Fbtw) está abierta. Requiere Claude Code v2.1.257 o posterior. Una pregunta secundaria que aún se está respondiendo sigue ejecutándose mientras no estás. La próxima vez que te adjuntes, la superposición se vuelve a abrir con ella o con su respuesta.263`←` también te desconecta mientras la [superposición de `/btw`](/docs/es/interactive-mode#side-questions-with-%2Fbtw) está abierta. Requiere Claude Code v2.1.257 o posterior. Una pregunta secundaria que aún se está respondiendo sigue ejecutándose mientras no estás. La próxima vez que te adjuntes, la superposición se vuelve a abrir con ella o con su respuesta.


264 266 

265`Ctrl+Z` también te desconecta, pero en su lugar vuelve a donde empezaste: a la vista de agentes si te adjuntaste desde allí, o a tu shell si ejecutaste `claude attach`. Usa `Ctrl+Z` cuando un diálogo tiene el foco y no responde a `←`.267`Ctrl+Z` también te desconecta, pero en su lugar vuelve a donde empezaste: a la vista de agentes si te adjuntaste desde allí, o a tu shell si ejecutaste `claude attach`. Usa `Ctrl+Z` cuando un diálogo tiene el foco y no responde a `←`.

266 268 

267`Ctrl+C` mantiene su comportamiento de interrupción estándar mientras estás adjunto: cancela una respuesta en ejecución o un comando de shell `!` en lugar de desconectarte. Presionar `Ctrl+C` dos veces en un prompt vacío te desconecta, igual que en cualquier sesión.269`Ctrl+C` mantiene su comportamiento de interrupción estándar mientras estás adjunto: cancela una respuesta en ejecución o un comando de shell `!` en lugar de desconectarte. Presionar `Ctrl+C` dos veces en un prompt vacío te desconecta.

268 270 

269Desconectarte nunca detiene una sesión en segundo plano: `←`, `Ctrl+Z`, `/exit` y `Ctrl+C` o `Ctrl+D` dobles la dejan en ejecución. Para finalizar una sesión desde dentro de ella, ejecuta `/stop`.271Desconectarte nunca detiene una sesión en segundo plano: `←`, `Ctrl+Z`, `/exit` y `Ctrl+C` o `Ctrl+D` dobles la dejan en ejecución. Si te desconectas mientras un `/loop` espera su próxima iteración, el loop sigue ejecutándose y esa iteración empieza según lo programado sin ti. Para detener el loop antes de desconectarte, consulta [Detener un loop](/docs/es/scheduled-tasks#stop-a-loop). Para finalizar una sesión desde dentro de ella, ejecuta `/stop`.

270 272 

271<h4 id="switch-sessions-without-leaving-the-terminal">273<h4 id="switch-sessions-without-leaving-the-terminal">

272 Cambiar de sesión sin salir de la terminal274 Cambiar de sesión sin salir de la terminal


293Después de unos diez segundos, Claude Code pasa la sesión a segundo plano sin esperar más, excepto en casos como estos:295Después de unos diez segundos, Claude Code pasa la sesión a segundo plano sin esperar más, excepto en casos como estos:

294 296 

295* **Los subagentes en primer plano siguen ejecutándose**: Claude Code sigue esperando para que el trabajo de los [subagentes en primer plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) que Claude inició se traslade, y muestra `Still backgrounding after the current tool`. Presiona `←` de nuevo para pasar a segundo plano sin esperar, lo que reinicia esos subagentes desde el principio.297* **Los subagentes en primer plano siguen ejecutándose**: Claude Code sigue esperando para que el trabajo de los [subagentes en primer plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) que Claude inició se traslade, y muestra `Still backgrounding after the current tool`. Presiona `←` de nuevo para pasar a segundo plano sin esperar, lo que reinicia esos subagentes desde el principio.

296* **Una solicitud de permiso o una pregunta espera tu respuesta**: mientras espera una solicitud de permiso o una pregunta que hizo Claude, Claude Code sigue esperando y muestra `Still backgrounding after the current tool — a question is waiting for your answer.`298* **Una solicitud de permiso o una pregunta espera tu respuesta**: mientras espera una solicitud de permiso o una pregunta que hizo Claude, Claude Code sigue esperando y muestra `Still backgrounding after the current tool — a question is waiting for your answer.` Si tu respuesta permite que el turno continúe, como **Yes** en una solicitud de permiso, Claude Code pasa la sesión a segundo plano cuando termina la herramienta actual.

297* **Escribes en la entrada del prompt**: Claude Code cancela el cambio, porque el texto sin enviar permanece en el cuadro de entrada de tu terminal y no se trasladaría a la sesión en segundo plano. Muestra `Backgrounding cancelled — you have unsent text in the input. Send it or clear it, then press ← again.`299* **Escribes en la entrada del prompt**: Claude Code cancela el cambio, porque el texto sin enviar permanece en el cuadro de entrada de tu terminal y no se trasladaría a la sesión en segundo plano. Muestra `Backgrounding cancelled — you have unsent text in the input. Send it or clear it, then press ← again.`

300* **Detienes el turno**: Claude Code cancela el cambio y muestra `Backgrounding cancelled — the turn was stopped.` Por ejemplo, el turno se detiene cuando [interrumpes a Claude con `Esc`](/docs/es/interactive-mode#general-controls) o seleccionas **No** [sin un comentario](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) en una solicitud de permiso de la conversación principal, o presionas `Esc` en una pregunta que Claude hace allí. Presiona `←` de nuevo para pasar la sesión a segundo plano.

298* **Un mensaje en cola no puede trasladarse**: los mensajes que [pusiste en cola mientras Claude trabajaba](/docs/es/interactive-mode#queue-messages-while-claude-works) se trasladan a la sesión en segundo plano junto con la conversación. Cuando alguno de ellos no puede trasladarse, la sesión permanece en primer plano y Claude Code muestra un aviso como `Cannot open agents — 1 queued message can't move to the background. Press ← again once Claude has read it.`301* **Un mensaje en cola no puede trasladarse**: los mensajes que [pusiste en cola mientras Claude trabajaba](/docs/es/interactive-mode#queue-messages-while-claude-works) se trasladan a la sesión en segundo plano junto con la conversación. Cuando alguno de ellos no puede trasladarse, la sesión permanece en primer plano y Claude Code muestra un aviso como `Cannot open agents — 1 queued message can't move to the background. Press ← again once Claude has read it.`

299 302 

300Presionar `←` crea la fila de la sesión incluso cuando la conversación aún no tiene mensajes, por lo que `→` sigue volviendo a ella.303Presionar `←` crea la fila de la sesión incluso cuando la conversación aún no tiene mensajes, por lo que `→` sigue volviendo a ella.


513* `--fallback-model`516* `--fallback-model`

514* `--allow-dangerously-skip-permissions`517* `--allow-dangerously-skip-permissions`

515 518 

516Los directorios que agregaste durante la sesión con [`/add-dir`](/docs/es/permissions#additional-directories-grant-file-access-not-configuration) también se conservan. Conservar `--allow-dangerously-skip-permissions` mantiene `bypassPermissions` disponible en la sesión en segundo plano, pero no otorga nada nuevo: el modo sigue requiriendo la aceptación interactiva única descrita en [Modo de permisos, modelo y esfuerzo](#permission-mode-model-and-effort).519Los directorios que agregaste durante la sesión con [`/add-dir`](/docs/es/permissions#additional-directories-grant-file-access-not-configuration) también se conservan. Conservar `--allow-dangerously-skip-permissions` mantiene `bypassPermissions` disponible en la sesión en segundo plano, pero no otorga nada nuevo: el modo sigue requiriendo que conste tu [aceptación del descargo de responsabilidad de omisión](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode).

517 520 

518<span id="from-your-shell" />521<span id="from-your-shell" />

519 522 


767 770 

768Los predeterminados activos aparecen en el pie, debajo de la entrada de envío.771Los predeterminados activos aparecen en el pie, debajo de la entrada de envío.

769 772 

770Claude Code rechaza `claude --bg --permission-mode bypassPermissions` hasta que hayas aceptado el descargo de responsabilidad de omisión ejecutando `claude --dangerously-skip-permissions` una vez de forma interactiva, ya que ese modo permite que una sesión que no estás observando actúe sin aprobación. Pasar `--dangerously-skip-permissions` o `--permission-mode bypassPermissions` a `claude agents` muestra el mismo descargo de responsabilidad si no lo has aceptado antes, y aceptarlo aplica `bypassPermissions` a las sesiones que inicies desde la vista. Pasar `--allow-dangerously-skip-permissions` también muestra el mismo descargo de responsabilidad, y aceptarlo hace que `bypassPermissions` esté disponible en el ciclo de `Shift+Tab` de esas sesiones sin iniciarlas en ese modo.773Una sesión en segundo plano iniciada en modo `bypassPermissions` requiere que conste tu [aceptación del descargo de responsabilidad de omisión](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), ya que ese modo permite que una sesión que no estás observando actúe sin aprobación. Pasar `--dangerously-skip-permissions` o `--permission-mode bypassPermissions` a `claude agents` muestra el mismo descargo de responsabilidad si no lo has aceptado antes, y aceptarlo aplica `bypassPermissions` a las sesiones que inicies desde la vista. Pasar `--allow-dangerously-skip-permissions` también muestra el mismo descargo de responsabilidad, y aceptarlo hace que `bypassPermissions` esté disponible en el ciclo de `Shift+Tab` de esas sesiones sin iniciarlas en ese modo.

771 774 

772<h4 id="what-persists-across-restarts">775<h4 id="what-persists-across-restarts">

773 Qué persiste tras los reinicios776 Qué persiste tras los reinicios

774</h4>777</h4>

775 778 

776El modo de permisos, el modelo y el esfuerzo que elegiste para una sesión en segundo plano, junto con los [flags de configuración que conserva](#what-carries-over-when-you-background), persisten cuando el supervisor más tarde [detiene y reinicia](#the-supervisor-process) su proceso. Una sesión que iniciaste con `claude --bg --dangerously-skip-permissions` o `claude --bg --permission-mode bypassPermissions` permanece en `bypassPermissions` después de ese reinicio. Un modelo o esfuerzo que cambiaste a mitad de la sesión con `/model` o `/effort` también se conserva.779El modo de permisos, el modelo y el esfuerzo que elegiste para una sesión en segundo plano, junto con los [flags de configuración que conserva](#what-carries-over-when-you-background), persisten cuando el supervisor más tarde [detiene y reinicia](#the-supervisor-process) su proceso. Un modelo o esfuerzo que cambiaste a mitad de la sesión con `/model` o `/effort` también se conserva.

777 780 

778Si la sesión tomó su esfuerzo de tu configuración en lugar de `--effort` o `/effort`, Claude Code vuelve a leer tu configuración cada vez que inicia un proceso para la sesión. Después de editar el esfuerzo guardado en `settings.json`, el cambio llega a las sesiones que envíes al segundo plano con `←` o `/bg` y a sus reinicios posteriores. El esfuerzo guardado es la clave [`effortLevel`](/docs/es/settings-reference#effortlevel) o una entrada de [`modelSettings`](/docs/es/settings-reference#modelsettings).781Si la sesión tomó su esfuerzo de tu configuración en lugar de `--effort` o `/effort`, Claude Code vuelve a leer tu configuración cada vez que inicia un proceso para la sesión. Después de editar el esfuerzo guardado en `settings.json`, el cambio llega a las sesiones que envíes al segundo plano con `←` o `/bg` y a sus reinicios posteriores. El esfuerzo guardado es la clave [`effortLevel`](/docs/es/settings-reference#effortlevel) o una entrada de [`modelSettings`](/docs/es/settings-reference#modelsettings).

779 782 


822| `claude attach <id\|name>` | Conectarse a una sesión en esta terminal |825| `claude attach <id\|name>` | Conectarse a una sesión en esta terminal |

823| `claude logs <id\|name>` | Imprimir la salida reciente de la sesión |826| `claude logs <id\|name>` | Imprimir la salida reciente de la sesión |

824| `claude stop <id>` | Detener una sesión. También acepta `claude kill` |827| `claude stop <id>` | Detener una sesión. También acepta `claude kill` |

825| `claude respawn <id>` | Reiniciar una sesión, en ejecución o detenida, por ejemplo para usar un binario Claude Code actualizado. La sesión reiniciada reanuda su conversación guardada; cuando ninguna está en disco, ejecuta su prompt original nuevamente como una nueva conversación |828| `claude respawn <id>` | Reiniciar una sesión, en ejecución o detenida, por ejemplo para usar un binario Claude Code actualizado. Una sesión que tiene una conversación guardada la reanuda |

826| `claude respawn --all` | Reiniciar cada sesión en ejecución, por ejemplo para mover todas las sesiones a un binario Claude Code actualizado a la vez |829| `claude respawn --all` | Reiniciar cada sesión en ejecución, por ejemplo para mover todas las sesiones a un binario Claude Code actualizado a la vez |

827| `claude rm <id>` | Eliminar una sesión de la lista, junto con un worktree que Claude creó para ella cuando es seguro eliminarlo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). La transcripción de la conversación permanece en tu máquina local y sigue disponible a través de `claude --resume` |830| `claude rm <id>` | Eliminar una sesión de la lista, junto con un worktree que Claude creó para ella cuando es seguro eliminarlo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). La transcripción de la conversación permanece en tu máquina local y sigue disponible a través de `claude --resume` |

828| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Eliminar una sesión cuya eliminación fue rechazada por commits no enviados, descartando el worktree junto con su rama y commits. Pasa el valor exacto que imprimió el rechazo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). Requiere v2.1.260 o posterior |831| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Eliminar una sesión cuya eliminación fue rechazada por commits no enviados, descartando el worktree junto con su rama y commits. Pasa el valor exacto que imprimió el rechazo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). Requiere v2.1.260 o posterior |

829| `claude rm <id> --force-remove-worktree <worktree-id>` | Eliminar una sesión cuya eliminación fue rechazada porque git o el hook `WorktreeRemove` no pudieron eliminar su worktree, eliminando el directorio worktree de todas formas y dejando su rama en el repositorio. Pasa el valor exacto que imprimió el rechazo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). Requiere v2.1.268 o posterior |832| `claude rm <id> --force-remove-worktree <worktree-id>` | Eliminar una sesión cuya eliminación fue rechazada porque git o el hook `WorktreeRemove` no pudieron eliminar su worktree, eliminando el directorio worktree de todas formas y dejando su rama en el repositorio. Pasa el valor exacto que imprimió el rechazo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). Requiere v2.1.268 o posterior |

830| `claude daemon status` | Imprimir el estado del [supervisor](#the-supervisor-process), versión, directorio de socket y número de workers |833| `claude daemon status` | Imprimir el estado del [supervisor](#the-supervisor-process), versión, directorio de socket y número de workers |

831| `claude daemon logs` | Seguir el archivo de log del supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), imprimiendo las líneas nuevas a medida que llegan hasta que presiones `Ctrl+C` |834| `claude daemon logs` | Seguir el archivo de log del supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), imprimiendo las líneas nuevas a medida que llegan hasta que presiones `Ctrl+C` |

832| `claude daemon stop --any` | Detener el proceso supervisor y las sesiones en segundo plano que aloja. Pasa `--keep-workers` para dejar las sesiones en segundo plano en ejecución de modo que el siguiente supervisor se reconecte a ellas. El siguiente `claude agents` o `claude --bg` inicia un nuevo supervisor |835| `claude daemon stop --any` | Detener el proceso supervisor y las sesiones en segundo plano que aloja. Pasa `--keep-workers` para dejar las sesiones en segundo plano en ejecución de modo que [el siguiente supervisor](#the-supervisor-process) se reconecte a ellas. El siguiente `claude agents` o `claude --bg` inicia un nuevo supervisor |

833 836 

834`claude attach` y `claude logs` pueden recibir parte del nombre de una sesión en lugar del ID, como en `claude logs "auth refactor"`. Pasar un nombre requiere Claude Code v2.1.290 o posterior.837`claude attach` y `claude logs` pueden recibir parte del nombre de una sesión en lugar del ID, como en `claude logs "auth refactor"`. `claude attach` abre una sesión por nombre solo mientras su proceso está en ejecución, así que pasa el ID en su lugar para reiniciar una sesión detenida. Pasar un nombre requiere Claude Code v2.1.290 o posterior.

835 838 

836<h3 id="list-sessions-as-json">839<h3 id="list-sessions-as-json">

837 Listar sesiones como JSON840 Listar sesiones como JSON


889* **Finalizado o esperando tu próximo mensaje, y sin conectar durante aproximadamente una hora**: el supervisor detiene el proceso para liberar recursos. Una sesión que terminó su turno haciéndote una pregunta cuenta como esperando tu próximo mensaje. La conversación permanece en el disco, y la próxima vez que te conectes o respondas, la sesión se reanuda donde se quedó. Fija una sesión con `Ctrl+T` para mantener su proceso ejecutándose.892* **Finalizado o esperando tu próximo mensaje, y sin conectar durante aproximadamente una hora**: el supervisor detiene el proceso para liberar recursos. Una sesión que terminó su turno haciéndote una pregunta cuenta como esperando tu próximo mensaje. La conversación permanece en el disco, y la próxima vez que te conectes o respondas, la sesión se reanuda donde se quedó. Fija una sesión con `Ctrl+T` para mantener su proceso ejecutándose.

890* **Salió inesperadamente mientras el supervisor está ejecutándose**: el supervisor reinicia el proceso. Finalizar una sesión que enviaste al segundo plano tú mismo con `←` o `/background`, por ejemplo con `kill`, la marca como detenida en lugar de reiniciarla. Para sesiones que finalizaron con un apagado, consulta [Las sesiones se muestran como fallidas o detenidas después del apagado](#sessions-show-as-failed-after-shutdown).893* **Salió inesperadamente mientras el supervisor está ejecutándose**: el supervisor reinicia el proceso. Finalizar una sesión que enviaste al segundo plano tú mismo con `←` o `/background`, por ejemplo con `kill`, la marca como detenida en lugar de reiniciarla. Para sesiones que finalizaron con un apagado, consulta [Las sesiones se muestran como fallidas o detenidas después del apagado](#sessions-show-as-failed-after-shutdown).

891* **Después de una actualización automática**: el supervisor se reinicia en la nueva versión y mueve las sesiones inactivas en segundo plano. Las sesiones que están funcionando, esperando tu respuesta o conectadas no se interrumpen.894* **Después de una actualización automática**: el supervisor se reinicia en la nueva versión y mueve las sesiones inactivas en segundo plano. Las sesiones que están funcionando, esperando tu respuesta o conectadas no se interrumpen.

895* **El propio supervisor se detiene**, por ejemplo porque su proceso se finalizó desde fuera de Claude Code: en macOS y Linux, el proceso de cada sesión espera aproximadamente un minuto a que un nuevo supervisor se reconecte a él, y se detiene si ninguno lo hace. Ejecuta `claude agents` en tu shell dentro de ese minuto para iniciar un nuevo supervisor y mantener tus sesiones en ejecución. Si el minuto pasa primero, las sesiones se detienen, pero sus conversaciones guardadas permanecen en el disco: conéctate o responde a una sesión y se reiniciará desde su conversación guardada, como se describe en [Las sesiones se muestran como fallidas o detenidas después del apagado](#sessions-show-as-failed-after-shutdown).

892 896 

893Cuando el proceso de una sesión se detiene o se reinicia, los comandos de shell en segundo plano, los flujos de trabajo dinámicos y los subagentes en segundo plano que Claude inició en ella se transfieren al siguiente proceso; los monitores en ejecución y los comandos de shell que un subagente inició se detienen con el proceso. Eliminar la sesión detiene todo lo que se transfirió. Para detener todo con el proceso en lugar de transferirlo, establece [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/docs/es/env-vars#variables) en `1`.897Cuando el proceso de una sesión se detiene o se reinicia, los comandos de shell en segundo plano, los flujos de trabajo dinámicos y los subagentes en segundo plano que Claude inició en ella se transfieren al siguiente proceso; los monitores en ejecución y los comandos de shell que un subagente inició se detienen con el proceso. Eliminar la sesión detiene todo lo que se transfirió. Para detener todo con el proceso en lugar de transferirlo, establece [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/docs/es/env-vars#variables) en `1`.

894 898 


911 915 

912Para inspeccionar este estado sin leer los archivos directamente, ejecuta `claude daemon status`. Informa si el supervisor es accesible, su ID de proceso y versión, el directorio de socket y cuántas sesiones en segundo plano están activas.916Para inspeccionar este estado sin leer los archivos directamente, ejecuta `claude daemon status`. Informa si el supervisor es accesible, su ID de proceso y versión, el directorio de socket y cuántas sesiones en segundo plano están activas.

913 917 

914El comando también advierte cuando el supervisor en ejecución está en una versión diferente a la de `claude` que invocaste, lo que sucede después de una actualización en la que el supervisor aún no se ha reiniciado. La advertencia muestra ambas versiones y te indica que ejecutes `claude daemon stop --any` para adoptar la nueva versión. Cuando Claude Code se instala como un servicio del sistema operativo, el comando sugerido es `claude daemon stop` sin el flag.918El comando también advierte cuando el supervisor en ejecución está en una versión diferente a la de `claude` que invocaste, lo que sucede después de una actualización en la que el supervisor aún no se ha reiniciado. La advertencia muestra ambas versiones y te indica que ejecutes `claude daemon stop --any` para adoptar la nueva versión.

915 919 

916Las sesiones sobreviven intactas a ese desajuste de versión: una versión anterior de Claude Code que actualiza el `state.json` de una sesión preserva campos que no reconoce y mantiene la sesión listada. La lista de sesiones en `roster.json` sigue la misma regla, por lo que las sesiones iniciadas por la versión más nueva permanecen accesibles y continúan aceptando entrada después de que el supervisor se reinicia.920Las sesiones sobreviven intactas a ese desajuste de versión: una versión anterior de Claude Code que actualiza el `state.json` de una sesión preserva campos que no reconoce y mantiene la sesión listada. La lista de sesiones en `roster.json` sigue la misma regla, por lo que las sesiones iniciadas por la versión más nueva permanecen accesibles y continúan aceptando entrada después de que el supervisor se reinicia.

917 921 


963 967 

964Apagar o reiniciar tu máquina detiene las sesiones en segundo plano en ejecución. Una sesión que estaba esperando tu entrada permanece bajo `Needs input` cuando regresas. Para cualquier otra sesión en ejecución, lo que muestra la vista de agentes depende de cuánto tiempo hace que avanzó por última vez:968Apagar o reiniciar tu máquina detiene las sesiones en segundo plano en ejecución. Una sesión que estaba esperando tu entrada permanece bajo `Needs input` cuando regresas. Para cualquier otra sesión en ejecución, lo que muestra la vista de agentes depende de cuánto tiempo hace que avanzó por última vez:

965 969 

966* Dentro de las 48 horas, la sesión se muestra como fallida. Conéctate o responde a ella y se reiniciará desde donde se quedó.970* Dentro de las 48 horas, la sesión se muestra como fallida. Conéctate o responde a ella y se reiniciará desde su conversación guardada. Para retomar el trabajo interrumpido, envíale una respuesta pidiéndole que continúe.

967* Pasadas 48 horas, como después de que la máquina estuvo apagada durante días, la sesión se muestra como detenida con `ended while the background service was off`. Presiona `Enter` en la fila y el pie de página muestra `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.` Presiona `Enter` en la misma fila nuevamente para reanudar su conversación guardada. Una respuesta, o `claude attach <id>`, la reanuda sin esa solicitud del pie de página.971* Pasadas 48 horas, como después de que la máquina estuvo apagada durante días, la sesión se muestra como detenida con `ended while the background service was off`. Presiona `Enter` en la fila y el pie de página muestra `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.` Presiona `Enter` en la misma fila nuevamente para reanudar su conversación guardada. Una respuesta, o `claude attach <id>`, la reanuda sin esa solicitud del pie de página.

968 972 

969Cuando la [limpieza de transcripciones](/docs/es/settings-reference#cleanupperioddays) ha eliminado la conversación guardada de una sesión detenida, Claude Code se niega a abrir la fila: el mensaje dice que no hay nada que reanudar. `claude rm <id>` elimina la fila, excepto en los [casos en que se conserva](#what-deleting-a-session-removes) descritos anteriormente, y `claude respawn <id>` ejecuta su prompt original nuevamente. Consulta [La conversación guardada de esta sesión ya no está en el disco](/docs/es/errors#this-sessions-saved-conversation-is-no-longer-on-disk).973Cuando la [limpieza de transcripciones](/docs/es/settings-reference#cleanupperioddays) ha eliminado la conversación guardada de una sesión detenida, Claude Code se niega a abrir la fila: el mensaje dice que no hay nada que reanudar. `claude rm <id>` elimina la fila, excepto en los [casos en que se conserva](#what-deleting-a-session-removes) descritos anteriormente, y `claude respawn <id>` ejecuta su prompt original nuevamente. Consulta [La conversación guardada de esta sesión ya no está en el disco](/docs/es/errors#this-sessions-saved-conversation-is-no-longer-on-disk).


1022claude daemon stop --any --keep-workers1026claude daemon stop --any --keep-workers

1023```1027```

1024 1028 

1025El nuevo supervisor se reconecta a las sesiones en ejecución. Sin `--keep-workers`, el comando también termina las sesiones en segundo plano. El flag `--any` confirma que quieres detener un supervisor que se inició bajo demanda en lugar de como un servicio instalado, que es lo predeterminado.1029Luego ejecuta `claude agents` en tu shell para iniciar el nuevo supervisor. Si lo haces dentro de [aproximadamente un minuto](#the-supervisor-process) después de la detención, se reconecta a las sesiones que siguen en ejecución y su trabajo continúa sin interrupciones. Si tardas más, en macOS y Linux las sesiones ya se habrán detenido por sí solas, y conectarte o responder a una la reinicia desde su conversación guardada. Sin `--keep-workers`, el comando también termina las sesiones en segundo plano. El flag `--any` hace que el comando detenga un supervisor que Claude Code inició bajo demanda.

1026 1030 

1027Un supervisor que se inicia pero no puede aceptar conexiones sale y libera su bloqueo por sí solo, por lo que el siguiente `claude agents` inicia uno nuevo sin esta detención manual. Los pasos anteriores se aplican cuando un supervisor en ejecución se bloquea.1031Un supervisor que se inicia pero no puede aceptar conexiones sale y libera su bloqueo por sí solo, por lo que el siguiente `claude agents` inicia uno nuevo sin esta detención manual. Los pasos anteriores se aplican cuando un supervisor en ejecución se bloquea.

1028 1032 


1040claude daemon stop --any --keep-workers1044claude daemon stop --any --keep-workers

1041```1045```

1042 1046 

1043El siguiente `claude agents` o `claude --bg` inicia un supervisor nuevo que lee tus credenciales almacenadas. Si te autenticas con una variable de entorno como `ANTHROPIC_API_KEY` en lugar de `/login`, ejecuta ese siguiente comando desde un shell donde la variable esté definida.1047Dentro de [aproximadamente un minuto](#the-supervisor-process), ejecuta `claude agents` o `claude --bg` en tu shell para iniciar un supervisor nuevo que lea tus credenciales almacenadas. Si te autenticas con una variable de entorno como `ANTHROPIC_API_KEY` en lugar de `/login`, ejecuta ese siguiente comando desde un shell donde la variable esté definida.

1044 1048 

1045Consulta la [referencia de errores](/docs/es/errors#could-not-resolve-authentication-method) para ver la lista completa de causas y soluciones.1049Consulta la [referencia de errores](/docs/es/errors#could-not-resolve-authentication-method) para ver la lista completa de causas y soluciones.

1046 1050 

analytics.md +1 −1

Details

67* **"GitHub app required"**: instale la aplicación de GitHub para ver métricas de contribución67* **"GitHub app required"**: instale la aplicación de GitHub para ver métricas de contribución

68* **"Data processing in progress"**: vuelva a verificar en unos días y confirme que la aplicación de GitHub está instalada si los datos no aparecen68* **"Data processing in progress"**: vuelva a verificar en unos días y confirme que la aplicación de GitHub está instalada si los datos no aparecen

69 69 

70Las métricas de contribución admiten GitHub Cloud y GitHub Enterprise Server.70Las métricas de contribución cubren repositorios alojados en github.com. Para repositorios en [GitHub Enterprise Server](/docs/es/github-enterprise-server), el panel de análisis muestra solo métricas de uso.

71 71 

72<h3 id="review-summary-metrics">72<h3 id="review-summary-metrics">

73 Revisar métricas de resumen73 Revisar métricas de resumen

authentication.md +10 −10

Details

90 90 

91<Steps>91<Steps>

92 <Step title="Crear o usar una cuenta de Console">92 <Step title="Crear o usar una cuenta de Console">

93 Use su cuenta de Claude Console existente o cree una nueva.93 Usa tu cuenta de Claude Console existente o crea una nueva.

94 </Step>94 </Step>

95 95 

96 <Step title="Agregar usuarios">96 <Step title="Agregar usuarios">

97 Puede agregar usuarios mediante cualquiera de estos métodos:97 Puedes agregar usuarios mediante cualquiera de estos métodos:

98 98 

99 * Invitar usuarios en masa desde dentro de Console: Settings -> Members -> Invite99 * Invitar usuarios en masa desde la página Members de Console en [platform.claude.com/settings/members](https://platform.claude.com/settings/members): haz clic en **Invite**

100 * [Configurar SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)100 * [Configurar SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)

101 </Step>101 </Step>

102 102 

103 <Step title="Asignar roles">103 <Step title="Asignar roles">

104 Al invitar usuarios, asigne uno de:104 Al invitar usuarios, asigna uno de estos:

105 105 

106 * **Rol Claude Code**: los usuarios solo pueden crear claves API de Claude Code106 * **Rol Claude Code**: los usuarios solo pueden crear claves de API de Claude Code

107 * **Rol Developer**: los usuarios pueden crear cualquier tipo de clave API107 * **Rol Developer**: los usuarios pueden crear cualquier tipo de clave de API

108 </Step>108 </Step>

109 109 

110 <Step title="Los usuarios completan la configuración">110 <Step title="Los usuarios completan la configuración">

111 Cada usuario invitado necesita:111 Cada usuario invitado necesita:

112 112 

113 * Aceptar la invitación de Console113 * Aceptar la invitación de Console

114 * [Verificar requisitos del sistema](/docs/es/setup#system-requirements)114 * [Verificar los requisitos del sistema](/docs/es/setup#system-requirements)

115 * [Instalar Claude Code](/docs/es/setup#install-claude-code)115 * [Instalar Claude Code](/docs/es/setup#install-claude-code)

116 * Iniciar sesión con credenciales de cuenta de Console116 * Iniciar sesión con las credenciales de su cuenta de Console

117 </Step>117 </Step>

118</Steps>118</Steps>

119 119 


123 123 

124Puede iniciar sesión en su cuenta de Console sin crear una clave API, incluso cuando su organización no permite que los desarrolladores las creen. Elija la cuenta de Anthropic Console en el indicador `/login` y Claude Code le pregunta cómo desea iniciar sesión. Requiere Claude Code v2.1.242 o posterior. Ambas rutas lo inician sesión en Console en el navegador y difieren en lo que Claude Code almacena después:124Puede iniciar sesión en su cuenta de Console sin crear una clave API, incluso cuando su organización no permite que los desarrolladores las creen. Elija la cuenta de Anthropic Console en el indicador `/login` y Claude Code le pregunta cómo desea iniciar sesión. Requiere Claude Code v2.1.242 o posterior. Ambas rutas lo inician sesión en Console en el navegador y difieren en lo que Claude Code almacena después:

125 125 

126* **Iniciar sesión con su cuenta de Console**, etiquetado como `(recomendado)`: Claude Code mantiene el token OAuth de ese inicio de sesión y lo almacena como un [perfil de Anthropic](#anthropic-profiles-and-federation-credentials). No crea ninguna clave API126* **Iniciar sesión con tu cuenta de Console**, etiquetada como `(recommended)`: Claude Code conserva el token OAuth de ese inicio de sesión y lo almacena como un [perfil de Anthropic](#anthropic-profiles-and-federation-credentials). No crea ninguna clave de API

127* **Crear una clave API**, etiquetado como `(heredado)`: Claude Code crea una clave API de Console para usted y la almacena con sus otras credenciales127* **Crear una clave de API**, etiquetada como `(legacy)`: Claude Code crea una clave de API de Console por ti y la almacena con tus otras credenciales

128 128 

129En la práctica, el perfil almacena un inicio de sesión OAuth mientras que una clave API es una credencial estática: Claude Code actualiza automáticamente el inicio de sesión del perfil, y cuando la actualización falla, las solicitudes fallan con [Inicio de sesión de perfil de Anthropic expirado](/docs/es/errors#anthropic-profile-login-expired) hasta que inicie sesión nuevamente.129En la práctica, el perfil almacena un inicio de sesión OAuth mientras que una clave API es una credencial estática: Claude Code actualiza automáticamente el inicio de sesión del perfil, y cuando la actualización falla, las solicitudes fallan con [Inicio de sesión de perfil de Anthropic expirado](/docs/es/errors#anthropic-profile-login-expired) hasta que inicie sesión nuevamente.

130 130 

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Cargos de solicitud del clasificador en modo automático

6 

7> Resuelve el aviso de Claude Code que dice que esta sesión no es elegible para las solicitudes del clasificador sin cargo del modo automático: qué significa, por qué aparece y qué hacer.

8 

9En [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), un clasificador comprueba acciones como comandos de shell y solicitudes de red antes de que se ejecuten. Donde [las comprobaciones del lado del servidor están activadas](/docs/es/permission-modes#server-side-classifier-review), el servidor realiza esas comprobaciones como parte de las propias solicitudes de modelo de la sesión, sin cargo. Este aviso significa que las comprobaciones del servidor no están llegando a su sesión, por lo que Claude Code está realizando sus propias solicitudes de clasificador en su lugar, y en su cuenta esas solicitudes cuentan hacia su uso de tokens:

10 

11```text theme={null}

12We're changing auto mode to no longer charge for classifier requests in Claude Code. However, this session isn't eligible.

13```

14 

15En el símbolo del sistema, Claude Code retiene la primera acción que verificaría de esa manera hasta que responda. Nada está roto: el modo automático sigue funcionando, y sus solicitudes de clasificador se facturan como lo eran antes. La causa más común es una puerta de enlace LLM o proxy entre Claude Code y la API, y cuando Claude Code puede identificar una, el aviso la nombra. Presione **Intro** para continuar, o consulte [Hacer que la sesión sea elegible](#make-the-session-eligible) para evitar que aparezca en nuevas sesiones.

16 

17<h2 id="respond-to-the-notice">

18 Responder al aviso

19</h2>

20 

21El aviso retiene la acción hasta que responda:

22 

23* **Intro** continúa: la acción retenida y el resto de la sesión utilizan las propias solicitudes de clasificador de Claude Code, facturadas como uso de tokens como antes, y el aviso no aparece nuevamente en esa sesión. Cuando el aviso nombró una puerta de enlace, reconocerlo evita que reaparezca en esta máquina durante 24 horas. Cuando no lo hizo, el aviso regresa la próxima vez que una sesión se retrocede.

24* **Esc** o **Ctrl+C** cancela: la acción retenida no se ejecuta y el turno actual se detiene, con la sesión aún en modo automático. Nada se recuerda, por lo que el aviso aparece nuevamente antes de la siguiente acción verificada.

25 

26Para dejar de usar el modo automático en su lugar, cambie los modos de permiso con `Shift+Tab` después de responder.

27 

28Donde el aviso no puede esperar una respuesta, Claude Code informa el mismo texto y la sesión continúa en modo automático, a menos que un reconocimiento de puerta de enlace en esta máquina en las últimas 24 horas lo haya descartado. En [modo no interactivo](/docs/es/headless) con `-p` imprime el texto en stderr, y en salida `stream-json` emite un mensaje de advertencia `system`, que las aplicaciones del SDK de Agent pueden leer desde la secuencia de mensajes.

29 

30<h2 id="make-the-session-eligible">

31 Haga que la sesión sea elegible

32</h2>

33 

34Si una puerta de enlace es la causa, pida al administrador de su empresa o al proveedor de su puerta de enlace que pasen las solicitudes y respuestas sin cambios. Eso significa reenviar los encabezados de solicitud y los campos del cuerpo tal como están, incluidos los que la puerta de enlace no reconoce, como el campo de solicitud `safeguards`, y devolver respuestas y eventos de transmisión sin descartar claves como el campo `safeguard_results` o reescribir IDs de uso de herramientas, como describe la [guía de compatibilidad de puerta de enlace](/docs/es/llm-gateway-protocol#feature-pass-through). Una puerta de enlace que pasa el tráfico de esta manera sigue funcionando con esta característica y con futuras. Las nuevas sesiones entonces utilizan las comprobaciones del servidor nuevamente.

35 

36Si ya sabe que su puerta de enlace no puede proporcionar las comprobaciones del servidor, indique a Claude Code que no las solicite allí estableciendo `CLAUDE_CODE_AUTO_MODE_SERVER` en `0` antes de iniciar la sesión, en su shell o en la [clave de configuración `env`](/docs/es/settings-reference#env):

37 

38```bash theme={null}

39export CLAUDE_CODE_AUTO_MODE_SERVER=0

40```

41 

42Las solicitudes del clasificador son entonces siempre propias de Claude Code, facturadas de la misma manera, y el aviso no aparece. En una conexión directa a la API de Anthropic, la variable requiere Claude Code v2.1.281 o posterior. Establecer `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` mientras `CLAUDE_CODE_AUTO_MODE_SERVER` no está establecido también desactiva las comprobaciones del servidor, excepto como describe [Deshabilitar capacidades previas al lanzamiento](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities).

43 

44`CLAUDE_CODE_AUTO_MODE_SERVER` es una configuración temporal y puede ser eliminada en una versión posterior.

45 

46<h2 id="why-the-notice-appears">

47 Por qué aparece el aviso

48</h2>

49 

50[Revisión del clasificador del lado del servidor](/docs/es/permission-modes#server-side-classifier-review) enumera qué sesiones solicitan al servidor las comprobaciones del clasificador. Los planes Pro, Max y Team nunca muestran el aviso. Cuando aparece, las causas habituales son:

51 

52* **Una puerta de enlace LLM o proxy está en la ruta**: una que elimina o reescribe encabezados de solicitud, descarta campos de solicitud que no reconoce o edita respuestas. El servidor entonces nunca recibe la solicitud de comprobaciones, o Claude Code nunca recibe los resultados. Cuando su configuración o las respuestas identifican la puerta de enlace, el aviso la nombra.

53* **Las comprobaciones del lado del servidor aún no han llegado a su plataforma, región o credencial**: si una plataforma o región las realiza depende del despliegue de esa plataforma. Si ve el aviso sin ninguna puerta de enlace o proxy en la ruta y sigue apareciendo, esta es la causa probable. Para confirmar, contacte con soporte o el administrador de su empresa, o repórtelo con `/feedback`.

54 

55Para comprobar una sesión que está en modo automático, ejecute `/status` en el símbolo del sistema de Claude Code: su fila **Auto mode server** lee `Enabled` mientras las comprobaciones del servidor deciden las acciones de la sesión y `Disabled` una vez que la sesión se ha revertido.

56 

57Cuando una puerta de enlace corta respuestas o reescribe los resultados en una forma que Claude Code no puede leer, obtiene denegaciones sin veredicto en lugar de este aviso; consulte [Revisión del clasificador del lado del servidor](/docs/es/permission-modes#server-side-classifier-review).

58 

59<h2 id="related-resources">

60 Recursos relacionados

61</h2>

62 

63* [Modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode): qué es el modo automático y qué bloquea de forma predeterminada

64* [Revisión del clasificador del lado del servidor](/docs/es/permission-modes#server-side-classifier-review): qué sesiones solicitan al servidor que verifique acciones, y la versión de Claude Code que cada una requiere

65* [Guía de compatibilidad de puerta de enlace](/docs/es/llm-gateway-protocol#feature-pass-through): qué se rompe cuando una puerta de enlace elimina encabezados o campos de cuerpo

66* [El servidor no devolvió ningún veredicto de seguridad](/docs/es/errors#the-server-returned-no-safety-verdict): la denegación que ve cuando el servidor no emite un veredicto para una acción

67* [Gestionar costos de forma efectiva](/docs/es/costs): rastrear el uso de tokens y reducir los costos de Claude Code

Details

381 381 

382Otros dos lugares en la pantalla que reportan denegaciones omiten el comando o la URL: el aviso cerca de la caja de entrada, como `bash denied by auto mode · [Data Exfiltration] · /permissions`, proporciona la herramienta y la razón, y la pestaña **Recently denied** (Denegadas recientemente) enumera un comando de shell por la descripción que Claude escribió para él. Para capturar la entrada exacta de estas denegaciones mediante programación, agregue un [hook `PermissionDenied`](/docs/es/hooks#permissiondenied), que la recibe como `tool_input`.382Otros dos lugares en la pantalla que reportan denegaciones omiten el comando o la URL: el aviso cerca de la caja de entrada, como `bash denied by auto mode · [Data Exfiltration] · /permissions`, proporciona la herramienta y la razón, y la pestaña **Recently denied** (Denegadas recientemente) enumera un comando de shell por la descripción que Claude escribió para él. Para capturar la entrada exacta de estas denegaciones mediante programación, agregue un [hook `PermissionDenied`](/docs/es/hooks#permissiondenied), que la recibe como `tool_input`.

383 383 

384El texto debajo de la llamada le indica si hay algo que corregir. El texto que reporta un problema con el clasificador en sí, como un modelo que `is temporarily unavailable` (no está disponible temporalmente) o un error del clasificador, significa que Claude Code bloqueó la llamada sin un veredicto final del clasificador; consulte [Auto mode cannot determine the safety of an action](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action) (El modo automático no puede determinar la seguridad de una acción) para saber qué hacer. De lo contrario, una línea que dice `Denied by auto mode classifier` (Denegado por clasificador de modo automático) con una razón como `[Production Deploy]` (Implementación en producción) o `Blocked by classifier` (Bloqueado por clasificador) significa que el clasificador juzgó la llamada como insegura, así que elija la corrección de lo que la llamada estaba intentando alcanzar o hacer:384El texto debajo de la llamada te indica si hay algo que corregir. Una fila atenuada `Not run · auto mode's check had no usable answer`, o un texto que reporta un problema con el clasificador en sí, como `Auto mode could not evaluate this action`, significa que Claude Code bloqueó la llamada sin un veredicto del clasificador. Para una fila `Not run`, presiona `Ctrl+O` para leer el mensaje completo y luego consulta [Auto mode cannot determine the safety of an action](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action) (El modo automático no puede determinar la seguridad de una acción) o [The server returned no safety verdict](/docs/es/errors#the-server-returned-no-safety-verdict) (El servidor no devolvió ningún veredicto de seguridad) para saber qué hacer.

385 

386De lo contrario, una línea que dice `Denied by auto mode classifier` (Denegado por clasificador de modo automático) con una razón como `[Production Deploy]` (Implementación en producción) o `Blocked by classifier` (Bloqueado por clasificador) significa que el clasificador juzgó la llamada como insegura, así que elige la corrección según lo que la llamada estaba intentando alcanzar o hacer:

385 387 

386* Un destino que Claude necesita durante toda la tarea, como un registro de paquetes, un dominio interno o un host de repositorio: agréguelo a `autoMode.environment`.388* Un destino que Claude necesita durante toda la tarea, como un registro de paquetes, un dominio interno o un host de repositorio: agréguelo a `autoMode.environment`.

387* Un comando que desea ejecutar sin revisión de ahora en adelante: agregue una regla `allow`.389* Un comando que desea ejecutar sin revisión de ahora en adelante: agregue una regla `allow`.

Details

114 Los mensajes enviados a mitad de turno no se someten a checkpoint114 Los mensajes enviados a mitad de turno no se someten a checkpoint

115</h3>115</h3>

116 116 

117Cuando un mensaje que [pones en cola mientras Claude trabaja](/docs/es/interactive-mode#queue-messages-while-claude-works) llega a Claude dentro del turno en ejecución, se une a ese turno en lugar de iniciar uno nuevo. El mensaje aparece en la conversación, pero Claude Code no crea un checkpoint para él. Un mensaje en cola que Claude Code envía como parte de un nuevo turno obtiene un checkpoint como de costumbre, incluyendo cuando varios mensajes en cola [comparten ese turno](/docs/es/interactive-mode#when-claude-code-sends-what-you-queued).117En el menú de rewind, un mensaje que [escribiste mientras Claude todavía estaba trabajando](/docs/es/interactive-mode#queue-messages-while-claude-works) puede aparecer marcado como **No code restore**. Claude leyó ese mensaje antes de que terminara su turno. [Los checkpoints se crean para los prompts que inician un turno](#how-checkpoints-work), por lo que este mensaje no tiene uno propio. Las ediciones que Claude realizó después de leerlo cuentan para el prompt que inició el turno.

118 118 

119Para deshacer las ediciones que Claude realizó después de tal mensaje, retrocede al prompt que inició el turno. Eso retrocede todo el turno, incluido el trabajo que Claude realizó antes de que llegara tu mensaje.119No necesitas hacer nada con el mensaje en sí. Para deshacer los cambios de archivos de esa parte de la sesión, selecciona el prompt que inició el turno y elige **Restore code** o **Restore code and conversation**. Eso revierte las ediciones de archivos de Claude de todo el turno, incluidas las de antes de que llegara tu mensaje. Seleccionar el mensaje marcado sigue ofreciendo **Restore conversation**, que retrocede la conversación hasta ese mensaje y deja tus archivos como están.

120 120 

121<h3 id="symlinked-and-hard-linked-paths-not-restored">121<h3 id="symlinked-and-hard-linked-paths-not-restored">

122 Las rutas con enlaces simbólicos y enlaces duros no se restauran122 Las rutas con enlaces simbólicos y enlaces duros no se restauran

chrome.md +3 −4

Details

129 Solicitudes de permiso en sesiones de VS Code129 Solicitudes de permiso en sesiones de VS Code

130</h3>130</h3>

131 131 

132En una sesión de VS Code, que Claude Code te pregunte antes de una acción del navegador depende de cómo se conectó la sesión a tu navegador:132En una sesión de VS Code, cuando Claude Code te pregunta antes de una acción del navegador, la solicitud aparece como una tarjeta en el panel de chat. Cuando la acción se dirige a un sitio que no has permitido, la tarjeta también ofrece permitir ese sitio.

133 133 

134* **Escribiste `@browser`**: la extensión aprueba cada acción del navegador sobre la que Claude Code de otro modo te preguntaría.134En una sesión que se conectó a tu navegador al iniciar porque [Enabled by default](#enable-chrome-by-default) está activado, Claude Code te pregunta antes de las acciones del navegador en un sitio que no has permitido, en los modos de permisos Manual, Edit automatically, Auto y Bypass permissions. En los modos de permisos Auto y Bypass permissions, esto se aplica hasta que escribas `@browser` en esa sesión.

135* **El ajuste [Enabled by default](#enable-chrome-by-default) la conectó al iniciar**: Claude Code te pregunta antes de las acciones del navegador en un sitio que no has permitido, en los modos de permisos Manual, Edit automatically, Auto y Bypass permissions, hasta que escribas `@browser` en esa sesión.

136 135 

137<h3 id="browser-tools-in-plan-mode">136<h3 id="browser-tools-in-plan-mode">

138 Herramientas del navegador en Plan Mode137 Herramientas del navegador en Plan Mode

139</h3>138</h3>

140 139 

141En [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), aparece una solicitud de permiso antes de que Claude grabe un GIF, abra una nueva pestaña o ejecute un atajo, excepto en una sesión de VS Code en la que escribiste [`@browser`](#permission-prompts-in-vs-code-sessions). En una sesión interactiva de la CLI, si [el modo bypass permissions está disponible](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) y [la obtención de banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching) está desactivada, estas llamadas se ejecutan sin una solicitud.140En [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), aparece una solicitud de permiso antes de que Claude grabe un GIF, abra una nueva pestaña o ejecute un atajo. En una sesión interactiva de la CLI, si [el modo bypass permissions está disponible](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) y [la obtención de banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching) está desactivada, estas llamadas se ejecutan sin una solicitud.

142 141 

143Una llamada `tabs_context_mcp` también solicita aprobación cuando establece `createIfEmpty`, y lo mismo ocurre con una llamada `browser_batch` que incluya cualquiera de estas acciones.142Una llamada `tabs_context_mcp` también solicita aprobación cuando establece `createIfEmpty`, y lo mismo ocurre con una llamada `browser_batch` que incluya cualquiera de estas acciones.

144 143 

Details

263 Conectar desarrolladores263 Conectar desarrolladores

264</h2>264</h2>

265 265 

266Los desarrolladores se conectan desde sus propias laptops con un único inicio de sesión en el navegador, usando su cuenta de trabajo corporativa. No necesitan una cuenta de claude.ai, una clave de API ni una suscripción, porque las solicitudes al modelo pasan por el gateway usando la credencial ascendente de la organización. La conexión se controla mediante la [configuración administrada del lado del cliente](/docs/es/claude-apps-gateway-config#client-side-managed-settings) que distribuyes a través de MDM, por lo que no hay configuración manual del lado del desarrollador; esta sección cubre lo que configura el administrador.266Los desarrolladores se conectan desde sus propias laptops con un único inicio de sesión en el navegador, usando su cuenta de trabajo corporativa. No necesitan una cuenta de claude.ai, una clave de API ni una suscripción, porque las solicitudes al modelo pasan por el gateway usando la credencial ascendente de la organización. La conexión se controla mediante la [configuración administrada del lado del cliente](/docs/es/claude-apps-gateway-config#client-side-managed-settings) que distribuyes a través de MDM, y esta sección cubre lo que configura el administrador.

267 267 

268La CLI toma la huella digital del certificado TLS hoja del gateway en la primera conexión y la fija por nombre de host. Vuelve a verificar esa fijación durante el inicio de sesión, en las actualizaciones silenciosas de la sesión y en las obtenciones de configuración administrada, mientras que las solicitudes de inferencia usan la validación TLS estándar sin la fijación. Las solicitudes enrutadas a través de un proxy HTTPS omiten la verificación de la fijación, así que agrega el host del gateway a `NO_PROXY` para mantenerlas directas.268La CLI toma la huella digital del certificado TLS hoja del gateway en la primera conexión y la fija por nombre de host. Vuelve a verificar esa fijación durante el inicio de sesión, en las actualizaciones silenciosas de la sesión y en las obtenciones de configuración administrada, mientras que las solicitudes de inferencia usan la validación TLS estándar sin la fijación. Las solicitudes enrutadas a través de un proxy HTTPS omiten la verificación de la fijación, así que agrega el host del gateway a `NO_PROXY` para mantenerlas directas.

269 269 


287 Establecer la URL del gateway287 Establecer la URL del gateway

288</h3>288</h3>

289 289 

290Tres claves van en el [archivo de configuración administrada](/docs/es/managed-settings#delivery-mechanisms) de cada sistema operativo que implementas a través de MDM o directamente en el disco. `forceLoginMethod` y `forceLoginGatewayUrl` abren `/login` directamente en la pantalla **Cloud gateway** con la URL ya completada, y `parentSettingsBehavior: "merge"` permite que Claude Desktop entregue la lista de permitidos de salida del gateway a las sesiones de Claude Code que inicia, como se explica en [Entregar la política a las sesiones de Claude Desktop](#deliver-policy-to-claude-desktop-sessions):290Tres claves van en el [archivo de configuración administrada](/docs/es/managed-settings#delivery-mechanisms) de cada sistema operativo que implementas a través de MDM o directamente en el disco. Para una máquina sin configuración administrada, consulta en su lugar [Establecer la URL del gateway en la configuración de usuario](#set-the-gateway-url-in-user-settings). `forceLoginMethod` y `forceLoginGatewayUrl` abren `/login` directamente en la pantalla **Cloud gateway** con la URL ya completada, y `parentSettingsBehavior: "merge"` permite que Claude Desktop entregue la lista de permitidos de salida del gateway a las sesiones de Claude Code que inicia, como se explica en [Entregar la política a las sesiones de Claude Desktop](#deliver-policy-to-claude-desktop-sessions):

291 291 

292```json theme={null}292```json theme={null}

293{293{


299 299 

300El desarrollador presiona Enter para conectarse. El [prompt de huella digital TLS de la primera conexión](#connect-developers) sigue apareciendo. Una vez que el archivo está en una máquina, un desarrollador que no ha completado el inicio de sesión en el gateway ve uno de los mensajes descritos en [Administrator policy requires a Cloud gateway sign-in](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Los desarrolladores que seleccionan un proveedor de nube mediante una variable de entorno como `CLAUDE_CODE_USE_BEDROCK` no necesitan el inicio de sesión en el gateway.300El desarrollador presiona Enter para conectarse. El [prompt de huella digital TLS de la primera conexión](#connect-developers) sigue apareciendo. Una vez que el archivo está en una máquina, un desarrollador que no ha completado el inicio de sesión en el gateway ve uno de los mensajes descritos en [Administrator policy requires a Cloud gateway sign-in](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Los desarrolladores que seleccionan un proveedor de nube mediante una variable de entorno como `CLAUDE_CODE_USE_BEDROCK` no necesitan el inicio de sesión en el gateway.

301 301 

302Un desarrollador no puede configurar esto manualmente. El selector de inicio de sesión no tiene una opción de gateway, y `forceLoginGatewayUrl` se ignora en los archivos de configuración propios de un desarrollador. `forceLoginMethod` por sí solo, sin una URL, deja al desarrollador ante un mensaje "Contact your IT administrator". Las claves de inicio de sesión van en el archivo que distribuyes a las máquinas, no en el bloque `managed.policies[].cli` del gateway, que solo llega a los clientes que ya están conectados.302El selector de inicio de sesión no tiene una opción de gateway, y en la configuración administrada `forceLoginMethod` por sí solo, sin una URL, deja al desarrollador ante un mensaje "Contact your IT administrator". Las claves de inicio de sesión van en el archivo que distribuyes a las máquinas, no en el bloque `managed.policies[].cli` del gateway, que solo llega a los clientes que ya están conectados.

303 

304<h4 id="set-the-gateway-url-in-user-settings">

305 Establecer la URL del gateway en la configuración de usuario

306</h4>

307 

308En las máquinas sin configuración administrada, pide a cada desarrollador que agregue `forceLoginMethod` y `forceLoginGatewayUrl` a su propio archivo de configuración de usuario, `~/.claude/settings.json`. Esto requiere Claude Code v2.1.295 o posterior en la máquina del desarrollador. Este ejemplo indica un gateway en `claude-gateway.internal.example.com`:

309 

310```json theme={null}

311{

312 "forceLoginMethod": "gateway",

313 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

314}

315```

316 

317Cuando el desarrollador ejecuta `/login` en el prompt de Claude Code, la pantalla **Cloud gateway** se abre con esa dirección y presiona Enter para conectarse. El [prompt de huella digital TLS de la primera conexión](#connect-developers) sigue apareciendo. Estos límites se aplican a las claves establecidas de esta forma:

318 

319* **Solo configuración de usuario**: Claude Code lee las dos claves de `~/.claude/settings.json`, no de `.claude/settings.json` ni de `.claude/settings.local.json` de un proyecto.

320* **La configuración administrada las desactiva**: una vez que la configuración de un administrador llega a la máquina mediante un archivo de configuración administrada, un plist de macOS o una política HKLM de Windows, o un [policy helper](/docs/es/settings-reference#policyhelper), Claude Code ignora un gateway indicado en la configuración de usuario.

303 321 

304<h3 id="allow-a-gateway-on-public-address-space-you-own">322<h3 id="allow-a-gateway-on-public-address-space-you-own">

305 Permitir un gateway en un espacio de direcciones público de tu propiedad323 Permitir un gateway en un espacio de direcciones público de tu propiedad

Details

981 * **Claves mezcladas**: un archivo que tiene tanto `code` como `cli`, o su grafía anterior `settings`, detiene el gateway al arrancar. Coloca todos los bloques bajo una sola clave, en una sola edición.981 * **Claves mezcladas**: un archivo que tiene tanto `code` como `cli`, o su grafía anterior `settings`, detiene el gateway al arrancar. Coloca todos los bloques bajo una sola clave, en una sola edición.

982</Warning>982</Warning>

983 983 

984La configuración de Claude Code de una política, como una regla que deniega la lectura de archivos `.env`, va en un bloque bajo la clave `cli` o `code`. Ambas claves admiten el mismo contenido. La clave decide dónde se aplica la configuración:984Los ajustes de Claude Code de una política, como una regla que deniega leer archivos `.env`, van en un bloque bajo la clave `cli` o `code`. `code` es la clave recomendada, y `cli` es la clave heredada. Ambas claves aceptan el mismo contenido. La clave decide dónde se aplican los ajustes:

985 985 

986* **`cli`**: la terminal, las extensiones de VS Code y JetBrains, y el Agent SDK. Con `cli`, la pestaña Code de Claude Desktop recibe la [configuración derivada](#claude-desktop-overlay), así que una regla con alcance como `Read(./.env)` no detiene a un usuario allí.986* **`cli`**: la terminal, las extensiones de VS Code y JetBrains, y el Agent SDK. Con `cli`, la pestaña Code de Claude Desktop recibe la [configuración derivada](#claude-desktop-overlay), así que una regla con alcance como `Read(./.env)` no detiene a un usuario allí.

987* **`code`**: los mismos lugares, y también puede cubrirse la pestaña Code de Claude Desktop.987* **`code`**: los mismos lugares, y también puede cubrirse la pestaña Code de Claude Desktop.

988 988 

989La decisión es si esta configuración también debe cubrir la pestaña Code. Si no, no cambies nada. Un archivo que usa `cli` funciona como antes, y un gateway que encuentra `cli` en una política con una clave [`desktop`](#claude-desktop-overlay) muestra una advertencia al arrancar y arranca de todos modos. Para cubrir la pestaña Code, cambia a `code`, la clave recomendada.989Un archivo que usa `cli` funciona como antes, y un gateway que encuentra `cli` en una política con una clave [`desktop`](#claude-desktop-overlay) advierte al arrancar y se inicia de todos modos. Cambia a `code` para que los ajustes también puedan cubrir la pestaña Code.

990 990 

991Antes de cambiar, lee [Aplicar la configuración de `code` en la pestaña Code](#apply-code-settings-in-the-code-tab). La política necesita una clave `desktop` y las máquinas de los usuarios necesitan preparación antes de que la configuración se aplique allí, y la búsqueda web se desactiva en Claude Desktop.991Antes de cambiar, lee [Aplicar la configuración de `code` en la pestaña Code](#apply-code-settings-in-the-code-tab). La política necesita una clave `desktop` y las máquinas de los usuarios necesitan preparación antes de que la configuración se aplique allí, y la búsqueda web se desactiva en Claude Desktop.

992 992 


1713 1713 

1714Para Claude Desktop, establezca la clave `bootstrapUrl` en la propia [configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop en `<listen.public_url>/user/bootstrap`. El flujo de inicio de sesión y la política por grupo coinciden entonces con los del CLI una vez que una política se acepta del lado del servidor con una clave `desktop`; sin la aceptación, `/user/bootstrap` devuelve 404. Consulte [Superposición de Claude Desktop](#claude-desktop-overlay) para la mitad del lado del servidor.1714Para Claude Desktop, establezca la clave `bootstrapUrl` en la propia [configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop en `<listen.public_url>/user/bootstrap`. El flujo de inicio de sesión y la política por grupo coinciden entonces con los del CLI una vez que una política se acepta del lado del servidor con una clave `desktop`; sin la aceptación, `/user/bootstrap` devuelve 404. Consulte [Superposición de Claude Desktop](#claude-desktop-overlay) para la mitad del lado del servidor.

1715 1715 

1716Claude Code honra [`forceLoginGatewayUrl`](/docs/es/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/es/settings-reference#gatewayinternalnetworks), y el valor `"gateway"` de [`forceLoginMethod`](/docs/es/settings-reference#forceloginmethod) solo desde una fuente administrada en la máquina: `managed-settings.json`, la plist de macOS o el registro HKLM de Windows, o un asistente de política. Establecerlos en el `~/.claude/settings.json` propio de un desarrollador no configura el inicio de sesión de la puerta de enlace, y tampoco lo hace establecerlos en la carga útil de la puerta de enlace.1716Claude Code respeta [`forceLoginGatewayUrl`](/docs/es/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/es/settings-reference#gatewayinternalnetworks) y el valor `"gateway"` de [`forceLoginMethod`](/docs/es/settings-reference#forceloginmethod) desde una fuente administrada en la máquina: `managed-settings.json`, la plist de macOS o el registro HKLM de Windows, o un asistente de política. Establecerlos en la carga útil del gateway no configura el inicio de sesión del gateway. Para el `~/.claude/settings.json` propio de un desarrollador, consulta [Establecer la URL del gateway en la configuración de usuario](/docs/es/claude-apps-gateway#set-the-gateway-url-in-user-settings).

1717 1717 

1718Deje `forceLoginMethod` y `forceLoginOrgUUID` fuera de la carga útil. Claude Code aún lee ambas claves de la carga útil para su verificación de credenciales de inicio, por lo que un desarrollador que mantenga una credencial emitida por Anthropic en la máquina obtiene la salida de inicio descrita en [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) incluso después de que inicie sesión.1718Deje `forceLoginMethod` y `forceLoginOrgUUID` fuera de la carga útil. Claude Code aún lee ambas claves de la carga útil para su verificación de credenciales de inicio, por lo que un desarrollador que mantenga una credencial emitida por Anthropic en la máquina obtiene la salida de inicio descrita en [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) incluso después de que inicie sesión.

1719 1719 

Details

135 Enviar la URL de la puerta de enlace a máquinas de desarrolladores135 Enviar la URL de la puerta de enlace a máquinas de desarrolladores

136</h3>136</h3>

137 137 

138Una vez que la puerta de enlace está sirviendo, envíe `forceLoginMethod`, `forceLoginGatewayUrl` y `parentSettingsBehavior: "merge"` a la máquina de cada desarrollador a través de configuraciones administradas, a través de MDM o escribiendo directamente el `managed-settings.json` específico del sistema operativo. Sin esto, `/login` muestra el selector de cuenta estándar sin opción de puerta de enlace.138Una vez que el gateway esté en servicio, envía `forceLoginMethod`, `forceLoginGatewayUrl` y `parentSettingsBehavior: "merge"` a la máquina de cada desarrollador a través de la configuración administrada, mediante MDM o escribiendo directamente el `managed-settings.json` correspondiente a cada sistema operativo.

139 139 

140Una vez que implemente las claves, Claude Code deja de usar una clave API sobrante o un inicio de sesión de claude.ai en la máquina, así que planifique el envío junto con sus instrucciones de inicio de sesión. [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) describe los mensajes que ven los desarrolladores.140Una vez que implemente las claves, Claude Code deja de usar una clave API sobrante o un inicio de sesión de claude.ai en la máquina, así que planifique el envío junto con sus instrucciones de inicio de sesión. [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) describe los mensajes que ven los desarrolladores.

141 141 

Details

277 277 

278Los hilos se ejecutan en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) cuando el modelo del hilo lo admite, por lo que la mayoría de las llamadas de herramientas se ejecutan sin pedirle. Cuando un hilo necesita su aprobación, el aviso está dentro de ese hilo y el hilo espera hasta que responda allí. Decirle a Claude en la conversación del proyecto que continúe no lo alcanza.278Los hilos se ejecutan en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) cuando el modelo del hilo lo admite, por lo que la mayoría de las llamadas de herramientas se ejecutan sin pedirle. Cuando un hilo necesita su aprobación, el aviso está dentro de ese hilo y el hilo espera hasta que responda allí. Decirle a Claude en la conversación del proyecto que continúe no lo alcanza.

279 279 

280Cada aprobación cubre ese aviso, o el resto de ese hilo si elige la opción más amplia. Para permitir que cada hilo ejecute ciertos comandos sin preguntar, o para bloquear algunos, agregue [reglas de permiso](/docs/es/permissions) al `.claude/settings.json` del repositorio. Los hilos en la nube las aplican solo en un proyecto con un repositorio; vea [Qué recogen los hilos de sus repositorios](#what-threads-pick-up-from-your-repositories). En un proyecto con varios repositorios, las reglas de permiso de ningún repositorio llegan a un hilo en la nube, por lo que depende del modo automático y de las aprobaciones que da dentro de cada hilo.280Cada aprobación cubre esa solicitud, o el resto de ese hilo si eliges la opción más amplia.

281 

282Para permitir que todos los hilos ejecuten ciertos comandos sin preguntar, o para bloquear algunos, agrega [reglas de permisos](/docs/es/permissions) al `.claude/settings.json` del repositorio. Comprueba que los hilos en la nube de tu proyecto las apliquen:

283 

284* **Un repositorio**: los hilos en la nube aplican las reglas. Consulta [Qué recogen los hilos de tus repositorios](#what-threads-pick-up-from-your-repositories).

285* **Varios repositorios, entorno alojado por Anthropic**: las reglas de permisos de ningún repositorio llegan a un hilo en la nube, por lo que dependes del modo automático y de las aprobaciones que das dentro de cada hilo.

286* **Varios repositorios, entorno autoalojado**: consulta [qué configuración de repositorio se aplica](/docs/es/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

281 287 

282<h3 id="run-a-thread-on-your-own-computer">288<h3 id="run-a-thread-on-your-own-computer">

283 Ejecutar un hilo en su propia computadora289 Ejecutar un hilo en su propia computadora


381 Lo que los hilos recogen de tus repositorios387 Lo que los hilos recogen de tus repositorios

382</h3>388</h3>

383 389 

384Cada hilo en la nube clona cada repositorio del proyecto y carga `CLAUDE.md` y skills de todos ellos. Las reglas de permisos, los hooks y `env` vienen solo del `.claude/settings.json` en el directorio en el que comienza el hilo: dentro del repositorio cuando el proyecto tiene uno, y encima de los clones cuando tiene varios, donde no se lee el archivo de ningún repositorio para ellos.390Cada hilo en la nube clona cada repositorio del proyecto y carga `CLAUDE.md` y skills de todos ellos. Las reglas de permisos, los hooks y `env` vienen solo del `.claude/settings.json` en el directorio en el que comienza el hilo.

385 391 

386| En cada repositorio | Un repositorio | Varios repositorios |392| En cada repositorio | Un repositorio | Varios repositorios |

387| :- | :- | :- |393| :- | :- | :- |

388| `CLAUDE.md` | Se carga cuando comienza el hilo | Se carga desde cada repositorio cuando comienza el hilo |394| `CLAUDE.md` | Se carga cuando comienza el hilo | Se carga desde cada repositorio cuando comienza el hilo |

389| Skills, agentes y comandos bajo `.claude/` | Se cargan | Se cargan desde cada repositorio |395| Skills, agentes y comandos bajo `.claude/` | Se cargan | Se cargan desde cada repositorio |

390| Plugins habilitados en `.claude/settings.json` | No se cargan. Agrega el plugin en **Configuración del proyecto > Plugins** en su lugar | No se cargan. Agrega el plugin en **Configuración del proyecto > Plugins** en su lugar |396| Plugins habilitados en `.claude/settings.json` | No se cargan. Agrega el plugin en **Configuración del proyecto > Plugins** en su lugar | No se cargan. Agrega el plugin en **Configuración del proyecto > Plugins** en su lugar |

391| Reglas de permisos, hooks y `env` definidos en `.claude/settings.json` | Se aplican al hilo, excepto las claves `env` que [ninguna sesión en la nube respeta](/docs/es/cloud-environments#what-carries-over-from-your-setup) | No se aplican |397| Reglas de permisos, hooks y `env` definidos en `.claude/settings.json` | Se aplican al hilo, excepto las claves `env` que [ninguna sesión en la nube respeta](/docs/es/cloud-environments#what-carries-over-from-your-setup) | No se aplican en un entorno alojado por Anthropic. Para un entorno autoalojado, consulta [qué configuración de repositorio se aplica](/docs/es/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

392 398 

393En un proyecto con varios repositorios, cada clon se adjunta al hilo como un [directorio adicional](/docs/es/memory#load-from-additional-directories) con la carga de `CLAUDE.md` activada, por lo que el `CLAUDE.md` y los skills de cada repositorio se cargan al inicio aunque el hilo comience encima de ellos. En un proyecto así, pon las reglas permanentes en las instrucciones del proyecto y proporciona a los hilos variables de entorno a través del [entorno en la nube](#choose-an-environment-for-threads).399En un proyecto con varios repositorios, pon las reglas permanentes en las instrucciones del proyecto y proporciona a los hilos variables de entorno a través del [entorno en la nube](#choose-an-environment-for-threads).

394 400 

395<h3 id="choose-an-environment-for-threads">401<h3 id="choose-an-environment-for-threads">

396 Elegir un entorno para los hilos402 Elegir un entorno para los hilos


406 412 

407Los hilos en la nube no tienen los skills, servidores MCP, plugins y herramientas instalados solo en tu máquina. Un hilo que Claude ejecuta en tu máquina a través de [Remote Control](/docs/es/remote-control) usa lo que está instalado allí. Para que cada uno de estos esté disponible para los hilos en la nube:413Los hilos en la nube no tienen los skills, servidores MCP, plugins y herramientas instalados solo en tu máquina. Un hilo que Claude ejecuta en tu máquina a través de [Remote Control](/docs/es/remote-control) usa lo que está instalado allí. Para que cada uno de estos esté disponible para los hilos en la nube:

408 414 

409* Skills, subagentes y comandos: haz commit de ellos en un repositorio que agregaste al proyecto, por ejemplo un skill en `.claude/skills/<skill-name>/SKILL.md`. Cada hilo en la nube clona cada repositorio del proyecto y carga `.claude/skills/`, `.claude/agents/` y `.claude/commands/` de cada uno de ellos, por lo que un skill con commit en un repositorio está disponible en cada hilo en la nube. Los hilos en la nube también cargan los skills que habilitas para tu cuenta de claude.ai.415* Skills, subagentes y comandos: haz commit de ellos en un repositorio que agregaste al proyecto, por ejemplo un skill en `.claude/skills/<skill-name>/SKILL.md`. Cada hilo en la nube clona cada repositorio del proyecto y carga `.claude/skills/`, `.claude/agents/` y `.claude/commands/` de cada uno de ellos, por lo que un skill con commit en un repositorio está disponible en cada hilo en la nube. Los hilos en la nube también cargan los [skills que habilitas para tu cuenta de claude.ai](/docs/es/skills#skills-in-cowork-and-cloud-sessions).

410* Plugins: agrégalos en **Configuración del proyecto > Plugins**; se cargan en cada nuevo hilo en la nube. Los plugins que un repositorio declara en su `.claude/settings.json` [no se cargan en los hilos en la nube](/docs/es/cloud-environments#what-carries-over-from-your-setup).416* Plugins: agrégalos en **Configuración del proyecto > Plugins**; se cargan en cada nuevo hilo en la nube. Los plugins que un repositorio declara en su `.claude/settings.json` [no se cargan en los hilos en la nube](/docs/es/cloud-environments#what-carries-over-from-your-setup).

411* Servidores MCP: los hilos en la nube obtienen sus herramientas MCP de los conectores de tu cuenta de claude.ai, que son servidores MCP que conectas una sola vez en [claude.ai/customize/connectors](https://claude.ai/customize/connectors) o a través del enlace **Administrar conectores** en **Configuración del proyecto > Entorno**. Cada hilo en la nube puede usarlos todos sin configuración por proyecto. La conversación del proyecto en sí no tiene conectores, así que envía el trabajo que necesite uno como una tarea para un hilo en la nube. En un proyecto con un solo repositorio, los hilos en la nube también cargan servidores MCP del [`.mcp.json`](/docs/es/cloud-environments#what-carries-over-from-your-setup) de ese repositorio. [Cómo los conectores llegan a Claude Code](/docs/es/mcp#how-connectors-reach-claude-code) enumera las reglas para sesiones en la nube y la configuración que desactiva los conectores.417* Servidores MCP: los hilos en la nube obtienen sus herramientas MCP de los conectores de tu cuenta de claude.ai, que son servidores MCP que conectas una sola vez en [claude.ai/customize/connectors](https://claude.ai/customize/connectors) o a través del enlace **Administrar conectores** en **Configuración del proyecto > Entorno**. Cada hilo en la nube puede usarlos todos sin configuración por proyecto. La conversación del proyecto en sí no tiene conectores, así que envía el trabajo que necesite uno como una tarea para un hilo en la nube. En un proyecto con un solo repositorio, los hilos en la nube también cargan servidores MCP del [`.mcp.json`](/docs/es/cloud-environments#what-carries-over-from-your-setup) de ese repositorio. [Cómo los conectores llegan a Claude Code](/docs/es/mcp#how-connectors-reach-claude-code) enumera las reglas para sesiones en la nube y la configuración que desactiva los conectores.

412* Herramientas de línea de comandos y paquetes: instálalos en el [script de configuración](/docs/es/cloud-environments#setup-scripts) del entorno.418* Herramientas de línea de comandos y paquetes: instálalos en el [script de configuración](/docs/es/cloud-environments#setup-scripts) del entorno.

Details

28| `claude auth logout` | Cerrar sesión en tu cuenta de Anthropic | `claude auth logout` |28| `claude auth logout` | Cerrar sesión en tu cuenta de Anthropic | `claude auth logout` |

29| `claude auth status` | Mostrar el estado de autenticación como JSON. Usa `--text` para salida legible por humanos. Sale con código 0 si has iniciado sesión, 1 si no. El JSON incluye un campo `configDirectory` que indica el [directorio de configuración](/docs/es/claude-directory) que utiliza la CLI. El campo requiere Claude Code v2.1.268 o posterior. El campo `authMethod` del JSON es uno de `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` o `third_party` | `claude auth status` |29| `claude auth status` | Mostrar el estado de autenticación como JSON. Usa `--text` para salida legible por humanos. Sale con código 0 si has iniciado sesión, 1 si no. El JSON incluye un campo `configDirectory` que indica el [directorio de configuración](/docs/es/claude-directory) que utiliza la CLI. El campo requiere Claude Code v2.1.268 o posterior. El campo `authMethod` del JSON es uno de `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` o `third_party` | `claude auth status` |

30| `claude agents` | Abrir la [vista de agentes](/docs/es/agent-view) para monitorear y enviar sesiones en segundo plano paralelas. Usa `--cwd <path>` para mostrar solo las sesiones iniciadas en ese directorio, o `--json` para imprimir las sesiones activas como una matriz JSON para scripts (`--json --all` también incluye las sesiones en segundo plano completadas). Pasa `--permission-mode`, `--model`, `--effort` o `--agent` para establecer [valores predeterminados para las sesiones enviadas](/docs/es/agent-view#permission-mode-model-and-effort). Acepta `--settings`, `--add-dir`, `--plugin-dir` y `--mcp-config` como el comando `claude` de nivel superior. Abrir la vista de agentes requiere una terminal interactiva | `claude agents --json` |30| `claude agents` | Abrir la [vista de agentes](/docs/es/agent-view) para monitorear y enviar sesiones en segundo plano paralelas. Usa `--cwd <path>` para mostrar solo las sesiones iniciadas en ese directorio, o `--json` para imprimir las sesiones activas como una matriz JSON para scripts (`--json --all` también incluye las sesiones en segundo plano completadas). Pasa `--permission-mode`, `--model`, `--effort` o `--agent` para establecer [valores predeterminados para las sesiones enviadas](/docs/es/agent-view#permission-mode-model-and-effort). Acepta `--settings`, `--add-dir`, `--plugin-dir` y `--mcp-config` como el comando `claude` de nivel superior. Abrir la vista de agentes requiere una terminal interactiva | `claude agents --json` |

31| `claude attach <id\|name>` | Adjuntarse a una [sesión en segundo plano](/docs/es/agent-view#manage-sessions-from-the-shell) en esta terminal. Pasar parte del nombre de una sesión en lugar del ID requiere Claude Code v2.1.290 o posterior | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | Adjuntarse a una [sesión en segundo plano](/docs/es/agent-view#manage-sessions-from-the-shell) en esta terminal. Pasar parte del nombre de una sesión en ejecución en lugar del ID requiere Claude Code v2.1.290 o posterior | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | Imprimir las reglas integradas del clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) como JSON. Usa `claude auto-mode config` para ver tu configuración efectiva con los ajustes aplicados. `--label <prefix>` imprime solo las reglas cuya etiqueta comienza con ese prefijo, sin distinguir mayúsculas y minúsculas. Requiere Claude Code v2.1.208 o posterior | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | Imprimir las reglas integradas del clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) como JSON. Usa `claude auto-mode config` para ver tu configuración efectiva con los ajustes aplicados. `--label <prefix>` imprime solo las reglas cuya etiqueta comienza con ese prefijo, sin distinguir mayúsculas y minúsculas. Requiere Claude Code v2.1.208 o posterior | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | Restaurar la configuración predeterminada del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) eliminando la sección `autoMode` de tu archivo de configuración de usuario. Solicita confirmación antes de escribir; pasa `-y`/`--yes` para omitir la solicitud. Las reglas de la [configuración administrada](/docs/es/server-managed-settings) o del flag `--settings` siguen aplicándose. Requiere Claude Code v2.1.212 o posterior. Consulta [Inspeccionar los valores predeterminados y tu configuración efectiva](/docs/es/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | Restaurar la configuración predeterminada del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) eliminando la sección `autoMode` de tu archivo de configuración de usuario. Solicita confirmación antes de escribir; pasa `-y`/`--yes` para omitir la solicitud. Las reglas de la [configuración administrada](/docs/es/server-managed-settings) o del flag `--settings` siguen aplicándose. Requiere Claude Code v2.1.212 o posterior. Consulta [Inspeccionar los valores predeterminados y tu configuración efectiva](/docs/es/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |

34| `claude daemon logs` | Seguir el archivo de registro del [supervisor](/docs/es/agent-view#the-supervisor-process) de sesiones en segundo plano, `~/.claude/daemon.log`, imprimiendo las líneas nuevas a medida que llegan hasta que presiones `Ctrl+C` | `claude daemon logs` |34| `claude daemon logs` | Seguir el archivo de registro del [supervisor](/docs/es/agent-view#the-supervisor-process) de sesiones en segundo plano, `~/.claude/daemon.log`, imprimiendo las líneas nuevas a medida que llegan hasta que presiones `Ctrl+C` | `claude daemon logs` |


68| `--agent` | Especifica un agente para la sesión actual (anula la configuración `agent`) | `claude --agent my-custom-agent` |68| `--agent` | Especifica un agente para la sesión actual (anula la configuración `agent`) | `claude --agent my-custom-agent` |

69| `--agents` | Define subagentes personalizados dinámicamente a través de JSON. Acepta los [campos enumerados para subagentes definidos por CLI](/docs/es/sub-agents#choose-the-subagent-scope). Con `--print`, el valor puede ser en su lugar la ruta a un archivo JSON que contiene el objeto; la forma de archivo requiere Claude Code v2.1.281 o posterior. Claude Code valida el valor al inicio y sale si hay un valor inválido; consulta [`Invalid --agents configuration`](/docs/es/errors#invalid-agents-configuration) para el mensaje y para las banderas y variable de entorno que omiten la validación. La validación requiere Claude Code v2.1.242 o posterior | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |69| `--agents` | Define subagentes personalizados dinámicamente a través de JSON. Acepta los [campos enumerados para subagentes definidos por CLI](/docs/es/sub-agents#choose-the-subagent-scope). Con `--print`, el valor puede ser en su lugar la ruta a un archivo JSON que contiene el objeto; la forma de archivo requiere Claude Code v2.1.281 o posterior. Claude Code valida el valor al inicio y sale si hay un valor inválido; consulta [`Invalid --agents configuration`](/docs/es/errors#invalid-agents-configuration) para el mensaje y para las banderas y variable de entorno que omiten la validación. La validación requiere Claude Code v2.1.242 o posterior | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

70| `--allow-dangerously-skip-permissions` | Añade `bypassPermissions` al ciclo de modo `Shift+Tab` sin comenzar en él. Te permite comenzar en un modo diferente como `plan` y cambiar a `bypassPermissions` más tarde. Consulta [modos de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |70| `--allow-dangerously-skip-permissions` | Añade `bypassPermissions` al ciclo de modo `Shift+Tab` sin comenzar en él. Te permite comenzar en un modo diferente como `plan` y cambiar a `bypassPermissions` más tarde. Consulta [modos de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |

71| `--allowedTools`, `--allowed-tools` | Herramientas que se ejecutan sin solicitar permiso. Consulta [sintaxis de regla de permisos](/docs/es/settings-reference#permission-rule-syntax) para coincidencia de patrones. Para restringir qué herramientas están disponibles, usa `--tools` en su lugar. Si nombras una de las [herramientas de seguimiento de tareas](/docs/es/tools-reference#task-tool-availability) aquí, Claude Code también opta por la sesión | `"Bash(git log *)" "Bash(git diff *)" "Read"` |71| `--allowedTools`, `--allowed-tools` | Herramientas que se ejecutan sin solicitar permiso, excepto las lecturas desde [rutas de red](/docs/es/permissions#network-paths). Consulta [sintaxis de regla de permisos](/docs/es/settings-reference#permission-rule-syntax) para coincidencia de patrones. Para restringir qué herramientas están disponibles, usa `--tools` en su lugar. Si nombras una de las [herramientas de seguimiento de tareas](/docs/es/tools-reference#task-tool-availability) aquí, Claude Code también las habilita en la sesión | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

72| `--append-subagent-system-prompt` | Añade texto personalizado al final del indicador del sistema de cada [subagente](/docs/es/sub-agents), incluyendo subagentes anidados, excepto un [subagente bifurcado](/docs/es/sub-agents#fork-the-current-conversation), que reutiliza el indicador de la propia conversación. Solo se aplica en modo no interactivo con `-p`. Requiere Claude Code v2.1.205 o posterior | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |72| `--append-subagent-system-prompt` | Añade texto personalizado al final del indicador del sistema de cada [subagente](/docs/es/sub-agents), incluyendo subagentes anidados, excepto un [subagente bifurcado](/docs/es/sub-agents#fork-the-current-conversation), que reutiliza el indicador de la propia conversación. Solo se aplica en modo no interactivo con `-p`. Requiere Claude Code v2.1.205 o posterior | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |

73| `--append-subagent-system-prompt-file` | Carga texto de un archivo y lo añade a los indicadores del sistema de [subagentes](/docs/es/sub-agents). Una alternativa a `--append-subagent-system-prompt` para texto demasiado largo para pasar en la línea de comandos. Las dos banderas no se pueden combinar. Solo se aplica en modo no interactivo con `-p`. Requiere Claude Code v2.1.261 o posterior | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |73| `--append-subagent-system-prompt-file` | Carga texto de un archivo y lo añade a los indicadores del sistema de [subagentes](/docs/es/sub-agents). Una alternativa a `--append-subagent-system-prompt` para texto demasiado largo para pasar en la línea de comandos. Las dos banderas no se pueden combinar. Solo se aplica en modo no interactivo con `-p`. Requiere Claude Code v2.1.261 o posterior | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |

74| `--append-system-prompt` | Añade texto personalizado al final del indicador del sistema predeterminado | `claude --append-system-prompt "Always use TypeScript"` |74| `--append-system-prompt` | Añade texto personalizado al final del indicador del sistema predeterminado | `claude --append-system-prompt "Always use TypeScript"` |


81| `--channels` | (Vista previa de investigación) Servidores MCP cuyas notificaciones de [canal](/docs/es/channels) Claude debe escuchar en esta sesión. Lista separada por espacios de entradas `plugin:<name>@<marketplace>`. Requiere autenticación de Anthropic a través de claude.ai o una clave API de Console | `claude --channels plugin:my-notifier@my-marketplace` |81| `--channels` | (Vista previa de investigación) Servidores MCP cuyas notificaciones de [canal](/docs/es/channels) Claude debe escuchar en esta sesión. Lista separada por espacios de entradas `plugin:<name>@<marketplace>`. Requiere autenticación de Anthropic a través de claude.ai o una clave API de Console | `claude --channels plugin:my-notifier@my-marketplace` |

82| `--chrome` | Habilita la [integración del navegador Chrome](/docs/es/chrome) para automatización web y pruebas | `claude --chrome` |82| `--chrome` | Habilita la [integración del navegador Chrome](/docs/es/chrome) para automatización web y pruebas | `claude --chrome` |

83| `--cloud` | Con una descripción de tarea, crea una nueva [sesión en la nube](/docs/es/claude-code-on-the-web). Con un ID de sesión (`session_...` o `cse_...`) o una URL de claude.ai/code, encola un mensaje en esa sesión existente en su lugar, con `-p`. Consulta [enviar un mensaje de seguimiento](/docs/es/claude-code-on-the-web#send-follow-ups-from-the-cli). | `claude --cloud "Fix the login bug"` |83| `--cloud` | Con una descripción de tarea, crea una nueva [sesión en la nube](/docs/es/claude-code-on-the-web). Con un ID de sesión (`session_...` o `cse_...`) o una URL de claude.ai/code, encola un mensaje en esa sesión existente en su lugar, con `-p`. Consulta [enviar un mensaje de seguimiento](/docs/es/claude-code-on-the-web#send-follow-ups-from-the-cli). | `claude --cloud "Fix the login bug"` |

84| `--continue`, `-c` | Carga la conversación más reciente en el directorio actual, incluyendo una [sesión en segundo plano que ha terminado](/docs/es/sessions#resume-a-session); abrir sesiones en segundo plano terminadas requiere Claude Code v2.1.257 o posterior. Omite sesiones creadas con `claude -p` o el Agent SDK, y sesiones cuyo primer indicador fue `/loop`. `claude -p --continue` incluye sesiones `-p`, SDK y `/loop`. Incluye sesiones que añadieron este directorio con `/add-dir` | `claude --continue` |84| `--continue`, `-c` | Carga la conversación más reciente en el directorio actual, incluyendo una [sesión en segundo plano que ha terminado](/docs/es/sessions#where-the-session-picker-looks); abrir sesiones en segundo plano terminadas requiere Claude Code v2.1.257 o posterior. Omite sesiones creadas con `claude -p` o el Agent SDK, y sesiones cuyo primer prompt fue `/loop`. `claude -p --continue` incluye sesiones `-p`, SDK y `/loop`. Incluye sesiones que añadieron este directorio con `/add-dir` | `claude --continue` |

85| `--dangerously-load-development-channels` | Habilita [canales](/docs/es/channels-reference#test-during-the-research-preview) que no están en la lista de permitidos aprobada, para desarrollo local. Acepta entradas `plugin:<name>@<marketplace>` y `server:<name>`. Solicita confirmación, por lo que tiene efecto en sesiones interactivas. Con `-p`, Claude Code ignora la bandera | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | Habilita [canales](/docs/es/channels-reference#test-during-the-research-preview) que no están en la lista de permitidos aprobada, para desarrollo local. Acepta entradas `plugin:<name>@<marketplace>` y `server:<name>`. Solicita confirmación, por lo que tiene efecto en sesiones interactivas. Con `-p`, Claude Code ignora la bandera | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | Omite solicitudes de permiso. Equivalente a `--permission-mode bypassPermissions`. Consulta [modos de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) para ver qué esto hace y no omite. Para sesiones iniciadas con `--bg`, el modo [persiste cuando el supervisor reinicia la sesión](/docs/es/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | Omite solicitudes de permiso. Equivalente a `--permission-mode bypassPermissions`. Consulta [modos de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) para ver qué esto hace y no omite. Para sesiones iniciadas con `--bg`, el modo [persiste cuando el supervisor reinicia la sesión](/docs/es/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | Habilita el modo de depuración con filtrado de categoría opcional, como `--debug='mcp,startup'` o `--debug='!1p'`. El filtro se vincula solo en la forma `=`; un filtro separado por espacios habilita el modo de depuración sin filtrado | `claude --debug='mcp,startup'` |87| `--debug` | Habilita el modo de depuración con filtrado de categoría opcional, como `--debug='mcp,startup'` o `--debug='!1p'`. El filtro se vincula solo en la forma `=`; un filtro separado por espacios habilita el modo de depuración sin filtrado | `claude --debug='mcp,startup'` |


108| `--maintenance` | Ejecuta [hooks de Setup](/docs/es/hooks#setup) con el matcher `maintenance` antes de la sesión (solo modo print) | `claude -p --maintenance "query"` |108| `--maintenance` | Ejecuta [hooks de Setup](/docs/es/hooks#setup) con el matcher `maintenance` antes de la sesión (solo modo print) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Detiene la ejecución una vez que el gasto estimado en llamadas de API alcanza esta cantidad (solo modo print). Claude Code compara el límite con su [estimación de costos del lado del cliente](/docs/es/agent-sdk/cost-tracking#estimates-not-billing), que puede diferir de tu factura. El gasto de [subagentes](/docs/es/sub-agents) cuenta hacia el límite. El gasto puede superar el límite, así que [deja margen](/docs/es/agent-sdk/agent-loop#budget-headroom). Cuando regresas a una conversación con `--continue` o `--resume`, los totales [restaurados de ejecuciones anteriores](/docs/es/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) no cuentan hacia él. Una vez que el gasto alcanza el límite, generar otro subagente falla con `Budget limit reached`, y Claude Code detiene los subagentes en segundo plano que aún se ejecutan; los comportamientos de cumplimiento del límite requieren Claude Code v2.1.217 o posterior | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Detiene la ejecución una vez que el gasto estimado en llamadas de API alcanza esta cantidad (solo modo print). Claude Code compara el límite con su [estimación de costos del lado del cliente](/docs/es/agent-sdk/cost-tracking#estimates-not-billing), que puede diferir de tu factura. El gasto de [subagentes](/docs/es/sub-agents) cuenta hacia el límite. El gasto puede superar el límite, así que [deja margen](/docs/es/agent-sdk/agent-loop#budget-headroom). Cuando regresas a una conversación con `--continue` o `--resume`, los totales [restaurados de ejecuciones anteriores](/docs/es/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) no cuentan hacia él. Una vez que el gasto alcanza el límite, generar otro subagente falla con `Budget limit reached`, y Claude Code detiene los subagentes en segundo plano que aún se ejecutan; los comportamientos de cumplimiento del límite requieren Claude Code v2.1.217 o posterior | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Limita el número de turnos agentivos (solo modo print). Sale con un error cuando se alcanza el límite. Sin límite por defecto. Con `--input-format stream-json`, un mensaje aún en cola cuando el límite termina un turno permanece en cola e inicia un nuevo turno con su propio límite | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Limita el número de turnos agentivos (solo modo print). Sale con un error cuando se alcanza el límite. Sin límite por defecto. Con `--input-format stream-json`, un mensaje aún en cola cuando el límite termina un turno permanece en cola e inicia un nuevo turno con su propio límite | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Carga servidores MCP desde archivos JSON o cadenas (separados por espacios). Cuando pasas esta bandera con `-p`, Claude Code espera a que los servidores aún pendientes se conecten antes de ejecutar el primer turno, hasta el tiempo de espera de inicio [`MCP_TIMEOUT`](/docs/es/env-vars), 30 segundos por defecto; un servidor con una [lista de herramientas en caché](/docs/es/mcp#managing-your-servers) omite la espera y se conecta en el primer uso. La espera requiere Claude Code v2.1.221 o posterior | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Carga servidores MCP desde archivos JSON o cadenas (separados por espacios). Cuando pasas esta bandera con `-p`, Claude Code espera a que los servidores aún pendientes se conecten antes de ejecutar el primer turno, hasta el tiempo de espera de inicio [`MCP_TIMEOUT`](/docs/es/env-vars), 30 segundos por defecto; un servidor con una [lista de herramientas en caché](/docs/es/mcp#managing-your-servers) omite la espera y se conecta en el primer uso. En un [entorno autohospedado](/docs/es/self-hosted-environments-configuration#connection-timing), se aplica en su lugar una espera más corta. La espera requiere Claude Code v2.1.221 o posterior | `claude --mcp-config ./mcp.json` |

112| `--model` | Establece el modelo para la sesión actual con un [alias de modelo](/docs/es/model-config#model-aliases) como `sonnet`, `opus`, `haiku`, o `fable`, o el nombre completo de un modelo. Anula la configuración [`model`](/docs/es/settings-reference#model) y [`ANTHROPIC_MODEL`](/docs/es/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Establece el modelo para la sesión actual con un [alias de modelo](/docs/es/model-config#model-aliases) como `sonnet`, `opus`, `haiku`, o `fable`, o el nombre completo de un modelo. Anula la configuración [`model`](/docs/es/settings-reference#model) y [`ANTHROPIC_MODEL`](/docs/es/model-config#environment-variables) | `claude --model claude-sonnet-5` |

113| `--name`, `-n` | Establece un nombre para mostrar para la sesión, mostrado en `/resume` y el título de la terminal. Puedes reanudar una sesión nombrada con `claude --resume <name>`. En una sesión interactiva, si otra sesión activa en esta máquina ya usa el nombre, Claude Code aplica [una variante del mismo](/docs/es/sessions#name-your-sessions). <br /><br />[`/rename`](/docs/es/commands) cambia el nombre a mitad de sesión y también lo muestra en la barra de indicador | `claude -n "my-feature-work"` |113| `--name`, `-n` | Establece un nombre para mostrar para la sesión, mostrado en `/resume` y el título de la terminal. Puedes reanudar una sesión nombrada con `claude --resume <name>`. <br /><br />[`/rename`](/docs/es/commands) cambia el nombre a mitad de sesión y también lo muestra en la barra del prompt | `claude -n "my-feature-work"` |

114| `--no-chrome` | Deshabilita la [integración del navegador Chrome](/docs/es/chrome) para esta sesión | `claude --no-chrome` |114| `--no-chrome` | Deshabilita la [integración del navegador Chrome](/docs/es/chrome) para esta sesión | `claude --no-chrome` |

115| `--no-session-persistence` | Deshabilita la persistencia de sesión para que las sesiones no se guarden en disco y no se puedan reanudar. Solo modo print. La variable de entorno [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/es/env-vars) hace lo mismo en cualquier modo | `claude -p --no-session-persistence "query"` |115| `--no-session-persistence` | Deshabilita la persistencia de sesión para que las sesiones no se guarden en disco y no se puedan reanudar. Solo modo print. La variable de entorno [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/es/env-vars) hace lo mismo en cualquier modo | `claude -p --no-session-persistence "query"` |

116| `--output-format` | Especifica el formato de salida para el modo print (opciones: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |116| `--output-format` | Especifica el formato de salida para el modo print (opciones: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

Details

314| Plugins y marketplaces declarados en el `.claude/settings.json` de tu repositorio | No | Una sesión en la nube no instala los plugins que un repositorio activa bajo [`enabledPlugins`](/docs/es/settings-reference#enabledplugins), incluidos los de los marketplaces que enumera bajo [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces) |314| Plugins y marketplaces declarados en el `.claude/settings.json` de tu repositorio | No | Una sesión en la nube no instala los plugins que un repositorio activa bajo [`enabledPlugins`](/docs/es/settings-reference#enabledplugins), incluidos los de los marketplaces que enumera bajo [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces) |

315| La [configuración administrada por servidor](/docs/es/server-managed-settings) de tu organización | Sí, excepto en sesiones de [Claude Tag](https://claude.com/docs/claude-tag/overview) | Se obtiene de los servidores de Anthropic cuando comienza la sesión. Consulta [Cobertura de superficie](/docs/es/model-config#surface-coverage) para ver cómo se aplica `availableModels` en sesiones en la nube. La configuración implementada en tu dispositivo a través de MDM o archivos de configuración administrada no se aplica, porque la sesión se ejecuta en una VM administrada por Anthropic; en un [entorno autohospedado](/docs/es/self-hosted-environments), las sesiones también leen el archivo de configuración administrada en la imagen del ejecutor, según [cómo Claude Code combina fuentes administradas](/docs/es/managed-settings#how-claude-code-combines-managed-sources) |315| La [configuración administrada por servidor](/docs/es/server-managed-settings) de tu organización | Sí, excepto en sesiones de [Claude Tag](https://claude.com/docs/claude-tag/overview) | Se obtiene de los servidores de Anthropic cuando comienza la sesión. Consulta [Cobertura de superficie](/docs/es/model-config#surface-coverage) para ver cómo se aplica `availableModels` en sesiones en la nube. La configuración implementada en tu dispositivo a través de MDM o archivos de configuración administrada no se aplica, porque la sesión se ejecuta en una VM administrada por Anthropic; en un [entorno autohospedado](/docs/es/self-hosted-environments), las sesiones también leen el archivo de configuración administrada en la imagen del ejecutor, según [cómo Claude Code combina fuentes administradas](/docs/es/managed-settings#how-claude-code-combines-managed-sources) |

316| Tu `~/.claude/CLAUDE.md` de usuario | No | Vive en tu máquina, no en el repositorio. Consulta [Agregar preferencias personales sin hacer commit en el repositorio](#add-personal-preferences-without-committing-to-the-repo) |316| Tu `~/.claude/CLAUDE.md` de usuario | No | Vive en tu máquina, no en el repositorio. Consulta [Agregar preferencias personales sin hacer commit en el repositorio](#add-personal-preferences-without-committing-to-the-repo) |

317| Tus `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` de usuario | No | Viven en tu máquina, no en el repositorio. Haz commit de ellos en el directorio `.claude/` del repositorio en su lugar. Las sesiones en la nube cargan automáticamente los skills que habilitas en claude.ai |317| Tus `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` de usuario | No | Viven en tu máquina, no en el repositorio. Haz commit de ellos en el directorio `.claude/` del repositorio en su lugar. Las sesiones en la nube cargan automáticamente los [skills que habilitas en claude.ai](/docs/es/skills#skills-in-cowork-and-cloud-sessions) |

318| Plugins habilitados solo en tu configuración de usuario | No | El `enabledPlugins` con alcance de usuario vive en `~/.claude/settings.json` en tu máquina |318| Plugins habilitados solo en tu configuración de usuario | No | El `enabledPlugins` con alcance de usuario vive en `~/.claude/settings.json` en tu máquina |

319| Servidores MCP que agregaste con `claude mcp add` en el alcance local predeterminado o el alcance de usuario | No | Esos escriben en `~/.claude.json` en tu máquina, no en el repositorio. Agrega el servidor con `claude mcp add --scope project`, que escribe el [`.mcp.json`](/docs/es/mcp#project-scope) del repositorio, y haz commit de ese archivo. Una sesión con un repositorio lo carga |319| Servidores MCP que agregaste con `claude mcp add` en el alcance local predeterminado o el alcance de usuario | No | Esos escriben en `~/.claude.json` en tu máquina, no en el repositorio. Agrega el servidor con `claude mcp add --scope project`, que escribe el [`.mcp.json`](/docs/es/mcp#project-scope) del repositorio, y haz commit de ese archivo. Una sesión con un repositorio lo carga |

320| Variables de transporte en el bloque `env` de `.claude/settings.json` de tu repositorio, como `NODE_EXTRA_CA_CERTS` y las [variables de certificado de cliente mTLS](/docs/es/network-config#mtls-authentication) | No | El entorno de alojamiento administra la conexión de API de la sesión, por lo que Claude Code ignora estas claves y anota cada clave ignorada en el registro de depuración de la sesión |320| Variables de transporte en el bloque `env` de `.claude/settings.json` de tu repositorio, como `NODE_EXTRA_CA_CERTS` y las [variables de certificado de cliente mTLS](/docs/es/network-config#mtls-authentication) | No | El entorno de alojamiento administra la conexión de API de la sesión, por lo que Claude Code ignora estas claves y anota cada clave ignorada en el registro de depuración de la sesión |

code-review.md +4 −4

Details

269| Sección | Lo que muestra |269| Sección | Lo que muestra |

270| :- | :- |270| :- | :- |

271| PRs reviewed | Conteo diario de solicitudes de extracción revisadas durante el rango de tiempo seleccionado |271| PRs reviewed | Conteo diario de solicitudes de extracción revisadas durante el rango de tiempo seleccionado |

272| Cost weekly | Gasto semanal en Code Review |272| Code Review cost | Gasto en Code Review en lo que va del mes |

273| Feedback | Conteo de comentarios de revisión que se resolvieron automáticamente porque un desarrollador abordó el problema |273| Feedback | Conteo de comentarios de revisión que se resolvieron automáticamente porque un desarrollador abordó el problema |

274| Repository breakdown | Conteos por repositorio de PR revisados y comentarios resueltos |274| Repository breakdown | Conteos por repositorio de PR revisados, comentarios resueltos y ejecuciones de revisión, con costo estimado y una vista por PR |

275 275 

276Las cifras de costo del panel son estimaciones para monitorear la actividad. Para gasto preciso en factura, consulte su factura de Anthropic.276La tarjeta Code Review cost muestra un monto solo cuando está seleccionado el mes en curso. Las cifras de costo en analytics pueden diferir de tu factura. Los costos de Repository breakdown se estiman a precio de lista, antes de cualquier descuento o crédito, y cubren solo las revisiones que Claude publicó en un pull request. Para un gasto preciso según la factura, consulta tu factura de Anthropic.

277 277 

278<h2 id="pricing">278<h2 id="pricing">

279 Precios279 Precios


291 291 

292Los costos aparecen en su factura de Anthropic independientemente de si su organización usa Amazon Bedrock o Google Cloud's Agent Platform para otras características de Claude Code. Para establecer un límite de gasto mensual para Code Review, vaya a [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) y configure el límite para el servicio Claude Code Review.292Los costos aparecen en su factura de Anthropic independientemente de si su organización usa Amazon Bedrock o Google Cloud's Agent Platform para otras características de Claude Code. Para establecer un límite de gasto mensual para Code Review, vaya a [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) y configure el límite para el servicio Claude Code Review.

293 293 

294Monitoree el gasto a través del gráfico de costo semanal en [analytics](#view-usage) o la columna de costo promedio por repositorio en la configuración de administrador.294Para monitorear el gasto, usa el [panel de analytics](#view-usage).

295 295 

296<h2 id="troubleshooting">296<h2 id="troubleshooting">

297 Solución de problemas297 Solución de problemas

commands.md +2 −2

Details

77| `/compact [instructions]` | Libera contexto resumiendo la conversación hasta el momento. Opcionalmente, pasa instrucciones de enfoque para el resumen. Consulta [cómo la compactación maneja las reglas, los skills y los archivos de memoria](/docs/es/context-window#what-survives-compaction) |77| `/compact [instructions]` | Libera contexto resumiendo la conversación hasta el momento. Opcionalmente, pasa instrucciones de enfoque para el resumen. Consulta [cómo la compactación maneja las reglas, los skills y los archivos de memoria](/docs/es/context-window#what-survives-compaction) |

78| `/config [key=value ...]` | Abre la interfaz de [Configuración](/docs/es/settings) para ajustar el tema, el modelo, el [estilo de salida](/docs/es/output-styles) y otras preferencias. Pasa uno o más pares `key=value` para establecer un ajuste directamente sin abrir la interfaz, por ejemplo `/config thinking=false`, `/config theme=dark` o `/config model=sonnet`. La forma `key=value` también funciona en modo no interactivo (`-p`) y desde la app móvil de Claude a través de [Remote Control](/docs/es/remote-control). La forma `key=value` no puede activar un ajuste que necesite tu confirmación en el panel, como [`autoContinueAtUsageLimit`](/docs/es/interactive-mode#turn-automatic-continue-off), aunque sí puede desactivarlo. Ejecuta `/config --help` para enumerar las claves que acepta. Alias: `/settings` |78| `/config [key=value ...]` | Abre la interfaz de [Configuración](/docs/es/settings) para ajustar el tema, el modelo, el [estilo de salida](/docs/es/output-styles) y otras preferencias. Pasa uno o más pares `key=value` para establecer un ajuste directamente sin abrir la interfaz, por ejemplo `/config thinking=false`, `/config theme=dark` o `/config model=sonnet`. La forma `key=value` también funciona en modo no interactivo (`-p`) y desde la app móvil de Claude a través de [Remote Control](/docs/es/remote-control). La forma `key=value` no puede activar un ajuste que necesite tu confirmación en el panel, como [`autoContinueAtUsageLimit`](/docs/es/interactive-mode#turn-automatic-continue-off), aunque sí puede desactivarlo. Ejecuta `/config --help` para enumerar las claves que acepta. Alias: `/settings` |

79| `/context [all]` | Visualiza el uso actual del contexto como una cuadrícula de colores. Muestra sugerencias de optimización para herramientas que consumen mucho contexto, exceso de memoria y advertencias de capacidad. Cuando la conversación excede la ventana de contexto, la salida incluye una [advertencia](/docs/es/errors#context-exceeds-the-token-limit) que muestra por cuánto superas el límite y qué comando libera espacio. En [modo de pantalla completa](/docs/es/fullscreen), `/context` contrae el desglose por elemento para mantener visible la cuadrícula. Pasa `all` para expandirlo |79| `/context [all]` | Visualiza el uso actual del contexto como una cuadrícula de colores. Muestra sugerencias de optimización para herramientas que consumen mucho contexto, exceso de memoria y advertencias de capacidad. Cuando la conversación excede la ventana de contexto, la salida incluye una [advertencia](/docs/es/errors#context-exceeds-the-token-limit) que muestra por cuánto superas el límite y qué comando libera espacio. En [modo de pantalla completa](/docs/es/fullscreen), `/context` contrae el desglose por elemento para mantener visible la cuadrícula. Pasa `all` para expandirlo |

80| `/copy [N]` | Copia la última respuesta del asistente al portapapeles. Pasa un número `N` para copiar la N-ésima respuesta más reciente: `/copy 2` copia la penúltima. Cuando hay bloques de código, muestra un selector interactivo para elegir bloques individuales o la respuesta completa. Presiona `w` en el selector para escribir la selección en un archivo en lugar del portapapeles, lo que resulta útil a través de SSH |80| `/copy [N]` | Copia la última respuesta del asistente al portapapeles. Pasa un número `N` para copiar la N-ésima respuesta más reciente: `/copy 2` copia la penúltima. Cuando hay bloques de código o citas en bloque, muestra un selector interactivo para elegir bloques individuales o la respuesta completa. Presiona `w` en el selector para escribir la selección en un archivo en lugar del portapapeles, lo que resulta útil a través de SSH |

81| `/cost` | Alias de `/usage` |81| `/cost` | Alias de `/usage` |

82| `/dataviz [request]` | **[Skill](/docs/es/skills#bundled-skills).** Orientación de diseño para gráficos, diagramas y paneles. Claude elige la forma del gráfico según los datos, asigna el color por función, valida la paleta en cuanto a seguridad para daltónicos y contraste con un script incluido, y aplica reglas de marcas, interacción y accesibilidad. Usa una paleta de marcador de posición neutral respecto a la marca que reemplazas con la tuya |82| `/dataviz [request]` | **[Skill](/docs/es/skills#bundled-skills).** Orientación de diseño para gráficos, diagramas y paneles. Claude elige la forma del gráfico según los datos, asigna el color por función, valida la paleta en cuanto a seguridad para daltónicos y contraste con un script incluido, y aplica reglas de marcas, interacción y accesibilidad. Usa una paleta de marcador de posición neutral respecto a la marca que reemplazas con la tuya |

83| `/debug [description]` | **[Skill](/docs/es/skills#bundled-skills).** Habilita el registro de depuración para la sesión actual y soluciona problemas leyendo el registro de depuración de la sesión. El registro de depuración está desactivado de forma predeterminada a menos que hayas iniciado con `claude --debug`, por lo que ejecutar `/debug` a mitad de la sesión comienza a capturar registros desde ese momento. Opcionalmente, describe el problema para enfocar el análisis |83| `/debug [description]` | **[Skill](/docs/es/skills#bundled-skills).** Habilita el registro de depuración para la sesión actual y soluciona problemas leyendo el registro de depuración de la sesión. El registro de depuración está desactivado de forma predeterminada a menos que hayas iniciado con `claude --debug`, por lo que ejecutar `/debug` a mitad de la sesión comienza a capturar registros desde ese momento. Opcionalmente, describe el problema para enfocar el análisis |


132| `/reload-skills` | Vuelve a escanear los directorios de [skills](/docs/es/skills) y de comandos para que los skills agregados o modificados en el disco durante la sesión estén disponibles sin reiniciar. Informa cuántos skills hay disponibles y cuántos se agregaron o eliminaron |132| `/reload-skills` | Vuelve a escanear los directorios de [skills](/docs/es/skills) y de comandos para que los skills agregados o modificados en el disco durante la sesión estén disponibles sin reiniciar. Informa cuántos skills hay disponibles y cuántos se agregaron o eliminaron |

133| `/remote-control` | Haz que esta sesión esté disponible para [Remote Control](/docs/es/remote-control) desde claude.ai. Ejecutarlo sin haber iniciado sesión imprime que Remote Control requiere una suscripción a claude.ai y te indica cómo iniciar sesión; antes de v2.1.206 informaba `Unknown command: /remote-control`. Alias: `/rc` |133| `/remote-control` | Haz que esta sesión esté disponible para [Remote Control](/docs/es/remote-control) desde claude.ai. Ejecutarlo sin haber iniciado sesión imprime que Remote Control requiere una suscripción a claude.ai y te indica cómo iniciar sesión; antes de v2.1.206 informaba `Unknown command: /remote-control`. Alias: `/rc` |

134| `/remote-env` | Elige el [entorno en la nube](/docs/es/cloud-environments#select-an-environment-from-the-cli) predeterminado para las sesiones en la nube que inicias desde la CLI |134| `/remote-env` | Elige el [entorno en la nube](/docs/es/cloud-environments#select-an-environment-from-the-cli) predeterminado para las sesiones en la nube que inicias desde la CLI |

135| `/rename [name]` | Cambia el nombre de la sesión actual y muestra el nombre en la barra del prompt. Sin un nombre, genera uno automáticamente a partir del historial de la conversación. También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior. Desde cualquier superficie de cambio de nombre, incluidos claude.ai y la app de escritorio, Claude Code reemplaza los caracteres de control e invisibles del nuevo nombre por espacios y limita el nombre a 200 caracteres. Si el nombre queda vacío una vez eliminados los caracteres invisibles, Claude Code lo rechaza y muestra `That name is empty once invisible characters are removed. Usage: /rename <name>`. El reemplazo de caracteres y el límite de longitud requieren Claude Code v2.1.221 o posterior. Si otra sesión activa en esta máquina ya usa un nombre que pasas, Claude Code aplica [una variante de él](/docs/es/sessions#name-your-sessions) en su lugar |135| `/rename [name]` | Cambia el nombre de la sesión actual y muestra el nombre en la barra del prompt. Sin un nombre, genera uno automáticamente a partir del historial de la conversación. También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior. Desde cualquier superficie de cambio de nombre, incluidos claude.ai y la app de escritorio, Claude Code reemplaza los caracteres de control e invisibles del nuevo nombre por espacios y limita el nombre a 200 caracteres. Si el nombre queda vacío una vez eliminados los caracteres invisibles, Claude Code lo rechaza y muestra `That name is empty once invisible characters are removed. Usage: /rename <name>`. El reemplazo de caracteres y el límite de longitud requieren Claude Code v2.1.221 o posterior |

136| `/resume [session]` | Reanuda una conversación por ID o nombre, o abre el selector de sesiones. Las [sesiones en segundo plano](/docs/es/agent-view) aparecen en el selector marcadas con `bg`. Reanudar una que todavía se está ejecutando, desde el selector o por ID o nombre, [abre esa sesión](/docs/es/sessions#resume-a-running-background-session): tu conversación actual pasa a segundo plano y esta terminal se adjunta a la que está en ejecución. Presiona `←` en un prompt vacío para volver a la vista de agentes, que también enumera la conversación que dejaste. Antes de v2.1.285, Claude Code se negaba y te indicaba que abrieras la sesión con `claude attach` o que primero la detuvieras. Alias: `/continue` |136| `/resume [session]` | Reanuda una conversación por ID o nombre, o abre el selector de sesiones. Las [sesiones en segundo plano](/docs/es/agent-view) aparecen en el selector marcadas con `bg`. Reanudar una que todavía se está ejecutando, desde el selector o por ID o nombre, [abre esa sesión](/docs/es/sessions#resume-a-running-background-session): tu conversación actual pasa a segundo plano y esta terminal se adjunta a la que está en ejecución. Presiona `←` en un prompt vacío para volver a la vista de agentes, que también enumera la conversación que dejaste. Antes de v2.1.285, Claude Code se negaba y te indicaba que abrieras la sesión con `claude attach` o que primero la detuvieras. Alias: `/continue` |

137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | Alias de [`/code-review`](/docs/es/code-review#review-a-diff-locally): revisa el diff actual, o un número de PR, una rama o una ruta que pases, como `/review 1234`, y admite los mismos niveles de esfuerzo y flags. Si no se indica un nivel, la revisión reutiliza el último nivel de `low` a `max` que escribiste; consulta [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para conocer las reglas exactas. Para una revisión profunda en la nube, usa [`/code-review ultra`](/docs/es/ultrareview). Antes de v2.1.223, `/review` era un comando independiente que ejecutaba una revisión de una sola pasada y de solo lectura de un pull request de GitHub por número, y enumeraba los PR abiertos para elegir cuando se ejecutaba sin argumento; de v2.1.186 a v2.1.201, ejecutaba el mismo motor multiagente que `/code-review medium` |137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | Alias de [`/code-review`](/docs/es/code-review#review-a-diff-locally): revisa el diff actual, o un número de PR, una rama o una ruta que pases, como `/review 1234`, y admite los mismos niveles de esfuerzo y flags. Si no se indica un nivel, la revisión reutiliza el último nivel de `low` a `max` que escribiste; consulta [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para conocer las reglas exactas. Para una revisión profunda en la nube, usa [`/code-review ultra`](/docs/es/ultrareview). Antes de v2.1.223, `/review` era un comando independiente que ejecutaba una revisión de una sola pasada y de solo lectura de un pull request de GitHub por número, y enumeraba los PR abiertos para elegir cuando se ejecutaba sin argumento; de v2.1.186 a v2.1.201, ejecutaba el mismo motor multiagente que `/code-review medium` |

138| `/rewind` | Retrocede la conversación y/o el código a un punto anterior, o resume desde un mensaje seleccionado. Consulta [checkpointing](/docs/es/checkpointing). Alias: `/checkpoint`, `/undo` |138| `/rewind` | Retrocede la conversación y/o el código a un punto anterior, o resume desde un mensaje seleccionado. Consulta [checkpointing](/docs/es/checkpointing). Alias: `/checkpoint`, `/undo` |

Details

8 8 

9Algunas organizaciones requieren que cada proceso en una estación de trabajo se inicie a través de un lanzador obligatorio. El lanzador aplica la zona de pruebas, los controles de red o la inyección de credenciales en las que depende la postura de seguridad de la empresa, y un binario que se inicia sin ella es una violación de política.9Algunas organizaciones requieren que cada proceso en una estación de trabajo se inicie a través de un lanzador obligatorio. El lanzador aplica la zona de pruebas, los controles de red o la inyección de credenciales en las que depende la postura de seguridad de la empresa, y un binario que se inicia sin ella es una violación de política.

10 10 

11`CLAUDE_CODE_PROCESS_WRAPPER` inicia cada proceso que Claude Code lanza desde su propio binario a través de su lanzador: el servicio de fondo, cada sesión que aloja en [vista de agente](/docs/es/agent-view), y los relanzamientos de Claude Code después de una actualización. Establézcalo en la ruta absoluta de su lanzador, y Claude Code ejecuta el lanzador con el comando de Claude Code como sus argumentos.11`CLAUDE_CODE_PROCESS_WRAPPER` inicia cada proceso que Claude Code lanza desde su propio binario a través de tu lanzador: el [servicio de fondo](/docs/es/agent-view#the-supervisor-process), cada sesión que aloja en [vista de agente](/docs/es/agent-view), y los relanzamientos de Claude Code después de una actualización. Establécelo en la ruta absoluta de tu lanzador, y Claude Code ejecuta el lanzador con el comando de Claude Code como sus argumentos.

12 12 

13Un lanzador que envuelve el comando `claude` en su `PATH` no puede alcanzar el servicio de fondo o las sesiones que aloja, porque se inician desde la ruta directa del binario sin buscar `claude`.13Un lanzador que envuelve el comando `claude` en su `PATH` no puede alcanzar el servicio de fondo o las sesiones que aloja, porque se inician desde la ruta directa del binario sin buscar `claude`.

14 14 


39 39 

40Los siguientes procesos no se inician a través del lanzador:40Los siguientes procesos no se inician a través del lanzador:

41 41 

42* Un [servicio de fondo instalado](/docs/es/agent-view#the-supervisor-process) cuya unidad se escribió antes de que se configurara el lanzador: `launchd` o `systemd` inicia ese proceso desde su archivo de unidad. `/status` y `claude daemon status` advierten cuando el servicio en ejecución y el lanzador configurado no coinciden, y las sesiones que el servicio genera aún se inician a través del lanzador una vez que el servicio se reinicia con la variable en su configuración.

43* Una sesión que usted inicia usted mismo en una terminal, que se ejecuta como la invocó. Para cubrir estas sesiones, coloque un script llamado `claude` en un directorio anterior en `PATH` que ejecute su lanzador con el binario real; no reemplace el enlace simbólico administrado. El servicio de fondo y sus sesiones se inician sin una búsqueda de `PATH`, por lo que los dos lanzadores no se apilan allí.42* Una sesión que usted inicia usted mismo en una terminal, que se ejecuta como la invocó. Para cubrir estas sesiones, coloque un script llamado `claude` en un directorio anterior en `PATH` que ejecute su lanzador con el binario real; no reemplace el enlace simbólico administrado. El servicio de fondo y sus sesiones se inician sin una búsqueda de `PATH`, por lo que los dos lanzadores no se apilan allí.

44* El primer proceso de un enlace profundo `claude-cli://`, que el controlador de protocolo del sistema operativo inicia directamente. Todo lo que esa sesión inicia en el fondo después se ejecuta a través del lanzador. Para cerrar completamente este camino, [evite el registro del controlador](/docs/es/deep-links#registration-and-supported-platforms) con la configuración `disableDeepLinkRegistration`.43* El primer proceso de un enlace profundo `claude-cli://`, que el controlador de protocolo del sistema operativo inicia directamente. Todo lo que esa sesión inicia en el fondo después se ejecuta a través del lanzador. Para cerrar completamente este camino, [evite el registro del controlador](/docs/es/deep-links#registration-and-supported-platforms) con la configuración `disableDeepLinkRegistration`.

45* El relanzamiento que `--worktree` combinado con `--tmux` realiza: el multiplexor de terminal inicia ese panel, no el binario de Claude Code.44* El relanzamiento que `--worktree` combinado con `--tmux` realiza: el multiplexor de terminal inicia ese panel, no el binario de Claude Code.


100 99 

101 Debido a que `processWrapper` es una configuración nombrada, una organización que la entrega a través de [configuración administrada remota](/docs/es/managed-settings#delivery-mechanisms) la ve listada en el [diálogo de aprobación de seguridad](/docs/es/server-managed-settings#security-approval-dialogs) junto con las otras configuraciones que ejecutan ejecutables suministrados por el administrador.100 Debido a que `processWrapper` es una configuración nombrada, una organización que la entrega a través de [configuración administrada remota](/docs/es/managed-settings#delivery-mechanisms) la ve listada en el [diálogo de aprobación de seguridad](/docs/es/server-managed-settings#security-approval-dialogs) junto con las otras configuraciones que ejecutan ejecutables suministrados por el administrador.

102 101 

103 La configuración de proyecto y local no puede configurar el lanzador. Un archivo confirmado en un repositorio no debe poder poner un binario frente a cada proceso de Claude Code en la máquina, por lo que Claude Code ignora `CLAUDE_CODE_PROCESS_WRAPPER` en `.claude/settings.json` o `.claude/settings.local.json` con una advertencia en el [registro de depuración](/docs/es/troubleshooting), y nunca lee la clave `processWrapper` de esos archivos.102 La configuración de proyecto y local no puede configurar el lanzador. Un archivo confirmado en un repositorio no debe poder poner un binario delante de cada proceso de Claude Code en la máquina, por lo que Claude Code ignora `CLAUDE_CODE_PROCESS_WRAPPER` en `.claude/settings.json` o `.claude/settings.local.json` con una advertencia en el [registro de depuración](/docs/es/troubleshooting), y nunca lee la clave `processWrapper` de esos archivos.

104 </Step>103 </Step>

105 104 

106 <Step title="Reiniciar el servicio de fondo y sus sesiones">105 <Step title="Reiniciar el servicio en segundo plano y tus sesiones">

107 Un servicio de fondo en ejecución y cualquier sesión `claude` abierta leen la variable una vez al inicio, por lo que continúan lanzando procesos sin envolver hasta que se reinician. Ejecute `claude daemon stop --any` para detener el servicio bajo demanda; el siguiente comando que lo necesite, como `claude agents`, inicia uno envuelto. Un [servicio instalado](/docs/es/agent-view#the-supervisor-process) toma `claude daemon stop` sin `--any`. Luego reinicie sus sesiones `claude` abiertas.106 Un servicio en segundo plano en ejecución y cualquier sesión `claude` abierta leen la variable una vez al inicio, por lo que continúan lanzando procesos sin envolver hasta que se reinician. Ejecuta `claude daemon stop --any` para detener el servicio bajo demanda. El siguiente comando que lo necesite, como `claude agents`, inicia uno envuelto. Luego reinicia tus sesiones `claude` abiertas.

108 107 

109 En máquinas que no puede reiniciar manualmente, la primera sesión iniciada después del empuje de configuración retira automáticamente un servicio bajo demanda sin envolver restante. Una máquina donde no se inicia ninguna sesión nueva mantiene su servicio sin envolver hasta que lo haga, y un servicio instalado siempre necesita el reinicio en este paso.108 En las máquinas que no puedes reiniciar tú mismo, la primera sesión iniciada después de enviar la configuración retira automáticamente cualquier servicio bajo demanda sin envolver que haya quedado. Una máquina donde no se inicia ninguna sesión nueva mantiene su servicio en segundo plano sin envolver hasta que se inicie una.

110 </Step>109 </Step>

111 110 

112 <Step title="Verificar">111 <Step title="Verificar">

113 Ejecute `/status` en una sesión: la entrada Self-exec muestra el comando de lanzamiento resuelto y advierte cuando el servicio de fondo en ejecución no coincide con él. `claude daemon status` imprime la misma información desde el shell, incluido después de que desestablezca la variable, cuando `/status` ya no muestra la entrada.112 Ejecuta `/status` en una sesión: la entrada Self-exec muestra el comando de lanzamiento resuelto y advierte cuando el servicio en segundo plano en ejecución no coincide con él. `claude daemon status` imprime la misma información desde el shell, incluso después de que elimines la variable, cuando `/status` ya no muestra la entrada.

114 </Step>113 </Step>

115</Steps>114</Steps>

116 115 

Details

142 142 

143Una sesión responde al nombre que estableces con el comando [`/rename`](/docs/es/commands) o la bandera [`--name`](/docs/es/cli-reference#cli-flags). Cuando no estableces uno, Claude Code nombra la sesión en sí. Para una sesión interactiva, ese es el nombre mostrado en [listados de sesiones en ejecución](/docs/es/sessions#name-your-sessions).143Una sesión responde al nombre que estableces con el comando [`/rename`](/docs/es/commands) o la bandera [`--name`](/docs/es/cli-reference#cli-flags). Cuando no estableces uno, Claude Code nombra la sesión en sí. Para una sesión interactiva, ese es el nombre mostrado en [listados de sesiones en ejecución](/docs/es/sessions#name-your-sessions).

144 144 

145Cuando renombras una sesión, o inicias o reanudas una interactiva, con un nombre que otra sesión activa en esta máquina ya usa, Claude Code deja el nombre con la sesión que ya lo tiene y [renombra el tuyo a una variante](/docs/es/sessions#name-your-sessions). Las sesiones aún pueden compartir un nombre, por ejemplo cuando una de ellas ejecuta una versión anterior de Claude Code o el nombre compartido es uno que Claude Code generó. A menos que esta sesión esté conectada a Control Remoto, Claude Code muestra el directorio de trabajo de cada sesión local en la salida `/list-agents`, para que puedas distinguir sesiones con el mismo nombre cuando se ejecutan en directorios diferentes. Claude dirige el mensaje de una de dos maneras, dependiendo de cuántas sesiones activas respondan al nombre:145A menos que esta sesión esté conectada a Remote Control, Claude Code muestra el directorio de trabajo de cada sesión local en la salida `/list-agents`, para que puedas distinguir sesiones con el mismo nombre cuando se ejecutan en directorios diferentes. Claude dirige el mensaje de una de dos maneras, dependiendo de cuántas sesiones activas respondan al nombre:

146 146 

147* **Una sesión responde al nombre**: Claude Code entrega el mensaje solo en el nombre.147* **Una sesión responde al nombre**: Claude Code entrega el mensaje solo en el nombre.

148* **Varias sesiones comparten el nombre, o Claude Code no pudo verificar en todas partes donde se ejecutan tus sesiones**: Claude agrega un identificador corto a cada fila de su listado y usa el identificador en la dirección.148* **Varias sesiones comparten el nombre, o Claude Code no pudo verificar en todas partes donde se ejecutan tus sesiones**: Claude agrega un identificador corto a cada fila de su listado y usa el identificador en la dirección.

desktop.md +30 −4

Details

400 400 

401Para ver dos sesiones a la vez, mantén presionado **Cmd** en macOS o **Ctrl** en Windows y haz clic en una sesión en la barra lateral. La sesión se abre en un segundo panel junto al que ya tienes abierto. Mientras la división está activa, hacer clic en otra sesión de la barra lateral reemplaza el panel que tenga el foco. Presiona **Cmd+\\** en macOS o **Ctrl+\\** en Windows para cerrar el panel enfocado y volver a una única sesión.401Para ver dos sesiones a la vez, mantén presionado **Cmd** en macOS o **Ctrl** en Windows y haz clic en una sesión en la barra lateral. La sesión se abre en un segundo panel junto al que ya tienes abierto. Mientras la división está activa, hacer clic en otra sesión de la barra lateral reemplaza el panel que tenga el foco. Presiona **Cmd+\\** en macOS o **Ctrl+\\** en Windows para cerrar el panel enfocado y volver a una única sesión.

402 402 

403Los worktrees se almacenan en `<project-root>/.claude/worktrees/` de forma predeterminada. Puedes cambiar esto a un directorio personalizado en Configuración → Claude Code bajo "Worktree location". También puedes establecer un prefijo de rama que se antepone a cada nombre de rama de worktree, lo que es útil para mantener organizadas las ramas creadas por Claude. Para eliminar un worktree cuando hayas terminado, pasa el cursor sobre la sesión en la barra lateral y haz clic en el icono de archivar. Para que las sesiones se archiven automáticamente cuando su pull request se fusione o se cierre, activa **Auto-archive after PR merge or close** en Configuración → Claude Code. Auto-archive solo se aplica a sesiones locales que han terminado de ejecutarse.403Los worktrees se almacenan en `<project-root>/.claude/worktrees/` de forma predeterminada. Puedes cambiar esto a un directorio personalizado:

404 404 

405Para incluir archivos ignorados por git como `.env` en nuevos worktrees, crea un [archivo `.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) en la raíz de tu proyecto.405* **Sesiones locales**: establece **Worktree location** en **Configuración > Claude Code**

406* **Sesiones SSH**: establece **Worktree folder** en la [conexión SSH](#choose-where-ssh-session-worktrees-go)

407 

408También puedes establecer un **Branch prefix** en **Configuración > Claude Code**. Desktop lo antepone a cada nombre de rama de worktree, lo que es útil para mantener organizadas las ramas creadas por Claude.

409 

410Para eliminar un worktree cuando hayas terminado, pasa el cursor sobre la sesión en la barra lateral y haz clic en el icono de archivar. Para que las sesiones se archiven automáticamente cuando su pull request se fusione o se cierre, activa **Auto-archive after PR merge or close** en **Configuración > Claude Code**. Auto-archive solo se aplica a sesiones locales que han terminado de ejecutarse.

411 

412Para incluir archivos ignorados por git como `.env` en nuevos worktrees, crea un [archivo `.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) en la raíz de tu proyecto. Consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout) para saber de dónde lee una sesión de worktree la configuración del proyecto, los hooks y los skills.

406 413 

407<Note>414<Note>

408 El aislamiento de sesión requiere [Git](https://git-scm.com/downloads). La mayoría de las Macs incluyen Git de forma predeterminada. Ejecuta `git --version` en Terminal para verificarlo; si imprime un número de versión, Git está instalado. Si encuentras errores de Git, pide ayuda a Claude en la [pestaña Cowork](https://claude.com/product/cowork) para solucionar problemas de tu configuración.415 El aislamiento de sesión requiere [Git](https://git-scm.com/downloads). La mayoría de las Macs incluyen Git de forma predeterminada. Ejecuta `git --version` en Terminal para verificarlo; si imprime un número de versión, Git está instalado. Si encuentras errores de Git, pide ayuda a Claude en la [pestaña Cowork](https://claude.com/product/cowork) para solucionar problemas de tu configuración.


811* **SSH host**: `user@hostname` o un host definido en `~/.ssh/config`818* **SSH host**: `user@hostname` o un host definido en `~/.ssh/config`

812* **SSH port**: por defecto es 22 si se deja vacío, o usa el puerto de tu configuración SSH819* **SSH port**: por defecto es 22 si se deja vacío, o usa el puerto de tu configuración SSH

813* **SSH key (optional)**: ruta a tu clave privada, como `~/.ssh/id_ed25519`. Déjalo vacío para usar tu configuración SSH o tu agente SSH.820* **SSH key (optional)**: ruta a tu clave privada, como `~/.ssh/id_ed25519`. Déjalo vacío para usar tu configuración SSH o tu agente SSH.

821* **Worktree folder**: una carpeta en la máquina remota, como `~/worktrees`, donde las nuevas sesiones crean sus worktrees. Déjalo vacío para usar el [valor predeterminado de la máquina remota](#choose-where-ssh-session-worktrees-go).

814 822 

815Una vez agregada, la conexión aparece en **SSH** en el menú desplegable de entorno. Selecciónala para iniciar una sesión en esa máquina. Claude se ejecuta en la máquina remota con acceso a sus archivos y herramientas.823Una vez agregada, la conexión aparece en **SSH** en el menú desplegable de entorno. Selecciónala para iniciar una sesión en esa máquina. Claude se ejecuta en la máquina remota con acceso a sus archivos y herramientas.

816 824 

817La máquina remota debe ejecutar Linux o macOS. La aplicación de escritorio instala Claude Code en la máquina remota automáticamente la primera vez que se conecta. Una vez conectado, las sesiones SSH admiten modos de permisos, conectores, plugins y servidores MCP.825La máquina remota debe ejecutar Linux o macOS. La aplicación de escritorio instala Claude Code en la máquina remota automáticamente la primera vez que se conecta. Una vez conectado, las sesiones SSH admiten modos de permisos, conectores, plugins y servidores MCP.

818 826 

827<h4 id="choose-where-ssh-session-worktrees-go">

828 Elegir dónde van los worktrees de las sesiones SSH

829</h4>

830 

831A menos que tu organización restrinja qué carpetas pueden usar las sesiones, las nuevas sesiones SSH crean sus [worktrees](#work-in-parallel-with-sessions) en la primera de estas opciones que esté establecida:

832 

8331. **Worktree folder** en la conexión SSH

8342. [`worktree.location`](/docs/es/settings-reference#worktree-location) en `~/.claude/settings.json` en la máquina remota

8353. `<project-root>/.claude/worktrees/`, el valor predeterminado

836 

837Cada proyecto obtiene su propia subcarpeta en la carpeta que establezcas, por lo que con `~/worktrees` la ruta de un worktree es `~/worktrees/<project>-<id>/<worktree-name>`. Si la carpeta que estableces está dentro del proyecto, Desktop la ignora para ese proyecto y usa el valor predeterminado.

838 

839Para establecer **Worktree folder** en una conexión que agregaste antes o en una que administra tu organización, pasa el cursor sobre ella en el menú desplegable de entorno y haz clic en el icono de engranaje.

840 

841El campo requiere Claude Desktop v1.44121.0 o posterior. Si tu organización restringe qué carpetas pueden usar las sesiones, Desktop oculta el campo y mantiene los worktrees dentro del proyecto.

842 

819<h4 id="open-an-ssh-session-from-a-link">843<h4 id="open-an-ssh-session-from-a-link">

820 Abrir una sesión SSH desde un enlace844 Abrir una sesión SSH desde un enlace

821</h4>845</h4>


869 Pre-configurar conexiones SSH para su equipo893 Pre-configurar conexiones SSH para su equipo

870</h4>894</h4>

871 895 

872Los administradores pueden distribuir conexiones SSH a los miembros del equipo estableciendo `sshConfigs` en la [configuración administrada](/docs/es/managed-settings). Las conexiones definidas de esta manera aparecen en el menú desplegable de entorno de cada usuario automáticamente y se muestran como administradas, por lo que los usuarios pueden seleccionarlas pero no pueden editarlas ni eliminarlas en la aplicación.896Los administradores pueden distribuir conexiones SSH a los miembros del equipo estableciendo `sshConfigs` en la [configuración administrada](/docs/es/managed-settings). Las conexiones definidas de esta manera aparecen en el menú desplegable de entorno de cada usuario automáticamente y se muestran como administradas. Los usuarios pueden seleccionarlas y [establecer su propio **Worktree folder**](#choose-where-ssh-session-worktrees-go) para ellas, pero no pueden editar nada más ni eliminarlas en la aplicación.

873 897 

874El siguiente ejemplo pre-configura una única conexión:898El siguiente ejemplo pre-configura una única conexión:

875 899 


935 El formulario de OpenTelemetry para Cowork bajo **Monitoring** en la [configuración de datos y privacidad](https://claude.ai/admin-settings/data-privacy-controls) de la consola de administración se aplica solo a sesiones de Cowork. En una sesión de Cowork en esta máquina, la aplicación de escritorio pasa ese recopilador a Claude Code como variables de entorno `OTEL_*`, por lo que el formulario tiene efecto aunque Claude Code en esa sesión [nunca obtiene la configuración de la consola de administración](#managed-settings).959 El formulario de OpenTelemetry para Cowork bajo **Monitoring** en la [configuración de datos y privacidad](https://claude.ai/admin-settings/data-privacy-controls) de la consola de administración se aplica solo a sesiones de Cowork. En una sesión de Cowork en esta máquina, la aplicación de escritorio pasa ese recopilador a Claude Code como variables de entorno `OTEL_*`, por lo que el formulario tiene efecto aunque Claude Code en esa sesión [nunca obtiene la configuración de la consola de administración](#managed-settings).

936 960 

937 Para exportar telemetría desde sesiones de la pestaña Code, establece `CLAUDE_CODE_ENABLE_TELEMETRY` y las variables `OTEL_*` en el bloque `env` de tu configuración administrada de Claude Code, como se muestra en [configuración de administrador para monitoreo](/docs/es/monitoring-usage#administrator-configuration). Las sesiones locales, en la nube y SSH leen [configuración administrada desde diferentes fuentes](#managed-settings). Para los hosts que una sesión en la nube puede alcanzar, consulta [acceso a la red](/docs/es/cloud-environments#network-access). Para el `service.name` que las sesiones de la pestaña Code reportan, consulta [información de servicio](/docs/es/monitoring-usage#service-information).961 Para exportar telemetría desde sesiones de la pestaña Code, establece `CLAUDE_CODE_ENABLE_TELEMETRY` y las variables `OTEL_*` en el bloque `env` de tu configuración administrada de Claude Code, como se muestra en [configuración de administrador para monitoreo](/docs/es/monitoring-usage#administrator-configuration). Las sesiones locales, en la nube y SSH leen [configuración administrada desde diferentes fuentes](#managed-settings). Para los hosts que una sesión en la nube puede alcanzar, consulta [acceso a la red](/docs/es/cloud-environments#network-access). Para el `service.name` que las sesiones de la pestaña Code reportan, consulta [información de servicio](/docs/es/monitoring-usage#service-information).

962 

963 Para saber en qué máquina remota se ejecutó una sesión SSH, consulta [Atribuir telemetría a sesiones SSH de Desktop](/docs/es/monitoring-usage#attribute-telemetry-to-desktop-ssh-sessions).

938</Note>964</Note>

939 965 

940<h3 id="managed-settings">966<h3 id="managed-settings">


951| `browserExternalPageTools` | establécelo en `"disabled"` para evitar que Claude use herramientas para leer o actuar en páginas externas en el [panel del navegador](#browse-external-sites). Los usuarios aún pueden navegar a sitios externos por sí mismos, y las vistas previas del servidor de desarrollo local no se ven afectadas. |977| `browserExternalPageTools` | establécelo en `"disabled"` para evitar que Claude use herramientas para leer o actuar en páginas externas en el [panel del navegador](#browse-external-sites). Los usuarios aún pueden navegar a sitios externos por sí mismos, y las vistas previas del servidor de desarrollo local no se ven afectadas. |

952| `disableMobileSimulatorTools` | establécelo en `true` para bloquear las herramientas de Claude para controlar y capturar dispositivos en el [panel del simulador de iOS](/docs/es/desktop-ios-simulator#turn-off-simulator-access). El panel permanece utilizable para los toques del usuario; solo se elimina el acceso de Claude. El valor debe ser el booleano JSON `true`; la cadena `"true"` se ignora. |978| `disableMobileSimulatorTools` | establécelo en `true` para bloquear las herramientas de Claude para controlar y capturar dispositivos en el [panel del simulador de iOS](/docs/es/desktop-ios-simulator#turn-off-simulator-access). El panel permanece utilizable para los toques del usuario; solo se elimina el acceso de Claude. El valor debe ser el booleano JSON `true`; la cadena `"true"` se ignora. |

953| `disableBrowserExternalNavigation` | establécelo en `true` para desactivar completamente la navegación externa en el [panel del navegador](#browse-external-sites). Ni los usuarios ni Claude pueden navegar a sitios externos, y las vistas previas del servidor de desarrollo localhost no se ven afectadas. El valor debe ser el booleano JSON `true`; la cadena `"true"` se ignora. |979| `disableBrowserExternalNavigation` | establécelo en `true` para desactivar completamente la navegación externa en el [panel del navegador](#browse-external-sites). Ni los usuarios ni Claude pueden navegar a sitios externos, y las vistas previas del servidor de desarrollo localhost no se ven afectadas. El valor debe ser el booleano JSON `true`; la cadena `"true"` se ignora. |

954| `sshConfigs` | preconfigura [conexiones SSH](#pre-configure-ssh-connections-for-your-team) que aparecen en el menú desplegable de entorno. Los usuarios no pueden editar ni eliminar conexiones administradas. |980| `sshConfigs` | preconfigura [conexiones SSH](#pre-configure-ssh-connections-for-your-team) que aparecen en el menú desplegable de entorno. Los usuarios no pueden eliminar conexiones administradas ni editar nada excepto su propia **Worktree folder**. |

955| `sshHostAllowlist` | restringe las [sesiones SSH](#restrict-which-ssh-hosts-users-can-connect-to) a hosts cuyo nombre de host resuelto coincida con uno de estos patrones. Se lee solo desde la configuración administrada. |981| `sshHostAllowlist` | restringe las [sesiones SSH](#restrict-which-ssh-hosts-users-can-connect-to) a hosts cuyo nombre de host resuelto coincida con uno de estos patrones. Se lee solo desde la configuración administrada. |

956| `disableDesktopLocalSessions` | establécelo en `true` para desactivar las [sesiones de Code que se ejecutan en el dispositivo](#local-sessions-on-managed-devices), dejando disponibles las sesiones SSH a otros hosts y las sesiones en la nube. El valor debe ser el booleano JSON `true`. Se lee solo desde la configuración administrada. Requiere Claude Desktop v1.37937.0 o posterior. |982| `disableDesktopLocalSessions` | establécelo en `true` para desactivar las [sesiones de Code que se ejecutan en el dispositivo](#local-sessions-on-managed-devices), dejando disponibles las sesiones SSH a otros hosts y las sesiones en la nube. El valor debe ser el booleano JSON `true`. Se lee solo desde la configuración administrada. Requiere Claude Desktop v1.37937.0 o posterior. |

957| `disableSshSavedPasswords` | establécelo en `true` para que Desktop deje de ofrecer recordar las contraseñas SSH y deje de usar o mostrar las que guardó anteriormente. Activarlo no las elimina. Se lee solo desde la configuración administrada. Requiere Claude Desktop v1.49585.0 o posterior. |983| `disableSshSavedPasswords` | establécelo en `true` para que Desktop deje de ofrecer recordar las contraseñas SSH y deje de usar o mostrar las que guardó anteriormente. Activarlo no las elimina. Se lee solo desde la configuración administrada. Requiere Claude Desktop v1.49585.0 o posterior. |

env-vars.md +5 −5

Details

210| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Establécela en `1` para omitir el prefijo `mcp__<server>__` en los nombres de las herramientas de los servidores MCP creados con el SDK. Las herramientas usan sus nombres originales. Solo para uso con el SDK |210| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Establécela en `1` para omitir el prefijo `mcp__<server>__` en los nombres de las herramientas de los servidores MCP creados con el SDK. Las herramientas usan sus nombres originales. Solo para uso con el SDK |

211| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Tiempo de espera por estancamiento en milisegundos para los subagentes. También abarca los [agentes de flujos de trabajo](/docs/es/workflows#when-an-agent-stalls-and-restarts) en Claude Code v2.1.286 o posterior. Predeterminado `600000` (10 minutos); si aumentas `CLAUDE_STREAM_IDLE_TIMEOUT_MS` mientras el watchdog de streaming está activado, el valor predeterminado aumenta con él, como describe [Manejar respuestas de la API lentas o estancadas](/docs/es/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |211| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Tiempo de espera por estancamiento en milisegundos para los subagentes. También abarca los [agentes de flujos de trabajo](/docs/es/workflows#when-an-agent-stalls-and-restarts) en Claude Code v2.1.286 o posterior. Predeterminado `600000` (10 minutos); si aumentas `CLAUDE_STREAM_IDLE_TIMEOUT_MS` mientras el watchdog de streaming está activado, el valor predeterminado aumenta con él, como describe [Manejar respuestas de la API lentas o estancadas](/docs/es/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |

212| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Establece el porcentaje (1-100) de la ventana de compactación automática en el que se activa la compactación automática. Usa valores más bajos como `50` para compactar antes; la variable no puede aumentar el umbral, por lo que se ignoran los valores superiores al porcentaje predeterminado. Solo se aplica en sesiones que [compactan antes del límite de contexto del modelo](/docs/es/model-config#context-window-and-auto-compaction). Se aplica tanto a las conversaciones principales como a los subagentes |212| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Establece el porcentaje (1-100) de la ventana de compactación automática en el que se activa la compactación automática. Usa valores más bajos como `50` para compactar antes; la variable no puede aumentar el umbral, por lo que se ignoran los valores superiores al porcentaje predeterminado. Solo se aplica en sesiones que [compactan antes del límite de contexto del modelo](/docs/es/model-config#context-window-and-auto-compaction). Se aplica tanto a las conversaciones principales como a los subagentes |

213| `CLAUDE_AUTO_BACKGROUND_TASKS` | Establécela en `1` para forzar la activación del paso automático a segundo plano de las tareas de agente de larga duración. Cuando está activada, los subagentes pasan a segundo plano después de ejecutarse durante aproximadamente dos minutos. También activa el [paso automático a segundo plano de las llamadas largas a herramientas MCP](/docs/es/mcp#automatic-backgrounding-of-long-tool-calls) en modo no interactivo en Claude Code v2.1.212 o posterior |213| `CLAUDE_AUTO_BACKGROUND_TASKS` | Establécela en `1` para forzar la activación del paso automático a segundo plano de las tareas de agente de larga duración. Cuando está activada, un [subagente](/docs/es/sub-agents#run-subagents-in-foreground-or-background) pasa a segundo plano después de ejecutarse durante aproximadamente dos minutos. Si Claude puso en cola una llamada a herramienta, como una edición de archivo, detrás del subagente, el subagente termina en primer plano antes de que esa llamada comience. También activa el [paso automático a segundo plano de llamadas largas a herramientas MCP](/docs/es/mcp#automatic-backgrounding-of-long-tool-calls) en modo no interactivo en Claude Code v2.1.212 o posterior |

214| `CLAUDE_AX_PREPARK_MS` | En el [modo de lector de pantalla](/docs/es/accessibility), cuántos milisegundos espera Claude Code antes de escribir una línea nueva o modificada. Predeterminado `0`, por lo que Claude Code no espera. Antes de v2.1.287, el valor predeterminado era `50`. Claude Code limita la espera a `5000`. Requiere Claude Code v2.1.233 o posterior |214| `CLAUDE_AX_PREPARK_MS` | En el [modo de lector de pantalla](/docs/es/accessibility), cuántos milisegundos espera Claude Code antes de escribir una línea nueva o modificada. Predeterminado `0`, por lo que Claude Code no espera. Antes de v2.1.287, el valor predeterminado era `50`. Claude Code limita la espera a `5000`. Requiere Claude Code v2.1.233 o posterior |

215| `CLAUDE_AX_SCREEN_READER` | Establécela en `1` para generar una salida compatible con lectores de pantalla: texto plano sin bordes decorativos ni animaciones. Establécela en `0` para forzar la desactivación del modo de lector de pantalla incluso cuando [`axScreenReader`](/docs/es/settings-reference#axscreenreader) es `true`. El flag [`--ax-screen-reader`](/docs/es/cli-reference#cli-flags) tiene precedencia. Requiere Claude Code v2.1.181 o posterior |215| `CLAUDE_AX_SCREEN_READER` | Establécela en `1` para generar una salida compatible con lectores de pantalla: texto plano sin bordes decorativos ni animaciones. Establécela en `0` para forzar la desactivación del modo de lector de pantalla incluso cuando [`axScreenReader`](/docs/es/settings-reference#axscreenreader) es `true`. El flag [`--ax-screen-reader`](/docs/es/cli-reference#cli-flags) tiene precedencia. Requiere Claude Code v2.1.181 o posterior |

216| `CLAUDE_AX_STARTUP_QUIET_MS` | En el [modo de lector de pantalla](/docs/es/accessibility), cuántos milisegundos retiene Claude Code el primer renderizado de la interfaz después de la línea de confirmación de inicio, para que tu lector de pantalla pueda leer la línea completa antes de que una nueva salida la interrumpa. Predeterminado `3000`. Establece `0` para renderizar de inmediato. Claude Code limita la retención a `600000` (10 minutos). Tu primera pulsación de tecla termina la retención antes de tiempo. Requiere Claude Code v2.1.217 o posterior |216| `CLAUDE_AX_STARTUP_QUIET_MS` | En el [modo de lector de pantalla](/docs/es/accessibility), cuántos milisegundos retiene Claude Code el primer renderizado de la interfaz después de la línea de confirmación de inicio, para que tu lector de pantalla pueda leer la línea completa antes de que una nueva salida la interrumpa. Predeterminado `3000`. Establece `0` para renderizar de inmediato. Claude Code limita la retención a `600000` (10 minutos). Tu primera pulsación de tecla termina la retención antes de tiempo. Requiere Claude Code v2.1.217 o posterior |


285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Establécela en `1` para desactivar el [cambio automático de modelo cuando un clasificador de seguridad marca una solicitud](/docs/es/model-config#automatic-model-fallback), el comportamiento que controla el ajuste [`switchModelsOnFlag`](/docs/es/settings-reference#switchmodelsonflag) |285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Establécela en `1` para desactivar el [cambio automático de modelo cuando un clasificador de seguridad marca una solicitud](/docs/es/model-config#automatic-model-fallback), el comportamiento que controla el ajuste [`switchModelsOnFlag`](/docs/es/settings-reference#switchmodelsonflag) |

286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Establécela en `1` para que Claude Code deje de enviar el campo de salida estructurada `output_config.format` y el valor de `anthropic-beta` que lo acompaña, para un [gateway de LLM](/docs/es/llm-gateway-protocol#feature-pass-through) cuyo servicio ascendente los rechaza. Esto deja activadas las demás capacidades preliminares que [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities) desactiva. Requiere Claude Code v2.1.288 o posterior |286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Establécela en `1` para que Claude Code deje de enviar el campo de salida estructurada `output_config.format` y el valor de `anthropic-beta` que lo acompaña, para un [gateway de LLM](/docs/es/llm-gateway-protocol#feature-pass-through) cuyo servicio ascendente los rechaza. Esto deja activadas las demás capacidades preliminares que [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities) desactiva. Requiere Claude Code v2.1.288 o posterior |

287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Establécela en `1` para desactivar la comprobación de [rutas críticas](/docs/es/permission-modes#critical-paths) para un `rm` recursivo cuyo destino es completamente la salida de una sustitución de comandos, como `rm -rf "$(pwd)"`. Las demás comprobaciones de rutas críticas se siguen ejecutando. Establécela en el entorno que inicia Claude Code, ya que Claude Code ignora una copia entregada mediante un bloque `env` de la configuración. Requiere Claude Code v2.1.281 o posterior |287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Establécela en `1` para desactivar la comprobación de [rutas críticas](/docs/es/permission-modes#critical-paths) para un `rm` recursivo cuyo destino es completamente la salida de una sustitución de comandos, como `rm -rf "$(pwd)"`. Las demás comprobaciones de rutas críticas se siguen ejecutando. Establécela en el entorno que inicia Claude Code, ya que Claude Code ignora una copia entregada mediante un bloque `env` de la configuración. Requiere Claude Code v2.1.281 o posterior |

288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Establécela en `1` para desactivar las actualizaciones automáticas del título de la terminal según el contexto de la conversación. Esto también omite la solicitud en segundo plano al modelo pequeño/rápido que [genera un título para la sesión](/docs/es/sessions#name-your-sessions) |288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Establécela en `1` para desactivar las actualizaciones automáticas del título de la terminal basadas en el contexto de la conversación. Esto también omite la solicitud en segundo plano al modelo pequeño/rápido que [genera un título de sesión](/docs/es/sessions#name-your-sessions), y desactiva los [informes de estado a tu terminal](/docs/es/terminal-config#see-session-status-in-your-terminal) |

289| `CLAUDE_CODE_DISABLE_THINKING` | Establécela en `1` para omitir por completo el parámetro `thinking` de las solicitudes a la API. Es una opción de compatibilidad para proxies y gateways que rechazan el parámetro. En los modelos que piensan de forma predeterminada, omitir el parámetro significa que el modelo puede seguir pensando. Para desactivar explícitamente el [pensamiento extendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) en la API de Anthropic, usa `MAX_THINKING_TOKENS=0` en su lugar. Ninguna de las dos variables desactiva el pensamiento en Opus 5.5, Sonnet 5.5, Haiku 5.5 ni en los modelos Fable, en los que no se puede desactivar el pensamiento. En [proveedores de terceros](/docs/es/third-party-integrations), `MAX_THINKING_TOKENS=0` también omite el parámetro, por lo que allí ambas variables se comportan igual |289| `CLAUDE_CODE_DISABLE_THINKING` | Establécela en `1` para omitir por completo el parámetro `thinking` de las solicitudes a la API. Es una opción de compatibilidad para proxies y gateways que rechazan el parámetro. En los modelos que piensan de forma predeterminada, omitir el parámetro significa que el modelo puede seguir pensando. Para desactivar explícitamente el [pensamiento extendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) en la API de Anthropic, usa `MAX_THINKING_TOKENS=0` en su lugar. Ninguna de las dos variables desactiva el pensamiento en Opus 5.5, Sonnet 5.5, Haiku 5.5 ni en los modelos Fable, en los que no se puede desactivar el pensamiento. En [proveedores de terceros](/docs/es/third-party-integrations), `MAX_THINKING_TOKENS=0` también omite el parámetro, por lo que allí ambas variables se comportan igual |

290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Establécela en `1` para omitir la [compactación automática](/docs/es/costs#reduce-token-usage) proactiva cuando Claude Code no reconoce el ID del modelo, como un alias de un [gateway de LLM](/docs/es/llm-gateway). Sin esta variable, Claude Code compacta según la ventana de contexto que asume para el ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` puede corregir en su lugar la ventana asumida; consulta [Corregir la ventana para un gateway o un ID de modelo personalizado](/docs/es/model-config#correct-the-window-for-a-gateway-or-custom-model-id) para saber cuándo se aplica cada variable. Requiere Claude Code v2.1.223 o posterior |290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Establécela en `1` para omitir la [compactación automática](/docs/es/costs#reduce-token-usage) proactiva cuando Claude Code no reconoce el ID del modelo, como un alias de un [gateway de LLM](/docs/es/llm-gateway). Sin esta variable, Claude Code compacta según la ventana de contexto que asume para el ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` puede corregir en su lugar la ventana asumida; consulta [Corregir la ventana para un gateway o un ID de modelo personalizado](/docs/es/model-config#correct-the-window-for-a-gateway-or-custom-model-id) para saber cuándo se aplica cada variable. Requiere Claude Code v2.1.223 o posterior |

291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Establécela en `1` para desactivar el desplazamiento virtual en el [renderizado a pantalla completa](/docs/es/fullscreen) y renderizar todos los mensajes de la transcripción. Úsala si al desplazarte en el modo de pantalla completa aparecen regiones en blanco donde deberían aparecer mensajes |291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Establécela en `1` para desactivar el desplazamiento virtual en el [renderizado a pantalla completa](/docs/es/fullscreen) y renderizar todos los mensajes de la transcripción. Úsala si al desplazarte en el modo de pantalla completa aparecen regiones en blanco donde deberían aparecer mensajes |


309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tiempo en milisegundos que se espera después de que el bucle de consultas queda inactivo antes de salir automáticamente. Útil para flujos de trabajo automatizados y scripts que usan el modo SDK |309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tiempo en milisegundos que se espera después de que el bucle de consultas queda inactivo antes de salir automáticamente. Útil para flujos de trabajo automatizados y scripts que usan el modo SDK |

310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Establécela en `1` para habilitar los [equipos de agentes](/docs/es/agent-teams). Los equipos de agentes son experimentales y están deshabilitados de forma predeterminada |310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Establécela en `1` para habilitar los [equipos de agentes](/docs/es/agent-teams). Los equipos de agentes son experimentales y están deshabilitados de forma predeterminada |

311| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON que se combina con el nivel superior del cuerpo de cada solicitud a la API. Útil para pasar parámetros específicos del proveedor que Claude Code no expone directamente. Un valor exportado en tu shell también se aplica a las [sesiones en segundo plano](/docs/es/agent-view) que lanzas con `claude agents` o `--bg`. Antes de la v2.1.206, las sesiones en segundo plano ignoraban un valor exportado en el shell y usaban la copia que hubiera heredado el proceso supervisor en segundo plano |311| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON que se combina con el nivel superior del cuerpo de cada solicitud a la API. Útil para pasar parámetros específicos del proveedor que Claude Code no expone directamente. Un valor exportado en tu shell también se aplica a las [sesiones en segundo plano](/docs/es/agent-view) que lanzas con `claude agents` o `--bg`. Antes de la v2.1.206, las sesiones en segundo plano ignoraban un valor exportado en el shell y usaban la copia que hubiera heredado el proceso supervisor en segundo plano |

312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sobrescribe el límite de tokens predeterminado para la lectura de archivos. Útil cuando necesitas leer archivos más grandes completos |312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sobrescribe el límite de tokens predeterminado para la [lectura de archivos](/docs/es/tools-reference#large-files), que es de 25,000 tokens. Útil cuando necesitas leer archivos más grandes completos. Una lectura que Claude hace con el parámetro `allow_large` puede superar este límite cuando la ventana de contexto tiene espacio |

313| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Establécela en `1` para forzar la persistencia de la transcripción, el historial de prompts y el registro en `claude agents` incluso cuando este `claude` se haya iniciado desde dentro de otra sesión de Claude Code. Úsala cuando un valor heredado de `CLAUDE_CODE_CHILD_SESSION`, por ejemplo de una sesión de `screen` o de un lanzador en segundo plano iniciado por primera vez por la herramienta Bash de Claude Code, haga que una sesión genuina de nivel superior se clasifique erróneamente como anidada. A partir de la v2.1.178, Claude Code detecta automáticamente el caso de tmux e ignora el marcador heredado, por lo que tmux ya no necesita esta variable. También se respeta en la v2.1.169 y anteriores; no tiene efecto en la v2.1.170 ni en la v2.1.171, donde se eliminó la detección de sesiones anidadas que sobrescribe |313| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Establécela en `1` para forzar la persistencia de la transcripción, el historial de prompts y el registro en `claude agents` incluso cuando este `claude` se haya iniciado desde dentro de otra sesión de Claude Code. Úsala cuando un valor heredado de `CLAUDE_CODE_CHILD_SESSION`, por ejemplo de una sesión de `screen` o de un lanzador en segundo plano iniciado por primera vez por la herramienta Bash de Claude Code, haga que una sesión genuina de nivel superior se clasifique erróneamente como anidada. A partir de la v2.1.178, Claude Code detecta automáticamente el caso de tmux e ignora el marcador heredado, por lo que tmux ya no necesita esta variable. También se respeta en la v2.1.169 y anteriores; no tiene efecto en la v2.1.170 ni en la v2.1.171, donde se eliminó la detección de sesiones anidadas que sobrescribe |

314| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Establécela en `1` para forzar la representación tachada de `~~text~~` en las respuestas de Claude cuando tu terminal lo admite pero no se detecta automáticamente, por ejemplo a través de SSH sin reenviar `TERM_PROGRAM`. Sin esto, las terminales no detectadas muestran los marcadores `~~` literales en lugar de representar el texto tachado. Requiere Claude Code v2.1.186 o posterior |314| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Establécela en `1` para forzar la representación tachada de `~~text~~` en las respuestas de Claude cuando tu terminal lo admite pero no se detecta automáticamente, por ejemplo a través de SSH sin reenviar `TERM_PROGRAM`. Sin esto, las terminales no detectadas muestran los marcadores `~~` literales en lugar de representar el texto tachado. Requiere Claude Code v2.1.186 o posterior |

315| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Establécela en `1` para forzar la activación de la [salida sincronizada](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) del modo privado DEC 2026 cuando tu terminal la admite pero no se detecta automáticamente. Útil para emuladores como `eat` de Emacs que implementan BSU/ESU pero no responden a la sonda de capacidades. No tiene efecto bajo tmux. A diferencia de `CLAUDE_CODE_NO_FLICKER`, que cambia a la [representación en pantalla completa](/docs/es/fullscreen), esta no cambia el renderizador |315| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Establécela en `1` para forzar la activación de la [salida sincronizada](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) del modo privado DEC 2026 cuando tu terminal la admite pero no se detecta automáticamente. Útil para emuladores como `eat` de Emacs que implementan BSU/ESU pero no responden a la sonda de capacidades. No tiene efecto bajo tmux. A diferencia de `CLAUDE_CODE_NO_FLICKER`, que cambia a la [representación en pantalla completa](/docs/es/fullscreen), esta no cambia el renderizador |


340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Límite de llamadas a [WebSearch](/docs/es/tools-reference#session-search-limit) (predeterminado: 200). Cuando Claude alcanza el límite, las llamadas posteriores a WebSearch devuelven un aviso que le indica que continúe con la información que ya recopiló. Acepta un número entero positivo sin límite superior. Cualquier otro valor se ignora y se aplica el predeterminado, por lo que el límite se puede aumentar pero no desactivar. Requiere Claude Code v2.1.212 o posterior |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Límite de llamadas a [WebSearch](/docs/es/tools-reference#session-search-limit) (predeterminado: 200). Cuando Claude alcanza el límite, las llamadas posteriores a WebSearch devuelven un aviso que le indica que continúe con la información que ya recopiló. Acepta un número entero positivo sin límite superior. Cualquier otro valor se ignora y se aplica el predeterminado, por lo que el límite se puede aumentar pero no desactivar. Requiere Claude Code v2.1.212 o posterior |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Establécela en `1` para iniciar los servidores MCP stdio solo con un entorno base seguro más el `env` configurado del servidor, en lugar de heredar el entorno de tu shell |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Establécela en `1` para iniciar los servidores MCP stdio solo con un entorno base seguro más el `env` configurado del servidor, en lugar de heredar el entorno de tu shell |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Tiempo transcurrido en milisegundos antes de que una llamada a herramienta MCP que sigue en ejecución [pase a una tarea en segundo plano](/docs/es/mcp#automatic-backgrounding-of-long-tool-calls) (predeterminado: 120000, o 2 minutos). Establécela en `0` para desactivar el paso automático a segundo plano. Requiere Claude Code v2.1.212 o posterior |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Tiempo transcurrido en milisegundos antes de que una llamada a herramienta MCP que sigue en ejecución [pase a una tarea en segundo plano](/docs/es/mcp#automatic-backgrounding-of-long-tool-calls) (predeterminado: 120000, o 2 minutos). Establécela en `0` para desactivar el paso automático a segundo plano. Requiere Claude Code v2.1.212 o posterior |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Cuánto tiempo en milisegundos espera el primer turno de una sesión [no interactiva](/docs/es/headless) a los servidores MCP que todavía se están conectando, en lugar de la [espera del primer turno](/docs/es/agent-sdk/mcp#connection-timing) predeterminada. Cuando se establece, la espera abarca todos los servidores pendientes. Establécela en `0` para omitir la espera. Un servidor de [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags) mantiene su propia espera de `MCP_TIMEOUT` independientemente del valor. Requiere Claude Code v2.1.274 o posterior |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Cuánto tiempo en milisegundos espera el primer turno de una sesión [no interactiva](/docs/es/headless) a los servidores MCP que aún se están conectando, en lugar de la [espera del primer turno](/docs/es/agent-sdk/mcp#connection-timing) predeterminada. Cuando se establece, la espera abarca todos los servidores pendientes; en un [entorno autohospedado](/docs/es/self-hosted-environments-configuration#connection-timing), solo cambia cuánto dura la espera. Establécela en `0` para omitir la espera. Un servidor de [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags) mantiene su propia espera de `MCP_TIMEOUT` independientemente del valor. Requiere Claude Code v2.1.274 o posterior |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Tiempo de espera por inactividad en milisegundos para las llamadas a herramientas MCP. Cuando un servidor MCP stdio, HTTP, SSE, WebSocket o de [conector de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai) no envía ninguna respuesta ni ninguna notificación de progreso durante este tiempo, la llamada a herramienta se aborta con un error en lugar de esperar el `MCP_TOOL_TIMEOUT` general. Sobrescribe los valores predeterminados por transporte de 300000 (5 minutos) para servidores de red y 1800000 (30 minutos) para servidores stdio. Establécela en `0` para deshabilitar la comprobación de inactividad. Los valores inferiores a 1000 se elevan a un segundo, y el valor se limita al `MCP_TOOL_TIMEOUT` efectivo. Un `timeout` por servidor en `.mcp.json` de al menos 1000 eleva la ventana de inactividad de ese servidor a al menos el valor de `timeout`. No se aplica a servidores del IDE ni a servidores en proceso del SDK. Requiere Claude Code v2.1.187 o posterior. Antes de la v2.1.203, los servidores stdio estaban exentos del tiempo de espera por inactividad |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Tiempo de espera por inactividad en milisegundos para las llamadas a herramientas MCP. Cuando un servidor MCP stdio, HTTP, SSE, WebSocket o de [conector de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai) no envía ninguna respuesta ni ninguna notificación de progreso durante este tiempo, la llamada a herramienta se aborta con un error en lugar de esperar el `MCP_TOOL_TIMEOUT` general. Sobrescribe los valores predeterminados por transporte de 300000 (5 minutos) para servidores de red y 1800000 (30 minutos) para servidores stdio. Establécela en `0` para deshabilitar la comprobación de inactividad. Los valores inferiores a 1000 se elevan a un segundo, y el valor se limita al `MCP_TOOL_TIMEOUT` efectivo. Un `timeout` por servidor en `.mcp.json` de al menos 1000 eleva la ventana de inactividad de ese servidor a al menos el valor de `timeout`. No se aplica a servidores del IDE ni a servidores en proceso del SDK. Requiere Claude Code v2.1.187 o posterior. Antes de la v2.1.203, los servidores stdio estaban exentos del tiempo de espera por inactividad |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | La establece Claude Code, no tú: en las sesiones que vinculan un [socket de bandeja de entrada](/docs/es/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporta la ruta de ese socket a los hooks y a los comandos de Bash cuando vincula el socket. En una sesión que se inicia con la mensajería activada, Claude Code vincula el socket antes de que se ejecute cualquier hook. Otras sesiones de la máquina entregan mensajes a esta ruta. Cada sesión exporta su propio socket en lugar de uno heredado de un proceso padre, y los mensajes que llegan a él pasan por los [controles de entrada](/docs/es/cross-session-messaging#control-inbound-messages) de la sesión. Los bloques `env` de la configuración no pueden establecerla. Requiere Claude Code v2.1.224 o posterior |345| `CLAUDE_CODE_MESSAGING_SOCKET` | La establece Claude Code, no tú: en las sesiones que vinculan un [socket de bandeja de entrada](/docs/es/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporta la ruta de ese socket a los hooks y a los comandos de Bash cuando vincula el socket. En una sesión que se inicia con la mensajería activada, Claude Code vincula el socket antes de que se ejecute cualquier hook. Otras sesiones de la máquina entregan mensajes a esta ruta. Cada sesión exporta su propio socket en lugar de uno heredado de un proceso padre, y los mensajes que llegan a él pasan por los [controles de entrada](/docs/es/cross-session-messaging#control-inbound-messages) de la sesión. Los bloques `env` de la configuración no pueden establecerla. Requiere Claude Code v2.1.224 o posterior |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | La establece Claude Code, no tú: en las sesiones que vinculan un [socket de bandeja de entrada](/docs/es/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporta este token por sesión a los hooks y a los comandos de Bash junto con `CLAUDE_CODE_MESSAGING_SOCKET`. Un script que publica en el socket puede enviar `{"type":"auth","token":"<token>"}` como su primera línea para demostrar que pertenece a la sesión. En Windows nativo, Claude Code exige esta línea y cierra cualquier conexión que no comience con una válida. Las [reglas de procesos hijos propios](/docs/es/cross-session-messaging#the-sessions-inbox-socket) indican cuándo consulta Claude Code el token. Cada sesión exporta su propio token, nunca uno heredado de una sesión padre. Los bloques `env` de la configuración no pueden establecerla. Requiere Claude Code v2.1.228 o posterior |346| `CLAUDE_CODE_MESSAGING_TOKEN` | La establece Claude Code, no tú: en las sesiones que vinculan un [socket de bandeja de entrada](/docs/es/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporta este token por sesión a los hooks y a los comandos de Bash junto con `CLAUDE_CODE_MESSAGING_SOCKET`. Un script que publica en el socket puede enviar `{"type":"auth","token":"<token>"}` como su primera línea para demostrar que pertenece a la sesión. En Windows nativo, Claude Code exige esta línea y cierra cualquier conexión que no comience con una válida. Las [reglas de procesos hijos propios](/docs/es/cross-session-messaging#the-sessions-inbox-socket) indican cuándo consulta Claude Code el token. Cada sesión exporta su propio token, nunca uno heredado de una sesión padre. Los bloques `env` de la configuración no pueden establecerla. Requiere Claude Code v2.1.228 o posterior |


443| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Establécelo en `1` para forzar la habilitación del watchdog de inactividad de streaming a nivel de bytes, o en `0` para forzar su deshabilitación. `0` también desactiva el [plazo del primer byte](/docs/es/network-config#streaming-idle-watchdogs) en las conexiones donde se ejecuta ese plazo. Cuando no está establecida, el watchdog está habilitado de forma predeterminada para las conexiones directas a la API de Anthropic y a [Claude Platform on AWS](/docs/es/claude-platform-on-aws), y para las respuestas en streaming en conexiones de [gateway](/docs/es/gateways) a las que se accede mediante `ANTHROPIC_BASE_URL` o `ANTHROPIC_AWS_BASE_URL`; antes de v2.1.222 no se ejecutaba en esas conexiones de gateway, por lo que el watchdog a nivel de eventos podía informar de un bloqueo allí incluso mientras llegaban pings de keep-alive. Para los tiempos de espera y cómo interactúan los temporizadores, consulta [Watchdogs de inactividad de streaming](/docs/es/network-config#streaming-idle-watchdogs) |443| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Establécelo en `1` para forzar la habilitación del watchdog de inactividad de streaming a nivel de bytes, o en `0` para forzar su deshabilitación. `0` también desactiva el [plazo del primer byte](/docs/es/network-config#streaming-idle-watchdogs) en las conexiones donde se ejecuta ese plazo. Cuando no está establecida, el watchdog está habilitado de forma predeterminada para las conexiones directas a la API de Anthropic y a [Claude Platform on AWS](/docs/es/claude-platform-on-aws), y para las respuestas en streaming en conexiones de [gateway](/docs/es/gateways) a las que se accede mediante `ANTHROPIC_BASE_URL` o `ANTHROPIC_AWS_BASE_URL`; antes de v2.1.222 no se ejecutaba en esas conexiones de gateway, por lo que el watchdog a nivel de eventos podía informar de un bloqueo allí incluso mientras llegaban pings de keep-alive. Para los tiempos de espera y cómo interactúan los temporizadores, consulta [Watchdogs de inactividad de streaming](/docs/es/network-config#streaming-idle-watchdogs) |

444| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | Establécelo en `1` para habilitar el watchdog de inactividad de streaming a nivel de bytes en las respuestas `vnd.amazon.eventstream` de Amazon Bedrock, lo que también habilita el [plazo del primer byte](/docs/es/network-config#streaming-idle-watchdogs) en las solicitudes de streaming de Bedrock. Desactivado de forma predeterminada. Configura el tiempo de espera con `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |444| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | Establécelo en `1` para habilitar el watchdog de inactividad de streaming a nivel de bytes en las respuestas `vnd.amazon.eventstream` de Amazon Bedrock, lo que también habilita el [plazo del primer byte](/docs/es/network-config#streaming-idle-watchdogs) en las solicitudes de streaming de Bedrock. Desactivado de forma predeterminada. Configura el tiempo de espera con `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

445| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Establécelo en `0` para forzar la deshabilitación del watchdog de inactividad de streaming a nivel de eventos, o en `1` para forzar su habilitación. Cuando no está establecida, el watchdog está activado de forma predeterminada para todos los proveedores. Antes de v2.1.196, el valor predeterminado sin establecer lo controlaba el servidor en la API directa de Anthropic y estaba desactivado en los demás proveedores. Configura el tiempo de espera con `CLAUDE_STREAM_IDLE_TIMEOUT_MS`; para los otros temporizadores de bloqueo que se ejecutan junto con este, consulta [Watchdogs de inactividad de streaming](/docs/es/network-config#streaming-idle-watchdogs) |445| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Establécelo en `0` para forzar la deshabilitación del watchdog de inactividad de streaming a nivel de eventos, o en `1` para forzar su habilitación. Cuando no está establecida, el watchdog está activado de forma predeterminada para todos los proveedores. Antes de v2.1.196, el valor predeterminado sin establecer lo controlaba el servidor en la API directa de Anthropic y estaba desactivado en los demás proveedores. Configura el tiempo de espera con `CLAUDE_STREAM_IDLE_TIMEOUT_MS`; para los otros temporizadores de bloqueo que se ejecutan junto con este, consulta [Watchdogs de inactividad de streaming](/docs/es/network-config#streaming-idle-watchdogs) |

446| `CLAUDE_ENV_FILE` | Ruta a un script de shell cuyo contenido Claude Code ejecuta antes de cada comando de Bash en el mismo proceso de shell, de modo que las exportaciones del archivo sean visibles para el comando. Úsalo para conservar la activación de virtualenv o conda entre comandos. También lo rellenan dinámicamente los hooks [SessionStart](/docs/es/hooks#persist-environment-variables), [Setup](/docs/es/hooks#setup), [CwdChanged](/docs/es/hooks#cwdchanged) y [FileChanged](/docs/es/hooks#filechanged) |446| `CLAUDE_ENV_FILE` | Ruta a un script de shell cuyo contenido Claude Code ejecuta antes de cada comando de Bash en el mismo proceso de shell, de modo que las exportaciones del archivo sean visibles para el comando. Úsala para conservar la activación de virtualenv o conda entre comandos. Los comandos de PowerShell también reciben sus variables, en v2.1.296 o posterior, bajo las condiciones descritas en [Variables persistentes en comandos de PowerShell](/docs/es/hooks#persisted-variables-in-powershell-commands). También la rellenan dinámicamente los hooks [SessionStart](/docs/es/hooks#persist-environment-variables), [Setup](/docs/es/hooks#setup), [CwdChanged](/docs/es/hooks#cwdchanged) y [FileChanged](/docs/es/hooks#filechanged) |

447| `CLAUDE_JOB_DIR` | Claude Code la establece en cada [sesión en segundo plano](/docs/es/agent-view) con el directorio `~/.claude/jobs/<id>` de esa sesión. Los comandos de shell que ejecuta la sesión la heredan. Escribe los archivos temporales en [`$CLAUDE_JOB_DIR/tmp`](/docs/es/agent-view#where-state-is-stored). Las llamadas `Write` y `Edit` de Claude en ese directorio no piden permiso, y el directorio se elimina cuando se elimina la sesión |447| `CLAUDE_JOB_DIR` | Claude Code la establece en cada [sesión en segundo plano](/docs/es/agent-view) con el directorio `~/.claude/jobs/<id>` de esa sesión. Los comandos de shell que ejecuta la sesión la heredan. Escribe los archivos temporales en [`$CLAUDE_JOB_DIR/tmp`](/docs/es/agent-view#where-state-is-stored). Las llamadas `Write` y `Edit` de Claude en ese directorio no piden permiso, y el directorio se elimina cuando se elimina la sesión |

448| `CLAUDE_PID` | Claude Code la establece con su propio ID de proceso en los subprocesos que genera: los comandos de las herramientas Bash y PowerShell y los comandos de hooks. En Linux, la integración de shell de la herramienta Bash la usa para rechazar un patrón de `pkill` que coincidiría con el propio proceso de Claude Code; consulta [la referencia de errores](/docs/es/errors#pkill-pattern-matches-the-claude-code-process). Léela desde tus propios scripts para identificar deliberadamente el proceso padre de Claude Code o enviarle señales. Requiere Claude Code v2.1.214 o posterior |448| `CLAUDE_PID` | Claude Code la establece con su propio ID de proceso en los subprocesos que genera: los comandos de las herramientas Bash y PowerShell y los comandos de hooks. En Linux, la integración de shell de la herramienta Bash la usa para rechazar un patrón de `pkill` que coincidiría con el propio proceso de Claude Code; consulta [la referencia de errores](/docs/es/errors#pkill-pattern-matches-the-claude-code-process). Léela desde tus propios scripts para identificar deliberadamente el proceso padre de Claude Code o enviarle señales. Requiere Claude Code v2.1.214 o posterior |

449| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefijo para los nombres de sesión de [Remote Control](/docs/es/remote-control) generados automáticamente cuando no se proporciona un nombre explícito. De forma predeterminada es el nombre de host de tu máquina, lo que produce nombres como `myhost-graceful-unicorn`. El flag de CLI `--remote-control-session-name-prefix` establece el mismo valor para una sola invocación |449| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefijo para los nombres de sesión de [Remote Control](/docs/es/remote-control) generados automáticamente cuando no se proporciona un nombre explícito. De forma predeterminada es el nombre de host de tu máquina, lo que produce nombres como `myhost-graceful-unicorn`. El flag de CLI `--remote-control-session-name-prefix` establece el mismo valor para una sola invocación |

errors.md +73 −10

Details

37| `Connection lost while your computer was asleep` | [Reintentos automáticos](#automatic-retries) |37| `Connection lost while your computer was asleep` | [Reintentos automáticos](#automatic-retries) |

38| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |38| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |

39| `Auto mode could not evaluate this action and is blocking it for safety` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |39| `Auto mode could not evaluate this action and is blocking it for safety` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |

40| `Not run · auto mode's check had no usable answer` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |

40| `Auto mode classifier transcript exceeded context window` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |41| `Auto mode classifier transcript exceeded context window` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |

41| `Agent aborted: auto mode classifier request refused by the safety safeguard` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |42| `Agent aborted: auto mode classifier request refused by the safety safeguard` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |

42| `The server-side auto mode classifier gave no verdict` | [Errores del servidor](#the-server-returned-no-safety-verdict) |43| `The server-side auto mode classifier gave no verdict` | [Errores del servidor](#the-server-returned-no-safety-verdict) |


247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Errores de línea de comandos](#windows-reported-an-error-ebadf) |248| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Errores de línea de comandos](#windows-reported-an-error-ebadf) |

248| `Cannot switch renderers in this session` | [Errores de línea de comandos](#cannot-switch-renderers-in-this-session) |249| `Cannot switch renderers in this session` | [Errores de línea de comandos](#cannot-switch-renderers-in-this-session) |

249| `Cannot switch renderers while work is running in the background` | [Errores de línea de comandos](#cannot-switch-renderers-in-this-session) |250| `Cannot switch renderers while work is running in the background` | [Errores de línea de comandos](#cannot-switch-renderers-in-this-session) |

251| `Claude Code couldn't restart` | [Errores de línea de comandos](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |252| `Couldn't open Claude Desktop` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |

251| `Failed to open Claude Desktop. Please try opening it manually.` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |253| `Failed to open Claude Desktop. Please try opening it manually.` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Errores de línea de comandos](#terminal-setup-left-your-zed-keymap-unchanged) |254| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Errores de línea de comandos](#terminal-setup-left-your-zed-keymap-unchanged) |


262| `Marketplace "<name>" is already added from a different source` | [Errores de plugins](#marketplace-is-already-added-from-a-different-source) |264| `Marketplace "<name>" is already added from a different source` | [Errores de plugins](#marketplace-is-already-added-from-a-different-source) |

263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Errores de plugins](#marketplace-name-is-another-spelling-of-a-reserved-name) |265| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Errores de plugins](#marketplace-name-is-another-spelling-of-a-reserved-name) |

264| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |266| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |

267| `Cannot add marketplace "<name>": Claude Code reserves this name and cannot register a marketplace under it` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#claude-code-reserves-this-name) |

265| `Marketplace "<name>" is added but ignored` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#marketplace-is-added-but-ignored) |268| `Marketplace "<name>" is added but ignored` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#marketplace-is-added-but-ignored) |

266| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#marketplace-is-added-but-ignored) |269| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Solución de problemas de plugins](/docs/es/plugins/troubleshooting#marketplace-is-added-but-ignored) |

267| `references ${user_config.*} in a shell-form command` | [Errores de plugins](#plugin-command-references-user-config) |270| `references ${user_config.*} in a shell-form command` | [Errores de plugins](#plugin-command-references-user-config) |


308| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Errores de herramientas](#disk-quota-or-temp-filesystem-is-full) |311| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Errores de herramientas](#disk-quota-or-temp-filesystem-is-full) |

309| `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Errores de herramientas](#disk-quota-or-temp-filesystem-is-full) |312| `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Errores de herramientas](#disk-quota-or-temp-filesystem-is-full) |

310| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Errores de herramientas](#disk-quota-or-temp-filesystem-is-full) |313| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Errores de herramientas](#disk-quota-or-temp-filesystem-is-full) |

314| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Errores de herramientas](#file-is-not-valid-utf-8) |

311| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Errores de herramientas](#the-source-file-is-not-valid-utf-8-text) |315| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Errores de herramientas](#the-source-file-is-not-valid-utf-8-text) |

312| `the source file has the replacement character U+FFFD` | [Errores de herramientas](#the-source-file-is-not-valid-utf-8-text) |316| `the source file has the replacement character U+FFFD` | [Errores de herramientas](#the-source-file-is-not-valid-utf-8-text) |

313| `Not published: that file is on a network share` | [Errores de herramientas](#not-published-that-file-is-on-a-network-share) |317| `Not published: that file is on a network share` | [Errores de herramientas](#not-published-that-file-is-on-a-network-share) |


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Errores de sesión en segundo plano](#session-isnt-responding) |338| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Errores de sesión en segundo plano](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [Errores de sesión en segundo plano](#session-was-stopped-while-the-respawn-was-in-flight) |339| `Session <id> was stopped while the respawn was in flight` | [Errores de sesión en segundo plano](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [Errores de sesión en segundo plano](#session-agent-no-longer-available) |340| `This session was running agent '<name>', which is no longer available` | [Errores de sesión en segundo plano](#session-agent-no-longer-available) |

341| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [Errores de sesión en segundo plano](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Errores de sesión en segundo plano](#claude_code_process_wrapper-launcher-errors) |342| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Errores de sesión en segundo plano](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [Errores de sesión en segundo plano](#eunknown-when-starting-a-background-session) |343| `EUNKNOWN: unknown error, uv_spawn` | [Errores de sesión en segundo plano](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [Errores de sesión en segundo plano](#eacces-when-starting-a-background-session) |344| `EACCES: permission denied, posix_spawn` | [Errores de sesión en segundo plano](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |444| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/es/env-vars) | 10 | Número de reintentos. Limitado a 15 a partir de v2.1.186; a partir de v2.1.199, `CLAUDE_CODE_RETRY_WATCHDOG` aumenta el valor predeterminado y elimina el límite. Redúcelo para que los fallos aparezcan más rápido en scripts. |445| [`CLAUDE_CODE_MAX_RETRIES`](/docs/es/env-vars) | 10 | Número de reintentos. Limitado a 15 a partir de v2.1.186; a partir de v2.1.199, `CLAUDE_CODE_RETRY_WATCHDOG` aumenta el valor predeterminado y elimina el límite. Redúcelo para que los fallos aparezcan más rápido en scripts. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/es/env-vars) | sin establecer | Establécelo en `1` en sesiones desatendidas, como trabajos de CI, para reintentar errores de capacidad `429` y `529` indefinidamente en lugar de fallar después de `CLAUDE_CODE_MAX_RETRIES` intentos. Claude Code falla de inmediato cuando una solicitud de velocidad estándar recibe un `429` que reporta un límite de gasto o créditos de uso agotados, incluso uno de un [límite de gasto de un gateway](#spend-limit-reached) que se restablece según un calendario. Antes de v2.1.239, el watchdog los reintentaba indefinidamente. Para solicitudes en modo rápido, consulta [Handle rate limits](/docs/es/fast-mode#handle-rate-limits). En v2.1.199 o posterior, también aumenta el número predeterminado de reintentos para otros errores transitorios, como errores del servidor, tiempos de espera agotados y conexiones perdidas, a 300, aproximadamente tres horas de retroceso, y elimina el límite de 15 en `CLAUDE_CODE_MAX_RETRIES` si estableces esa variable explícitamente. |446| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/es/env-vars) | sin establecer | Establécelo en `1` en sesiones desatendidas, como trabajos de CI, para reintentar errores de capacidad `429` y `529` indefinidamente en lugar de fallar después de `CLAUDE_CODE_MAX_RETRIES` intentos. Claude Code falla de inmediato cuando una solicitud de velocidad estándar recibe un `429` que reporta un límite de gasto o créditos de uso agotados, incluso uno de un [límite de gasto de un gateway](#spend-limit-reached) que se restablece según un calendario. Antes de v2.1.239, el watchdog los reintentaba indefinidamente. Para solicitudes en modo rápido, consulta [Handle rate limits](/docs/es/fast-mode#handle-rate-limits). En v2.1.199 o posterior, también aumenta el número predeterminado de reintentos para otros errores transitorios, como errores del servidor, tiempos de espera agotados y conexiones perdidas, a 300, aproximadamente tres horas de retroceso, y elimina el límite de 15 en `CLAUDE_CODE_MAX_RETRIES` si estableces esa variable explícitamente. |

447| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/es/env-vars) | sin establecer | Tiempo máximo en milisegundos que cada solicitud a la API pasa esperando a que se resuelvan los errores `429` y `529` cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecido. Si no está establecido, la espera no tiene límite. Requiere Claude Code v2.1.295 o posterior. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/es/env-vars) | 500 | Retraso inicial en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 32000, para distribuir los reintentos en un período más largo cuando la API está al límite de su capacidad. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecido en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](/docs/es/fast-mode#handle-rate-limits). Requiere Claude Code v2.1.292 o posterior. |448| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/es/env-vars) | 500 | Retraso inicial en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 32000, para distribuir los reintentos en un período más largo cuando la API está al límite de su capacidad. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecido en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](/docs/es/fast-mode#handle-rate-limits). Requiere Claude Code v2.1.292 o posterior. |

443| [`API_TIMEOUT_MS`](/docs/es/env-vars) | 600000 | Tiempo de espera por solicitud en milisegundos. Auméntalo para redes lentas o proxies. También limita cuánto tiempo espera Claude Code los encabezados de respuesta, como se describe en [No response from API](#no-response-from-api). |449| [`API_TIMEOUT_MS`](/docs/es/env-vars) | 600000 | Tiempo de espera por solicitud en milisegundos. Auméntalo para redes lentas o proxies. También limita cuánto tiempo espera Claude Code los encabezados de respuesta, como se describe en [No response from API](#no-response-from-api). |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/es/env-vars) | sin establecer | Límite de reenvíos de una [solicitud sin streaming](#streaming-response-ended-before-any-complete-data-was-received) cuyo tiempo de espera se agota. Al alcanzar el límite, la solicitud falla. Una respuesta de Claude que tarda en generarse más que el tiempo de espera vuelve a agotar el tiempo de espera en cada reenvío, así que establece un número bajo, como `0`, para que falle antes. El tiempo de espera de cada intento sin streaming se agota después de 300 segundos en una sesión local, o después de `API_TIMEOUT_MS` cuando estableces un valor positivo. Requiere Claude Code v2.1.285 o posterior. |450| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/es/env-vars) | sin establecer | Límite de reenvíos de una [solicitud sin streaming](#streaming-response-ended-before-any-complete-data-was-received) cuyo tiempo de espera se agota. Al alcanzar el límite, la solicitud falla. Una respuesta de Claude que tarda en generarse más que el tiempo de espera vuelve a agotar el tiempo de espera en cada reenvío, así que establece un número bajo, como `0`, para que falle antes. El tiempo de espera de cada intento sin streaming se agota después de 300 segundos en una sesión local, o después de `API_TIMEOUT_MS` cuando estableces un valor positivo. Requiere Claude Code v2.1.285 o posterior. |


596<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait a moment and then try this action again.602<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait a moment and then try this action again.

597```603```

598 604 

605En una sesión interactiva, aparece una fila atenuada `Not run · auto mode's check had no usable answer` debajo de la llamada a herramienta en lugar de este mensaje. Presiona `Ctrl+O` para leer el mensaje en el [visor de transcripciones](/docs/es/interactive-mode#transcript-viewer). Las denegaciones descritas en [The server returned no safety verdict](#the-server-returned-no-safety-verdict) muestran la misma fila. Antes de v2.1.296, el mensaje aparecía debajo de la llamada como un error en rojo.

606 

599Cuando Claude Code puede determinar la categoría del fallo, la nombra entre paréntesis después de `temporarily unavailable`, por ejemplo `<model> is temporarily unavailable (rate-limited), so auto mode cannot determine the safety of <tool> right now`. Las categorías son `(rate-limited)`, `(overloaded)`, `(server error)`, `(timed out)` y `(connection failed)`. Si `(timed out)` o `(connection failed)` se repite, revisa tu conexión; consulta [Unable to connect to API](#unable-to-connect-to-api). Antes de v2.1.229, el mensaje nunca nombraba una categoría y decía `Wait briefly and then try this action again`.607Cuando Claude Code puede determinar la categoría del fallo, la nombra entre paréntesis después de `temporarily unavailable`, por ejemplo `<model> is temporarily unavailable (rate-limited), so auto mode cannot determine the safety of <tool> right now`. Las categorías son `(rate-limited)`, `(overloaded)`, `(server error)`, `(timed out)` y `(connection failed)`. Si `(timed out)` o `(connection failed)` se repite, revisa tu conexión; consulta [Unable to connect to API](#unable-to-connect-to-api). Antes de v2.1.229, el mensaje nunca nombraba una categoría y decía `Wait briefly and then try this action again`.

600 608 

601Cuando ninguna categoría encaja, el mensaje aparece sin categoría entre paréntesis; más de un fallo produce esa forma. En [Amazon Bedrock](/docs/es/amazon-bedrock), incluido el [endpoint de Mantle](/docs/es/amazon-bedrock#use-the-mantle-endpoint), también aparece cuando tu cuenta de AWS no puede invocar el modelo nombrado en el mensaje, y ese fallo se repite en cada reintento hasta que tu cuenta obtenga acceso al modelo.609Cuando ninguna categoría encaja, el mensaje aparece sin categoría entre paréntesis; más de un fallo produce esa forma. En [Amazon Bedrock](/docs/es/amazon-bedrock), incluido el [endpoint de Mantle](/docs/es/amazon-bedrock#use-the-mantle-endpoint), también aparece cuando tu cuenta de AWS no puede invocar el modelo nombrado en el mensaje, y ese fallo se repite en cada reintento hasta que tu cuenta obtenga acceso al modelo.


1900 1908 

1901Claude Code omite esta verificación cuando un [archivo de configuración administrada, una política MDM o un asistente de políticas](/docs/es/managed-settings) establece [`forceLoginMethod`](/docs/es/settings-reference#forceloginmethod) en `"gateway"`, o establece [`forceLoginGatewayUrl`](/docs/es/settings-reference#forcelogingatewayurl) sin `forceLoginMethod`. Con cualquiera de estas configuraciones, Claude Code abre el paso de inicio de sesión en la pantalla **Cloud gateway** en lugar de un método de inicio de sesión de Anthropic. Claude Code también omite la verificación cuando existe una fuente de configuración administrada en la máquina pero no se puede leer, ya que esa fuente puede contener la configuración del gateway. Antes de v2.1.247, Claude Code ejecutaba la verificación también con esta configuración, y salía con este error cuando los endpoints de Anthropic eran inaccesibles.1909Claude Code omite esta verificación cuando un [archivo de configuración administrada, una política MDM o un asistente de políticas](/docs/es/managed-settings) establece [`forceLoginMethod`](/docs/es/settings-reference#forceloginmethod) en `"gateway"`, o establece [`forceLoginGatewayUrl`](/docs/es/settings-reference#forcelogingatewayurl) sin `forceLoginMethod`. Con cualquiera de estas configuraciones, Claude Code abre el paso de inicio de sesión en la pantalla **Cloud gateway** en lugar de un método de inicio de sesión de Anthropic. Claude Code también omite la verificación cuando existe una fuente de configuración administrada en la máquina pero no se puede leer, ya que esa fuente puede contener la configuración del gateway. Antes de v2.1.247, Claude Code ejecutaba la verificación también con esta configuración, y salía con este error cuando los endpoints de Anthropic eran inaccesibles.

1902 1910 

1911Claude Code también omite la verificación en una máquina sin configuración administrada cuando tu propio `~/.claude/settings.json` [nombra un gateway](/docs/es/claude-apps-gateway#set-the-gateway-url-in-user-settings) con `forceLoginMethod` y `forceLoginGatewayUrl`. Antes de v2.1.295, Claude Code ejecutaba la verificación en ese caso.

1912 

1903**Qué hacer:**1913**Qué hacer:**

1904 1914 

1905* Si el mensaje nombra una variable de proxy, verifica que su valor apunte al proxy correcto y pide a tu equipo de red que permita conexiones HTTPS a través de él hacia el host del mensaje. Consulta [Configuración de red](/docs/es/network-config).1915* Si el mensaje nombra una variable de proxy, verifica que su valor apunte al proxy correcto y pide a tu equipo de red que permita conexiones HTTPS a través de él hacia el host del mensaje. Consulta [Configuración de red](/docs/es/network-config).


3412 3422 

3413Claude Code muestra el mismo error para cualquier skill que [inyecte contexto dinámico](/docs/es/skills#when-an-injected-command-fails), y un comando inyectado que falla aborta la invocación de ese skill. Dos cadenas hermanas se disparan antes de que el comando llegue a ejecutarse:3423Claude Code muestra el mismo error para cualquier skill que [inyecte contexto dinámico](/docs/es/skills#when-an-injected-command-fails), y un comando inyectado que falla aborta la invocación de ese skill. Dos cadenas hermanas se disparan antes de que el comando llegue a ejecutarse:

3414 3424 

3415* `Shell command permission check failed for pattern "..."`: la comprobación de permisos del comando no lo permitió. [Comprobaciones de permisos en comandos inyectados](/docs/es/skills#permission-checks-on-injected-commands) explica qué resultados abortan en cada modo de permisos y cómo aprobar previamente un comando con `allowed-tools`3425* `Shell command permission check failed for pattern "..."`: la verificación de permisos del comando no lo permitió. [Verificaciones de permisos en comandos inyectados](/docs/es/skills#permission-checks-on-injected-commands) explica qué resultados abortan en cada modo de permisos y cómo aprobar previamente un comando con `allowed-tools`

3416* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: el frontmatter del skill exige bash en una máquina que no lo tiene. Instala Git for Windows o cambia el frontmatter a `shell: powershell`. Consulta [Cómo se ejecutan los comandos inyectados](/docs/es/skills#how-injected-commands-run)3426* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: el frontmatter del skill exige bash en una máquina que no lo tiene. Instala Git for Windows o cambia el frontmatter a `shell: powershell`. Consulta [Cómo se ejecutan los comandos inyectados](/docs/es/skills#how-injected-commands-run)

3417 3427 

3418**Qué hacer:**3428**Qué hacer:**


3756No conversation found with session ID: <session-id>3766No conversation found with session ID: <session-id>

3757```3767```

3758 3768 

3759Claude Code termina con el código 1 después de mostrar el mensaje. Claude Code [busca el ID primero en el proyecto actual y luego en todos los demás proyectos de esta máquina](/docs/es/sessions#resume-a-session). Antes de v2.1.223, la búsqueda se detenía en el directorio del proyecto actual y sus worktrees de git, así que debías reanudar desde el directorio en el que la sesión trabajó por última vez.3769Claude Code sale con el código 1 después de mostrar el mensaje. Claude Code [busca el ID primero en el proyecto actual y luego en todos los demás proyectos de esta máquina](/docs/es/sessions#where-the-session-picker-looks). Antes de v2.1.223, la búsqueda se detenía en el directorio del proyecto actual y sus worktrees de git, así que reanuda desde el directorio en el que la sesión trabajó por última vez.

3760 3770 

3761Causas comunes:3771Causas comunes:

3762 3772 


3816 3826 

3817* En una sesión iniciada sin esas restricciones, ejecuta `/tui fullscreen`, o `/tui default` para volver al anterior. Claude Code guarda allí el [ajuste `tui`](/docs/es/settings-reference#tui)3827* En una sesión iniciada sin esas restricciones, ejecuta `/tui fullscreen`, o `/tui default` para volver al anterior. Claude Code guarda allí el [ajuste `tui`](/docs/es/settings-reference#tui)

3818 3828 

3829<h3 id="claude-code-couldnt-restart">

3830 Claude Code couldn't restart

3831</h3>

3832 

3833Claude Code se estaba reiniciando, por ejemplo para activar o desactivar el renderizado en pantalla completa después de que ejecutaras [`/tui`](/docs/es/fullscreen#enable-fullscreen-rendering). Cerró la sesión pero no pudo iniciar el nuevo proceso, así que imprimió este mensaje y terminó con el estado 1:

3834 

3835```text theme={null}

3836Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.

3837```

3838 

3839Cuando el reinicio no tenía ninguna conversación que volver a abrir, por ejemplo porque `/tui` fue tu primera entrada en una sesión nueva, el mensaje dice `Claude Code couldn't restart. Start Claude Code again.`

3840 

3841**Qué hacer:**

3842 

3843* Vuelve a ejecutar `claude` en tu shell desde el mismo directorio. Si el mensaje indicaba que tu conversación está guardada, ejecuta [`/resume`](/docs/es/sessions#resume-a-session) en la nueva sesión y selecciónala

3844* Si los reinicios siguen fallando, inicia Claude Code desde tu shell con [`claude --debug-file claude-debug.log`](/docs/es/cli-reference#cli-flags). Si falla un reinicio desde esa sesión, `claude-debug.log`, en el directorio desde el que la iniciaste, registra una línea `Failed to relaunch:` con el error del sistema operativo. Incluye esa línea cuando [informes el problema](#report-an-error)

3845 

3819<h3 id="couldnt-open-claude-desktop">3846<h3 id="couldnt-open-claude-desktop">

3820 No se pudo abrir Claude Desktop3847 No se pudo abrir Claude Desktop

3821</h3>3848</h3>


4593* O reinicia Claude Code con [`CLAUDE_CODE_TMPDIR`](/docs/es/env-vars) configurado en un directorio de un sistema de archivos con espacio4620* O reinicia Claude Code con [`CLAUDE_CODE_TMPDIR`](/docs/es/env-vars) configurado en un directorio de un sistema de archivos con espacio

4594* Luego pide a Claude que ejecute el comando de nuevo. La salida que imprimió se perdió, no se truncó4621* Luego pide a Claude que ejecute el comando de nuevo. La salida que imprimió se perdió, no se truncó

4595 4622 

4623<h3 id="file-is-not-valid-utf-8">

4624 File is not valid UTF-8

4625</h3>

4626 

4627Claude usó la herramienta Edit o NotebookEdit en un archivo cuyos bytes no se decodifican como UTF-8, y Claude Code rechazó el cambio. No se escribió nada, por lo que el archivo quedó como estaba. Esas herramientas guardan el archivo completo de nuevo como UTF-8, lo que habría convertido cada byte que no pudieran decodificar en el carácter de reemplazo `U+FFFD`. El mensaje aparece en el resultado de la herramienta:

4628 

4629```text wrap theme={null}

4630File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.

4631```

4632 

4633Un archivo que debería estar en UTF-8 también recibe este mensaje cuando contiene aunque sea una sola secuencia de bytes no válida, porque la verificación cubre los bytes del archivo en su conjunto.

4634 

4635**Qué hacer:**

4636 

4637* Para mantener el archivo en su codificación actual, deja que Claude haga el cambio con un comando de shell que lea y escriba el archivo en esa codificación, como le indica el mensaje

4638* Para seguir editando el archivo con la herramienta Edit, conviértelo a UTF-8, o corrige los bytes no válidos en un archivo que debería estar en UTF-8, y luego pide a Claude que haga la edición de nuevo

4639 

4640Antes de v2.1.296, Edit y NotebookEdit aplicaban una edición así y guardaban cada byte que no podían decodificar como `U+FFFD`. En esas versiones, actualiza Claude Code.

4641 

4596<h3 id="the-source-file-is-not-valid-utf-8-text">4642<h3 id="the-source-file-is-not-valid-utf-8-text">

4597 The source file is not valid UTF-8 text4643 The source file is not valid UTF-8 text

4598</h3>4644</h3>


4752 Comando bloqueado por las verificaciones de aislamiento de worktree4798 Comando bloqueado por las verificaciones de aislamiento de worktree

4753</h3>4799</h3>

4754 4800 

4755Claude ejecutó un comando Bash o Monitor en una [sesión aislada en un worktree](/docs/es/worktrees#how-claude-code-enforces-isolation), y Claude Code lo rechazó por una de dos razones:4801Claude ejecutó un comando Bash, [PowerShell](/docs/es/tools-reference#powershell-tool) o [Monitor](/docs/es/tools-reference#monitor-tool) en una [sesión aislada en un worktree](/docs/es/worktrees#how-claude-code-enforces-isolation), y Claude Code lo rechazó por una de estas razones:

4756 4802 

4757* El comando apunta git al checkout principal.4803* El comando se ejecutaría en el checkout principal o en otro worktree. El mensaje dice que su directorio de trabajo `resolved to the shared checkout` o `is in a different worktree`.

4758* Claude Code no puede verificar a partir del texto del comando que cualquier git que ejecute el comando se mantenga dentro del worktree. Un comando que nunca nombra git aún puede ser rechazado por esta razón, porque expandir una indirección de variable como `${!name}` o ejecutar una sustitución de función Bash como `${ command; }` produce un valor en tiempo de ejecución que en sí mismo puede ser un comando.4804* Un comando Bash o Monitor apunta git al checkout principal.

4805* Claude Code no puede verificar a partir del texto de un comando Bash o Monitor que cualquier git que ejecute el comando se mantenga dentro del worktree. Un comando que nunca nombra git aún puede ser rechazado por esta razón, porque expandir una indirección de variable como `${!name}` o ejecutar una sustitución de función Bash como `${ command; }` produce un valor en tiempo de ejecución que en sí mismo puede ser un comando.

4759 4806 

4760La parte central del mensaje nombra lo que no se pudo verificar:4807El mensaje dice `is isolated in the worktree <path>, but this command`, seguido de la razón, como en el caso de un comando cuyo texto Claude Code no pudo verificar:

4761 4808 

4762```text wrap theme={null}4809```text wrap theme={null}

4763This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.4810This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.


4765 4812 

4766**Qué hacer:**4813**Qué hacer:**

4767 4814 

4768* Generalmente nada: Claude lee el mensaje y reescribe el comando de la manera que su oración final solicita4815* **Git apuntado al checkout principal, o texto de comando que no se puede verificar**: nada. Claude lee el mensaje y reescribe el comando de la manera que su oración final solicita. Si un comando que pediste sigue siendo rechazado por una expansión en su texto, escribe el valor marcado literalmente y ejecuta git como su propio comando simple desde dentro del worktree

4769* Si un comando que pediste sigue siendo rechazado, escribe el valor marcado literalmente: reemplaza la indirección o sustitución con su valor, y ejecuta git como su propio comando simple desde dentro del worktree

4770* Para actuar en el checkout principal a propósito, ejecuta el comando tú mismo en una terminal fuera de la sesión4816* Para actuar en el checkout principal a propósito, ejecuta el comando tú mismo en una terminal fuera de la sesión

4771 4817 

4772<h3 id="this-session-has-no-saved-transcript">4818<h3 id="this-session-has-no-saved-transcript">


4946* O reanuda con `--agent <name>` nombrando un agente que sí exista, para ejecutar la sesión como ese agente en su lugar4992* O reanuda con `--agent <name>` nombrando un agente que sí exista, para ejecutar la sesión como ese agente en su lugar

4947* Si el agente tiene alcance de proyecto y no has confiado en el directorio original de la sesión, ejecuta Claude Code allí una vez, acepta el diálogo de confianza y luego reanuda nuevamente4993* Si el agente tiene alcance de proyecto y no has confiado en el directorio original de la sesión, ejecuta Claude Code allí una vez, acepta el diálogo de confianza y luego reanuda nuevamente

4948 4994 

4995<h3 id="restarted-after-its-next-loop-wakeup-was-due">

4996 Esta sesión se reinició después de que venciera su siguiente activación de /loop

4997</h3>

4998 

4999Un [`/loop` de ritmo propio](/docs/es/scheduled-tasks#let-claude-choose-the-interval) en una [sesión en segundo plano](/docs/es/agent-view) se detuvo. El proceso de la sesión terminó mientras el bucle esperaba su siguiente activación, y esa activación venció antes de que se iniciara el [siguiente proceso](/docs/es/agent-view#the-supervisor-process) de la sesión. La activación perdida no se dispara con retraso. El aviso indica cuánto retraso tenía la activación cuando la sesión se reinició:

5000 

5001```text theme={null}

5002This session restarted 12m after its next /loop wakeup was due, so that wakeup will not fire. The loop stays stopped until Claude schedules it again: reply to continue it.

5003```

5004 

5005Antes de v2.1.295, el bucle se detenía en esta situación sin ningún aviso.

5006 

5007**Qué hacer:**

5008 

5009* Para continuar el bucle, [responde a la sesión](/docs/es/agent-view#peek-and-reply) e indícalo, por ejemplo `keep the loop running`. Claude lee el aviso junto con tu respuesta y puede programar la siguiente activación

5010* Si ya terminaste con el bucle, no hagas nada. Ya se detuvo

5011 

4949<h3 id="claude_code_process_wrapper-launcher-errors">5012<h3 id="claude_code_process_wrapper-launcher-errors">

4950 Errores del lanzador CLAUDE\_CODE\_PROCESS\_WRAPPER5013 Errores del lanzador CLAUDE\_CODE\_PROCESS\_WRAPPER

4951</h3>5014</h3>


5343Las rutas que Claude Code rechaza de esta manera incluyen:5406Las rutas que Claude Code rechaza de esta manera incluyen:

5344 5407 

5345* Recursos compartidos UNC como `\\server\share`5408* Recursos compartidos UNC como `\\server\share`

5346* Rutas de montaje automático como `/net/<host>`, a menos que haya iniciado Claude Code desde un directorio bajo el montaje automático de ese host5409* Rutas de montaje automático como `/net/<host>`, a menos que hayas iniciado Claude Code desde un directorio bajo el montaje automático de ese host. Las lecturas bajo ese montaje automático siguen pasando por la [verificación de rutas de red](/docs/es/permissions#network-paths).

5347* Rutas locales que alcanzan una ubicación de red a través de un enlace simbólico o unión5410* Rutas locales que alcanzan una ubicación de red a través de un enlace simbólico o unión

5348 5411 

5349Las letras de unidad asignadas y las rutas `\\wsl$` no cuentan como rutas de red.5412Las letras de unidad asignadas y las rutas `\\wsl$` no cuentan como rutas de red.


5569**Qué hacer:**5632**Qué hacer:**

5570 5633 

5571* En el archivo de configuración listado con el mensaje, reescriba la regla para que termine en su paréntesis de cierre, por ejemplo `Bash(ls *)` en lugar de `Bash(ls) x`5634* En el archivo de configuración listado con el mensaje, reescriba la regla para que termine en su paréntesis de cierre, por ejemplo `Bash(ls *)` en lugar de `Bash(ls) x`

5572* Deje los paréntesis dentro del contenido como están. Son literales, por lo que una regla como `Edit(./Finance (2024)/*)` es válida sin escapar5635* Deja los paréntesis dentro del contenido como están. Son literales, por lo que una regla como `Edit(./Finance (2024)/**)` es válida sin escapar

5573 5636 

5574Antes de v2.1.260, Claude Code reportaba una regla con paréntesis sin emparejar como `Mismatched parentheses`.5637Antes de v2.1.260, Claude Code reportaba una regla con paréntesis sin emparejar como `Mismatched parentheses`.

5575 5638 

Details

27| Claude Security | ✅ Compatible | Disponible en versión beta pública para planes Enterprise en [claude.ai/security](https://claude.ai/security) |27| Claude Security | ✅ Compatible | Disponible en versión beta pública para planes Enterprise en [claude.ai/security](https://claude.ai/security) |

28| Sesiones de Teleport | ✅ Compatible | Mover sesiones entre nube y terminal con `--teleport` |28| Sesiones de Teleport | ✅ Compatible | Mover sesiones entre nube y terminal con `--teleport` |

29| Mercados de plugins | ✅ Compatible | Los requisitos de credenciales difieren según la superficie. Consulte [Mercados de plugins en GHES](#plugin-marketplaces-on-ghes) |29| Mercados de plugins | ✅ Compatible | Los requisitos de credenciales difieren según la superficie. Consulte [Mercados de plugins en GHES](#plugin-marketplaces-on-ghes) |

30| Métricas de contribución | ✅ Compatible | Entregadas a través de webhooks al [panel de análisis](/docs/es/analytics) |30| Métricas de contribución | ❌ No compatible | Requiere repositorios alojados en github.com. El [panel de análisis](/docs/es/analytics) sigue mostrando métricas de uso del trabajo en repositorios de GHES |

31| GitHub Actions | ✅ Compatible | Requiere configuración manual del flujo de trabajo; `/install-github-app` es solo para github.com |31| GitHub Actions | ✅ Compatible | Requiere configuración manual del flujo de trabajo; `/install-github-app` es solo para github.com |

32| Servidor GitHub MCP | ❌ No compatible | El servidor GitHub MCP no funciona con instancias de GHES |32| Servidor GitHub MCP | ❌ No compatible | El servidor GitHub MCP no funciona con instancias de GHES |

33 33 


56 Desde la página de GitHub App en tu instancia de GHES, instala la aplicación en los repositorios u organizaciones a los que quieres que Claude tenga acceso. Puedes comenzar con un subconjunto y agregar más adelante.56 Desde la página de GitHub App en tu instancia de GHES, instala la aplicación en los repositorios u organizaciones a los que quieres que Claude tenga acceso. Puedes comenzar con un subconjunto y agregar más adelante.

57 </Step>57 </Step>

58 58 

59 <Step title="Habilitar características">59 <Step title="Habilitar Code Review">

60 Ve a [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) y habilita [Code Review](/docs/es/code-review#set-up-code-review) y las [métricas de contribución](/docs/es/analytics#enable-contribution-metrics) para tus repositorios de GHES usando la misma configuración que github.com.60 Ve a [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) y habilita [Code Review](/docs/es/code-review#set-up-code-review) para tus repositorios de GHES usando la misma configuración que github.com.

61 </Step>61 </Step>

62</Steps>62</Steps>

63 63 


65 Permisos de GitHub App65 Permisos de GitHub App

66</h3>66</h3>

67 67 

68El manifiesto configura la GitHub App con los permisos y eventos de webhook que se muestran a continuación, que en conjunto cubren sesiones en la nube, Code Review, Claude Security, marketplaces de plugins y métricas de contribución:68El manifiesto configura la GitHub App con los permisos y eventos de webhook que se muestran a continuación, que en conjunto cubren sesiones en la nube, Code Review, Claude Security y marketplaces de plugins:

69 69 

70| Permiso | Acceso | Usado para |70| Permiso | Acceso | Usado para |

71| :- | :- | :- |71| :- | :- | :- |


270* [Claude Code en la web](/docs/es/claude-code-on-the-web): ejecutar sesiones de Claude Code en infraestructura en la nube270* [Claude Code en la web](/docs/es/claude-code-on-the-web): ejecutar sesiones de Claude Code en infraestructura en la nube

271* [Revisión de código](/docs/es/code-review): revisiones automatizadas de PR271* [Revisión de código](/docs/es/code-review): revisiones automatizadas de PR

272* [Mercados de plugins](/docs/es/plugins/host-marketplace): construir y distribuir catálogos de plugins272* [Mercados de plugins](/docs/es/plugins/host-marketplace): construir y distribuir catálogos de plugins

273* [Analytics](/docs/es/analytics): rastrear uso y métricas de contribución273* [Analytics](/docs/es/analytics): rastrear el uso de Claude Code en toda tu organización

274* [Configuración administrada](/docs/es/settings): configuración de política en toda la organización274* [Configuración administrada](/docs/es/settings): configuración de política en toda la organización

275* [Configuración de red](/docs/es/network-config): requisitos de firewall y lista blanca de IP275* [Configuración de red](/docs/es/network-config): requisitos de firewall y lista blanca de IP

headless.md +58 −56

Details

89* **Vigilancias de [Monitor](/docs/es/tools-reference#monitor-tool)**: la ejecución espera hasta que se agote el tiempo de espera de la vigilancia o el límite de 10 minutos finalice la espera, lo que ocurra primero. Mientras espera, Claude continúa respondiendo a lo que reporta la vigilancia. De forma predeterminada, el tiempo de espera de una vigilancia se agota cinco minutos después de que Claude la inicia.89* **Vigilancias de [Monitor](/docs/es/tools-reference#monitor-tool)**: la ejecución espera hasta que se agote el tiempo de espera de la vigilancia o el límite de 10 minutos finalice la espera, lo que ocurra primero. Mientras espera, Claude continúa respondiendo a lo que reporta la vigilancia. De forma predeterminada, el tiempo de espera de una vigilancia se agota cinco minutos después de que Claude la inicia.

90* **Activaciones pendientes**: en una ejecución cuyo prompt pasaste como texto en lugar de con `--input-format stream-json`, cuando Claude ha programado una [activación de `/loop` a su propio ritmo](/docs/es/scheduled-tasks#let-claude-choose-the-interval), la ejecución espera a que se dispare cada activación y ejecuta su iteración hasta que [el bucle termina](/docs/es/scheduled-tasks#stop-a-loop), incluso más allá del límite de 10 minutos.90* **Activaciones pendientes**: en una ejecución cuyo prompt pasaste como texto en lugar de con `--input-format stream-json`, cuando Claude ha programado una [activación de `/loop` a su propio ritmo](/docs/es/scheduled-tasks#let-claude-choose-the-interval), la ejecución espera a que se dispare cada activación y ejecuta su iteración hasta que [el bucle termina](/docs/es/scheduled-tasks#stop-a-loop), incluso más allá del límite de 10 minutos.

91 91 

92Cuando stderr es una terminal y la ejecución ha esperado cinco segundos, Claude Code imprime en stderr una línea que comienza con `Waiting for background work to finish` y nombra el trabajo. Con [salida `json` o `stream-json`](#get-structured-output), la línea se imprime solo cuando stdout no es una terminal, por lo que el JSON que lee tu script nunca la incluye.

93 

92Si la ejecución alcanza su límite de [`--max-budget-usd`](/docs/es/cli-reference#cli-flags), Claude Code detiene el trabajo en segundo plano restante en lugar de esperar.94Si la ejecución alcanza su límite de [`--max-budget-usd`](/docs/es/cli-reference#cli-flags), Claude Code detiene el trabajo en segundo plano restante en lugar de esperar.

93 95 

94Cuando el trabajo en segundo plano inicia otro turno, la ejecución imprime el resultado de cada turno con la salida `text` predeterminada y el resultado del último turno con la salida `json`. Antes de la v2.1.295, la ejecución también imprimía solo el resultado del último turno con la salida `text`.96Cuando el trabajo en segundo plano inicia otro turno, la ejecución imprime el resultado de cada turno con la salida `text` predeterminada y el resultado del último turno con la salida `json`. Antes de la v2.1.295, la ejecución también imprimía solo el resultado del último turno con la salida `text`.


116 Ejemplos118 Ejemplos

117</h2>119</h2>

118 120 

119Estos ejemplos destacan patrones comunes de CLI. Donde un comando nombra un archivo como `auth.py` o `build-error.txt`, sustituya un archivo de su propio proyecto. En CI u otros entornos con scripts, agregue [`--bare`](#start-faster-with-bare-mode) para que Claude Code se inicie sin cargar los hooks del host, plugins, memoria automática o `CLAUDE.md`.121Estos ejemplos destacan patrones comunes de CLI. Donde un comando nombra un archivo como `auth.py` o `build-error.txt`, sustituye un archivo de tu propio proyecto. En CI u otros entornos con scripts, agrega [`--bare`](#start-faster-with-bare-mode) para que Claude Code se inicie sin cargar los hooks del host, plugins, memoria automática o `CLAUDE.md`.

120 122 

121<h3 id="pipe-data-through-claude">123<h3 id="pipe-data-through-claude">

122 Canalizar datos a través de Claude124 Canalizar datos a través de Claude

123</h3>125</h3>

124 126 

125El modo no interactivo lee stdin, por lo que puede canalizar datos y redirigir la respuesta como cualquier otra herramienta de línea de comandos.127El modo no interactivo lee stdin, por lo que puedes canalizar datos y redirigir la respuesta como cualquier otra herramienta de línea de comandos.

126 128 

127Este ejemplo canaliza un registro de compilación a Claude y escribe la explicación en un archivo:129Este ejemplo canaliza un registro de compilación a Claude y escribe la explicación en un archivo:

128 130 


130cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt132cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

131```133```

132 134 

133Con `--output-format json`, la carga útil de respuesta incluye `total_cost_usd` y un desglose de costos por modelo, por lo que los llamadores con scripts pueden rastrear el gasto sin consultar el [panel de uso](/docs/es/costs). Cuando continúa una conversación anterior con `--continue` o `--resume`, la ejecución informa el total completo de la conversación, [gastos de ejecuciones anteriores incluidos](/docs/es/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Ambas cifras son [estimaciones del lado del cliente](/docs/es/agent-sdk/cost-tracking) y pueden diferir de su factura real.135Con `--output-format json`, la carga útil de respuesta incluye `total_cost_usd` y un desglose de costos por modelo, por lo que los llamadores con scripts pueden rastrear el gasto sin consultar el [panel de uso](/docs/es/costs). Cuando continúas una conversación anterior con `--continue` o `--resume`, la ejecución informa el total completo de la conversación, [gastos de ejecuciones anteriores incluidos](/docs/es/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Ambas cifras son [estimaciones del lado del cliente](/docs/es/agent-sdk/cost-tracking) y pueden diferir de tu factura real.

134 136 

135<Note>137<Note>

136 El stdin canalizado está limitado a 10MB. Si excede el límite, Claude Code sale con un error claro y un estado distinto de cero. Para trabajar con entradas más grandes, escriba el contenido en un archivo y haga referencia a la ruta del archivo en su indicador en lugar de canalizarlo.138 El stdin canalizado está limitado a 10MB. Si excedes el límite, Claude Code sale con un error claro y un estado distinto de cero. Para trabajar con entradas más grandes, escribe el contenido en un archivo y haz referencia a la ruta del archivo en tu prompt en lugar de canalizarlo.

137</Note>139</Note>

138 140 

139Si Claude Code no puede leer stdin, por ejemplo porque el proceso que lo inició desconectó su extremo, Claude Code imprime una advertencia en stderr y continúa con el indicador de la línea de comandos. Antes de v2.1.211, un stdin no legible en Windows bloqueaba la sesión o hacía que saliera silenciosamente sin salida.141Si Claude Code no puede leer stdin, por ejemplo porque el proceso que lo inició desconectó su extremo, Claude Code imprime una advertencia en stderr y continúa con el prompt de la línea de comandos. Antes de v2.1.211, un stdin no legible en Windows bloqueaba la sesión o hacía que saliera silenciosamente sin salida.

140 142 

141<h3 id="add-claude-to-a-build-script">143<h3 id="add-claude-to-a-build-script">

142 Agregar Claude a un script de compilación144 Agregar Claude a un script de compilación

143</h3>145</h3>

144 146 

145Puede envolver una llamada no interactiva en un script para usar Claude como un linter o revisor específico del proyecto.147Puedes envolver una llamada no interactiva en un script para usar Claude como un linter o revisor específico del proyecto.

146 148 

147Este script `package.json` canaliza el diff contra `main` a Claude y le pide que informe sobre errores tipográficos. Canalizar el diff significa que Claude no necesita permiso de Bash para leerlo, y las comillas dobles escapadas mantienen el script portátil a Windows:149Este script `package.json` canaliza el diff contra `main` a Claude y le pide que informe sobre errores tipográficos. Canalizar el diff significa que Claude no necesita permiso de Bash para leerlo, y las comillas dobles escapadas mantienen el script portátil a Windows:

148 150 


154}156}

155```157```

156 158 

157Ejecute con `npm run lint:claude`.159Ejecútalo con `npm run lint:claude`.

158 160 

159<h3 id="get-structured-output">161<h3 id="get-structured-output">

160 Obtener salida estructurada162 Obtener salida estructurada

161</h3>163</h3>

162 164 

163Utilice `--output-format` para controlar cómo se devuelven las respuestas:165Usa `--output-format` para controlar cómo se devuelven las respuestas:

164 166 

165* `text` (predeterminado): salida de texto sin formato167* `text` (predeterminado): salida de texto sin formato

166* `json`: JSON estructurado con resultado, ID de sesión y metadatos168* `json`: JSON estructurado con resultado, ID de sesión y metadatos

167* `stream-json`: JSON delimitado por saltos de línea para transmisión en tiempo real169* `stream-json`: JSON delimitado por saltos de línea para streaming en tiempo real

168 170 

169Este ejemplo devuelve un resumen del proyecto como JSON con metadatos de sesión, con el resultado de texto en el campo `result`:171Este ejemplo devuelve un resumen del proyecto como JSON con metadatos de sesión, con el resultado de texto en el campo `result`:

170 172 


172claude -p "Summarize this project" --output-format json174claude -p "Summarize this project" --output-format json

173```175```

174 176 

175Para obtener una salida que se ajuste a un esquema específico, utilice `--output-format json` con `--json-schema` y una definición de [JSON Schema](https://json-schema.org/). La respuesta incluye metadatos sobre la solicitud (ID de sesión, uso, etc.) con la salida estructurada en el campo `structured_output`.177Para obtener una salida que se ajuste a un esquema específico, usa `--output-format json` con `--json-schema` y una definición de [JSON Schema](https://json-schema.org/). La respuesta incluye metadatos sobre la solicitud (ID de sesión, uso, etc.) con la salida estructurada en el campo `structured_output`.

176 178 

177Este ejemplo extrae nombres de funciones y los devuelve como una matriz de cadenas:179Este ejemplo extrae nombres de funciones y los devuelve como una matriz de cadenas:

178 180 


185Si el valor no es un JSON Schema válido, `claude` sale con `Error: --json-schema is not a valid JSON Schema` seguido del diagnóstico del validador. Claude Code acepta esquemas que utilizan la palabra clave `format`, como `"format": "email"`, pero trata `format` como una anotación y no la aplica. Antes de v2.1.205, Claude Code ignoraba silenciosamente un esquema inválido y devolvía texto no estructurado, y trataba cualquier esquema que contenía `format` como inválido.187Si el valor no es un JSON Schema válido, `claude` sale con `Error: --json-schema is not a valid JSON Schema` seguido del diagnóstico del validador. Claude Code acepta esquemas que utilizan la palabra clave `format`, como `"format": "email"`, pero trata `format` como una anotación y no la aplica. Antes de v2.1.205, Claude Code ignoraba silenciosamente un esquema inválido y devolvía texto no estructurado, y trataba cualquier esquema que contenía `format` como inválido.

186 188 

187<Tip>189<Tip>

188 Utilice una herramienta como [jq](https://jqlang.org/) para analizar la respuesta y extraer campos específicos:190 Usa una herramienta como [jq](https://jqlang.org/) para analizar la respuesta y extraer campos específicos:

189 191 

190 ```bash theme={null}192 ```bash theme={null}

191 # Extract the text result193 # Extract the text result


200</Tip>202</Tip>

201 203 

202<h3 id="stream-responses">204<h3 id="stream-responses">

203 Transmitir respuestas205 Respuestas en streaming

204</h3>206</h3>

205 207 

206Utilice `--output-format stream-json` con `--verbose` e `--include-partial-messages` para recibir tokens a medida que se generan. Cada línea es un objeto JSON que representa un evento:208Usa `--output-format stream-json` con `--verbose` e `--include-partial-messages` para recibir tokens a medida que se generan. Cada línea es un objeto JSON que representa un evento:

207 209 

208```bash theme={null}210```bash theme={null}

209claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages211claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

210```212```

211 213 

212La última línea de la transmisión es un mensaje `result` con el texto de respuesta final, el costo y los metadatos de la sesión.214La última línea del stream es un mensaje `result` con el texto de respuesta final, el costo y los metadatos de la sesión.

213 215 

214Si su consumidor lee la transmisión lentamente, Claude Code espera a que se drene la salida en cola antes de salir, escalando la espera con cuánto aún está en cola, limitado a 30 segundos. Antes de v2.1.214, la espera de salida estaba limitada a aproximadamente dos segundos, lo que podría cortar el final de una respuesta grande.216Si tu consumidor lee el stream lentamente, Claude Code espera a que se drene la salida en cola antes de salir, escalando la espera según cuánto sigue en cola, con un límite de 30 segundos. Antes de v2.1.214, la espera de salida estaba limitada a aproximadamente dos segundos, lo que podía cortar el final de una respuesta grande.

215 217 

216El siguiente ejemplo usa [jq](https://jqlang.org/) para filtrar deltas de texto y mostrar solo el texto en streaming. El flag `-r` genera cadenas sin formato (sin comillas) y `-j` une sin saltos de línea para que los tokens se transmitan en streaming de forma continua:218El siguiente ejemplo usa [jq](https://jqlang.org/) para filtrar deltas de texto y mostrar solo el texto en streaming. El flag `-r` genera cadenas sin formato (sin comillas) y `-j` une sin saltos de línea para que los tokens se transmitan en streaming de forma continua:

217 219 


220 jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'222 jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

221```223```

222 224 

223Para transmisión programática con devoluciones de llamada y objetos de mensaje, consulte [Transmitir respuestas en tiempo real](/docs/es/agent-sdk/streaming-output) en la documentación del Agent SDK.225Para streaming programático con devoluciones de llamada y objetos de mensaje, consulta [Respuestas en streaming en tiempo real](/docs/es/agent-sdk/streaming-output) en la documentación del Agent SDK.

224 226 

225<h4 id="follow-subagent-messages">227<h4 id="follow-subagent-messages">

226 Seguir mensajes de subagentes228 Seguir mensajes de subagentes


257 Manejar reintentos de API259 Manejar reintentos de API

258</h4>260</h4>

259 261 

260Cuando una solicitud de API falla con un error reintentable, Claude Code emite un evento `system/api_retry` antes de reintentar. En v2.1.246 o posterior, cuando un `401` o `403` rechaza una credencial [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper), Claude Code realiza los primeros dos reintentos silenciosamente sin evento, luego emite el evento como de costumbre desde el tercer reintento consecutivo en adelante. Los reintentos silenciosos aún cuentan hacia `attempt`. Puede usar el evento para mostrar el progreso del reintento en su propia interfaz.262Cuando una solicitud de API falla con un error reintentable, Claude Code emite un evento `system/api_retry` antes de reintentar. En v2.1.246 o posterior, cuando un `401` o `403` rechaza una credencial [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper), Claude Code realiza los primeros dos reintentos silenciosamente sin evento, luego emite el evento como de costumbre desde el tercer reintento consecutivo en adelante. Los reintentos silenciosos aún cuentan para `attempt`. Puedes usar el evento para mostrar el progreso del reintento en tu propia interfaz.

261 263 

262| Campo | Tipo | Descripción |264| Campo | Tipo | Descripción |

263| - | - | - |265| - | - | - |


276 Leer metadatos de sesión278 Leer metadatos de sesión

277</h4>279</h4>

278 280 

279El evento `system/init` informa metadatos de sesión incluyendo el modelo, herramientas, servidores MCP y plugins cargados. Es el primer evento en la transmisión a menos que eventos de inicio lo precedan:281El evento `system/init` informa metadatos de sesión incluyendo el modelo, herramientas, servidores MCP y plugins cargados. Es el primer evento en el stream a menos que eventos de inicio lo precedan:

280 282 

281* eventos `plugin_install`, cuando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/es/env-vars) está configurado.283* eventos `plugin_install`, cuando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/es/env-vars) está configurado.

282* [eventos `hook_started`, `hook_progress` y `hook_response`](/docs/es/agent-sdk/typescript#sdkhookstartedmessage), mientras se ejecuta un hook [`SessionStart`](/docs/es/hooks#sessionstart) o [`Setup`](/docs/es/hooks#setup) configurado. Estos se transmiten a medida que el hook los produce. Claude Code v2.1.169 a v2.1.203 los entregó en un lote después de que el hook se completó, aún antes de `system/init`; v2.1.204 restauró la entrega en vivo.284* [eventos `hook_started`, `hook_progress` y `hook_response`](/docs/es/agent-sdk/typescript#sdkhookstartedmessage), mientras se ejecuta un hook [`SessionStart`](/docs/es/hooks#sessionstart) o [`Setup`](/docs/es/hooks#setup) configurado. Estos se transmiten en streaming a medida que el hook los produce. Claude Code v2.1.169 a v2.1.203 los entregaba en un lote después de que el hook se completaba, aún antes de `system/init`; v2.1.204 restauró la entrega en vivo.

283 285 

284El evento también lleva una matriz `capabilities` opcional de cadenas que nombran los comportamientos del protocolo que esta versión de Claude Code implementa, como `interrupt_receipt_v1` o `interrupt_cancel_queued_v1`. Verifíquelo para detectar características en lugar de comparar cadenas de versión, e ignore valores que no reconozca. El campo requiere Claude Code v2.1.205 o posterior y está ausente en versiones anteriores. Consulte [`SDKSystemMessage`](/docs/es/agent-sdk/typescript#sdksystemmessage) para la lista de capacidades.286El evento también lleva una matriz `capabilities` opcional de cadenas que nombran los comportamientos del protocolo que esta versión de Claude Code implementa, como `interrupt_receipt_v1` o `interrupt_cancel_queued_v1`. Revísala para detectar características en lugar de comparar cadenas de versión, e ignora los valores que no reconozcas. El campo requiere Claude Code v2.1.205 o posterior y está ausente en versiones anteriores. Consulta [`SDKSystemMessage`](/docs/es/agent-sdk/typescript#sdksystemmessage) para la lista de capacidades.

285 287 

286<h4 id="fail-ci-when-a-plugin-or-mcp-server-doesn’t-load">288<h4 id="fail-ci-when-a-plugin-or-mcp-server-doesn’t-load">

287 Fallar CI cuando un plugin o servidor MCP no se carga289 Hacer fallar CI cuando un plugin o servidor MCP no se carga

288</h4>290</h4>

289 291 

290Utilice los campos de plugin en el evento `system/init` para detectar un plugin que no se cargó:292Usa los campos de plugin en el evento `system/init` para detectar un plugin que no se cargó:

291 293 

292| Campo | Tipo | Descripción |294| Campo | Tipo | Descripción |

293| - | - | - |295| - | - | - |

294| `plugins` | matriz | plugins que se cargaron exitosamente, cada uno con `name` y `path` |296| `plugins` | matriz | plugins que se cargaron exitosamente, cada uno con `name` y `path` |

295| `plugin_errors` | matriz | errores de tiempo de carga de plugin, cada uno con `plugin`, `type` y `message`. Incluye versiones de dependencia insatisfechas y fallos de carga de `--plugin-dir` como una ruta faltante o archivo inválido. Un plugin que no se cargó está ausente de `plugins`. La clave se omite cuando no hay errores |297| `plugin_errors` | matriz | errores de tiempo de carga de plugin, cada uno con `plugin`, `type` y `message`. Incluye versiones de dependencia insatisfechas y fallos de carga de `--plugin-dir` como una ruta faltante o un archivo comprimido inválido. Un plugin que no se cargó está ausente de `plugins`. La clave se omite cuando no hay errores |

296 298 

297Cuando un directorio o archivo `--plugin-dir` en sí falla al cargarse, su entrada `plugin_errors` incluye la ruta absoluta resuelta como `path`. Úselo para saber cuál de varios valores `--plugin-dir` falló. El campo `path` requiere Claude Code v2.1.283 o posterior.299Cuando un directorio o archivo comprimido de `--plugin-dir` en sí falla al cargarse, su entrada `plugin_errors` incluye la ruta absoluta resuelta como `path`. Úsala para saber cuál de varios valores `--plugin-dir` falló. El campo `path` requiere Claude Code v2.1.283 o posterior.

298 300 

299Utilice los campos del servidor MCP de la misma manera. Cuando pasa [`--mcp-config`](/docs/es/cli-reference#cli-flags) con `-p`, Claude Code espera a que los servidores aún pendientes se completen antes de ejecutar el primer turno, hasta el tiempo de espera de inicio [`MCP_TIMEOUT`](/docs/es/env-vars), 30 segundos de forma predeterminada. Un servidor remoto con una [lista de herramientas en caché](/docs/es/agent-sdk/mcp#connection-timing) omite la espera, muestra `pending` en `system/init` y se conecta en su primera llamada de herramienta. La espera requiere Claude Code v2.1.221 o posterior.301Usa los campos del servidor MCP de la misma manera. Cuando pasas [`--mcp-config`](/docs/es/cli-reference#cli-flags) con `-p`, Claude Code espera a los servidores aún pendientes antes de ejecutar el primer turno, hasta el tiempo de espera de inicio [`MCP_TIMEOUT`](/docs/es/env-vars), 30 segundos de forma predeterminada. Un servidor remoto con una [lista de herramientas en caché](/docs/es/agent-sdk/mcp#connection-timing) omite la espera, muestra `pending` en `system/init` y se conecta en su primera llamada a herramienta. En un [entorno autoalojado](/docs/es/self-hosted-environments-configuration#connection-timing), se aplica en su lugar una espera más corta. La espera requiere Claude Code v2.1.221 o posterior.

300 302 

301Claude Code valida cada entrada `--mcp-config` al inicio y omite las entradas que fallan la validación, por ejemplo una entrada `url` sin `type`. La ejecución continúa y sale limpiamente, por lo que verifique estos campos para detectar un servidor que nunca se cargó:303Claude Code valida cada entrada `--mcp-config` al inicio y omite las entradas que no pasan la validación, por ejemplo una entrada `url` sin `type`. La ejecución continúa y sale limpiamente, así que revisa estos campos para detectar un servidor que nunca se cargó:

302 304 

303| Campo | Tipo | Descripción |305| Campo | Tipo | Descripción |

304| - | - | - |306| - | - | - |

305| `mcp_servers` | matriz | servidores MCP en la sesión, cada uno con `name` y `status` |307| `mcp_servers` | matriz | servidores MCP en la sesión, cada uno con `name` y `status` |

306| `mcp_server_errors` | matriz | entradas `--mcp-config` omitidas por validación de configuración, cada una con `name`, `type` y `message`. `type` es una categoría de omisión como `unknown_type`, `url_missing_type`, `invalid_config` o `reserved_name`; trate valores que no reconozca como una omisión genérica. Los servidores afectados están ausentes de `mcp_servers`. La clave se omite cuando no hay errores, por lo que una puerta de CI puede fallar en una matriz no vacía. Requiere Claude Code v2.1.219 o posterior |308| `mcp_server_errors` | matriz | entradas `--mcp-config` omitidas por la validación de configuración, cada una con `name`, `type` y `message`. `type` es una categoría de omisión como `unknown_type`, `url_missing_type`, `invalid_config` o `reserved_name`; trata los valores que no reconozcas como una omisión genérica. Los servidores afectados están ausentes de `mcp_servers`. La clave se omite cuando no hay errores, por lo que una puerta de CI puede fallar ante una matriz no vacía. Requiere Claude Code v2.1.219 o posterior |

307 309 

308Cuando ejecuta el comando a mano en una terminal, Claude Code también imprime una advertencia de inicio en stderr, como `Warning: 1 MCP server skipped due to invalid config:`, seguida de la razón para cada entrada omitida. Cuando redirige stderr, o cuando un programa como un ejecutor de CI o un host SDK lo captura, Claude Code no imprime advertencia e informa las entradas omitidas solo en el campo `mcp_server_errors`. La advertencia requiere Claude Code v2.1.219 o posterior.310Cuando ejecutas el comando a mano en una terminal, Claude Code también imprime una advertencia de inicio en stderr, como `Warning: 1 MCP server skipped due to invalid config:`, seguida de la razón de cada entrada omitida. Cuando rediriges stderr, o cuando un programa como un ejecutor de CI o un host del SDK lo captura, Claude Code no imprime ninguna advertencia e informa las entradas omitidas solo en el campo `mcp_server_errors`. La advertencia requiere Claude Code v2.1.219 o posterior.

309 311 

310<h4 id="track-plugin-installs">312<h4 id="track-plugin-installs">

311 Rastrear instalaciones de plugins313 Rastrear instalaciones de plugins

312</h4>314</h4>

313 315 

314Cuando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/es/env-vars) está configurado, Claude Code emite eventos `system/plugin_install` mientras los plugins del marketplace se instalan antes del primer turno. Use estos para mostrar el progreso de instalación en su propia interfaz de usuario.316Cuando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/es/env-vars) está configurado, Claude Code emite eventos `system/plugin_install` mientras los plugins del marketplace se instalan antes del primer turno. Úsalos para mostrar el progreso de instalación en tu propia interfaz de usuario.

315 317 

316| Campo | Tipo | Descripción |318| Campo | Tipo | Descripción |

317| - | - | - |319| - | - | - |

318| `type` | `"system"` | tipo de mensaje |320| `type` | `"system"` | tipo de mensaje |

319| `subtype` | `"plugin_install"` | identifica esto como un evento de instalación de plugin |321| `subtype` | `"plugin_install"` | identifica esto como un evento de instalación de plugin |

320| `status` | `"started"`, `"installed"`, `"failed"`, o `"completed"` | `started` y `completed` enmarcan la instalación general; `installed` y `failed` reportan mercados individuales |322| `status` | `"started"`, `"installed"`, `"failed"`, o `"completed"` | `started` y `completed` enmarcan la instalación general; `installed` y `failed` informan sobre marketplaces individuales |

321| `name` | cadena, opcional | nombre del marketplace, presente en `installed` y `failed` |323| `name` | cadena, opcional | nombre del marketplace, presente en `installed` y `failed` |

322| `error` | cadena, opcional | mensaje de fallo, presente en `failed` |324| `error` | cadena, opcional | mensaje de fallo, presente en `failed` |

323| `uuid` | cadena | identificador único del evento |325| `uuid` | cadena | identificador único del evento |


327 Aprobar herramientas automáticamente329 Aprobar herramientas automáticamente

328</h3>330</h3>

329 331 

330Utilice `--allowedTools` para permitir que Claude use ciertas herramientas sin solicitar confirmación. Enumerar `Read` y `Edit` permite que Claude lea y edite archivos sin pedir permiso. Enumerar `Bash` hace lo mismo para comandos de shell, excepto en una ejecución que comienza en [modo automático](/docs/es/permission-modes#how-auto-mode-evaluates-actions), donde Claude Code descarta una entrada `Bash` desnuda como una regla de permiso amplia y el modo automático evalúa cada comando en su lugar. Este ejemplo ejecuta un conjunto de pruebas y corrige fallos con esas tres herramientas enumeradas:332Usa `--allowedTools` para permitir que Claude use ciertas herramientas sin pedir confirmación. Enumerar `Read` y `Edit` permite que Claude lea y edite archivos sin pedir permiso, salvo las lecturas desde [rutas de red](/docs/es/permissions#network-paths). Enumerar `Bash` hace lo mismo para comandos de shell, excepto en una ejecución que comienza en [modo automático](/docs/es/permission-modes#how-auto-mode-evaluates-actions), donde Claude Code descarta una entrada `Bash` sin más como una regla de permisos demasiado amplia y el modo automático evalúa cada comando en su lugar. Este ejemplo ejecuta un conjunto de pruebas y corrige fallos con esas tres herramientas enumeradas:

331 333 

332```bash theme={null}334```bash theme={null}

333claude -p "Run the test suite and fix any failures" \335claude -p "Run the test suite and fix any failures" \

334 --allowedTools "Bash,Read,Edit"336 --allowedTools "Bash,Read,Edit"

335```337```

336 338 

337Para establecer una línea base para toda la sesión en lugar de enumerar herramientas individuales, pase un [modo de permiso](/docs/es/permission-modes). Una ejecución donde nada establece un modo de permiso toma el [modo de permiso de inicio integrado](/docs/es/permission-modes#which-mode-a-session-starts-in), que puede ser `auto`, así que pase el que desee:339Para establecer una línea base para toda la sesión en lugar de enumerar herramientas individuales, pasa un [modo de permisos](/docs/es/permission-modes). Una ejecución donde nada establece un modo de permisos toma el [modo de permisos de inicio integrado](/docs/es/permission-modes#which-mode-a-session-starts-in), que puede ser `auto`, así que pasa el que desees:

338 340 

339* **`auto`**: pase `--permission-mode auto` para que un clasificador revise la mayoría de las acciones en lugar de usted341* **`auto`**: pasa `--permission-mode auto` para que un clasificador revise la mayoría de las acciones en lugar de ti

340* **`dontAsk`**: Claude Code deniega cualquier llamada que de otro modo solicitaría, lo que es útil para ejecuciones de CI bloqueadas. Las acciones que no necesitan aprobación en modo Manual aún se ejecutan, como lecturas de archivos en sus directorios de trabajo y el [conjunto de comandos de solo lectura](/docs/es/permissions#read-only-commands), y también lo hacen las acciones que sus entradas `--allowedTools` o reglas `permissions.allow` cubren. `AskUserQuestion`, herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), y herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) se deniegan incluso cuando una regla de permiso coincide342* **`dontAsk`**: Claude Code deniega cualquier llamada que de otro modo pediría confirmación, lo que es útil para ejecuciones de CI bloqueadas. Las acciones que no necesitan aprobación en modo Manual aún se ejecutan, como lecturas de archivos en tus directorios de trabajo y el [conjunto de comandos de solo lectura](/docs/es/permissions#read-only-commands), y también las acciones que cubren tus entradas `--allowedTools` o reglas `permissions.allow`. `AskUserQuestion`, las herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) y las [lecturas desde rutas de red](/docs/es/permissions#network-paths) se deniegan incluso cuando coincide una regla de permisos

341* **`acceptEdits`**: Claude escribe archivos sin solicitar, y Claude Code aprueba automáticamente comandos comunes del sistema de archivos como `mkdir`, `touch`, `mv` y `cp`. Las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) aún se aplican. Aparte del conjunto de comandos de solo lectura, otros comandos de shell y solicitudes de red aún necesitan una entrada `--allowedTools` o una regla `permissions.allow`. Consulte [qué `acceptEdits` aprueba automáticamente](/docs/es/permission-modes#auto-approve-file-edits-with-acceptedits-mode) para la lista completa343* **`acceptEdits`**: Claude escribe archivos sin pedir confirmación, y Claude Code aprueba automáticamente comandos comunes del sistema de archivos como `mkdir`, `touch`, `mv` y `cp`. Las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) aún se aplican. Aparte del conjunto de comandos de solo lectura, otros comandos de shell y solicitudes de red aún necesitan una entrada `--allowedTools` o una regla `permissions.allow`. Consulta [qué aprueba automáticamente `acceptEdits`](/docs/es/permission-modes#auto-approve-file-edits-with-acceptedits-mode) para la lista completa

342 344 

343Este ejemplo aplica correcciones de lint con `acceptEdits` como línea base:345Este ejemplo aplica correcciones de lint con `acceptEdits` como línea base:

344 346 


347```349```

348 350 

349<h3 id="turn-off-permission-prompts-in-unattended-runs">351<h3 id="turn-off-permission-prompts-in-unattended-runs">

350 Desactivar indicadores de permiso en ejecuciones desatendidas352 Desactivar las solicitudes de permiso en ejecuciones desatendidas

351</h3>353</h3>

352 354 

353Pase `--permission-prompts none` cuando nadie esté disponible para responder indicadores de permiso, por ejemplo en un trabajo programado. La bandera es más importante cuando su ejecución tiene un host de permiso: una aplicación Agent SDK con una devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input), o una herramienta MCP que pasa con [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags). Sin la bandera, su ejecución espera a que ese host responda cada solicitud de permiso.355Pasa `--permission-prompts none` cuando nadie esté disponible para responder solicitudes de permiso, por ejemplo en un trabajo programado. El flag importa sobre todo cuando tu ejecución tiene un host de permisos: una aplicación del Agent SDK con una [devolución de llamada `canUseTool`](/docs/es/agent-sdk/user-input), o una herramienta MCP que pasas con [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags). Sin el flag, tu ejecución espera a que ese host responda cada solicitud de permiso.

354 356 

355Con la bandera, su ejecución no consulta al host ni espera en él. Cualquier cosa que solicitaría se deniega a menos que un hook `PermissionRequest` lo permita, se le dice a Claude que nadie puede aprobar la solicitud y que no la reintente, y la ejecución continúa. En una ejecución `-p` sin host, estas solicitudes se deniegan de cualquier forma, y la bandera también le dice a Claude que no las reintente. Las reglas de permiso, [hooks `PermissionRequest`](/docs/es/hooks#permissionrequest), y el modo de permiso que establezca aún deciden cada llamada primero; Claude Code deniega solo las solicitudes que nada más resuelve.357Con el flag, tu ejecución no consulta al host ni lo espera. Cualquier cosa que pediría confirmación se deniega a menos que un hook `PermissionRequest` la permita, se le indica a Claude que nadie puede aprobar la solicitud y que no la reintente, y la ejecución continúa. En una ejecución `-p` sin host, estas solicitudes se deniegan de cualquier forma, y el flag también le indica a Claude que no las reintente. Las reglas de permisos, los [hooks `PermissionRequest`](/docs/es/hooks#permissionrequest) y el modo de permisos que establezcas siguen decidiendo primero cada llamada; Claude Code deniega solo las solicitudes que nada más resuelve.

356 358 

357Este ejemplo ejecuta una tarea desatendida en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode). El clasificador revisa cada acción como de costumbre, y Claude Code deniega cualquier cosa que habría recurrido a un indicador:359Este ejemplo ejecuta una tarea desatendida en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode). El clasificador revisa cada acción como de costumbre, y Claude Code deniega cualquier cosa que habría terminado en una solicitud de permiso:

358 360 

359```bash theme={null}361```bash theme={null}

360claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none362claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none

361```363```

362 364 

363Con `--permission-prompts none`, Claude Code elimina las herramientas que necesitan una respuesta de una persona, como [`AskUserQuestion`](/docs/es/tools-reference#askuserquestion-tool-behavior), por lo que Claude no puede llamarlas. Cualquier [solicitud de elicitación MCP](/docs/es/mcp#respond-to-mcp-elicitation-requests) que ningún hook [`Elicitation`](/docs/es/hooks#elicitation) responda se cancela.365Con `--permission-prompts none`, Claude Code elimina las herramientas que necesitan una respuesta de una persona, como [`AskUserQuestion`](/docs/es/tools-reference#askuserquestion-tool-behavior), por lo que Claude no puede llamarlas. Cualquier [solicitud de elicitación MCP](/docs/es/mcp#respond-to-mcp-elicitation-requests) que ningún [hook `Elicitation`](/docs/es/hooks#elicitation) responda se cancela.

364 366 

365Con `--output-format stream-json`, las denegaciones aparecen como mensajes del sistema `permission_denied`, y el mensaje de resultado final las enumera en `permission_denials`.367Con `--output-format stream-json`, las denegaciones aparecen como mensajes del sistema `permission_denied`, y el mensaje de resultado final las enumera en `permission_denials`.

366 368 

367<Note>369<Note>

368 La bandera `--permission-prompts` requiere Claude Code v2.1.259 o posterior. Las versiones anteriores la rechazan con un error de opción desconocida.370 El flag `--permission-prompts` requiere Claude Code v2.1.259 o posterior. Las versiones anteriores lo rechazan con un error de opción desconocida.

369</Note>371</Note>

370 372 

371<h3 id="create-a-commit">373<h3 id="create-a-commit">

372 Crear una confirmación374 Crear un commit

373</h3>375</h3>

374 376 

375Este ejemplo revisa los cambios preparados y crea una confirmación con un mensaje apropiado:377Este ejemplo revisa los cambios preparados y crea un commit con un mensaje apropiado:

376 378 

377```bash theme={null}379```bash theme={null}

378claude -p "Look at my staged changes and create an appropriate commit" \380claude -p "Look at my staged changes and create an appropriate commit" \

379 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"381 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

380```382```

381 383 

382La bandera `--allowedTools` utiliza [sintaxis de regla de permiso](/docs/es/settings-reference#permission-rule-syntax). El ` *` final habilita la coincidencia de prefijo, por lo que `Bash(git diff *)` permite cualquier comando que comience con `git diff`. El espacio antes de `*` es importante: sin él, `Bash(git diff*)` también coincidiría con `git diff-index`.384El flag `--allowedTools` utiliza la [sintaxis de reglas de permisos](/docs/es/settings-reference#permission-rule-syntax). El ` *` final habilita la coincidencia de prefijo, por lo que `Bash(git diff *)` permite cualquier comando que comience con `git diff`. El espacio antes de `*` es importante: sin él, `Bash(git diff*)` también coincidiría con `git diff-index`.

383 385 

384<Note>386<Note>

385 La compatibilidad de comandos difiere en modo `-p`:387 La compatibilidad de comandos difiere en modo `-p`:

386 388 

387 * Las [skills](/docs/es/skills) invocadas por el usuario y los comandos personalizados funcionan. Incluya `/skill-name` en la cadena de indicador y Claude Code lo expande antes de ejecutar.389 * Los [skills](/docs/es/skills) invocados por el usuario y los comandos personalizados funcionan. Incluye `/skill-name` en la cadena del prompt y Claude Code lo expande antes de ejecutar.

388 * Los comandos integrados que solo se ejecutan en la interfaz de terminal, como `/login`, no están disponibles.390 * Los comandos integrados que solo se ejecutan en la interfaz de la terminal, como `/login`, no están disponibles.

389 * `/model`, `/effort`, `/fast`, `/color` y `/rename` aceptan el valor como argumento, por ejemplo `/model sonnet`, y `/mcp` sin argumento imprime un resumen de texto del estado del servidor. Estas formas requieren Claude Code v2.1.205 o posterior y siguen las [notas de disponibilidad](/docs/es/commands#all-commands) de cada comando.391 * `/model`, `/effort`, `/fast`, `/color` y `/rename` aceptan el valor como argumento, por ejemplo `/model sonnet`, y `/mcp` sin argumento imprime un resumen de texto del estado del servidor. Estas formas requieren Claude Code v2.1.205 o posterior y siguen las [notas de disponibilidad](/docs/es/commands#all-commands) de cada comando.

390 * Para cambiar una configuración, pase `key=value` a `/config`, por ejemplo `/config thinking=false`.392 * Para cambiar un ajuste, pasa `key=value` a `/config`, por ejemplo `/config thinking=false`.

391 * `/output-style <style>` cambia [estilos de salida](/docs/es/output-styles) y `/output-style` solo los enumera. Requiere Claude Code v2.1.269 o posterior.393 * `/output-style <style>` cambia de [estilo de salida](/docs/es/output-styles) y `/output-style` solo los enumera. Requiere Claude Code v2.1.269 o posterior.

392</Note>394</Note>

393 395 

394<h3 id="customize-the-system-prompt">396<h3 id="customize-the-system-prompt">

395 Personalizar el indicador del sistema397 Personalizar el prompt del sistema

396</h3>398</h3>

397 399 

398Utilice `--append-system-prompt` para agregar instrucciones mientras mantiene el comportamiento predeterminado de Claude Code. Este ejemplo canaliza un diff de PR a Claude e le indica que revise las vulnerabilidades de seguridad. Guárdelo como un script de shell, por ejemplo `review.sh`:400Usa `--append-system-prompt` para agregar instrucciones mientras mantienes el comportamiento predeterminado de Claude Code. Este ejemplo canaliza el diff de un PR a Claude y le indica que lo revise en busca de vulnerabilidades de seguridad. Guárdalo como un script de shell, por ejemplo `review.sh`:

399 401 

400```bash theme={null}402```bash theme={null}

401gh pr diff "$1" | claude -p \403gh pr diff "$1" | claude -p \


403 --output-format json405 --output-format json

404```406```

405 407 

406En el script, `"$1"` representa el primer argumento que pasa en la línea de comandos. Ejecute `bash review.sh 123` y el shell reemplaza `"$1"` con `123`, por lo que el script obtiene el diff para PR 123. Claude Code imprime la revisión como JSON, con el texto en el campo `result`.408En el script, `"$1"` representa el primer argumento que pasas en la línea de comandos. Ejecuta `bash review.sh 123` y el shell reemplaza `"$1"` con `123`, por lo que el script obtiene el diff del PR 123. Claude Code imprime la revisión como JSON, con el texto en el campo `result`.

407 409 

408Consulte [banderas de indicador del sistema](/docs/es/cli-reference#system-prompt-flags) para más opciones incluyendo `--system-prompt` para reemplazar completamente el indicador predeterminado.410Consulta [flags del prompt del sistema](/docs/es/cli-reference#system-prompt-flags) para más opciones, incluido `--system-prompt` para reemplazar completamente el prompt predeterminado.

409 411 

410<h3 id="continue-conversations">412<h3 id="continue-conversations">

411 Continuar conversaciones413 Continuar conversaciones

412</h3>414</h3>

413 415 

414Utilice `--continue` para continuar la conversación más reciente, o `--resume` con un ID de sesión para continuar una conversación específica. En Claude Code v2.1.257 o posterior, cuando pasa `--continue`, Claude Code abre una [sesión en segundo plano](/docs/es/sessions#resume-a-session) que ha terminado, pero no una que aún se está ejecutando. Este ejemplo ejecuta una revisión y luego envía indicaciones de seguimiento:416Usa `--continue` para continuar la conversación más reciente, o `--resume` con un ID de sesión para continuar una conversación específica. En Claude Code v2.1.257 o posterior, cuando pasas `--continue`, Claude Code abre una [sesión en segundo plano](/docs/es/sessions#where-the-session-picker-looks) que ha terminado, pero no una que aún se está ejecutando. Este ejemplo ejecuta una revisión y luego envía prompts de seguimiento:

415 417 

416```bash theme={null}418```bash theme={null}

417# First request419# First request


422claude -p "Generate a summary of all issues found" --continue424claude -p "Generate a summary of all issues found" --continue

423```425```

424 426 

425Si está ejecutando múltiples conversaciones, capture el ID de sesión para reanudar una específica:427Si estás ejecutando múltiples conversaciones, captura el ID de sesión para reanudar una específica:

426 428 

427```bash theme={null}429```bash theme={null}

428session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')430session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')

429claude -p "Continue that review" --resume "$session_id"431claude -p "Continue that review" --resume "$session_id"

430```432```

431 433 

432Puede ejecutar los dos comandos desde diferentes directorios: Claude Code [encuentra la sesión por su ID](/docs/es/sessions#resume-a-session) en cualquier proyecto en esta máquina. Antes de v2.1.223, Claude Code buscaba el ID solo en el directorio del proyecto actual y sus git worktrees, por lo que tenía que ejecutar ambos comandos desde el mismo directorio.434Puedes ejecutar los dos comandos desde directorios diferentes: Claude Code [encuentra la sesión por su ID](/docs/es/sessions#where-the-session-picker-looks) en cualquier proyecto de esta máquina.

433 435 

434En lugar del ID de sesión, puede pasar a `--resume` la ruta absoluta al archivo de [transcripción](/docs/es/sessions#where-transcripts-are-stored) `.jsonl` de una sesión, y Claude Code continúa la conversación almacenada en ese archivo.436En lugar del ID de sesión, puedes pasar a `--resume` la ruta absoluta al [archivo de transcripción](/docs/es/sessions#where-transcripts-are-stored) `.jsonl` de una sesión, y Claude Code continúa la conversación almacenada en ese archivo.

435 437 

436<h2 id="next-steps">438<h2 id="next-steps">

437 Próximos pasos439 Próximos pasos

hooks.md +39 −12

Details

425 425 

426Todos los hooks coincidentes se ejecutan en paralelo. Si defines el mismo manejador en más de un archivo de configuración, se ejecuta una vez. Una copia del mismo manejador de un plugin o skill se mantiene separada.426Todos los hooks coincidentes se ejecutan en paralelo. Si defines el mismo manejador en más de un archivo de configuración, se ejecuta una vez. Una copia del mismo manejador de un plugin o skill se mantiene separada.

427 427 

428Los manejadores se ejecutan en el directorio actual con el entorno de Claude Code. Si el directorio actual ya no existe, por ejemplo un worktree o directorio temporal que otro shell eliminó a mitad de sesión, Claude Code ejecuta hooks de comando desde el primero de estos que aún existe: el directorio en el que comenzó la sesión, la raíz del proyecto, tu directorio de inicio o el directorio temporal del sistema. Claude Code registra una advertencia nombrando el directorio de respaldo en el [registro de depuración](#debug-hooks).428Los manejadores se ejecutan en el directorio actual con el entorno de Claude Code. Si el directorio actual ya no existe, por ejemplo un worktree o directorio temporal que otro shell eliminó a mitad de sesión, Claude Code ejecuta hooks de comando desde el primero de estos que aún existe: el directorio en el que comenzó la sesión, la raíz del proyecto, tu directorio home o el directorio temporal del sistema. Claude Code registra una advertencia nombrando el directorio de respaldo en el [registro de depuración](#debug-hooks). Para una sesión de worktree que inicias desde la aplicación de escritorio, consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).

429 429 

430La variable de entorno `$CLAUDE_CODE_REMOTE` es `"true"` en entornos web remotos y no está establecida en la CLI local. Claude Code v2.1.199 y posterior establece [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/es/env-vars) en el ID de sesión de [Remote Control](/docs/es/remote-control) mientras la sesión local tiene una conexión activa de Remote Control.430La variable de entorno `$CLAUDE_CODE_REMOTE` es `"true"` en entornos web remotos y no está establecida en la CLI local. Claude Code v2.1.199 y posterior establece [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/es/env-vars) en el ID de sesión de [Remote Control](/docs/es/remote-control) mientras la sesión local tiene una conexión activa de Remote Control.

431 431 


645 645 

646 * **`${CLAUDE_PROJECT_DIR}` se queda en su lugar**: aún apunta a la raíz del proyecto donde comenzó la sesión, así que un comando como `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` aún ejecuta el script en el checkout principal.646 * **`${CLAUDE_PROJECT_DIR}` se queda en su lugar**: aún apunta a la raíz del proyecto donde comenzó la sesión, así que un comando como `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` aún ejecuta el script en el checkout principal.

647 * **`cwd` sigue a Claude**: el campo `cwd` en la [entrada JSON](#common-input-fields) del hook es la raíz del worktree después de que Claude entra en un worktree, y el nuevo directorio después de que Claude ejecuta `cd`. Léelo cuando un hook necesite saber en qué directorio está trabajando Claude.647 * **`cwd` sigue a Claude**: el campo `cwd` en la [entrada JSON](#common-input-fields) del hook es la raíz del worktree después de que Claude entra en un worktree, y el nuevo directorio después de que Claude ejecuta `cd`. Léelo cuando un hook necesite saber en qué directorio está trabajando Claude.

648 

649 Para una sesión de worktree que inicias desde la aplicación de escritorio, consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout) para saber a dónde apunta `${CLAUDE_PROJECT_DIR}`.

648</Note>650</Note>

649 651 

650Prefiere [forma exec](#exec-form-and-shell-form) para cualquier hook que haga referencia a un marcador de posición de ruta. En forma shell, envuelve cada marcador de posición en comillas dobles.652Prefiere [forma exec](#exec-form-and-shell-form) para cualquier hook que haga referencia a un marcador de posición de ruta. En forma shell, envuelve cada marcador de posición en comillas dobles.


782| `effort` | Objeto con un campo `level` que contiene el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) en vigor cuando se ejecuta el hook: `"low"`, `"medium"`, `"high"`, `"xhigh"` o `"max"`. Si estableces un nivel que el modelo activo no admite, `level` reporta el nivel que Claude Code ejecutó en su lugar; [Ajustar el nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) explica cómo lo elige. El objeto coincide con el campo `effort` de la [línea de estado](/docs/es/statusline#available-data). Presente para eventos que se activan dentro de un contexto de uso de herramienta, como `PreToolUse`, `PostToolUse`, `Stop` y `SubagentStop`, cuando el modelo actual admite el parámetro de esfuerzo. El nivel también está disponible para comandos de hook y la herramienta Bash como la variable de entorno `$CLAUDE_EFFORT`. |784| `effort` | Objeto con un campo `level` que contiene el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) en vigor cuando se ejecuta el hook: `"low"`, `"medium"`, `"high"`, `"xhigh"` o `"max"`. Si estableces un nivel que el modelo activo no admite, `level` reporta el nivel que Claude Code ejecutó en su lugar; [Ajustar el nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) explica cómo lo elige. El objeto coincide con el campo `effort` de la [línea de estado](/docs/es/statusline#available-data). Presente para eventos que se activan dentro de un contexto de uso de herramienta, como `PreToolUse`, `PostToolUse`, `Stop` y `SubagentStop`, cuando el modelo actual admite el parámetro de esfuerzo. El nivel también está disponible para comandos de hook y la herramienta Bash como la variable de entorno `$CLAUDE_EFFORT`. |

783| `hook_event_name` | Nombre del evento que se activó |785| `hook_event_name` | Nombre del evento que se activó |

784 786 

785Cuando se ejecuta con `--agent` o dentro de un subagente, se incluyen dos campos adicionales:787`agent_id` y `agent_type` le indican a tu script en qué agente se activó un hook, como un subagente, un [compañero en proceso](/docs/es/agent-teams#choose-a-display-mode) o el agente que elegiste con `--agent`:

786 788 

787| Campo | Descripción |789| Campo | Descripción |

788| :- | :- |790| :- | :- |

789| `agent_id` | Identificador único para el subagente. Presente solo cuando el hook se activa dentro de una llamada de subagente. Usa esto para distinguir llamadas de hook de subagente de llamadas del hilo principal. |791| `agent_id` | Identificador único del subagente o compañero en proceso en el que se activa el hook. |

790| `agent_type` | Nombre del agente (por ejemplo, `"Explore"` o `"security-reviewer"`). Presente cuando la sesión usa `--agent` o el hook se activa dentro de un subagente. Para subagentes, el tipo del subagente tiene precedencia sobre el valor `--agent` de la sesión. Consulta [SubagentStart](#subagentstart) para ver los valores que reportan los subagentes personalizados y de plugin y cómo escribir un matcher contra un nombre con alcance de plugin. |792| `agent_type` | Nombre del agente (por ejemplo, `"Explore"` o `"security-reviewer"`). Presente cuando la sesión usa `--agent` o el hook se activa dentro de un subagente. Para subagentes, el tipo del subagente tiene precedencia sobre el valor `--agent` de la sesión. Consulta [SubagentStart](#subagentstart) para ver los valores que reportan los subagentes personalizados y de plugin y cómo escribir un matcher contra un nombre con alcance de plugin. |

791 793 

792Solo los hooks [`SessionStart`](#sessionstart) pueden recibir un campo `model`, y Claude Code no siempre lo incluye. Los hooks [`PreModelSwitch`](#premodelswitch) y [`PostModelSwitch`](#postmodelswitch) reciben `from_model` y `to_model` en su lugar, así que usa un hook PostModelSwitch para seguir el modelo mientras cambia durante una sesión.794Solo los hooks [`SessionStart`](#sessionstart) pueden recibir un campo `model`, y Claude Code no siempre lo incluye. Los hooks [`PreModelSwitch`](#premodelswitch) y [`PostModelSwitch`](#postmodelswitch) reciben `from_model` y `to_model` en su lugar, así que usa un hook PostModelSwitch para seguir el modelo mientras cambia durante una sesión.


855 857 

856Para la mayoría de los eventos, Claude Code escribe stdout en el registro de depuración y no lo muestra en la transcripción. Las excepciones son `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` y `PostModelSwitch`, donde Claude Code agrega el stdout de texto plano como contexto que Claude puede ver y sobre el que puede actuar.858Para la mayoría de los eventos, Claude Code escribe stdout en el registro de depuración y no lo muestra en la transcripción. Las excepciones son `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` y `PostModelSwitch`, donde Claude Code agrega el stdout de texto plano como contexto que Claude puede ver y sobre el que puede actuar.

857 859 

858Que Claude Code lea tu stdout como [salida JSON](#json-output) o como texto plano depende de cómo comienza y termina, ignorando los espacios en blanco circundantes:860Para un hook que no es [async](#how-async-hooks-execute), Claude Code analiza tu stdout como [salida JSON](#json-output) cuando toda la salida es un único objeto JSON sin nada alrededor salvo espacios en blanco; en caso contrario, lo trata como texto plano o como un fallo de análisis:

859 861 

860* **Comienza con `{` y termina con `}`**: Claude Code lo analiza como JSON. Cuando la salida son dos o más líneas que se analizan como JSON cada una por su cuenta, y ninguna línea es un objeto de [salida JSON](#json-output) que establezca un campo, Claude Code trata toda la salida como texto plano. Cuando una de esas líneas sí establece un campo, toda la salida es un fallo de análisis.862* **Un objeto JSON, en una línea o en varias**: se analiza como salida JSON.

861* **Comienza con `{` pero no termina con `}`**: Claude Code lo trata como texto plano.863* **Salida que no comienza con `{`, o que comienza con `{` y no termina con `}`**: texto plano. Según esta regla, un array JSON y una cadena JSON entrecomillada son texto plano.

862* **Comienza con cualquier otra cosa**: Claude Code lo trata como texto plano, incluso si es un array JSON o una cadena JSON entrecomillada.864* **Dos o más líneas que se analizan como JSON cada una por su cuenta, la primera comenzando con `{` y la última terminando con `}`**: texto plano cuando ninguna línea es un objeto de salida JSON que establezca un campo, y un fallo de análisis cuando alguna lo es.

865* **Cualquier otra cosa que comience con `{` y termine con `}` pero no sea JSON válido**: un fallo de análisis.

863 866 

864Cuando Claude Code intenta analizar tu stdout como JSON y no puede, o el objeto analizado falla la [validación del esquema](#json-output), la ejecución es un [error sin bloqueo](#exit-code-output). El aviso `<hook name> hook error` incluye el mensaje de análisis o de validación. En los eventos que agregan stdout de texto plano como contexto, Claude Code no agrega el stdout que no pudo analizar.867Cuando Claude Code intenta analizar tu stdout como JSON y no puede, o el objeto analizado falla la [validación del esquema](#json-output), la ejecución es un [error sin bloqueo](#exit-code-output). El aviso `<hook name> hook error` incluye el mensaje de análisis o de validación. En los eventos que agregan stdout de texto plano como contexto, Claude Code no agrega el stdout que no pudo analizar.

865 868 


1050 Elige un enfoque por hook: usa solo códigos de salida para señalizar, o sal con 0 e imprime JSON para control estructurado. Si los mezclas, exit 2 mantiene su [efecto de bloqueo](#exit-code-2-behavior-per-event), y Claude Code sigue leyendo los campos JSON, con la única excepción de elicitación indicada en [Exit code 2](#exit-code-2).1053 Elige un enfoque por hook: usa solo códigos de salida para señalizar, o sal con 0 e imprime JSON para control estructurado. Si los mezclas, exit 2 mantiene su [efecto de bloqueo](#exit-code-2-behavior-per-event), y Claude Code sigue leyendo los campos JSON, con la única excepción de elicitación indicada en [Exit code 2](#exit-code-2).

1051</Note>1054</Note>

1052 1055 

1053El stdout de tu hook debe contener solo el objeto JSON. Si tu perfil de shell imprime texto al iniciarse, puede interferir con el análisis del JSON. Consulta [El JSON del hook no tiene efecto](/docs/es/hooks-guide#hook-json-has-no-effect) en la guía de solución de problemas.1056No imprimas nada en stdout salvo el objeto JSON. Para un hook que no es [async](#how-async-hooks-execute), cualquier otro texto ahí, como una línea que tu perfil de shell imprime al iniciarse, impide que Claude Code lea el objeto como JSON, y [El JSON del hook no tiene efecto](/docs/es/hooks-guide#hook-json-has-no-effect) muestra cómo encontrar y silenciar ese texto.

1054 1057 

1055Las cadenas `additionalContext`, `systemMessage` e `initialUserMessage` de un hook, y su stdout plano, están limitadas a 10.000 caracteres:1058Las cadenas `additionalContext`, `systemMessage` e `initialUserMessage` de un hook, y su stdout plano, están limitadas a 10.000 caracteres:

1056 1059 


1142 1145 

1143Cuando varios hooks devuelven `additionalContext` para el mismo evento, Claude recibe todos los valores.1146Cuando varios hooks devuelven `additionalContext` para el mismo evento, Claude recibe todos los valores.

1144 1147 

1148Si tu cadena contiene una etiqueta `<system-reminder>` o `</system-reminder>`, Claude recibe la cadena con el `<` de esa etiqueta reemplazado por `&lt;`.

1149 

1145Si un valor supera los 10.000 caracteres, Claude Code escribe el texto en un archivo en el directorio de la sesión y, en su lugar, le pasa a Claude la ruta del archivo con una vista previa de hasta los primeros 2.000 caracteres. Claude puede leer el archivo, pero Claude Code no se lo pide.1150Si un valor supera los 10.000 caracteres, Claude Code escribe el texto en un archivo en el directorio de la sesión y, en su lugar, le pasa a Claude la ruta del archivo con una vista previa de hasta los primeros 2.000 caracteres. Claude puede leer el archivo, pero Claude Code no se lo pide.

1146 1151 

1147Usa `additionalContext` para información que Claude debe conocer sobre el estado actual de tu entorno o sobre la operación que acaba de ejecutarse:1152Usa `additionalContext` para información que Claude debe conocer sobre el estado actual de tu entorno o sobre la operación que acaba de ejecutarse:


1364 Persistir variables de entorno1369 Persistir variables de entorno

1365</h4>1370</h4>

1366 1371 

1367Los hooks SessionStart tienen acceso a la variable de entorno `CLAUDE_ENV_FILE`, que proporciona una ruta de archivo donde puedes persistir variables de entorno para los comandos Bash posteriores.1372Los hooks SessionStart tienen acceso a la variable de entorno `CLAUDE_ENV_FILE`, que proporciona una ruta de archivo donde puedes conservar variables de entorno para los comandos de shell que Claude ejecuta más adelante en la sesión.

1368 1373 

1369Para establecer variables de entorno individuales, escribe sentencias `export` en `CLAUDE_ENV_FILE`. Usa la adición (`>>`) para conservar las variables establecidas por otros hooks:1374Para establecer variables de entorno individuales, escribe sentencias `export` en `CLAUDE_ENV_FILE`. Usa la adición (`>>`) para conservar las variables establecidas por otros hooks:

1370 1375 


1399exit 01404exit 0

1400```1405```

1401 1406 

1407Cada comando de Bash ejecuta el contenido del archivo como código de shell antes del propio comando, así que una línea ahí puede usar cualquier cosa que Bash evalúe, como la referencia a `$PATH` en `export PATH="$PATH:./node_modules/.bin"`.

1408 

1409<a id="persisted-variables-in-powershell-commands" />

1410 

1411<h5 id="persisted-variables-in-powershell-commands">

1412 Variables conservadas en comandos de PowerShell

1413</h5>

1414 

1415Los comandos de [PowerShell](/docs/es/tools-reference#powershell-tool) también reciben las variables de `CLAUDE_ENV_FILE`, en Claude Code v2.1.296 o posterior, pero PowerShell nunca ejecuta el archivo. En su lugar, Claude Code lee las asignaciones del archivo y las copia en el entorno del comando de PowerShell. Solo lo hace cuando cada línea es una de las siguientes, en todo lo que escribió cada hook de esta sesión y en cualquier script al que [hayas establecido `CLAUDE_ENV_FILE`](/docs/es/env-vars) antes de arrancar:

1416 

1417* Una línea en blanco o un comentario `#`

1418* Una asignación al inicio de la línea, escrita como `export NAME=value`, `declare -x NAME=value` o `NAME=value`, con un valor que Bash usaría exactamente tal como está escrito, formado por cualquier combinación de estas partes: texto sin comillas que usa solo letras, dígitos y los caracteres `_ @ % + = : , . / -`, texto entre comillas simples y texto entre comillas dobles donde cualquier `$`, acento grave o `"` dentro esté escapado con una barra invertida

1419 

1420Si alguna línea es de otro tipo, como `export PATH="$PATH:./node_modules/.bin"` con su `$PATH` sin escapar, un comando `source` o las cadenas `$'...'` que imprime `direnv export bash`, los comandos de PowerShell no reciben ninguna de las variables, y `claude --debug` registra `Session environment is not all plain assignments`. Los comandos de Bash siguen recibiéndolas todas. En Windows, los comandos de PowerShell tampoco reciben una variable cuyo valor contiene `/` o `\`, porque Git Bash y Windows escriben las rutas de forma distinta. Un comando de PowerShell [en el sandbox](/docs/es/sandboxing) no recibe ninguna de las variables.

1421 

1402<Note>1422<Note>

1403 `CLAUDE_ENV_FILE` está disponible para los hooks SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged) y [FileChanged](#filechanged). Los demás tipos de hooks no tienen acceso a esta variable.1423 `CLAUDE_ENV_FILE` está disponible para los hooks SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged) y [FileChanged](#filechanged). Los demás eventos de hooks no tienen acceso a esta variable, ni tampoco un hook que se ejecuta en PowerShell, ya sea mediante [`"shell": "powershell"`](#command-hook-fields) o de forma predeterminada en Windows sin Git Bash.

1404</Note>1424</Note>

1405 1425 

1406<h3 id="setup">1426<h3 id="setup">


2030 2050 

2031| Campo | Descripción |2051| Campo | Descripción |

2032| :- | :- |2052| :- | :- |

2033| `permissionDecision` | `"allow"` omite la solicitud de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) y para `AskUserQuestion` y `ExitPlanMode`, que necesitan [`updatedInput` junto con él](#allow-with-updatedinput). `"deny"` impide la llamada a herramienta. `"ask"` pide al usuario que confirme. `"defer"` sale de forma ordenada para que la herramienta pueda reanudarse más tarde. Las [reglas de denegación y de pregunta](/docs/es/permissions#manage-permissions) se siguen evaluando sin importar lo que devuelva el hook |2053| `permissionDecision` | `"allow"` omite la solicitud de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves), para las [lecturas desde rutas de red](/docs/es/permissions#network-paths), y para `AskUserQuestion` y `ExitPlanMode`, que necesitan [`updatedInput` junto con él](#allow-with-updatedinput). `"deny"` impide la llamada a herramienta. `"ask"` pide confirmación al usuario. `"defer"` sale de forma ordenada para que la herramienta pueda reanudarse más tarde. Las [reglas de denegación y de pregunta](/docs/es/permissions#manage-permissions) se siguen evaluando independientemente de lo que devuelva el hook |

2034| `permissionDecisionReason` | Para `"ask"`, se muestra al usuario en la solicitud de permiso. Cuando Claude Code [deniega la llamada](/docs/es/headless#turn-off-permission-prompts-in-unattended-runs) en una ejecución con `-p` en la que nadie puede responder esa solicitud, Claude lee el motivo en el resultado de la herramienta. Para `"deny"`, se muestra a Claude. Para `"allow"` y `"defer"`, solo se escribe en el [registro de depuración](#debug-hooks) |2054| `permissionDecisionReason` | Para `"ask"`, se muestra al usuario en la solicitud de permiso. Cuando Claude Code [deniega la llamada](/docs/es/headless#turn-off-permission-prompts-in-unattended-runs) en una ejecución con `-p` en la que nadie puede responder esa solicitud, Claude lee el motivo en el resultado de la herramienta. Para `"deny"`, se muestra a Claude. Para `"allow"` y `"defer"`, solo se escribe en el [registro de depuración](#debug-hooks) |

2035| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza todo el objeto de entrada, así que incluye los campos sin cambios junto con los modificados. Claude Code evalúa las reglas de permisos y la [elegibilidad para pasar automáticamente a segundo plano](/docs/es/tools-reference#foreground-commands-that-move-to-the-background) de un comando Bash contra la entrada que devuelve tu hook, no contra la entrada que envió Claude. Combínalo con `"allow"` para aprobar automáticamente, o con `"ask"` para mostrar al usuario la entrada modificada. Para `"defer"`, se ignora |2055| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza todo el objeto de entrada, así que incluye los campos sin cambios junto con los modificados. Claude Code evalúa las reglas de permisos y la [elegibilidad para pasar automáticamente a segundo plano](/docs/es/tools-reference#foreground-commands-that-move-to-the-background) de un comando Bash contra la entrada que devuelve tu hook, no contra la entrada que envió Claude. Combínalo con `"allow"` para aprobar automáticamente, o con `"ask"` para mostrar al usuario la entrada modificada. Para `"defer"`, se ignora |

2036| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Se ignora cuando `permissionDecision` es `"defer"`. Consulta [Agregar contexto para Claude](#add-context-for-claude) |2056| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Se ignora cuando `permissionDecision` es `"defer"`. Consulta [Agregar contexto para Claude](#add-context-for-claude) |


2136Si la herramienta diferida ya no está disponible cuando reanudas, el proceso sale con `stop_reason: "tool_deferred_unavailable"` e `is_error: true` antes de que se active el hook. Esto ocurre cuando un servidor MCP que proporcionaba la herramienta no está conectado en la sesión reanudada. El payload `deferred_tool_use` se incluye de todos modos para que puedas identificar qué herramienta falta.2156Si la herramienta diferida ya no está disponible cuando reanudas, el proceso sale con `stop_reason: "tool_deferred_unavailable"` e `is_error: true` antes de que se active el hook. Esto ocurre cuando un servidor MCP que proporcionaba la herramienta no está conectado en la sesión reanudada. El payload `deferred_tool_use` se incluye de todos modos para que puedas identificar qué herramienta falta.

2137 2157 

2138<Note>2158<Note>

2139 Para reanudar una sesión diferida en modo plan, pasa [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags) junto con `--resume` para que Claude Code pueda presentar el plan para su aprobación. Si pasas ciertos otros flags de inicio, la ejecución reanudada no vuelve al modo plan; consulta [Reanudar en modo plan con `-p`](/docs/es/sessions#resume-in-plan-mode-with-p). Requiere Claude Code v2.1.246 o posterior.2159 Para reanudar una sesión diferida en modo plan, pasa [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags) junto con `--resume` para que Claude Code pueda presentar el plan para su aprobación. Para las demás condiciones, consulta [Reanudar en modo plan con `-p`](/docs/es/sessions#resume-in-plan-mode-with-p). Requiere Claude Code v2.1.246 o posterior.

2140 2160 

2141 Cuando reanudas con `-p`, Claude Code no restaura ningún otro modo de permisos almacenado. Inicia la ejecución en el modo de permisos en el que empezaría una nueva ejecución de `claude -p`, así que vuelve a pasar `--permission-mode` o `--dangerously-skip-permissions` si la sesión diferida usaba alguno. Cuando reanudas con `claude --resume <session-id>` sin `-p`, Claude Code restaura el modo de permisos almacenado, con las excepciones enumeradas en [modo de permisos al reanudar](/docs/es/sessions#permission-mode-on-resume).2161 Cuando reanudas con `-p`, Claude Code no restaura ningún otro modo de permisos almacenado. Inicia la ejecución en el modo de permisos en el que empezaría una nueva ejecución de `claude -p`, así que vuelve a pasar `--permission-mode` o `--dangerously-skip-permissions` si la sesión diferida usaba alguno. Cuando reanudas con `claude --resume <session-id>` sin `-p`, Claude Code restaura el modo de permisos almacenado, con las excepciones enumeradas en [modo de permisos al reanudar](/docs/es/sessions#permission-mode-on-resume).

2142</Note>2162</Note>


4304 4324 

4305Después de que el proceso de fondo sale, Claude Code entrega los campos `additionalContext` y `systemMessage` de la respuesta JSON del hook a Claude en el siguiente turno de conversación. A diferencia del `systemMessage` de un hook sincrónico, ninguno de estos campos se le muestra a usted.4325Después de que el proceso de fondo sale, Claude Code entrega los campos `additionalContext` y `systemMessage` de la respuesta JSON del hook a Claude en el siguiente turno de conversación. A diferencia del `systemMessage` de un hook sincrónico, ninguno de estos campos se le muestra a usted.

4306 4326 

4327Imprime la respuesta JSON sola en stdout o en una línea propia:

4328 

4329* **Sola en stdout**: cuando la respuesta es el único texto en stdout, puede abarcar varias líneas, como la salida de `jq` con formato legible. Abarcar varias líneas requiere Claude Code v2.1.295 o posterior.

4330* **En una línea propia**: un hook asincrónico puede imprimir otro texto en stdout cuando la respuesta cabe por sí sola en una línea, por ejemplo con `jq -c`.

4331 

4307Claude Code valida esa respuesta JSON contra el mismo [esquema de salida](#json-output) que los hooks sincronos, y descarta cualquier campo cuyo valor tenga el tipo incorrecto, como un `systemMessage` que no sea una cadena, en lugar de entregarlo. Ejecute con `--debug` para ver una advertencia que nombre cada campo descartado. Antes de v2.1.202, la salida JSON malformada de un hook asincrónico podría bloquear la sesión, y el bloqueo se repetía cada vez que se reanudaba la sesión.4332Claude Code valida esa respuesta JSON contra el mismo [esquema de salida](#json-output) que los hooks sincronos, y descarta cualquier campo cuyo valor tenga el tipo incorrecto, como un `systemMessage` que no sea una cadena, en lugar de entregarlo. Ejecute con `--debug` para ver una advertencia que nombre cada campo descartado. Antes de v2.1.202, la salida JSON malformada de un hook asincrónico podría bloquear la sesión, y el bloqueo se repetía cada vez que se reanudaba la sesión.

4308 4333 

4309Las notificaciones de finalización de hooks asincronos se suprimen por defecto. Para verlas, habilite el modo detallado con `Ctrl+O` o inicie Claude Code con `--verbose`.4334Las notificaciones de finalización de hooks asincronos se suprimen por defecto. Para verlas, habilite el modo detallado con `Ctrl+O` o inicie Claude Code con `--verbose`.


44572026-07-19T02:03:24.382Z [DEBUG] "Hook PostToolUse:Write (PostToolUse) success:\nhook-ran"44822026-07-19T02:03:24.382Z [DEBUG] "Hook PostToolUse:Write (PostToolUse) success:\nhook-ran"

4458```4483```

4459 4484 

4485Para encontrar un hook lento, busca en el registro las líneas `Hooks:` que terminan en una duración. En Claude Code v2.1.296 o posterior, cada hook de comando en un evento de herramienta, `UserPromptSubmit`, `SessionStart`, `Stop` y varios otros eventos deja una al terminar, sin importar lo que haya impreso. La línea indica el nombre del evento, unido mediante dos puntos al nombre de la herramienta u otro valor con el que coincidió el hook, luego el comando del hook entre corchetes, el plugin del que proviene, si lo hay, cómo terminó la ejecución y cuánto tardó, como en `Hooks: PostToolUse:Write [.claude/hooks/log-write.sh] finished with status 0 (31ms)`. Una ejecución también puede terminar como `timed out after <N>ms`, `cancelled`, `moved to the background` o `failed to start`. En algunos eventos, como `Notification`, `SessionEnd` y `PreCompact`, un hook de comando deja en su lugar una línea `completed with status` sin duración.

4486 

4460Para detalles de coincidencia de hooks más granulares, establezca `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` para ver líneas de registro adicionales como recuentos de matchers de hooks y coincidencia de consultas.4487Para detalles de coincidencia de hooks más granulares, establezca `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` para ver líneas de registro adicionales como recuentos de matchers de hooks y coincidencia de consultas.

4461 4488 

4462Para solucionar problemas comunes como hooks que no se activan, hooks Stop que siguen bloqueando, o errores de configuración, consulte [Limitaciones y solución de problemas](/docs/es/hooks-guide#limitations-and-troubleshooting) en la guía. Para un recorrido de diagnóstico más amplio que cubra `/context`, `/doctor` y precedencia de configuración, consulte [Depure su configuración](/docs/es/debug-your-config).4489Para solucionar problemas comunes como hooks que no se activan, hooks Stop que siguen bloqueando, o errores de configuración, consulte [Limitaciones y solución de problemas](/docs/es/hooks-guide#limitations-and-troubleshooting) en la guía. Para un recorrido de diagnóstico más amplio que cubra `/context`, `/doctor` y precedencia de configuración, consulte [Depure su configuración](/docs/es/debug-your-config).

hooks-guide.md +16 −8

Details

624 exit 2 # exit 2 = bloquea la acción624 exit 2 # exit 2 = bloquea la acción

625fi625fi

626 626 

627exit 0 # exit 0 = no hay objeción; el flujo de permiso normal se aplica627exit 0 # exit 0 = sin decisión; se aplica el flujo de permisos normal

628```628```

629 629 

630El código de salida determina qué sucede a continuación:630El código de salida determina qué sucede a continuación:


664 664 

665En `PreToolUse`, Claude Code maneja cada valor `permissionDecision` de la siguiente manera:665En `PreToolUse`, Claude Code maneja cada valor `permissionDecision` de la siguiente manera:

666 666 

667* `"allow"`: omite el aviso de permiso interactivo. Las reglas de negación y solicitud, incluyendo listas de negación gestionadas empresariales, aún se aplican, al igual que los avisos para herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) y para herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code667* `"allow"`: omite la solicitud de permiso interactiva. Las reglas de negación y solicitud, incluyendo listas de negación administradas empresariales, aún se aplican, al igual que las solicitudes para lecturas desde [rutas de red](/docs/es/permissions#network-paths), para herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) y para herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code

668* `"deny"`: cancela la llamada a herramienta y envía la razón a Claude668* `"deny"`: cancela la llamada a herramienta y envía la razón a Claude

669* `"ask"`: muestra el aviso de permiso al usuario como es normal669* `"ask"`: muestra el aviso de permiso al usuario como es normal

670 670 


1015 1015 

1016Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso, en cada [modo de permiso](/docs/es/permission-modes), incluyendo `dontAsk`. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.1016Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso, en cada [modo de permiso](/docs/es/permission-modes), incluyendo `dontAsk`. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.

1017 1017 

1018Lo inverso no es cierto: un hook que devuelve `"allow"` no elude reglas de negación de configuración, y no puede suprimir la solicitud de herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) o de herramientas conectoras [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code. Los hooks en archivos de configuración y en `hooks/hooks.json` de un plugin pueden endurecer restricciones pero no relajarlas más allá de lo que las reglas de permiso permiten.1018Lo inverso no es cierto: un hook que devuelve `"allow"` no elude las reglas de denegación de la configuración, y no puede suprimir la solicitud para lecturas desde [rutas de red](/docs/es/permissions#network-paths), para herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) o para herramientas de conectores [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code. Los hooks en archivos de configuración y en `hooks/hooks.json` de un plugin pueden endurecer restricciones pero no relajarlas más allá de lo que las reglas de permisos permiten.

1019 1019 

1020Un [mod](/docs/es/plugins/mods/overview) que instales y que gestione `tool.check` puede aprobar una llamada que tu hook `PreToolUse` bloqueó, a menos que el hook esté en la configuración administrada. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera qué reglas prevalecen sobre un mod.1020Un [mod](/docs/es/plugins/mods/overview) que instales y que gestione `tool.check` puede aprobar una llamada que tu hook `PreToolUse` bloqueó, a menos que el hook esté en la configuración administrada. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera qué reglas prevalecen sobre un mod.

1021 1021 


1083 1083 

1084Su hook imprime JSON válido, pero la decisión no surte efecto y no aparece ningún error en la transcripción. Verifique cuál es la causa que se aplica:1084Su hook imprime JSON válido, pero la decisión no surte efecto y no aparece ningún error en la transcripción. Verifique cuál es la causa que se aplica:

1085 1085 

1086* **Salida adicional antes del JSON**: algo más escribe en stdout primero, generalmente un `echo` incondicional en su perfil de shell, por lo que la salida ya no comienza con `{` y Claude Code no la analiza como JSON. La causa y la solución siguen esta lista.1086* **Salida adicional antes del JSON**: algo más escribe en stdout primero, generalmente un `echo` incondicional en tu perfil de shell, por lo que la salida ya no comienza con `{`. Consulta [Salida del perfil de shell antes del JSON](#shell-profile-output-before-the-json).

1087* **Un campo en el nivel incorrecto**: compare la ubicación de cada campo con el formato [JSON output](/docs/es/hooks#json-output). Por ejemplo, `permissionDecision` pertenece dentro de `hookSpecificOutput`, no en el nivel superior.1087* **Un campo en el nivel incorrecto**: compara la ubicación de cada campo con el formato [JSON output](/docs/es/hooks#json-output). Por ejemplo, `permissionDecision` pertenece dentro de `hookSpecificOutput`, no en el nivel superior. Consulta [Campos en el nivel incorrecto](#fields-at-the-wrong-level).

1088 1088 

1089Cuando Claude Code ejecuta un hook de comando en forma de shell, uno sin `args`, genera `sh -c` en macOS y Linux, Git Bash en Windows, o PowerShell cuando Git Bash no está instalado por defecto. Este shell es no interactivo, pero Git Bash y algunas configuraciones, como `BASH_ENV` apuntando a `~/.bashrc`, aún obtienen su perfil. Si ese perfil contiene declaraciones `echo` incondicionales, la salida se antepone a su JSON del hook:1089<h4 id="shell-profile-output-before-the-json">

1090 Salida del perfil de shell antes del JSON

1091</h4>

1092 

1093Los hooks se ejecutan en shells no interactivos, pero Git Bash y algunas configuraciones, como `BASH_ENV` apuntando a `~/.bashrc`, aún cargan tu perfil, y todo lo que el perfil imprime llega a stdout antes del JSON de tu hook:

1090 1094 

1091```text theme={null}1095```text theme={null}

1092Shell ready on arm641096Shell ready on arm64

1093{"decision": "block", "reason": "Not allowed"}1097{"decision": "block", "reason": "Not allowed"}

1094```1098```

1095 1099 

1096La salida combinada ya no comienza con `{`, por lo que Claude Code trata toda la salida estándar como texto plano e ignora el JSON. En salida 0 nada se reporta en la transcripción; el intento de análisis se registra solo en el [registro de depuración](/docs/es/hooks#debug-hooks). Para corregir esto, envuelva las declaraciones echo en su perfil de shell para que solo se ejecuten en shells interactivos:1100A menos que el hook sea [asíncrono](/docs/es/hooks#how-async-hooks-execute), Claude Code lee la salida que no comienza con `{` como texto plano, por lo que tu JSON se ignora. Como el hook salió con 0, la transcripción tampoco muestra ningún error. Para comprobar esta causa, inicia Claude Code con `claude --debug`, activa el hook y busca en el [registro de depuración](/docs/es/hooks#debug-hooks) `Hook output does not start with {`. Para corregirlo, envuelve las declaraciones `echo` de tu perfil para que solo se ejecuten en shells interactivos:

1097 1101 

1098```bash theme={null}1102```bash theme={null}

1099# En ~/.zshrc o ~/.bashrc1103# En ~/.zshrc o ~/.bashrc


1104 1108 

1105La variable `$-` contiene banderas de shell, e `i` significa interactivo. Los hooks se ejecutan en shells no interactivos, por lo que el echo se omite.1109La variable `$-` contiene banderas de shell, e `i` significa interactivo. Los hooks se ejecutan en shells no interactivos, por lo que el echo se omite.

1106 1110 

1111<h4 id="fields-at-the-wrong-level">

1112 Campos en el nivel incorrecto

1113</h4>

1114 

1107Cuando su hook devuelve `permissionDecision` o `additionalContext` en el nivel superior en lugar de dentro de `hookSpecificOutput`, el JSON aún se analiza, y Claude Code ignora los campos mal colocados sin reportar un error. Para ver qué campos ignoró, inicie Claude Code con `claude --debug` y busque en el [registro de depuración](/docs/es/hooks#debug-hooks) `Hook JSON output had unrecognized keys`.1115Cuando su hook devuelve `permissionDecision` o `additionalContext` en el nivel superior en lugar de dentro de `hookSpecificOutput`, el JSON aún se analiza, y Claude Code ignora los campos mal colocados sin reportar un error. Para ver qué campos ignoró, inicie Claude Code con `claude --debug` y busque en el [registro de depuración](/docs/es/hooks#debug-hooks) `Hook JSON output had unrecognized keys`.

1108 1116 

1109<h3 id="check-what-a-hook-did">1117<h3 id="check-what-a-hook-did">


1119 1127 

1120Para consultar el resultado de un código de salida y una stdout específicos, incluidas las excepciones por evento, consulta [Exit code output](/docs/es/hooks#exit-code-output) en la referencia.1128Para consultar el resultado de un código de salida y una stdout específicos, incluidas las excepciones por evento, consulta [Exit code output](/docs/es/hooks#exit-code-output) en la referencia.

1121 1129 

1122Para ver los detalles completos de ejecución, incluidos los códigos de salida, stdout y stderr del hook, lee el registro de depuración. Inicia Claude Code con `claude --debug-file /tmp/claude.log` para escribir en una ruta conocida y luego ejecuta `tail -f /tmp/claude.log` en otra terminal. Si iniciaste sin ese flag, ejecuta `/debug` a mitad de sesión para habilitar el registro y encontrar la ruta del registro.1130Para ver los detalles completos de ejecución, incluidos los códigos de salida, stdout y stderr del hook, lee el [registro de depuración](/docs/es/hooks#debug-hooks). Inicia Claude Code con `claude --debug-file /tmp/claude.log` para escribir en una ruta conocida y luego ejecuta `tail -f /tmp/claude.log` en otra terminal. Si iniciaste sin ese flag, ejecuta `/debug` a mitad de sesión para habilitar el registro y encontrar la ruta del registro.

1123 1131 

1124<h2 id="learn-more">1132<h2 id="learn-more">

1125 Aprende más1133 Aprende más

Details

22 22 

23| Atajo | Descripción | Contexto |23| Atajo | Descripción | Contexto |

24| :- | :- | :- |24| :- | :- | :- |

25| `Ctrl+C` | Interrumpir o borrar entrada | Interrumpe una operación en ejecución. Si nada se está ejecutando, la primera pulsación borra la entrada del símbolo del sistema y una segunda pulsación cierra Claude Code |25| `Ctrl+C` | Interrumpir o borrar entrada | Interrumpe una operación en ejecución. Si nada se está ejecutando, la primera pulsación borra la entrada del prompt y una segunda pulsación cierra Claude Code. Presiona `Up` mientras el prompt sigue vacío para recuperar el borrador borrado, lo que requiere Claude Code v2.1.288 o posterior |

26| `Ctrl+X Ctrl+K` | Detener todos los [subagentes en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) en esta sesión y desactivar las [respuestas automáticas de artefactos](/docs/es/artifacts#let-claude-reply-to-comments-on-its-own) para el resto de ella. Presiona dos veces en 3 segundos para confirmar. Puedes presionarlo mientras la solicitud de permiso de un subagente en segundo plano está abierta | Control de subagentes |26| `Ctrl+X Ctrl+K` | Detener todos los [subagentes en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) en esta sesión y desactivar las [respuestas automáticas de artefactos](/docs/es/artifacts#let-claude-reply-to-comments-on-its-own) para el resto de ella. Presiona dos veces en 3 segundos para confirmar. Puedes presionarlo mientras la solicitud de permiso de un subagente en segundo plano está abierta | Control de subagentes |

27| `Ctrl+D` | Salir de la sesión de Claude Code | La primera pulsación muestra una sugerencia de confirmación y una segunda pulsación dentro de 800 ms cierra. Cuando el símbolo del sistema tiene texto, `Ctrl+D` elimina el carácter después del cursor en su lugar |27| `Ctrl+D` | Salir de la sesión de Claude Code | La primera pulsación muestra una sugerencia de confirmación y una segunda pulsación dentro de 800 ms cierra. Cuando el símbolo del sistema tiene texto, `Ctrl+D` elimina el carácter después del cursor en su lugar |

28| `Ctrl+G` o `Ctrl+X Ctrl+E` | Abrir en el editor de texto predeterminado | Edite su símbolo del sistema o respuesta personalizada en su editor de texto predeterminado. `Ctrl+X Ctrl+E` es el enlace nativo de readline. Active **Mostrar última respuesta en editor externo** en `/config` para anteponer la respuesta anterior de Claude como contexto comentado con `#` arriba de su símbolo del sistema; Claude Code elimina el bloque de comentarios cuando guarda |28| `Ctrl+G` o `Ctrl+X Ctrl+E` | Abrir en el editor de texto predeterminado | Edite su símbolo del sistema o respuesta personalizada en su editor de texto predeterminado. `Ctrl+X Ctrl+E` es el enlace nativo de readline. Active **Mostrar última respuesta en editor externo** en `/config` para anteponer la respuesta anterior de Claude como contexto comentado con `#` arriba de su símbolo del sistema; Claude Code elimina el bloque de comentarios cuando guarda |


36| `Ctrl+Z` | Suspender Claude Code | Solo Unix. Suspende el proceso a su shell; ejecute `fg` para reanudar |36| `Ctrl+Z` | Suspender Claude Code | Solo Unix. Suspende el proceso a su shell; ejecute `fg` para reanudar |

37| `Flechas izquierda/derecha` | Ciclar a través de pestañas de diálogo | Navegue entre pestañas en diálogos de permisos y menús. En un diálogo con pestañas, las teclas cambian de pestaña mientras la fila de pestañas tiene el foco. Consulte [Acciones de pestañas](/docs/es/keybindings#tabs-actions) para ver cómo se mueve el foco |37| `Flechas izquierda/derecha` | Ciclar a través de pestañas de diálogo | Navegue entre pestañas en diálogos de permisos y menús. En un diálogo con pestañas, las teclas cambian de pestaña mientras la fila de pestañas tiene el foco. Consulte [Acciones de pestañas](/docs/es/keybindings#tabs-actions) para ver cómo se mueve el foco |

38| `Tab` | Aceptar una sugerencia de autocompletado o agregar un comentario a una respuesta de permiso | Mientras se muestran sugerencias de autocompletado en la entrada del símbolo del sistema, acepta la sugerencia seleccionada. En la mayoría de los avisos de permiso, con **Sí** o **No** enfocado, abre un campo de comentario en esa opción, y presionarlo nuevamente cierra el campo. Consulte [agregar un comentario cuando responde a un aviso de permiso](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) |38| `Tab` | Aceptar una sugerencia de autocompletado o agregar un comentario a una respuesta de permiso | Mientras se muestran sugerencias de autocompletado en la entrada del símbolo del sistema, acepta la sugerencia seleccionada. En la mayoría de los avisos de permiso, con **Sí** o **No** enfocado, abre un campo de comentario en esa opción, y presionarlo nuevamente cierra el campo. Consulte [agregar un comentario cuando responde a un aviso de permiso](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) |

39| `Flechas arriba/abajo` o `Ctrl+P`/`Ctrl+N` | Mover cursor o navegar por el historial de comandos | Cuando la entrada abarca más de una fila visual, ya sea envuelta o multilínea, primero mueve el cursor dentro del símbolo del sistema. Una vez que el cursor está en la primera o última fila visual, presionar nuevamente navega por el historial de comandos. Mientras tiene mensajes en cola, `Arriba` desde la primera fila en su lugar [los retira](#take-back-what-you-queued) |39| `Flechas arriba/abajo` o `Ctrl+P`/`Ctrl+N` | Mover cursor o navegar por el historial de comandos | Cuando la entrada abarca más de una fila visual, ya sea ajustada o multilínea, primero mueve el cursor dentro del prompt. Una vez que el cursor está en la primera o última fila visual, presionar nuevamente navega por el historial de comandos. Mientras tienes mensajes en cola, `Up` desde la primera fila en su lugar [los retira](#take-back-what-you-queued) |

40| `Esc` | Interrumpir Claude o cerrar un diálogo | Detiene la respuesta actual o la llamada de herramienta a mitad de turno para que pueda redirigir. Claude mantiene el trabajo realizado hasta ahora. Si tiene [mensajes en cola](#queue-messages-while-claude-works), Claude Code los envía a continuación. Cuando un diálogo está abierto, `Esc` cierra el diálogo. Mientras un elemento de pie de página está seleccionado, como una fila en el [panel de subagentes](/docs/es/sub-agents#run-subagents-in-foreground-or-background) debajo del símbolo del sistema, `Esc` [lo deselecciona](/docs/es/keybindings#footer-actions) en lugar de interrumpir. En un aviso de permiso, `Esc` rechaza la acción, lo mismo que [**No** sin un comentario](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) |40| `Esc` | Interrumpir Claude o cerrar un diálogo | Detiene la respuesta actual o la llamada de herramienta a mitad de turno para que pueda redirigir. Claude mantiene el trabajo realizado hasta ahora. Si tiene [mensajes en cola](#queue-messages-while-claude-works), Claude Code los envía a continuación. Cuando un diálogo está abierto, `Esc` cierra el diálogo. Mientras un elemento de pie de página está seleccionado, como una fila en el [panel de subagentes](/docs/es/sub-agents#run-subagents-in-foreground-or-background) debajo del símbolo del sistema, `Esc` [lo deselecciona](/docs/es/keybindings#footer-actions) en lugar de interrumpir. En un aviso de permiso, `Esc` rechaza la acción, lo mismo que [**No** sin un comentario](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) |

41| `Esc` + `Esc` | Borrar borrador de entrada o rebobinar | Cuando la entrada del símbolo del sistema contiene texto, doble `Esc` lo borra y guarda el borrador en el historial para que `Arriba` lo recupere. Cuando la entrada está vacía, doble `Esc` abre el [menú de rebobinado](/docs/es/checkpointing) para restaurar o resumir código y conversación desde un punto anterior |41| `Esc` + `Esc` | Borrar borrador de entrada o rebobinar | Cuando la entrada del prompt contiene texto, doble `Esc` lo borra y guarda el borrador en el historial para que `Up` lo recupere. Cuando la entrada está vacía, doble `Esc` abre el [menú de rebobinado](/docs/es/checkpointing) para restaurar o resumir código y conversación desde un punto anterior |

42| `Ctrl+Enter` o `Ctrl+X Ctrl+S` | Enviar mensajes en cola ahora | Envía sus [mensajes en cola](#queue-messages-while-claude-works) y su borrador con ellos de inmediato. [Cuando Claude Code envía lo que puso en cola](#when-claude-code-sends-what-you-queued) cubre lo que sucede con el turno en el que Claude está trabajando. En [modo shell](#shell-mode-with-prefix), la tecla solo pone en cola su comando. En terminales que no reportan teclas extendidas, `Ctrl+Enter` llega como `Enter` simple; `Ctrl+X Ctrl+S` funciona en cualquier terminal. Requiere Claude Code v2.1.275 o posterior |42| `Ctrl+Enter` o `Ctrl+X Ctrl+S` | Enviar mensajes en cola ahora | Envía sus [mensajes en cola](#queue-messages-while-claude-works) y su borrador con ellos de inmediato. [Cuando Claude Code envía lo que puso en cola](#when-claude-code-sends-what-you-queued) cubre lo que sucede con el turno en el que Claude está trabajando. En [modo shell](#shell-mode-with-prefix), la tecla solo pone en cola su comando. En terminales que no reportan teclas extendidas, `Ctrl+Enter` llega como `Enter` simple; `Ctrl+X Ctrl+S` funciona en cualquier terminal. Requiere Claude Code v2.1.275 o posterior |

43| `Shift+Tab`, o `Alt+M` en Windows cuando el tiempo de ejecución de Node o Bun no habilita el modo de entrada VT | Ciclar modos de permiso | Cicle a través de `default` (etiquetado como Manual en el indicador de modo), `acceptEdits`, `plan` y, cuando esté disponible, `bypassPermissions` y luego `auto`. Desde `auto`, la primera pulsación cambia a `default`. Consulte [modos de permiso](/docs/es/permission-modes). En un aviso de permiso de archivo, la misma tecla cierra un [campo de comentario](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) abierto. Sin campo abierto, selecciona la opción que permite la acción para el resto de la sesión, cuando el aviso ofrece esa opción |43| `Shift+Tab`, o `Alt+M` en Windows cuando el tiempo de ejecución de Node o Bun no habilita el modo de entrada VT | Ciclar modos de permiso | Cicle a través de `default` (etiquetado como Manual en el indicador de modo), `acceptEdits`, `plan` y, cuando esté disponible, `bypassPermissions` y luego `auto`. Desde `auto`, la primera pulsación cambia a `default`. Consulte [modos de permiso](/docs/es/permission-modes). En un aviso de permiso de archivo, la misma tecla cierra un [campo de comentario](/docs/es/permissions#add-a-comment-when-you-answer-a-permission-prompt) abierto. Sin campo abierto, selecciona la opción que permite la acción para el resto de la sesión, cuando el aviso ofrece esa opción |

44| `Option+P` (macOS) o `Alt+P` (Windows/Linux) | Cambiar modelo | Cambie modelos sin borrar su símbolo del sistema |44| `Option+P` (macOS) o `Alt+P` (Windows/Linux) | Cambiar modelo | Cambie modelos sin borrar su símbolo del sistema |


442 442 

443Claude Code recupera comandos shell encolados solo cuando el cuadro de entrada está vacío y no tienes nada más encolado, y cambia el cuadro de entrada al modo shell cuando lo hace. De lo contrario, los deja en la cola, listados con su prefijo `!`, y los ejecuta después de que el turno termina.443Claude Code recupera comandos shell encolados solo cuando el cuadro de entrada está vacío y no tienes nada más encolado, y cambia el cuadro de entrada al modo shell cuando lo hace. De lo contrario, los deja en la cola, listados con su prefijo `!`, y los ejecuta después de que el turno termina.

444 444 

445Si recuperas texto encolado mientras `←` [espera para enviar la sesión al segundo plano](/docs/es/agent-view#switch-sessions-without-leaving-the-terminal), el texto permanece en el cuadro de entrada y Claude Code cancela el cambio. Si lo recuperas en el momento en que la sesión se mueve, el texto desaparece junto con la pantalla en primer plano: no se envió. Cada mensaje que recuperaste se guarda como su propia entrada en el [historial de comandos](#command-history). Para recuperar uno, vuelve a abrir la sesión y presiona `Up` en un prompt vacío sin nada encolado.

446 

445<h2 id="prompt-suggestions">447<h2 id="prompt-suggestions">

446 Sugerencias de prompt448 Sugerencias de prompt

447</h2>449</h2>

Details

299 299 

300[Claude Code en Slack](/docs/es/slack) y las [sesiones en la nube](/docs/es/claude-code-on-the-web) no son parte de un despliegue de gateway. Las variables del gateway establecidas en la configuración de entorno de una sesión en la nube no se aplican. Si tu tráfico debe permanecer en el gateway, no habilites estas superficies para esos usuarios.300[Claude Code en Slack](/docs/es/slack) y las [sesiones en la nube](/docs/es/claude-code-on-the-web) no son parte de un despliegue de gateway. Las variables del gateway establecidas en la configuración de entorno de una sesión en la nube no se aplican. Si tu tráfico debe permanecer en el gateway, no habilites estas superficies para esos usuarios.

301 301 

302[Remote Control](/docs/es/remote-control) y [voice dictation](/docs/es/voice-dictation) ambos se basan en una identidad de claude.ai: Remote Control para emparejar una sesión en vivo con su cuenta, y voice dictation para alcanzar el punto final de transcripción de claude.ai. No están disponibles mientras `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, o un `apiKeyHelper` está activo. Remote Control también está deshabilitado mientras `ANTHROPIC_BASE_URL` apunta a un host que no es de Anthropic, por lo que iniciar sesión con claude.ai no es suficiente por sí solo. Antes de v2.1.196, una URL base que no es de Anthropic no bloqueaba Remote Control.302[Remote Control](/docs/es/remote-control) y el [dictado por voz](/docs/es/voice-dictation) se basan en una identidad de claude.ai: Remote Control para emparejar una sesión en vivo con tu cuenta, y el dictado por voz para alcanzar el endpoint de transcripción de claude.ai. No están disponibles mientras `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, o un `apiKeyHelper` está activo. Remote Control también está deshabilitado mientras `ANTHROPIC_BASE_URL` apunta a un host que no es de Anthropic, por lo que iniciar sesión con claude.ai no es suficiente por sí solo.

303 303 

304Para restaurar cualquiera de estas características, inicie sesión con claude.ai y desestablezca las variables de puerta de enlace que comprueba. La sección Remote Control de `claude doctor` nombra lo que actualmente está bloqueando Remote Control.304Para restaurar cualquiera de estas características, inicie sesión con claude.ai y desestablezca las variables de puerta de enlace que comprueba. La sección Remote Control de `claude doctor` nombra lo que actualmente está bloqueando Remote Control.

305 305 

mcp.md +3 −3

Details

283 Aprobaciones de servidores de proyecto y confianza del espacio de trabajo283 Aprobaciones de servidores de proyecto y confianza del espacio de trabajo

284</h4>284</h4>

285 285 

286A partir de v2.1.196, `claude mcp list` y `claude mcp get` leen aprobaciones de `.mcp.json` solo de archivos de configuración que no están incluidos en el repositorio, hasta que confíes en el espacio de trabajo ejecutando `claude` en él y aceptando el diálogo de confianza del espacio de trabajo. Un repositorio clonado no puede aprobar sus propios servidores: [`enableAllProjectMcpServers`](/docs/es/settings-reference#enableallprojectmcpservers) o [`enabledMcpjsonServers`](/docs/es/settings-reference#enabledmcpjsonservers) incluidos con commit en el `.claude/settings.json` del proyecto se ignoran en una carpeta no confiable, y el servidor permanece en `⏸ Pending approval` en lugar de conectarse y verificarse su salud.286`claude mcp list` y `claude mcp get` leen aprobaciones de `.mcp.json` solo de archivos de configuración que no están incluidos en el repositorio, hasta que confíes en el espacio de trabajo ejecutando `claude` en él y aceptando el diálogo de confianza del espacio de trabajo. Un repositorio clonado no puede aprobar sus propios servidores: [`enableAllProjectMcpServers`](/docs/es/settings-reference#enableallprojectmcpservers) o [`enabledMcpjsonServers`](/docs/es/settings-reference#enabledmcpjsonservers) incluidos con commit en el `.claude/settings.json` del proyecto se ignoran en una carpeta no confiable, y el servidor permanece en `⏸ Pending approval` en lugar de conectarse y verificarse su salud.

287 287 

288Las aprobaciones de estas fuentes aún se aplican en una carpeta no confiable:288Las aprobaciones de estas fuentes aún se aplican en una carpeta no confiable:

289 289 


859 859 

860El aviso anuncia cada servidor una vez y lo excluye del recuento en lanzamientos posteriores hasta que ese servidor se haya conectado y necesite iniciar sesión nuevamente. `/mcp` aún enumera todos los servidores que necesitan iniciar sesión.860El aviso anuncia cada servidor una vez y lo excluye del recuento en lanzamientos posteriores hasta que ese servidor se haya conectado y necesite iniciar sesión nuevamente. `/mcp` aún enumera todos los servidores que necesitan iniciar sesión.

861 861 

862En modo no interactivo no hay panel `/mcp`, por lo que Claude Code no puede ejecutar el flujo de OAuth para usted. A partir de v2.1.196, cuando un servidor configurado necesita autenticación durante una ejecución `claude -p` o Agent SDK con [búsqueda de herramientas](#scale-with-mcp-tool-search) habilitada, que es la predeterminada, Claude Code le dice a Claude que las herramientas del servidor no están disponibles hasta que lo autorice. Claude puede entonces nombrar el servidor que necesita iniciar sesión en lugar de responder como si el servidor no estuviera configurado. Complete el inicio de sesión desde una sesión interactiva con `/mcp` o `claude mcp login <name>`.862En modo no interactivo no hay panel `/mcp`, por lo que Claude Code no puede ejecutar el flujo de OAuth por ti. Cuando un servidor configurado necesita autenticación durante una ejecución `claude -p` o Agent SDK con [búsqueda de herramientas](#scale-with-mcp-tool-search) habilitada, que es la predeterminada, Claude Code le dice a Claude que las herramientas del servidor no están disponibles hasta que lo autorices. Claude puede entonces nombrar el servidor que necesita iniciar sesión. Completa el inicio de sesión desde una sesión interactiva con `/mcp` o `claude mcp login <name>`.

863 863 

864Si configuró `headers.Authorization` para el servidor y el servidor rechaza ese encabezado, Claude Code informa que la conexión falló en lugar de recurrir a OAuth. Verifique que el token sea válido para el punto final de MCP, o elimine el encabezado para usar el flujo de OAuth.864Si configuró `headers.Authorization` para el servidor y el servidor rechaza ese encabezado, Claude Code informa que la conexión falló en lugar de recurrir a OAuth. Verifique que el token sea válido para el punto final de MCP, o elimine el encabezado para usar el flujo de OAuth.

865 865 


1048 1048 

1049`oauth.scopes` tiene prioridad sobre `authServerMetadataUrl` y los alcances que el servidor descubre en `/.well-known`. Déjelo sin establecer para permitir que el servidor MCP determine el conjunto de alcances solicitados.1049`oauth.scopes` tiene prioridad sobre `authServerMetadataUrl` y los alcances que el servidor descubre en `/.well-known`. Déjelo sin establecer para permitir que el servidor MCP determine el conjunto de alcances solicitados.

1050 1050 

1051A partir de v2.1.196, cuando `oauth.scopes` no está establecido, Claude Code solicita el alcance proporcionado por el encabezado `WWW-Authenticate` del servidor o sus metadatos de recurso protegido, y no envía ningún parámetro `scope` cuando ninguno proporciona uno. Ya no solicita el catálogo completo de `scopes_supported` de los metadatos del servidor de autorización descubiertos automáticamente. Solicitar ese catálogo hizo que los proveedores de identidad que anuncian alcances solo para administrador o plantilla rechazaran la solicitud de autorización con un error `invalid_scope`. Los metadatos obtenidos de un `authServerMetadataUrl` configurado aún proporcionan su `scopes_supported` como los alcances solicitados.1051Cuando `oauth.scopes` no está establecido, Claude Code no solicita el catálogo completo de `scopes_supported` de los metadatos del servidor de autorización descubiertos automáticamente. Los metadatos obtenidos de un `authServerMetadataUrl` configurado aún proporcionan su `scopes_supported` como los alcances solicitados.

1052 1052 

1053Si el servidor de autorización anuncia `offline_access` en `scopes_supported`, Claude Code lo agrega a los alcances fijados para que el token de acceso pueda actualizarse sin un nuevo inicio de sesión del navegador.1053Si el servidor de autorización anuncia `offline_access` en `scopes_supported`, Claude Code lo agrega a los alcances fijados para que el token de acceso pueda actualizarse sin un nuevo inicio de sesión del navegador.

1054 1054 

Details

470 Envolver valores entre comillas no escapa espacios. Por ejemplo, `org.name="My Company"` resulta en el valor literal `"My Company"` con las comillas incluidas, no `My Company`.470 Envolver valores entre comillas no escapa espacios. Por ejemplo, `org.name="My Company"` resulta en el valor literal `"My Company"` con las comillas incluidas, no `My Company`.

471</Warning>471</Warning>

472 472 

473<h3 id="attribute-telemetry-to-desktop-ssh-sessions">

474 Atribuir la telemetría a las sesiones SSH de Desktop

475</h3>

476 

477Para ver en qué máquina remota se ejecutó una [sesión SSH de Desktop](/docs/es/desktop#ssh-sessions), nombra cada máquina en un atributo personalizado. Las métricas y los eventos no indican en qué máquina se ejecutó una sesión.

478 

479En cada máquina remota, agrega [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) al bloque `env` que activa la telemetría, en el [archivo de configuración administrada que lee la sesión](/docs/es/desktop#managed-settings). Escribe el nombre de forma literal en el archivo de cada máquina. Claude Code no expande el valor, así que `host.name=$(hostname)` llega tal cual, con esos mismos caracteres.

480 

481El siguiente ejemplo nombra la máquina `build-7`:

482 

483```json theme={null}

484{

485 "env": {

486 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

487 "OTEL_METRICS_EXPORTER": "otlp",

488 "OTEL_LOGS_EXPORTER": "otlp",

489 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

490 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",

491 "OTEL_RESOURCE_ATTRIBUTES": "host.name=build-7"

492 }

493}

494```

495 

496Cuando nada más establece la variable, `host.name` llega en el bloque de recursos, tanto en las sesiones SSH de Desktop como en la CLI de esa máquina. Para ver dónde más aparecen los atributos personalizados, consulta [Soporte de organización de múltiples equipos](#multi-team-organization-support).

497 

498Si el nombre no llega, comprueba si se debe a una de estas causas:

499 

500* **Lo estableciste en la computadora que ejecuta Desktop**: Desktop no pasa a la sesión SSH un valor que establezcas ahí

501* **Lo exportaste en un archivo de inicio de sesión**: solo los shells de inicio de sesión leen un archivo como `/etc/profile`. Un valor que exportas con `export` ahí llega a Claude Code cuando lo inicias desde un shell de inicio de sesión. No llega a una sesión SSH de Desktop, porque Desktop no inicia Claude Code a través de un shell de inicio de sesión.

502* **Un valor contiene un espacio**: en ese caso, Claude Code no copia ninguna de las claves en los eventos ni en los puntos de datos, y no reporta ningún error. [Quita el espacio del valor](#multi-team-organization-support).

503* **Algo más ya establece la variable**: en una sesión que inicia la aplicación de escritorio, una variable ya establecida en el entorno de lanzamiento [tiene precedencia sobre los archivos de configuración](/docs/es/settings-reference#how-env-values-interact-with-your-shell). El [registro de depuración](/docs/es/debug-your-config) nombra cada variable ignorada. Cuando un despliegue de Desktop de terceros [especifica un endpoint OTLP](#how-managed-settings-lock-the-otlp-destination) en el entorno que proporciona, ese entorno lleva el propio `OTEL_RESOURCE_ATTRIBUTES` de Desktop.

504 

473<h3 id="example-configurations">505<h3 id="example-configurations">

474 Configuraciones de ejemplo506 Configuraciones de ejemplo

475</h3>507</h3>


1746 1778 

1747Todas las métricas y eventos se exportan con los siguientes atributos de recurso:1779Todas las métricas y eventos se exportan con los siguientes atributos de recurso:

1748 1780 

1749* `service.name`: `claude-code` para sesiones de terminal, `claude-code-desktop` para sesiones iniciadas desde la pestaña Code en la [aplicación Claude Desktop](/docs/es/desktop)1781* `service.name`: `claude-code` para sesiones de terminal, `claude-code-desktop` para sesiones locales iniciadas desde la pestaña Code en la [aplicación Claude Desktop](/docs/es/desktop)

1750* `service.version`: Versión actual de Claude Code, o la versión de la aplicación Desktop para sesiones de la pestaña Code1782* `service.version`: Versión actual de Claude Code, o la versión de la aplicación Desktop para sesiones locales de la pestaña Code

1751* `os.type`: Tipo de sistema operativo (por ejemplo, `linux`, `darwin`, `windows`)1783* `os.type`: Tipo de sistema operativo (por ejemplo, `linux`, `darwin`, `windows`)

1752* `os.version`: Cadena de versión del sistema operativo1784* `os.version`: Cadena de versión del sistema operativo

1753* `host.arch`: Arquitectura del host (por ejemplo, `amd64`, `arm64`)1785* `host.arch`: Arquitectura del host (por ejemplo, `amd64`, `arm64`)

1754* `wsl.version`: Número de versión de WSL (solo presente cuando se ejecuta en Windows Subsystem for Linux)1786* `wsl.version`: Número de versión de WSL (solo presente cuando se ejecuta en Windows Subsystem for Linux)

1755* Nombre del Medidor: `com.anthropic.claude_code`1787* Nombre del Medidor: `com.anthropic.claude_code`

1756 1788 

1757Si sus canalizaciones de recopilador o paneles filtran por `service.name = claude-code`, agregue `claude-code-desktop` al filtro para capturar también la telemetría de sesiones de la pestaña Code.1789Si tus canalizaciones de recopilador o paneles filtran por `service.name = claude-code`, agrega `claude-code-desktop` al filtro para capturar también la telemetría de sesiones locales de la pestaña Code.

1758 1790 

1759<h2 id="roi-measurement-resources">1791<h2 id="roi-measurement-resources">

1760 Recursos de medición de ROI1792 Recursos de medición de ROI

Details

183 Establecer variables de red en la configuración, no en el shell183 Establecer variables de red en la configuración, no en el shell

184</h3>184</h3>

185 185 

186El supervisor es un proceso compartido por cada terminal. Hereda el entorno del shell que lo inicia primero, y un supervisor instalado por el sistema operativo no recibe ningún entorno de shell. Si exporta un proxy, ruta de CA o variable de mTLS solo en su shell, llega a los agentes en segundo plano cuando ese shell sucedió a iniciar en frío el supervisor, y silenciosamente no llega cuando un shell diferente lo hizo.186El supervisor es un único proceso compartido por cada terminal. Hereda el entorno del shell que lo inicia primero. Si exportas un proxy, una ruta de CA o una variable de mTLS solo en tu shell, llega a los agentes en segundo plano cuando ese shell fue el que inició en frío el supervisor, y silenciosamente no llega cuando lo hizo un shell diferente.

187 187 

188Coloque las mismas variables en el bloque `env` de `~/.claude/settings.json` o [configuración administrada](/docs/es/settings) en su lugar. Cada variable en esta página se puede establecer allí, y la configuración es la única que llega a cada sesión en segundo plano en cada máquina.188Coloque las mismas variables en el bloque `env` de `~/.claude/settings.json` o [configuración administrada](/docs/es/settings) en su lugar. Cada variable en esta página se puede establecer allí, y la configuración es la única que llega a cada sesión en segundo plano en cada máquina.

189 189 


196Establezca la configuración [`processWrapper`](/docs/es/settings-reference#processwrapper) para prefijar el supervisor, sus trabajadores y los otros procesos en segundo plano enumerados en [Qué cubre el iniciador](/docs/es/corporate-launcher#what-the-launcher-covers) con su iniciador. La variable de entorno equivalente [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/es/env-vars) tiene prioridad cuando ambas se establecen, y está sujeta a la misma regla: entréguela a través de la configuración administrada o `~/.claude/settings.json`, no una exportación de shell. [Ejecutar Claude Code detrás de un iniciador corporativo](/docs/es/corporate-launcher) cubre el contrato que el iniciador debe satisfacer, qué alcanza y qué no alcanza, y cómo implementarlo.196Establezca la configuración [`processWrapper`](/docs/es/settings-reference#processwrapper) para prefijar el supervisor, sus trabajadores y los otros procesos en segundo plano enumerados en [Qué cubre el iniciador](/docs/es/corporate-launcher#what-the-launcher-covers) con su iniciador. La variable de entorno equivalente [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/es/env-vars) tiene prioridad cuando ambas se establecen, y está sujeta a la misma regla: entréguela a través de la configuración administrada o `~/.claude/settings.json`, no una exportación de shell. [Ejecutar Claude Code detrás de un iniciador corporativo](/docs/es/corporate-launcher) cubre el contrato que el iniciador debe satisfacer, qué alcanza y qué no alcanza, y cómo implementarlo.

197 197 

198<Note>198<Note>

199 Un supervisor ya en ejecución mantiene la configuración de lanzamiento con la que se inició. Después de implementar la configuración del iniciador, ejecute [`claude daemon stop --any`](/docs/es/agent-view#the-supervisor-process) para que el siguiente `claude agents` o `--bg` inicie un supervisor que la respete. Un servicio instalado toma `claude daemon stop` sin `--any`.199 Un supervisor ya en ejecución mantiene la configuración de lanzamiento con la que se inició. Después de implementar el ajuste del iniciador, ejecuta [`claude daemon stop --any`](/docs/es/agent-view#the-supervisor-process) para que el siguiente `claude agents` o `--bg` inicie un supervisor que lo respete.

200</Note>200</Note>

201 201 

202<h2 id="streaming-idle-watchdogs">202<h2 id="streaming-idle-watchdogs">

Details

22| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | Lecturas, ediciones de archivos y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.) | Iterar sobre código que está revisando |22| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | Lecturas, ediciones de archivos y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.) | Iterar sobre código que está revisando |

23| [`plan`](#analyze-before-you-edit-with-plan-mode) | Lecturas, más comandos aprobados por clasificador cuando [modo automático](#eliminate-prompts-with-auto-mode) está disponible | Explorar una base de código antes de cambiarla |23| [`plan`](#analyze-before-you-edit-with-plan-mode) | Lecturas, más comandos aprobados por clasificador cuando [modo automático](#eliminate-prompts-with-auto-mode) está disponible | Explorar una base de código antes de cambiarla |

24| [`auto`](#eliminate-prompts-with-auto-mode) | Todo, con verificaciones de seguridad en segundo plano | Tareas largas, reducir fatiga de avisos |24| [`auto`](#eliminate-prompts-with-auto-mode) | Todo, con verificaciones de seguridad en segundo plano | Tareas largas, reducir fatiga de avisos |

25| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Lecturas y herramientas preaprobadas; cualquier cosa que generaría un aviso se deniega | CI bloqueado y scripts |25| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Lecturas de archivos dentro de tus directorios de trabajo y herramientas preaprobadas; cualquier cosa que pediría confirmación se deniega | CI bloqueado y scripts |

26| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Todo | Solo contenedores aislados y máquinas virtuales |26| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Todo | Solo contenedores aislados y máquinas virtuales |

27 27 

28El modo que revisa cada acción se llama **Manual** en la CLI, en `claude --help`, en las extensiones de VS Code y JetBrains, y en la aplicación de escritorio. Su valor de configuración es `default`, que es lo que usan los hooks e integraciones de SDK. La CLI acepta `manual` como un alias dondequiera que escribas el valor, por ejemplo `claude --permission-mode manual` o `"defaultMode": "manual"`.28El modo que revisa cada acción se llama **Manual** en la CLI, en `claude --help`, en las extensiones de VS Code y JetBrains, y en la aplicación de escritorio. Su valor de configuración es `default`, que es lo que usan los hooks e integraciones de SDK. La CLI acepta `manual` como un alias dondequiera que escribas el valor, por ejemplo `claude --permission-mode manual` o `"defaultMode": "manual"`.


466 La primera lectura fuera de los directorios de trabajo466 La primera lectura fuera de los directorios de trabajo

467</h3>467</h3>

468 468 

469Mientras [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) está desactivado, las lecturas de archivos se ejecutan sin solicitud de permiso en modo automático, incluidas las lecturas fuera de los [directorios de trabajo](/docs/es/permissions#working-directories). La primera vez que Claude usa la herramienta Read, Grep o Glob en una ruta fuera de ellos, Claude Code pregunta si permitir esa lectura.469Mientras [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) está desactivado, las lecturas de archivos distintas de las [lecturas desde rutas de red](/docs/es/permissions#network-paths) se ejecutan sin solicitud de permiso en modo automático, incluidas las lecturas fuera de los [directorios de trabajo](/docs/es/permissions#working-directories). La primera vez que Claude usa la herramienta Read, Grep o Glob en una ruta fuera de ellos, Claude Code pregunta si permitir esa lectura.

470 470 

471La solicitud no aparece en ejecuciones `-p` no interactivas ni en sesiones en segundo plano; allí las lecturas se ejecutan como antes.471La solicitud no aparece en ejecuciones `-p` no interactivas ni en sesiones en segundo plano; allí las lecturas se ejecutan como antes.

472 472 


530 Cada acción pasa por un orden de decisión fijo. Gana el primer paso que coincide:530 Cada acción pasa por un orden de decisión fijo. Gana el primer paso que coincide:

531 531 

532 1. Las acciones que coinciden con tus [reglas de permitir, preguntar o denegar](/docs/es/permissions#manage-permissions) se resuelven de inmediato, con estas excepciones:532 1. Las acciones que coinciden con tus [reglas de permitir, preguntar o denegar](/docs/es/permissions#manage-permissions) se resuelven de inmediato, con estas excepciones:

533 * Las escrituras en [rutas protegidas](#protected-paths) se envían al clasificador incluso cuando coincide una regla de permitir533 * Las escrituras en [rutas protegidas](#protected-paths) se envían al clasificador incluso cuando coincide una regla de permitir. Cuando la ruta protegida es el archivo al que apunta un archivo de configuración que es un enlace simbólico, la escritura puede pedirte confirmación en su lugar, como describe la lista de [rutas protegidas](#protected-paths)

534 * Ninguna regla de permitir aprueba eliminaciones con `rm` y `rmdir` dirigidas a una [ruta crítica](#critical-paths)534 * Ninguna regla de permitir aprueba eliminaciones con `rm` y `rmdir` dirigidas a una [ruta crítica](#critical-paths)

535 * Las herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) te piden confirmación directamente incluso cuando coincide una regla de permitir, y lo mismo ocurre con las herramientas de conectores que [tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en las sesiones donde ese ajuste llega a Claude Code535 * Las herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) te piden confirmación directamente incluso cuando coincide una regla de permitir, y lo mismo ocurre con las herramientas de conectores que [tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en las sesiones donde ese ajuste llega a Claude Code

536 * Un comando de shell que lleva [dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) también se envía al clasificador incluso cuando coincide una regla de permitir, porque una regla aprueba el comando, no sus hosts536 * Un comando de shell que lleva [dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) también se envía al clasificador incluso cuando coincide una regla de permitir, porque una regla aprueba el comando, no sus hosts

537 * Las reglas de preguntar que coinciden con el contenido de un comando, como `Bash(git push *)`, recurren a una solicitud de permiso537 * Las reglas de preguntar que coinciden con el contenido de un comando, como `Bash(git push *)`, recurren a una solicitud de permiso

538 * Una escritura que la [verificación de enlaces simbólicos](/docs/es/permissions#symlinks) resuelve a una ruta protegida te pide confirmación cuando la ruta que Claude solicitó no está protegida en sí misma538 * Una escritura que la [verificación de enlaces simbólicos](/docs/es/permissions#symlinks) resuelve a una ruta protegida te pide confirmación cuando la ruta que Claude solicitó no está protegida en sí misma

539 * Una lectura desde una [ruta de red](/docs/es/permissions#network-paths) te pide confirmación incluso cuando coincide una regla de permitir

539 2. Las acciones de solo lectura y las ediciones de archivos en tu directorio de trabajo se aprueban automáticamente, excepto las escrituras en [rutas protegidas](#protected-paths) y [la primera lectura fuera de los directorios de trabajo](#first-read-outside-the-working-directories), que te pide confirmación540 2. Las acciones de solo lectura y las ediciones de archivos en tu directorio de trabajo se aprueban automáticamente, excepto las escrituras en [rutas protegidas](#protected-paths) y [la primera lectura fuera de los directorios de trabajo](#first-read-outside-the-working-directories), que te pide confirmación

540 * En una sesión con [revisión del clasificador del lado del servidor](#server-side-classifier-review), los comandos de shell de solo lectura y [en sandbox](/docs/es/sandboxing#sandbox-modes) esperan esa revisión y se bloquean si esta los marca541 * En una sesión con [revisión del clasificador del lado del servidor](#server-side-classifier-review), los comandos de shell de solo lectura y [en sandbox](/docs/es/sandboxing#sandbox-modes) esperan esa revisión y se bloquean si esta los marca

541 * Una escritura dentro de tu directorio de trabajo que la [verificación de enlaces simbólicos](/docs/es/permissions#symlinks) resuelve a una ubicación fuera de él te pide confirmación542 * Una escritura dentro de tu directorio de trabajo que la [verificación de enlaces simbólicos](/docs/es/permissions#symlinks) resuelve a una ubicación fuera de él te pide confirmación

542 * Cuando Claude lee un [artefacto creado por otra persona](/docs/es/artifacts#read-an-artifact-shared-with-you), se aplican los casos de aprobación enumerados en esa sección543 * Cuando Claude lee un [artefacto creado por otra persona](/docs/es/artifacts#read-an-artifact-shared-with-you), se aplican los casos de aprobación enumerados en esa sección

544 * Una lectura desde una [ruta de red](/docs/es/permissions#network-paths) te pide confirmación

543 3. Todo lo demás va al clasificador, salvo las [eliminaciones de rutas críticas](#critical-paths) con su tratamiento predeterminado. Las herramientas de conectores y las herramientas MCP con `requiresUserInteraction` que te piden confirmación directamente en el paso 1 tampoco llegan nunca al clasificador, por lo que ni una aprobación exigida por la organización ni un paso de consentimiento se aprueban automáticamente545 3. Todo lo demás va al clasificador, salvo las [eliminaciones de rutas críticas](#critical-paths) con su tratamiento predeterminado. Las herramientas de conectores y las herramientas MCP con `requiresUserInteraction` que te piden confirmación directamente en el paso 1 tampoco llegan nunca al clasificador, por lo que ni una aprobación exigida por la organización ni un paso de consentimiento se aprueban automáticamente

544 4. Si el clasificador bloquea, Claude recibe el motivo. En la mayoría de las sesiones, el motivo nombra la regla con la que coincidió el clasificador, como `[Data Exfiltration]`, en lugar de dar una explicación escrita; consulta [Revisar denegaciones](/docs/es/auto-mode-config#review-denials)546 4. Si el clasificador bloquea, Claude recibe el motivo. En la mayoría de las sesiones, el motivo nombra la regla con la que coincidió el clasificador, como `[Data Exfiltration]`, en lugar de dar una explicación escrita; consulta [Revisar denegaciones](/docs/es/auto-mode-config#review-denials)

545 547 


593 595 

594Claude Code deniega las llamadas que coinciden con tus [reglas `ask`](/docs/es/permissions#manage-permissions) explícitas en lugar de pedir confirmación. También deniega la herramienta integrada `AskUserQuestion` incluso si tus reglas de permitir coinciden con ella, y hace lo mismo con las herramientas de conector [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code. Deniega las herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) de la misma manera, porque su tarjeta de aprobación necesita una respuesta que este modo nunca recopila.596Claude Code deniega las llamadas que coinciden con tus [reglas `ask`](/docs/es/permissions#manage-permissions) explícitas en lugar de pedir confirmación. También deniega la herramienta integrada `AskUserQuestion` incluso si tus reglas de permitir coinciden con ella, y hace lo mismo con las herramientas de conector [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code. Deniega las herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) de la misma manera, porque su tarjeta de aprobación necesita una respuesta que este modo nunca recopila.

595 597 

596Las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](#critical-paths), como `rm -rf /` y `rm -rf ~`, se deniegan incluso cuando una regla de permitir coincide con ellas o un hook `PreToolUse` las permite.598Las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](#critical-paths), como `rm -rf /` y `rm -rf ~`, se deniegan incluso cuando una regla de permitir coincide con ellas o un hook `PreToolUse` las permite. Una lectura desde una [ruta de red](/docs/es/permissions#network-paths) se deniega de la misma manera.

597 599 

598Las sesiones en la nube en [Claude Code en la web](/docs/es/claude-code-on-the-web) ignoran `defaultMode: "dontAsk"`; consulte [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) para obtener detalles.600Las sesiones en la nube en [Claude Code en la web](/docs/es/claude-code-on-the-web) ignoran `defaultMode: "dontAsk"`; consulte [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) para obtener detalles.

599 601 


639* **Si acepta**: Claude Code establece `skipDangerousModePermissionPrompt` en `true` en `~/.claude/settings.json`, por lo que las sesiones posteriores omiten el diálogo. Para ver el diálogo nuevamente, elimine la clave de ese archivo o establézcala en `false`. La [referencia `skipDangerousModePermissionPrompt`](/docs/es/settings-reference#skipdangerousmodepermissionprompt) enumera los otros archivos de configuración donde usted u su organización pueden establecerla.641* **Si acepta**: Claude Code establece `skipDangerousModePermissionPrompt` en `true` en `~/.claude/settings.json`, por lo que las sesiones posteriores omiten el diálogo. Para ver el diálogo nuevamente, elimine la clave de ese archivo o establézcala en `false`. La [referencia `skipDangerousModePermissionPrompt`](/docs/es/settings-reference#skipdangerousmodepermissionprompt) enumera los otros archivos de configuración donde usted u su organización pueden establecerla.

640* **Si rechaza**: Claude Code sale.642* **Si rechaza**: Claude Code sale.

641 643 

642En [modo no interactivo](/docs/es/headless) no se muestra diálogo, y una [sesión en segundo plano](/docs/es/agent-view) iniciada con `--bg` se rechaza hasta que haya aceptado el diálogo en una sesión interactiva.644En [modo no interactivo](/docs/es/headless) no se muestra ningún diálogo. Una [sesión en segundo plano](/docs/es/agent-view) respeta tu aceptación cuando está registrada en la configuración de usuario o en la configuración administrada:

645 

646* Si no hay ninguna aceptación registrada, `claude --bg --permission-mode bypassPermissions` se rechaza hasta que aceptes el diálogo en una sesión interactiva.

647* Si `skipDangerousModePermissionPrompt` está establecido solo en `.claude/settings.local.json`, la sesión en segundo plano se inicia ignorando la solicitud de omisión y fija el aviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Para que se respete la omisión, agrega esa clave a `~/.claude/settings.json` y luego inicia una nueva sesión en segundo plano.

643 648 

644En Linux y macOS, Claude Code se niega a iniciarse en este modo cuando se ejecuta como root o bajo `sudo`:649En Linux y macOS, Claude Code se niega a iniciarse en este modo cuando se ejecuta como root o bajo `sudo`:

645 650 


708* `.devcontainer.json`713* `.devcontainer.json`

709* `.ripgreprc`, `pyrightconfig.json`714* `.ripgreprc`, `pyrightconfig.json`

710* `.mcp.json`, `.claude.json`715* `.mcp.json`, `.claude.json`

716* El archivo al que apunta tu [archivo de configuración](/docs/es/settings#settings-files-and-who-they-affect) de usuario, de proyecto o local cuando el propio archivo de configuración es un enlace simbólico, por ejemplo hacia un repositorio de dotfiles. En los modos que enrutan escrituras en rutas protegidas al clasificador, una escritura en este archivo te pide confirmación en su lugar, incluso cuando coincide una regla de permitir. Si la ruta propia del archivo también es la de un archivo de configuración, como `.claude/settings.json` en otra carpeta, la escritura va al clasificador como ocurre con otras escrituras en rutas protegidas

711 717 

712<h2 id="critical-paths">718<h2 id="critical-paths">

713 Rutas críticas719 Rutas críticas


727 733 

728* La raíz del sistema de archivos734* La raíz del sistema de archivos

729* Directorios de nivel superior, lo que significa cualquier hijo directo de la raíz, como `/usr`, `/etc` o `/data`735* Directorios de nivel superior, lo que significa cualquier hijo directo de la raíz, como `/usr`, `/etc` o `/data`

730* Su directorio de inicio736* Tu directorio home. En Windows, su nombre corto 8.3 también cuenta, como `C:\Users\LONGNA~1`

731* Raíces de unidad de Windows y sus directorios de nivel superior, como `C:\` y `C:\Windows`737* Raíces de unidad de Windows y sus directorios de nivel superior, como `C:\` y `C:\Windows`. Formas de escritura como `\\?\C:\` y `\\localhost\C$` cuentan como `C:\`

732* Su directorio de trabajo y sus padres738* Su directorio de trabajo y sus padres

733* Sus directorios de trabajo adicionales y sus padres, pero solo cuando la eliminación es un glob bajo uno de ellos, como `rm -rf <dir>/*`. `rm -rf <dir>` en el directorio en sí no desencadena esta verificación739* Sus directorios de trabajo adicionales y sus padres, pero solo cuando la eliminación es un glob bajo uno de ellos, como `rm -rf <dir>/*`. `rm -rf <dir>` en el directorio en sí no desencadena esta verificación

734 740 

741Las verificaciones sobre el nombre corto 8.3 del directorio home y sobre las formas de escritura `\\?\C:\` y `\\localhost\C$` requieren Claude Code v2.1.292 o posterior.

742 

735<h3 id="other-targets-that-count-as-critical-paths">743<h3 id="other-targets-that-count-as-critical-paths">

736 Otros objetivos que cuentan como rutas críticas744 Otros objetivos que cuentan como rutas críticas

737</h3>745</h3>


747| Un objetivo que es solo la salida de una sustitución de comando, cuando el `rm` es recursivo | `rm -rf "$(pwd)"` | Claude Code no puede verificar el objetivo antes de que se ejecute el comando |755| Un objetivo que es solo la salida de una sustitución de comando, cuando el `rm` es recursivo | `rm -rf "$(pwd)"` | Claude Code no puede verificar el objetivo antes de que se ejecute el comando |

748| Una sustitución de comando final después de una ruta crítica | `rm -rf ~/$(cmd)` | Claude Code verifica la ruta que permanecería si la sustitución se expandiera vacía, aquí su directorio de inicio |756| Una sustitución de comando final después de una ruta crítica | `rm -rf ~/$(cmd)` | Claude Code verifica la ruta que permanecería si la sustitución se expandiera vacía, aquí su directorio de inicio |

749| Un objetivo que es solo barras invertidas | `rm -rf "\\"` | Git Bash en Windows lee una barra invertida sola como la raíz de la unidad actual, por lo que la verificación se aplica en todas las plataformas |757| Un objetivo que es solo barras invertidas | `rm -rf "\\"` | Git Bash en Windows lee una barra invertida sola como la raíz de la unidad actual, por lo que la verificación se aplica en todas las plataformas |

758| Una ruta de Windows que nombra un volumen por GUID en lugar de por letra de unidad | `rm -rf '\\?\Volume{GUID}\work\build'` | La ruta no dice en qué unidad está, por lo que podría ser una ruta crítica. Requiere Claude Code v2.1.292 o posterior |

750| Algunos objetivos que terminan en `/*` o `/*/` | `rm -rf logs/*/*`, `rm -rf logs/*/`, `cd logs && rm -rf a/*` | Claude Code no puede saber antes de que se ejecute el comando a qué directorios llegan |759| Algunos objetivos que terminan en `/*` o `/*/` | `rm -rf logs/*/*`, `rm -rf logs/*/`, `cd logs && rm -rf a/*` | Claude Code no puede saber antes de que se ejecute el comando a qué directorios llegan |

751 760 

752Para desactivar la verificación en un objetivo que es solo salida de sustitución de comando, establezca [`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`](/docs/es/env-vars#variables) en el entorno que inicia Claude Code.761Para desactivar la verificación en un objetivo que es solo salida de sustitución de comando, establezca [`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`](/docs/es/env-vars#variables) en el entorno que inicia Claude Code.

permissions.md +67 −36

Details

36 36 

37Antes de v2.1.211, Claude Code siempre guardaba la regla en el directorio de inicio, por lo que una aprobación otorgada en un worktree o subdirectorio no se aplicaba al resto del repositorio. Las reglas que las versiones anteriores guardaron en un subdirectorio o worktree aún se aplican a las sesiones iniciadas allí.37Antes de v2.1.211, Claude Code siempre guardaba la regla en el directorio de inicio, por lo que una aprobación otorgada en un worktree o subdirectorio no se aplicaba al resto del repositorio. Las reglas que las versiones anteriores guardaron en un subdirectorio o worktree aún se aplican a las sesiones iniciadas allí.

38 38 

39A veces un mensaje de permiso ofrece solo una aprobación única, sin opción de "no preguntar de nuevo" y sin opción de permitir la acción para el resto de la sesión. Claude Code ofrece esas opciones solo cuando el mensaje puede mostrarle todo lo que permitirían, por lo que una regla que guarde desde un mensaje cubre solo lo que su opción nombrada. Cuando el mensaje ofrece solo la aprobación única, apruebe la acción una vez, o agregue la regla usted mismo en [`/permissions`](#manage-permissions).39A veces una solicitud de permiso ofrece solo una aprobación única, sin opción de "no preguntar de nuevo" y sin opción de permitir la acción para el resto de la sesión. Claude Code ofrece esas opciones solo cuando la solicitud puede mostrarte todo lo que permitirían, por lo que una regla que guardes desde una solicitud cubre solo lo que nombraba su opción. Cuando una solicitud ofrece solo la aprobación única, aprueba la acción una vez, o agrega la regla tú mismo en [`/permissions`](#manage-permissions). Para dejar de recibir solicitudes para un comando que comienza con un exec wrapper como `watch`, o para un comando `find` con una acción como `-delete`, consulta [Exec wrappers y acciones de `find`](#exec-wrappers-and-find-actions).

40 40 

41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">

42 Agregue un comentario cuando responda a un mensaje de permiso42 Agregue un comentario cuando responda a un mensaje de permiso


91| `acceptEdits` | Acepta automáticamente ediciones de archivos y comandos comunes del sistema de archivos como `mkdir`, `touch`, `mv` y `cp` para rutas en el directorio de trabajo o `additionalDirectories` |91| `acceptEdits` | Acepta automáticamente ediciones de archivos y comandos comunes del sistema de archivos como `mkdir`, `touch`, `mv` y `cp` para rutas en el directorio de trabajo o `additionalDirectories` |

92| `plan` | Claude lee archivos y ejecuta comandos de shell de solo lectura para explorar pero no edita sus archivos de origen; con [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) disponible, los comandos aprobados por clasificador también se ejecutan. Etiquetado como Plan en la CLI y en la extensión de VS Code |92| `plan` | Claude lee archivos y ejecuta comandos de shell de solo lectura para explorar pero no edita sus archivos de origen; con [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) disponible, los comandos aprobados por clasificador también se ejecutan. Etiquetado como Plan en la CLI y en la extensión de VS Code |

93| `auto` | Se ejecuta sin avisos rutinarios; antes de que se ejecuten acciones como comandos de shell y solicitudes de red, un [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en segundo plano verifica que se alineen con su solicitud |93| `auto` | Se ejecuta sin avisos rutinarios; antes de que se ejecuten acciones como comandos de shell y solicitudes de red, un [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en segundo plano verifica que se alineen con su solicitud |

94| `dontAsk` | Auto-deniega cada llamada que de otro modo solicitaría permiso; las lecturas de archivos en sus directorios de trabajo y otras acciones que no necesitan aprobación aún se ejecutan, al igual que las herramientas preaprobadas a través de `/permissions` o reglas `permissions.allow`. `AskUserQuestion`, herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool), y herramientas de conector [que su organización configuró en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code se deniegan incluso si las ha permitido |94| `dontAsk` | Deniega automáticamente cada llamada que de otro modo pediría permiso; las lecturas de archivos en tus directorios de trabajo y otras acciones que no necesitan aprobación aún se ejecutan, al igual que las herramientas preaprobadas a través de `/permissions` o reglas `permissions.allow`. `AskUserQuestion`, las herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool), las [lecturas desde rutas de red](#network-paths) y las herramientas de conector [que tu organización configuró en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code se deniegan incluso si las has permitido |

95| `bypassPermissions` | Omite avisos de permisos, excepto para las [acciones que ningún modo auto-aprueba](/docs/es/permission-modes#actions-no-mode-auto-approves) |95| `bypassPermissions` | Omite avisos de permisos, excepto para las [acciones que ningún modo auto-aprueba](/docs/es/permission-modes#actions-no-mode-auto-approves) |

96 96 

97<Warning>97<Warning>


240 Bash240 Bash

241</h3>241</h3>

242 242 

243Las reglas de Bash coinciden con el texto completo del comando, donde `*` representa cualquier texto. [Patrones de comodín](#wildcard-patterns) muestra qué comandos coinciden con cada forma de regla y dónde colocar el `*`. El resto de esta sección cubre cómo Claude Code hace coincidir comandos compuestos y envoltorios, con qué no coincide una regla, los comandos de solo lectura y las redirecciones.243Las reglas de Bash coinciden con el texto completo del comando, donde `*` representa cualquier texto. [Patrones de comodín](#wildcard-patterns) muestra qué comandos coinciden con cada forma de regla y dónde colocar el `*`. El resto de esta sección cubre cómo Claude Code hace coincidir comandos compuestos y envoltorios, qué envoltorios y acciones de `find` no puede aprobar una regla de prefijo, con qué no coincide una regla, los comandos de solo lectura y las redirecciones.

244 244 

245<h4 id="compound-commands">245<h4 id="compound-commands">

246 Comandos compuestos246 Comandos compuestos


268 268 

269Esta lista de envoltorios está integrada y no es configurable. Los ejecutores de entorno de desarrollo como `direnv exec`, `devbox run`, `mise exec`, `npx` y `docker exec` no están en la lista. Debido a que estas herramientas ejecutan sus argumentos como un comando, una regla como `Bash(devbox run *)` coincide con lo que venga después de `run`, incluido `devbox run rm -rf .`. Para aprobar el trabajo dentro de un ejecutor de entorno, escribe una regla específica que incluya tanto el ejecutor como el comando interno, como `Bash(devbox run npm test)`. Agrega una regla por cada comando interno que quieras permitir.269Esta lista de envoltorios está integrada y no es configurable. Los ejecutores de entorno de desarrollo como `direnv exec`, `devbox run`, `mise exec`, `npx` y `docker exec` no están en la lista. Debido a que estas herramientas ejecutan sus argumentos como un comando, una regla como `Bash(devbox run *)` coincide con lo que venga después de `run`, incluido `devbox run rm -rf .`. Para aprobar el trabajo dentro de un ejecutor de entorno, escribe una regla específica que incluya tanto el ejecutor como el comando interno, como `Bash(devbox run npm test)`. Agrega una regla por cada comando interno que quieras permitir.

270 270 

271Los envoltorios Exec como `watch`, `setsid`, `ionice` y `flock` no pueden aprobarse automáticamente con una regla de prefijo como `Bash(watch *)`, por lo que en modo Manual siempre piden confirmación. Lo mismo se aplica a `find` con `-exec` o `-delete`: una regla `Bash(find *)` no cubre estas formas. Para aprobar una invocación específica, escribe una regla de coincidencia exacta para la cadena de comando completa.271<h4 id="exec-wrappers-and-find-actions">

272 Envoltorios Exec y acciones de `find`

273</h4>

274 

275Una regla de prefijo como `Bash(watch *)` o `Bash(find *)` no puede aprobar automáticamente los siguientes comandos, por lo que en modo Manual piden confirmación:

276 

277* **Envoltorios Exec**: como `watch`, `setsid`, `ionice` y `flock`

278* **`find`**: con una acción que ejecuta comandos, elimina archivos o escribe archivos, como `-exec`, `-delete` o `-fprint`, o con `-files0-from`, que toma de un archivo las rutas en las que buscar

279 

280Para aprobar una invocación específica que no contiene `*`, escribe una regla de coincidencia exacta para la cadena de comando completa, como `Bash(find build -type f -delete)`.

281 

282Cuando el comando tiene un `*`, como en `find . -name '*.tmp' -delete`, Claude Code interpreta la regla como un [patrón de comodín](#wildcard-patterns), no como una coincidencia exacta, por lo que el comando aún pide confirmación. Apruébalo cada vez que lo pida, o usa un [hook PreToolUse](/docs/es/hooks#pretooluse-decision-control) que devuelva `"allow"` para él.

272 283 

273<h4 id="bash-rule-limits">284<h4 id="bash-rule-limits">

274 Con qué no coincide una regla de Bash285 Con qué no coincide una regla de Bash


301* **Globs sin comillas para comandos con flags capaces de escribir**: los comandos con flags capaces de escribir o ejecutar, como `find`, `sort`, `sed` y `git`, piden confirmación cuando hay un glob sin comillas, porque el glob podría expandirse a un flag como `-delete`.312* **Globs sin comillas para comandos con flags capaces de escribir**: los comandos con flags capaces de escribir o ejecutar, como `find`, `sort`, `sed` y `git`, piden confirmación cuando hay un glob sin comillas, porque el glob podría expandirse a un flag como `-delete`.

302* **`docker` apuntando a otro daemon**: las formas de solo lectura de `docker` piden confirmación cuando el comando lleva un flag que selecciona un daemon diferente, como `-H`, `--context` o `--url` y `--connection` de Podman.313* **`docker` apuntando a otro daemon**: las formas de solo lectura de `docker` piden confirmación cuando el comando lleva un flag que selecciona un daemon diferente, como `-H`, `--context` o `--url` y `--connection` de Podman.

303* **`file` con flags que abren rutas**: `file` pide confirmación cuando pasa `-m`/`--magic-file` o `-f`/`--files-from`, porque esos flags hacen que `file` abra las rutas indicadas en el valor del flag.314* **`file` con flags que abren rutas**: `file` pide confirmación cuando pasa `-m`/`--magic-file` o `-f`/`--files-from`, porque esos flags hacen que `file` abra las rutas indicadas en el valor del flag.

315* **`ps` que podría imprimir variables de entorno**: `ps` pide confirmación cuando uno de sus argumentos podría actuar como la opción `e`, como en `ps auxe` o `ps aux -e`, porque esa opción imprime las variables de entorno de los procesos. `ps aux` y `ps -ef` se ejecutan sin pedir confirmación. La verificación de las formas con guion como `ps aux -e` requiere Claude Code v2.1.290 o posterior.

304* **Rutas de red en Windows**: un comando cuyos argumentos incluyen una ruta de red (UNC), como `\\server\share\file`, pide confirmación porque acceder a una ruta de red puede enviar tus credenciales de Windows al host que nombra. La misma verificación se aplica a los comandos de la [herramienta PowerShell](/docs/es/tools-reference#powershell-tool).316* **Rutas de red en Windows**: un comando cuyos argumentos incluyen una ruta de red (UNC), como `\\server\share\file`, pide confirmación porque acceder a una ruta de red puede enviar tus credenciales de Windows al host que nombra. La misma verificación se aplica a los comandos de la [herramienta PowerShell](/docs/es/tools-reference#powershell-tool).

305* **Escrituras en variables especiales del shell**: un comando que establece, elimina o itera sobre ciertas variables especiales del shell, como `PATH` o `IFS`, pide confirmación incluso cuando el resto del comando es de solo lectura.317* **Escrituras en variables especiales del shell**: un comando que establece, elimina o itera sobre ciertas variables especiales del shell, como `PATH` o `IFS`, pide confirmación incluso cuando el resto del comando es de solo lectura.

306* **Comandos que el análisis no puede procesar**: cuando Claude Code no puede analizar completamente un comando, pide aprobación en lugar de tratarlo como de solo lectura. Los comandos de más de 10,000 caracteres siempre piden confirmación porque exceden lo que el análisis procesa.318* **Comandos que el análisis no puede procesar**: cuando Claude Code no puede analizar completamente un comando, pide aprobación en lugar de tratarlo como de solo lectura. Los comandos de más de 10,000 caracteres siempre piden confirmación porque exceden lo que el análisis procesa.


508 520 

509Cuando una herramienta abre después el archivo aprobado, [confirma que la ruta aún se resuelve a la ubicación que aprobó la verificación de permisos](/docs/es/errors#refusing-after-a-symlink-changed).521Cuando una herramienta abre después el archivo aprobado, [confirma que la ruta aún se resuelve a la ubicación que aprobó la verificación de permisos](/docs/es/errors#refusing-after-a-symlink-changed).

510 522 

523<h4 id="network-paths">

524 Rutas de red

525</h4>

526 

527Cuando las herramientas de lectura de archivos de Claude, como Read, Grep y Glob, leen desde una ruta de red, la lectura recibe su propia verificación de permisos. Una ruta de red es aquella que puede llegar a otra computadora: en Windows, una ruta UNC como `\\server\share\file`, y en macOS y Linux, una ruta de montaje automático `/net` como `/net/fileserver/notes.txt`. Buscar una ruta así puede contactar al host que nombra, y en Windows ese contacto puede enviarle tus credenciales al host. Los comandos de shell tienen su propia verificación: en modo Manual, un comando de Bash o PowerShell de solo lectura cuyos argumentos incluyen una ruta UNC [aún pide confirmación en Windows](#read-only-commands).

528 

529En Claude Code v2.1.292 y posteriores, ninguno de los siguientes elimina la solicitud:

530 

531* **Reglas de permiso**: una regla no aprueba de antemano la lectura, incluida una regla para toda la herramienta, como `Read`

532* **Hooks PreToolUse**: un [hook](#extend-permissions-with-hooks) que devuelve `"allow"` no omite la solicitud

533* **Modo automático**: la solicitud te llega a ti, y el [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) no decide sobre la lectura

534 

535En el modo `dontAsk`, Claude Code niega la lectura en lugar de pedir confirmación. En el modo `bypassPermissions`, y en sesiones interactivas de terminal en modo plan con [omisión de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) disponible, la lectura se ejecuta sin esta solicitud.

536 

537Para leer archivos en un recurso compartido de red sin esta solicitud, primero asígnale al recurso compartido una ruta local:

538 

539* **Windows**: asigna el recurso compartido a una letra de unidad y pasa la unidad con `--add-dir` al iniciar Claude Code, como se describe en [Directorios de trabajo](#working-directories)

540* **macOS y Linux**: monta el recurso compartido en una ruta local, como un directorio bajo `/mnt` o `/Volumes`, y lee los archivos desde allí, como se describe en [El directorio de trabajo es una ruta de red](/docs/es/errors#working-directory-is-a-network-path)

541 

511<h3 id="webfetch">542<h3 id="webfetch">

512 WebFetch543 WebFetch

513</h3>544</h3>

514 545 

515Las reglas de WebFetch usan un prefijo `domain:` y se comparan con el nombre de host de la URL solicitada. La coincidencia no distingue mayúsculas de minúsculas, admite comodines `*` y elimina un `.` final tanto de la regla como del nombre de host, de modo que `example.com.` y `example.com` se tratan igual.546Las reglas de WebFetch usan un prefijo `domain:` y se comparan con el nombre de host de la URL solicitada. La coincidencia no distingue mayúsculas de minúsculas, admite comodines `*` y elimina un `.` final tanto de la regla como del nombre de host, de modo que `example.com.` y `example.com` se tratan igual.

516 547 

517* `WebFetch(domain:example.com)` coincide con las solicitudes a `example.com`548* `WebFetch(domain:example.com)` coincide solo con las solicitudes a `example.com`. Para cubrir también subdominios como `api.example.com`, agrega una regla `WebFetch(domain:*.example.com)`

518* `WebFetch(domain:*.example.com)` coincide con cualquier subdominio a cualquier profundidad, como `api.example.com` o `a.b.example.com`, pero no con `example.com` en sí549* `WebFetch(domain:*.example.com)` coincide con cualquier subdominio a cualquier profundidad, como `api.example.com` o `a.b.example.com`, pero no con `example.com` en sí

519* `WebFetch(domain:*)` coincide con todos los dominios. No es lo mismo que una regla `WebFetch` sin argumentos; consulta [Permitir o negar todas las obtenciones](#allow-or-deny-every-fetch)550* `WebFetch(domain:*)` coincide con todos los dominios. No es lo mismo que una regla `WebFetch` sin argumentos; consulta [Permitir o negar todas las obtenciones](#allow-or-deny-every-fetch)

520 551 


622 653 

623Consulte [Decidir si confiar en un mod](/docs/es/plugins/mods/overview#decide-whether-to-trust-a-mod), o [Administrar mods para su organización](/docs/es/plugins/mods/admin#know-what-happens-by-default) si implementa configuración administrada.654Consulte [Decidir si confiar en un mod](/docs/es/plugins/mods/overview#decide-whether-to-trust-a-mod), o [Administrar mods para su organización](/docs/es/plugins/mods/admin#know-what-happens-by-default) si implementa configuración administrada.

624 655 

625Las herramientas MCP marcadas como [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) también aún solicitan cuando un hook devuelve `"allow"`, al igual que las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code.656Para una [herramienta que requiere interacción del usuario](/docs/es/permission-modes#actions-no-mode-auto-approves), como `AskUserQuestion` o una herramienta MCP marcada como `requiresUserInteraction`, la aprobación de `tool.check` de un mod no omite la solicitud de permiso. Requiere Claude Code v2.1.292 o posterior. Las herramientas MCP marcadas como [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) también siguen solicitando confirmación cuando un hook devuelve `"allow"`, al igual que las lecturas desde [rutas de red](#network-paths) y las herramientas de conector [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code.

626 657 

627Un hook de bloqueo también tiene precedencia sobre las reglas de permiso. Un hook que sale con código 2 detiene la llamada de herramienta antes de que se evalúen las reglas de permisos, por lo que el bloqueo se aplica incluso cuando una regla de permiso permitiría que la llamada continúe. Para ejecutar todos los comandos Bash sin avisos excepto algunos que desea bloquear, agregue `"Bash"` a su lista de permiso y registre un hook PreToolUse que rechace esos comandos específicos. Consulte [Bloquear ediciones a archivos protegidos](/docs/es/hooks-guide#block-edits-to-protected-files) para un script de hook que puede adaptar.658Un hook de bloqueo también tiene precedencia sobre las reglas de permiso. Un hook que sale con código 2 detiene la llamada de herramienta antes de que se evalúen las reglas de permisos, por lo que el bloqueo se aplica incluso cuando una regla de permiso permitiría que la llamada continúe. Para ejecutar todos los comandos Bash sin avisos excepto algunos que desea bloquear, agregue `"Bash"` a su lista de permiso y registre un hook PreToolUse que rechace esos comandos específicos. Consulte [Bloquear ediciones a archivos protegidos](/docs/es/hooks-guide#block-edits-to-protected-files) para un script de hook que puede adaptar.

628 659 


630 Directorios de trabajo661 Directorios de trabajo

631</h2>662</h2>

632 663 

633Por defecto, Claude tiene acceso a archivos en el directorio donde fue lanzado. Ese directorio es el directorio de trabajo principal de la sesión hasta que [mueva la sesión con `/cd`](#move-the-session-to-another-directory). Puede extender este acceso:664De forma predeterminada, Claude tiene acceso a los archivos del directorio donde lo iniciaste. Ese directorio es el directorio de trabajo principal de la sesión hasta que [muevas la sesión con `/cd`](#move-the-session-to-another-directory). Puedes ampliar este acceso:

634 665 

635* **Durante el inicio**: use el argumento CLI `--add-dir <path>`666* **Durante el inicio**: usa el argumento de CLI `--add-dir <path>`

636* **Durante la sesión**: use el comando `/add-dir`667* **Durante la sesión**: usa el comando `/add-dir`

637* **Configuración persistente**: agregue a `additionalDirectories` en [archivos de configuración](/docs/es/settings#where-settings-live)668* **Configuración persistente**: agrégalo a `additionalDirectories` en los [archivos de configuración](/docs/es/settings#where-settings-live)

638 669 

639Los archivos en directorios adicionales siguen las mismas reglas de permisos que el directorio de trabajo original: se vuelven legibles sin avisos, y los permisos de edición de archivos siguen el modo de permisos actual.670Los archivos de los directorios adicionales siguen las mismas reglas de permisos que el directorio de trabajo original: se pueden leer sin solicitudes de permiso, salvo por la comprobación de [rutas de red](#network-paths), y los permisos de edición de archivos siguen el modo de permisos actual.

640 671 

641No puede agregar la mayoría de [rutas de red](/docs/es/errors#working-directory-is-a-network-path), como el recurso compartido UNC `\\server\share`, como directorios de trabajo, porque buscar uno puede contactar al host que nombra. En Windows, asigne el recurso compartido a una letra de unidad en su lugar y pase la unidad con `--add-dir` al iniciar.672No puedes agregar la mayoría de las [rutas de red](/docs/es/errors#working-directory-is-a-network-path), como el recurso compartido UNC `\\server\share`, como directorios de trabajo, porque buscar una de ellas puede contactar al host que nombra. En Windows, asigna el recurso compartido a una letra de unidad y pasa esa unidad con `--add-dir` al iniciar.

642 673 

643Establezca [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) para hacer que las herramientas de archivo rechacen las rutas que delimita en cada modo de permisos. En modo automático, Claude Code ofrece activarlo la primera vez que Claude [lee fuera de los directorios de trabajo](/docs/es/permission-modes#first-read-outside-the-working-directories).674Configura [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) para que las herramientas de archivos rechacen las rutas fuera de los límites que establece en todos los modos de permisos. En modo automático, Claude Code ofrece activarlo la primera vez que Claude [lee fuera de los directorios de trabajo](/docs/es/permission-modes#first-read-outside-the-working-directories).

644 675 

645En sesiones en segundo plano en macOS, el host de la sesión solicita acceso a carpetas protegidas como `~/Desktop`, `~/Documents` y `~/Downloads` por separado de su terminal cuando Claude necesita leer o escribir archivos allí; si las lecturas allí fallan con `Operation not permitted`, consulte [cómo otorgar acceso a carpetas a sesiones en segundo plano](/docs/es/agent-view#background-sessions-can%E2%80%99t-read-desktop-documents-or-downloads-on-macos).676En las sesiones en segundo plano en macOS, el host de la sesión solicita acceso a carpetas protegidas como `~/Desktop`, `~/Documents` y `~/Downloads` por separado de tu terminal cuando Claude necesita leer o escribir archivos allí; si las lecturas en esas carpetas fallan con `Operation not permitted`, consulta [cómo otorgar acceso a carpetas a las sesiones en segundo plano](/docs/es/agent-view#background-sessions-can’t-read-desktop-documents-or-downloads-on-macos).

646 677 

647<h3 id="move-the-session-to-another-directory">678<h3 id="move-the-session-to-another-directory">

648 Mover la sesión a otro directorio679 Mover la sesión a otro directorio

649</h3>680</h3>

650 681 

651Para mover la sesión a un directorio de trabajo principal diferente, en lugar de [agregar un directorio](#working-directories) junto al actual, ejecute `/cd <path>`. Claude Code mantiene la conversación, carga el `CLAUDE.md` del nuevo directorio, y le solicita que [confíe en el espacio de trabajo](#project-allow-rules-and-workspace-trust) si no ha trabajado en él antes. Después, Claude Code [encuentra la sesión movida](/docs/es/sessions#resume-a-session) cuando ejecuta `--resume` desde el nuevo directorio.682Para mover la sesión a un directorio de trabajo principal diferente, en lugar de [agregar un directorio](#working-directories) junto al actual, ejecuta `/cd <path>`. Claude Code conserva la conversación, carga el `CLAUDE.md` del nuevo directorio y te pide [confiar en el espacio de trabajo](#project-allow-rules-and-workspace-trust) si no has trabajado en él antes. Después, Claude Code [encuentra la sesión movida](/docs/es/sessions#where-the-session-picker-looks) cuando ejecutas `--resume` desde el nuevo directorio.

652 683 

653Tan pronto como se mueva, Claude Code aplica la configuración del proyecto del nuevo directorio:684En cuanto te mueves, Claude Code aplica la configuración de proyecto del nuevo directorio:

654 685 

655* Su configuración de proyecto, incluidas sus reglas de permisos y [hooks](/docs/es/hooks)686* Su configuración de proyecto, incluidas sus reglas de permisos y sus [hooks](/docs/es/hooks)

656* Sus servidores [`.mcp.json`](/docs/es/mcp#project-scope), sujetos a la misma [aprobación de servidor](/docs/es/mcp#project-server-approvals-and-workspace-trust) que al iniciar, y los servidores MCP de [alcance local](/docs/es/mcp#local-scope) que registró en él687* Sus [servidores de `.mcp.json`](/docs/es/mcp#project-scope), sujetos a la misma [aprobación de servidores](/docs/es/mcp#project-server-approvals-and-workspace-trust) que al inicio, y los servidores MCP de [alcance local](/docs/es/mcp#local-scope) que registraste en él

657* Los [plugins](/docs/es/plugins/overview) que su configuración habilita, sus [skills](/docs/es/skills#discovery-from-parent-and-nested-directories), y sus [subagentes](/docs/es/sub-agents)688* Los [plugins](/docs/es/plugins/overview) que habilita su configuración, sus [skills](/docs/es/skills#discovery-from-parent-and-nested-directories) y sus [subagentes](/docs/es/sub-agents)

658* Sus valores [`env`](/docs/es/settings-reference#env), aplicados sobre las variables de entorno de la configuración del directorio anterior, que permanecen en vigor689* Sus valores de [`env`](/docs/es/settings-reference#env), aplicados sobre las variables de entorno de la configuración del directorio anterior, que siguen vigentes

659 690 

660Claude Code también desconecta los servidores MCP del proyecto del directorio anterior y de [alcance local](/docs/es/mcp#local-scope), y los servidores de [plugins](/docs/es/mcp#plugin-provided-mcp-servers) que ya no están habilitados después del movimiento. Toma [directorios adicionales](#working-directories) de la configuración del nuevo directorio en lugar del anterior, y mantiene los directorios que agregó con `--add-dir` o `/add-dir`. Los hooks que el movimiento activa aún reciben [`${CLAUDE_PROJECT_DIR}`](/docs/es/hooks#reference-scripts-by-path) establecido en la raíz del proyecto donde comenzó la sesión.691Claude Code también desconecta los servidores MCP de proyecto y de [alcance local](/docs/es/mcp#local-scope) del directorio anterior, así como los servidores de los [plugins](/docs/es/mcp#plugin-provided-mcp-servers) que ya no están habilitados después del cambio. Toma los [directorios adicionales](#working-directories) de la configuración del nuevo directorio en lugar de la del anterior, y conserva los directorios que agregaste con `--add-dir` o `/add-dir`. Los hooks que activa el cambio siguen recibiendo [`${CLAUDE_PROJECT_DIR}`](/docs/es/hooks#reference-scripts-by-path) con el valor de la raíz del proyecto donde comenzó la sesión.

661 692 

662Cuando el nuevo directorio aún no es de confianza, Claude Code enumera en el aviso de confianza las reglas de permiso, directorios adicionales, hooks y comandos auxiliares que la configuración del directorio activaría, para que pueda revisarlos antes de aceptar. Si rechaza, la sesión permanece donde está. Antes de v2.1.246, `/cd` no aplicaba la configuración, hooks, servidores MCP o skills del nuevo directorio hasta que reanudaba la sesión, y su aviso de confianza no enumeraba lo que la configuración del directorio activaría.693Cuando el nuevo directorio aún no es de confianza, Claude Code enumera en la solicitud de confianza las reglas de permiso, los directorios adicionales, los hooks y los comandos auxiliares que activaría la configuración del directorio, para que puedas revisarlos antes de aceptar. Si rechazas, la sesión se queda donde está. Antes de la v2.1.246, `/cd` no aplicaba la configuración, los hooks, los servidores MCP ni los skills del nuevo directorio hasta que reanudabas la sesión, y su solicitud de confianza no enumeraba lo que activaría la configuración del directorio.

663 694 

664Restrinja o deshabilite los destinos de `/cd` con [reglas de permisos `Cd`](#cd).695Restringe o desactiva los destinos de `/cd` con [reglas de permisos `Cd`](#cd).

665 696 

666<h3 id="additional-directories-grant-file-access-not-configuration">697<h3 id="additional-directories-grant-file-access-not-configuration">

667 Los directorios adicionales otorgan acceso a archivos, no configuración698 Los directorios adicionales otorgan acceso a archivos, no configuración

668</h3>699</h3>

669 700 

670Agregar un directorio extiende dónde Claude puede leer y editar archivos. No hace que ese directorio sea una raíz de configuración completa: la mayoría de la configuración `.claude/` no se descubre desde directorios adicionales, aunque algunos tipos se cargan como excepciones.701Agregar un directorio amplía dónde Claude puede leer y editar archivos. No convierte ese directorio en una raíz de configuración completa: la mayor parte de la configuración de `.claude/` no se descubre desde los directorios adicionales, aunque algunos tipos se cargan como excepciones.

671 702 

672Estas excepciones se aplican solo a directorios agregados con la bandera `--add-dir` o el comando `/add-dir`, incluidos los directorios que el Agent SDK agrega a través de la bandera. Los directorios listados en `permissions.additionalDirectories` en un archivo de configuración otorgan acceso a archivos solamente y no cargan ninguna de la configuración a continuación.703Estas excepciones se aplican solo a los directorios agregados con el flag `--add-dir` o el comando `/add-dir`, incluidos los directorios que el Agent SDK agrega mediante el flag. Los directorios listados en `permissions.additionalDirectories` en un archivo de configuración solo otorgan acceso a archivos y no cargan ninguna de las configuraciones siguientes.

673 704 

674La opción [`additionalDirectories`](/docs/es/agent-sdk/typescript#options) del Agent SDK en TypeScript y la opción [`add_dirs`](/docs/es/agent-sdk/python#claudeagentoptions) en Python reciben las excepciones también, aunque la opción de TypeScript comparte su nombre con la clave de configuración. El SDK pasa cada entrada a Claude Code como `--add-dir`, por lo que esos directorios se comportan como directorios agregados por bandera. Los skills, comandos y subagentes de cualquier directorio agregado por bandera se cargan a través de la [fuente de configuración](/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) `project`, por lo que no se cargan cuando excluye esa fuente con [`--setting-sources`](/docs/es/cli-reference) en la CLI o `settingSources` en el SDK, y [modo bare](/docs/es/headless#start-faster-with-bare-mode) omite los comandos y subagentes entre ellos.705La opción [`additionalDirectories`](/docs/es/agent-sdk/typescript#options) del Agent SDK en TypeScript y la opción [`add_dirs`](/docs/es/agent-sdk/python#claudeagentoptions) en Python también reciben las excepciones, aunque la opción de TypeScript comparte su nombre con la clave de configuración. El SDK pasa cada entrada a Claude Code como `--add-dir`, por lo que esos directorios se comportan como directorios agregados con el flag. Los skills, comandos y subagentes de cualquier directorio agregado con el flag se cargan a través de la [fuente de configuración](/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) `project`, por lo que no se cargan cuando excluyes esa fuente con [`--setting-sources`](/docs/es/cli-reference) en la CLI o `settingSources` en el SDK, y el [modo bare](/docs/es/headless#start-faster-with-bare-mode) omite los comandos y subagentes entre ellos.

675 706 

676Los siguientes tipos de configuración se cargan desde directorios `--add-dir`:707Los siguientes tipos de configuración se cargan desde los directorios de `--add-dir`:

677 708 

678| Configuración | Cargado desde `--add-dir` |709| Configuración | Se carga desde `--add-dir` |

679| :- | :- |710| :- | :- |

680| [Skills](/docs/es/skills) en `.claude/skills/` | Sí, con recarga en vivo |711| [Skills](/docs/es/skills) en `.claude/skills/` | Sí, con recarga en vivo |

681| [Archivos de comando](/docs/es/skills#where-skills-live) en `.claude/commands/` | Sí, sin recarga en vivo. Cuando el directorio agregado y su proyecto definen un comando con el mismo nombre, Claude Code ejecuta el comando de su proyecto |712| [Archivos de comandos](/docs/es/skills#where-skills-live) en `.claude/commands/` | Sí, sin recarga en vivo. Cuando el directorio agregado y tu proyecto definen un comando con el mismo nombre, Claude Code ejecuta el comando de tu proyecto |

682| [Subagentes](/docs/es/sub-agents) en `.claude/agents/` | Sí, sin recarga en vivo |713| [Subagentes](/docs/es/sub-agents) en `.claude/agents/` | Sí, sin recarga en vivo |

683| [Configuración](/docs/es/settings) en `.claude/settings.json` y `.claude/settings.local.json` | Solo las claves `enabledPlugins` y [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces) |714| [Configuración](/docs/es/settings) en `.claude/settings.json` y `.claude/settings.local.json` | Solo las claves `enabledPlugins` y [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces) |

684| Archivos [CLAUDE.md](/docs/es/memory), `.claude/rules/` y `CLAUDE.local.md` | Solo cuando `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1` está establecido. `CLAUDE.local.md` además requiere la fuente de configuración `local`, que está habilitada por defecto |715| Archivos [CLAUDE.md](/docs/es/memory), `.claude/rules/` y `CLAUDE.local.md` | Solo cuando se establece `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1`. `CLAUDE.local.md` además requiere la fuente de configuración `local`, que está habilitada de forma predeterminada |

685 716 

686Para cargar los skills, comandos y subagentes desde un subdirectorio de su [directorio de trabajo principal](#working-directories) a mitad de sesión, ejecute `/add-dir` con la ruta de ese subdirectorio. Claude Code los carga para el resto de la sesión sin solicitarle que agregue un directorio de trabajo, porque el subdirectorio ya es legible. Esto requiere Claude Code v2.1.257 o posterior.717Para cargar los skills, comandos y subagentes de un subdirectorio de tu [directorio de trabajo principal](#working-directories) a mitad de la sesión, ejecuta `/add-dir` con la ruta de ese subdirectorio. Claude Code los carga durante el resto de la sesión sin pedirte confirmación y sin agregar un directorio de trabajo, porque el subdirectorio ya se puede leer. Esto requiere Claude Code v2.1.257 o posterior.

687 718 

688Claude Code descubre estilos de salida desde el directorio de trabajo actual y sus directorios padres, su directorio de usuario en `~/.claude/`, y configuración administrada. Los hooks y otras claves de `.claude/settings.json` se cargan desde la carpeta `.claude/` del directorio de trabajo actual sin recurso a directorios padres, junto con su `~/.claude/settings.json` de usuario y configuración administrada. `.claude/settings.local.json` se carga desde la raíz del repositorio git en su lugar, incluso cuando inicia Claude Code en un subdirectorio, excepto en los casos donde Claude Code [no usa la raíz del repositorio](/docs/es/settings#where-claude-code-looks-for-each-file), como en Windows; antes de v2.1.211, también se cargaba solo desde el directorio de trabajo actual. Las sesiones de [Agent SDK](/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) la cargan desde el directorio de trabajo en todas las versiones.719Claude Code descubre los estilos de salida desde el directorio de trabajo actual y sus directorios superiores, tu directorio de usuario en `~/.claude/` y la configuración administrada. Los hooks y las demás claves de `.claude/settings.json` se cargan desde la carpeta `.claude/` del directorio de trabajo actual, sin recurrir a los directorios superiores, junto con tu `~/.claude/settings.json` de usuario y la configuración administrada. `.claude/settings.local.json` se carga en cambio desde la raíz del repositorio git, incluso cuando inicias Claude Code en un subdirectorio, excepto en los casos en que Claude Code [no usa la raíz del repositorio](/docs/es/settings#where-claude-code-looks-for-each-file), como en Windows; antes de la v2.1.211, también se cargaba solo desde el directorio de trabajo actual. Las sesiones del [Agent SDK](/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) lo cargan desde el directorio de trabajo en todas las versiones.

689 720 

690Para compartir esa configuración entre proyectos, use uno de estos enfoques:721Para compartir esa configuración entre proyectos, usa uno de estos enfoques:

691 722 

692* **Configuración a nivel de usuario**: coloque archivos en `~/.claude/agents/`, `~/.claude/output-styles/`, o `~/.claude/settings.json` para hacerlos disponibles en cada proyecto723* **Configuración a nivel de usuario**: coloca archivos en `~/.claude/agents/`, `~/.claude/output-styles/` o `~/.claude/settings.json` para que estén disponibles en todos los proyectos

693* **Plugins**: empaquete y distribuya configuración como un [plugin](/docs/es/plugins/overview) que los equipos pueden instalar724* **Plugins**: empaqueta y distribuye la configuración como un [plugin](/docs/es/plugins/overview) que los equipos pueden instalar

694* **Lanzar desde el directorio de configuración**: ejecute Claude Code desde el directorio que contiene la configuración `.claude/` que desea725* **Inicia desde el directorio de configuración**: ejecuta Claude Code desde el directorio que contiene la configuración de `.claude/` que quieres

695 726 

696<h2 id="how-permissions-interact-with-sandboxing">727<h2 id="how-permissions-interact-with-sandboxing">

697 Cómo interactúan los permisos con el sandboxing728 Cómo interactúan los permisos con el sandboxing

Details

790 790 

791Los hooks en `hooks/hooks.json` y en la clave de manifiesto `hooks` se cargan ambos. Para cada evento y su carga útil, consulte [Eventos de hook](/docs/es/hooks#hook-events).791Los hooks en `hooks/hooks.json` y en la clave de manifiesto `hooks` se cargan ambos. Para cada evento y su carga útil, consulte [Eventos de hook](/docs/es/hooks#hook-events).

792 792 

793Cuando otro plugin habilitado tiene el mismo nombre, uno de los dos registra sus hooks de `hooks/hooks.json` y los del otro quedan fuera. Consulta [Hooks cuando dos plugins habilitados comparten un nombre](/docs/es/plugins/loading#hooks-when-two-enabled-plugins-share-a-name) para saber cuál, y para la nota en `/plugin` que te lo indica.

794 

793Para escribir hooks como funciones JavaScript que se ejecutan dentro de Claude Code y pueden dibujar en su interfaz, enumere un archivo de módulo bajo una clave `modules` en el mismo `hooks/hooks.json`. Un plugin con uno es un mod. Consulte [Crear un mod](/docs/es/plugins/mods/create).795Para escribir hooks como funciones JavaScript que se ejecutan dentro de Claude Code y pueden dibujar en su interfaz, enumere un archivo de módulo bajo una clave `modules` en el mismo `hooks/hooks.json`. Un plugin con uno es un mod. Consulte [Crear un mod](/docs/es/plugins/mods/create).

794 796 

795<h4 id="when-plugin-hooks-fire">797<h4 id="when-plugin-hooks-fire">

Details

209* **Plugin con su propio repositorio**: la instalación falla con un mensaje que contiene `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`.209* **Plugin con su propio repositorio**: la instalación falla con un mensaje que contiene `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`.

210* **Plugin referenciado por una ruta relativa**: la instalación usa la copia actual del marketplace en su lugar, y la restricción se verifica cuando el plugin carga. Si esa copia está fuera del rango, el plugin dependiente permanece deshabilitado y `claude plugin list` muestra `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`.210* **Plugin referenciado por una ruta relativa**: la instalación usa la copia actual del marketplace en su lugar, y la restricción se verifica cuando el plugin carga. Si esa copia está fuera del rango, el plugin dependiente permanece deshabilitado y `claude plugin list` muestra `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`.

211 211 

212Para un plugin que el marketplace referencia por una ruta relativa, un marketplace que agregó como una ruta de carpeta local también resuelve restricciones contra las etiquetas git de esa carpeta, cuando la carpeta es un repositorio git. Esto requiere Claude Code v2.1.196 o posterior. Una carpeta local que no es un repositorio git no tiene etiquetas, por lo que Claude Code instala la dependencia desde el contenido actual de la carpeta en su lugar.212Para un plugin que el marketplace referencia por una ruta relativa, un marketplace que agregaste como una ruta de carpeta local también resuelve restricciones contra las etiquetas git de esa carpeta, cuando la carpeta es un repositorio git. Una carpeta local que no es un repositorio git no tiene etiquetas, por lo que Claude Code instala la dependencia desde el contenido actual de la carpeta en su lugar.

213 213 

214<h3 id="confirm-the-resolved-version">214<h3 id="confirm-the-resolved-version">

215 Confirme la versión resuelta215 Confirme la versión resuelta

Details

144Estas fuentes de entrada no necesitan una cuenta de git:144Estas fuentes de entrada no necesitan una cuenta de git:

145 145 

146* **`archive`**: un zip descargado sobre HTTPS. Los usuarios no necesitan ni `git` ni una cuenta, solo acceso de red a la URL. Requiere Claude Code v2.1.224 o posterior. Fije cada archivo con `sha256` para que Claude Code rechace una descarga cambiada. Para enviar credenciales con la descarga, consulte [Authenticate archive downloads](#authenticate-archive-downloads).146* **`archive`**: un zip descargado sobre HTTPS. Los usuarios no necesitan ni `git` ni una cuenta, solo acceso de red a la URL. Requiere Claude Code v2.1.224 o posterior. Fije cada archivo con `sha256` para que Claude Code rechace una descarga cambiada. Para enviar credenciales con la descarga, consulte [Authenticate archive downloads](#authenticate-archive-downloads).

147* **Un repositorio de git público**: Claude Code clona un source `url` o `git-subdir` público sobre HTTPS sin credenciales cuando la entrada proporciona una URL `https://`. Para un source `github`, o un source `git-subdir` escrito como `owner/repo`, los usuarios sin una clave SSH de GitHub establecen `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.147* **Un repositorio de git público**: Claude Code clona un source `url` o `git-subdir` público sobre HTTPS sin credenciales cuando la entrada proporciona una URL `https://`. Para un source `github`, o un source `git-subdir` escrito como `owner/repo`, indica a los usuarios sin una clave SSH de GitHub que establezcan `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.

148 

149Mantén `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` en tus instrucciones aunque `claude plugin install` tenga éxito sin ella desde el shell en una máquina sin clave SSH. Para un source `github`, ese comando puede recurrir a HTTPS por sí solo e imprimir `SSH not configured, cloning via HTTPS`. Las instalaciones desde `/plugin` dentro de una sesión y las actualizaciones de plugins no recurren a HTTPS, así que sin la variable fallan para los usuarios que no tienen una clave SSH de GitHub.

148 150 

149Para un equipo en una red, un marketplace `directory` en un sistema de archivos compartido también funciona sin cuentas de git. Los usuarios solo necesitan acceso de lectura a la ruta.151Para un equipo en una red, un marketplace `directory` en un sistema de archivos compartido también funciona sin cuentas de git. Los usuarios solo necesitan acceso de lectura a la ruta.

150 152 

Details

80 80 

81Una sesión en la nube no agrega los mercados que un repositorio enumera bajo [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces), porque eso requiere el diálogo de confianza del espacio de trabajo, que una sesión en la nube nunca muestra.81Una sesión en la nube no agrega los mercados que un repositorio enumera bajo [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces), porque eso requiere el diálogo de confianza del espacio de trabajo, que una sesión en la nube nunca muestra.

82 82 

83Un plugin de directorio de habilidades de ámbito de proyecto se carga solo desde el `.claude/skills/` del [directorio de trabajo principal](/docs/es/permissions#working-directories) de la sesión, y solo después de que acepte el [diálogo de confianza del espacio de trabajo](/docs/es/permissions#what-runs-before-you-trust-a-folder) para esa carpeta. No [busca directorios principales hasta la raíz del repositorio](/docs/es/skills#discovery-from-parent-and-nested-directories) de la manera que lo hacen las habilidades y comandos simples. Si inicia desde un subdirectorio, un plugin en la raíz del repositorio no se carga. Inicie desde la raíz del repositorio en su lugar, o [mueva la sesión allí con `/cd`](/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior.83Si un plugin en el `.claude/skills/` de tu repositorio no se carga, revisa dónde iniciaste la sesión y si confiaste en la carpeta:

84 

85* **En un subdirectorio**: un plugin en la raíz del repositorio no se carga. Claude Code lee el `.claude/skills/` del [directorio de trabajo principal](/docs/es/permissions#working-directories) de la sesión y, a diferencia de los skills y comandos simples, no [busca en los directorios superiores](/docs/es/skills#discovery-from-parent-and-nested-directories) para encontrar plugins. En su lugar, inicia desde la raíz del repositorio, o [mueve la sesión allí con `/cd`](/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior

86* **Desde la aplicación de escritorio, en un worktree**: el plugin se carga desde el `.claude/skills/` del checkout principal en lugar del del worktree. Consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout)

87* **En una carpeta en la que no has confiado**: el plugin se carga solo después de que aceptes el [diálogo de confianza del espacio de trabajo](/docs/es/permissions#what-runs-before-you-trust-a-folder) para esa carpeta

84 88 

85Un plugin de ámbito de proyecto se verifica en el repositorio y llega a cada colaborador que lo clona. Debido a que ese contenido proviene del repositorio en lugar de usted, se carga solo después de la misma verificación de confianza que se aplica a las reglas de permiso del proyecto en `.claude/settings.json`. Confiar en una carpeta principal o ejecutar con `-p` no es suficiente. Los componentes que ejecutan código están restringidos aún más:89Un plugin de ámbito de proyecto se verifica en el repositorio y llega a cada colaborador que lo clona. Debido a que ese contenido proviene del repositorio en lugar de usted, se carga solo después de la misma verificación de confianza que se aplica a las reglas de permiso del proyecto en `.claude/settings.json`. Confiar en una carpeta principal o ejecutar con `-p` no es suficiente. Los componentes que ejecutan código están restringidos aún más:

86 90 


421 425 

422Debido a que el orden compara nombres de manifiesto, un plugin `--plugin-dir` llamado `hello-plugin` reemplaza `hello@example-marketplace` cuando el manifiesto de ese plugin también dice `"name": "hello-plugin"`.426Debido a que el orden compara nombres de manifiesto, un plugin `--plugin-dir` llamado `hello-plugin` reemplaza `hello@example-marketplace` cuando el manifiesto de ese plugin también dice `"name": "hello-plugin"`.

423 427 

428<h3 id="hooks-when-two-enabled-plugins-share-a-name">

429 Hooks cuando dos plugins habilitados comparten un nombre

430</h3>

431 

432Cuando instalas y habilitas dos plugins con el mismo nombre de manifiesto desde diferentes marketplaces, ambos aparecen como habilitados en `/plugin`, pero los hooks de uno de ellos quedan excluidos. Un solo plugin por nombre registra los hooks de su `hooks/hooks.json`, y un solo plugin por nombre carga un [módulo de hooks](/docs/es/plugins/mods/overview). Cuando la configuración administrada de tu organización activa una de las copias, esa copia conserva el nombre. De lo contrario, lo conserva la copia que Claude Code carga primero.

433 

434Para ver qué copia conserva el nombre, ejecuta `/plugin` en tu sesión y abre la pestaña **Errors**. Allí, una nota para la copia cuyos hooks quedaron excluidos indica la copia que conserva el nombre, y los detalles de la copia excluida muestran la misma nota. Para los hooks de `hooks/hooks.json`, la nota comienza con `Its hooks.json hooks do not run`, y para un módulo de hooks comienza con `Its hooks module does not load`. La nota requiere Claude Code v2.1.296 o posterior.

435 

436Para ejecutar en su lugar los hooks de la copia excluida, desactiva o desinstala la copia que conserva el nombre y luego ejecuta `/reload-plugins` en tu sesión. La recarga registra los hooks de la copia restante y borra la nota. Cuando la copia que conserva el nombre es una que activa tu configuración administrada, no puedes desactivarla, y los hooks de la otra copia permanecen desactivados mientras ambas estén instaladas.

437 

424<h3 id="keep-a-session-only-plugin-from-loading">438<h3 id="keep-a-session-only-plugin-from-loading">

425 Evitar que un plugin de solo sesión se cargue439 Evitar que un plugin de solo sesión se cargue

426</h3>440</h3>

Details

51* <span id="reserved-name-spellings" />**Otra ortografía de un nombre reservado**: un nombre que difiere de un nombre reservado solo por un punto final, o por un símbolo distinto de un guión en lugar de un guión, por lo que `claude.code.plugins` cuenta como `claude-code-plugins`. Agregar el marketplace falla con [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/es/errors#marketplace-name-is-another-spelling-of-a-reserved-name), y un marketplace ya registrado bajo uno deja de cargarse. Esta verificación requiere Claude Code v2.1.280 o posterior.51* <span id="reserved-name-spellings" />**Otra ortografía de un nombre reservado**: un nombre que difiere de un nombre reservado solo por un punto final, o por un símbolo distinto de un guión en lugar de un guión, por lo que `claude.code.plugins` cuenta como `claude-code-plugins`. Agregar el marketplace falla con [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/es/errors#marketplace-name-is-another-spelling-of-a-reserved-name), y un marketplace ya registrado bajo uno deja de cargarse. Esta verificación requiere Claude Code v2.1.280 o posterior.

52* **Nombres que Claude Code usa para plugins que no provienen de un marketplace**: `inline` para plugins cargados con [`--plugin-dir`](/docs/es/cli-reference), `builtin` para plugins integrados, `skills-dir` para plugins cargados automáticamente desde [`.claude/skills/`](/docs/es/skills) y `synced` para plugins sincronizados desde su cuenta claude.ai. `claude-plugin-test` también está reservado. `skills-dir` también aparece como `{"source": "skills-dir"}` en `strictKnownMarketplaces` y `blockedMarketplaces`, descrito bajo [Valores de fuente válidos solo en listas de políticas](#source-values-valid-only-in-policy-lists).52* **Nombres que Claude Code usa para plugins que no provienen de un marketplace**: `inline` para plugins cargados con [`--plugin-dir`](/docs/es/cli-reference), `builtin` para plugins integrados, `skills-dir` para plugins cargados automáticamente desde [`.claude/skills/`](/docs/es/skills) y `synced` para plugins sincronizados desde su cuenta claude.ai. `claude-plugin-test` también está reservado. `skills-dir` también aparece como `{"source": "skills-dir"}` en `strictKnownMarketplaces` y `blockedMarketplaces`, descrito bajo [Valores de fuente válidos solo en listas de políticas](#source-values-valid-only-in-policy-lists).

53* **`npm`, `pip`, `uv`, `cargo`, `github` y `gh`**: reservado en cualquier mayúscula. Esta verificación requiere Claude Code v2.1.275 o posterior.53* **`npm`, `pip`, `uv`, `cargo`, `github` y `gh`**: reservado en cualquier mayúscula. Esta verificación requiere Claude Code v2.1.275 o posterior.

54* **Nombres de miembros que tiene todo objeto de JavaScript**: `constructor`, `hasOwnProperty`, `isPrototypeOf`, `propertyIsEnumerable`, `toLocaleString`, `toString` y `valueOf`. `claude plugin marketplace add` rechaza un marketplace que use uno con [`Claude Code reserves this name and cannot register a marketplace under it`](/docs/es/plugins/troubleshooting#claude-code-reserves-this-name). Esta verificación requiere Claude Code v2.1.296 o posterior.

54* **Nombres que comienzan con `claudeai-`**: reservado para marketplaces alojados en claude.ai. `claude plugin marketplace add` rechaza cualquier otro marketplace que use uno con `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`.55* **Nombres que comienzan con `claudeai-`**: reservado para marketplaces alojados en claude.ai. `claude plugin marketplace add` rechaza cualquier otro marketplace que use uno con `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`.

55* **La carpeta de descarga de un marketplace de GitHub registrado, `<owner>-<repo>`**: Claude Code descarga un marketplace agregado desde una fuente `github` como `acme/x-tools` a través de una carpeta llamada `acme-x-tools`, sea cual sea el `name` propio de ese marketplace. Mientras ese marketplace esté registrado con un nombre distinto de `acme-x-tools`, `claude plugin marketplace add` rechaza un marketplace diferente llamado `acme-x-tools` después de descargarlo, e informa `Can't use the marketplace name "acme-x-tools"`. Esta verificación requiere Claude Code v2.1.290 o posterior.56* **La carpeta de descarga de un marketplace de GitHub registrado, `<owner>-<repo>`**: Claude Code descarga un marketplace agregado desde una fuente `github` como `acme/x-tools` a través de una carpeta llamada `acme-x-tools`, sea cual sea el `name` propio de ese marketplace. Mientras ese marketplace esté registrado con un nombre distinto de `acme-x-tools`, `claude plugin marketplace add` rechaza un marketplace diferente llamado `acme-x-tools` después de descargarlo, e informa `Can't use the marketplace name "acme-x-tools"`. Esta verificación requiere Claude Code v2.1.290 o posterior.

56 57 

Details

68* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, tu `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados.68* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, tu `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados.

69* **Todo lo demás está permitido.** La protección no añade ninguna otra restricción. El mod de un usuario aún puede leer y escribir archivos, iniciar procesos, hacer solicitudes de red, reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta, aprobar una que de otro modo pediría confirmación y dibujar en la interfaz, todo con los permisos de ese usuario.69* **Todo lo demás está permitido.** La protección no añade ninguna otra restricción. El mod de un usuario aún puede leer y escribir archivos, iniciar procesos, hacer solicitudes de red, reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta, aprobar una que de otro modo pediría confirmación y dibujar en la interfaz, todo con los permisos de ese usuario.

70* **Las reglas de denegación y tus hooks administrados tienen precedencia.** Donde se carga la protección, el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, sin importar qué archivo de configuración contenga la regla. Un bloqueo de un hook `PreToolUse` en la configuración administrada también es definitivo. Ambos se aplican a las llamadas a herramientas de Claude. Ninguno se aplica a las propias [llamadas `$.fs` y `$.process`](/docs/es/plugins/mods/api#reach-files-processes-and-the-network) de un mod: con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar esas llamadas, impide que el mod se cargue o gestiona la llamada en un [mod de políticas](#enforce-a-policy-with-a-mod-of-your-own).70* **Las reglas de denegación y tus hooks administrados tienen precedencia.** Donde se carga la protección, el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, sin importar qué archivo de configuración contenga la regla. Un bloqueo de un hook `PreToolUse` en la configuración administrada también es definitivo. Ambos se aplican a las llamadas a herramientas de Claude. Ninguno se aplica a las propias [llamadas `$.fs` y `$.process`](/docs/es/plugins/mods/api#reach-files-processes-and-the-network) de un mod: con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar esas llamadas, impide que el mod se cargue o gestiona la llamada en un [mod de políticas](#enforce-a-policy-with-a-mod-of-your-own).

71* **Otras comprobaciones de permisos pueden anularse.** El mod de un usuario que aprueba llamadas a herramientas puede aprobar una llamada para la que una regla `ask` pediría confirmación, o que un hook `PreToolUse` fuera de la configuración administrada bloqueó. En modo automático, una llamada que el mod aprueba se ejecuta sin una comprobación del clasificador.71* **Otras comprobaciones de permisos pueden anularse.** El mod de un usuario que aprueba llamadas a herramientas puede aprobar una llamada para la que una regla `ask` pediría confirmación, o que un hook `PreToolUse` fuera de la configuración administrada bloqueó. En modo automático, una llamada que el mod aprueba se ejecuta sin una comprobación del clasificador. Para las solicitudes de permiso que la aprobación `tool.check` de un mod no omite, consulta [Extender los permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks).

72 72 

73El código fuente de la protección es público en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).73El código fuente de la protección es público en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).

74 74 


81* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en los archivos de configuración y en el `hooks/hooks.json` de los plugins se ejecutan como antes, junto con los mods. Nada de ellos está obsoleto.81* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en los archivos de configuración y en el `hooks/hooks.json` de los plugins se ejecutan como antes, junto con los mods. Nada de ellos está obsoleto.

82* **Las reglas de denegación tienen precedencia donde se carga la protección.** El mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, a menos que configures [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).82* **Las reglas de denegación tienen precedencia donde se carga la protección.** El mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, a menos que configures [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).

83* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes de que cualquier mod vea la llamada a herramienta, y su bloqueo es definitivo. Si luego un mod reescribe la llamada, tus hooks administrados se ejecutan de nuevo sobre la llamada reescrita, por lo que un bloqueo sigue aplicándose. Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod, así que un mod que devuelve su propio resultado en lugar de ejecutar la herramienta impide que esos se ejecuten. Consulta [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in).83* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes de que cualquier mod vea la llamada a herramienta, y su bloqueo es definitivo. Si luego un mod reescribe la llamada, tus hooks administrados se ejecutan de nuevo sobre la llamada reescrita, por lo que un bloqueo sigue aplicándose. Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod, así que un mod que devuelve su propio resultado en lugar de ejecutar la herramienta impide que esos se ejecuten. Consulta [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in).

84* **La política de red cubre `$.http.fetch`.** Si tu organización desactiva la obtención web, o el tráfico de red no esencial está desactivado para la sesión, Claude Code rechaza una solicitud de red que un mod hace con `$.http.fetch`. La política no cubre un programa que el mod inicia con `$.process.run`. Ese programa accede a la red con el propio acceso del usuario.84* **La política de red cubre `$.http.fetch`.**

85 

86 * **La política de tu organización no permite WebFetch**: Claude Code también rechaza todas las solicitudes `$.http.fetch` de cualquier mod. Consulta [Disponibilidad de WebFetch](/docs/es/tools-reference#webfetch-availability).

87 * **Configuras [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/es/env-vars)**: un mod que tú o tus usuarios instalen aún puede hacer estas solicitudes. La variable solo detiene los [mods integrados en Claude Code](/docs/es/plugins/mods/overview#mods-built-into-claude-code), además de cualquier solicitud `$.http.fetch` que lleve las credenciales de Anthropic de la sesión. Antes de la v2.1.288, la variable detenía todas las solicitudes `$.http.fetch` de cualquier mod.

88 

89 Ninguna de las dos cubre un programa que el mod inicia con `$.process.run`, que accede a la red con el propio acceso del usuario.

85* **Los controles de plugins cubren los mods.** Un mod es un plugin, así que la [configuración que restringe lo que los usuarios pueden instalar](/docs/es/plugins/org#restrict-what-users-can-install), como `strictKnownMarketplaces`, decide si puede instalarse en absoluto.90* **Los controles de plugins cubren los mods.** Un mod es un plugin, así que la [configuración que restringe lo que los usuarios pueden instalar](/docs/es/plugins/org#restrict-what-users-can-install), como `strictKnownMarketplaces`, decide si puede instalarse en absoluto.

86* **Los mods no pueden cambiar la solicitud de permiso.** Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no de la solicitud de permiso, así que no puede cambiar lo que muestra una solicitud. Un mod aún puede aprobar o denegar una llamada a herramienta antes de que aparezca la solicitud, como se describe en [Conoce lo que ocurre de forma predeterminada](#know-what-happens-by-default).91* **Los mods no pueden cambiar la solicitud de permiso.** Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no de la solicitud de permiso, así que no puede cambiar lo que muestra una solicitud. Un mod aún puede aprobar o denegar una llamada a herramienta antes de que aparezca la solicitud, como se describe en [Conoce lo que ocurre de forma predeterminada](#know-what-happens-by-default).

87* **Las solicitudes de confianza van primero.** En una sesión interactiva en un directorio en el que el usuario aún no ha confiado, ningún mod se carga hasta que responde a la solicitud de confianza.92* **Las solicitudes de confianza van primero.** En una sesión interactiva en un directorio en el que el usuario aún no ha confiado, ningún mod se carga hasta que responde a la solicitud de confianza.

Details

303| `$.session` | `messages()` devuelve la transcripción como una lista de `{ role, text, toolUses }`. También el directorio de trabajo, el modelo y más. [`usage()`](/docs/es/plugins/mods/reference#mods-api-methods) devuelve el uso de la ventana de contexto y los límites del plan. |303| `$.session` | `messages()` devuelve la transcripción como una lista de `{ role, text, toolUses }`. También el directorio de trabajo, el modelo y más. [`usage()`](/docs/es/plugins/mods/reference#mods-api-methods) devuelve el uso de la ventana de contexto y los límites del plan. |

304| `$.mcp` | `call` a una herramienta en un servidor MCP conectado |304| `$.mcp` | `call` a una herramienta en un servidor MCP conectado |

305 305 

306Los archivos y los procesos tienen algunas reglas propias:306Los archivos, los procesos y las solicitudes tienen algunas reglas propias:

307 307 

308* **Rutas**: una ruta relativa se resuelve con respecto al directorio de trabajo de la sesión308* **Rutas**: una ruta relativa se resuelve con respecto al directorio de trabajo de la sesión, o del subagente cuyo evento está gestionando el hook

309* **`$.fs.list`**: devuelve las entradas de un directorio como `{ name, kind, size, isLink }` y no es recursivo309* **`$.fs.list`**: devuelve las entradas de un directorio como `{ name, kind, size, isLink }` y no es recursivo

310* **`$.process.run`**: recibe una lista de argumentos y no usa ningún shell. Se resuelve en `{ exitCode, stdout, stderr }` sea cual sea el código de salida. Se rechaza si el programa no puede iniciarse o si sigue en ejecución al cumplirse el tiempo de espera, que es de 30 segundos de forma predeterminada, así que envuélvelo en `try` y `catch`.310* **`$.process.run`**: recibe una lista de argumentos y no usa ningún shell. Se resuelve en `{ exitCode, stdout, stderr }` sea cual sea el código de salida. Se rechaza si el programa no puede iniciarse o si sigue en ejecución al cumplirse el tiempo de espera, que es de 30 segundos de forma predeterminada, así que envuélvelo en `try` y `catch`.

311* **`$.http.fetch`**: sigue hasta cinco redirecciones. En una redirección a un origen diferente, conserva solo los encabezados de solicitud `accept`, `accept-language`, `content-type` y `user-agent` que hayas establecido y descarta el resto, por lo que una solicitud que dependa de otro encabezado, como `Authorization`, puede fallar después de esa redirección. Los [límites](/docs/es/plugins/mods/reference#limits) indican su tiempo de espera y los tamaños del cuerpo.

311 312 

312Cada una de estas llamadas es en sí misma un evento, nombrado según su espacio de nombres y su método sin el `$.`, como `fs.read` para `$.fs.read`. Un mod [anterior en la cadena](/docs/es/plugins/mods/events#the-order-mods-run-in) puede observar, reescribir o rechazar tu llamada, que es la forma en que una organización restringe aquello a lo que acceden los mods.313Cada una de estas llamadas es en sí misma un evento, nombrado según su espacio de nombres y su método sin el `$.`, como `fs.read` para `$.fs.read`. Un mod [anterior en la cadena](/docs/es/plugins/mods/events#the-order-mods-run-in) puede observar, reescribir o rechazar tu llamada, que es la forma en que una organización restringe aquello a lo que acceden los mods.

313 314 

Details

148| `agent.offer` | Se ofrece un tipo de subagente a Claude | `{ isOffered: false }` para ocultarlo |148| `agent.offer` | Se ofrece un tipo de subagente a Claude | `{ isOffered: false }` para ocultarlo |

149| `agent.spawn` | Un subagente o un compañero de un [equipo de agentes](/docs/es/agent-teams) está a punto de iniciarse. Para un compañero, `e.isTeammate` es `true`. | `next({ ...e, model })` para elegir su modelo, o `{ deny: reason }` |149| `agent.spawn` | Un subagente o un compañero de un [equipo de agentes](/docs/es/agent-teams) está a punto de iniciarse. Para un compañero, `e.isTeammate` es `true`. | `next({ ...e, model })` para elegir su modelo, o `{ deny: reason }` |

150 150 

151Cuando Claude reanuda un subagente con la herramienta [`SendMessage`](/docs/es/sub-agents#resume-subagents), tu hook de `agent.spawn` no vuelve a ejecutarse. Para rechazar las llamadas a `SendMessage` que reanudan un subagente, haz coincidir esa herramienta en un hook de [`tool.call`](/docs/es/plugins/mods/events#guard-or-change-a-tool-call).

152 

151<h3 id="interface">153<h3 id="interface">

152 Interfaz154 Interfaz

153</h3>155</h3>


175| [`plugin.register`](/docs/es/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | Un módulo de hooks está a punto de cargarse. `e.uses` enumera sus eventos, llamadas a la API de mods, variables de entorno y estado, tal como los imprime `claude plugin validate`. Cada llamada se escribe sin el prefijo `$.`, como `fs.read`. | `{ refuse: reason }` |177| [`plugin.register`](/docs/es/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | Un módulo de hooks está a punto de cargarse. `e.uses` enumera sus eventos, llamadas a la API de mods, variables de entorno y estado, tal como los imprime `claude plugin validate`. Cada llamada se escribe sin el prefijo `$.`, como `fs.read`. | `{ refuse: reason }` |

176| `engine.create` | Se está construyendo la API de mods para este mod | Una API de mods modificada, para agregar un espacio de nombres. Un mod fuera del [nivel](#the-hook-function) `user` también puede ocultar uno. |178| `engine.create` | Se está construyendo la API de mods para este mod | Una API de mods modificada, para agregar un espacio de nombres. Un mod fuera del [nivel](#the-hook-function) `user` también puede ocultar uno. |

177 179 

180Cuando el hook de otro mod llama a un método de un espacio de nombres que agregaste en `engine.create`, las llamadas a `$` de tu método se ejecutan en el contexto de ese hook hasta que todos los hooks de ese evento devuelven. Por ejemplo, una ruta relativa se resuelve respecto al directorio de trabajo de ese hook, y `$.prompt.submit` se rechaza mientras el turno está esperando a ese hook. Las llamadas que tu método hace después de eso se ejecutan en el contexto propio de tu mod.

181 

178<h3 id="telemetry">182<h3 id="telemetry">

179 Telemetría183 Telemetría

180</h3>184</h3>


317| Tiempo de espera de `$.process.run` | 30 segundos de forma predeterminada, 10 minutos como máximo |321| Tiempo de espera de `$.process.run` | 30 segundos de forma predeterminada, 10 minutos como máximo |

318| `maxTokens` de `$.model.complete` | 1024 de forma predeterminada, hasta 64,000 o el límite de salida del modelo |322| `maxTokens` de `$.model.complete` | 1024 de forma predeterminada, hasta 64,000 o el límite de salida del modelo |

319| `$.fs.read` y `$.fs.write` | 4 MiB por archivo |323| `$.fs.read` y `$.fs.write` | 4 MiB por archivo |

324| El cuerpo de una solicitud de `$.http.fetch` | 4 MiB, contados en caracteres. Una llamada con un cuerpo más grande se rechaza. |

325| El cuerpo de una respuesta de `$.http.fetch` | 4 MiB. `text` contiene los primeros 4 MiB y el resto no se lee. Cuando el encabezado `Content-Length` declara más, la llamada se rechaza en su lugar, con un motivo que termina en `is over the 4194304-byte limit`, excepto cuando la última solicitud después de cualquier redirección usa el método `HEAD`. La exención de `HEAD` requiere Claude Code v2.1.296 o posterior. |

326| Una llamada a `$.http.fetch`, incluidos las redirecciones y el cuerpo | 30 segundos |

327| Redirecciones que sigue una llamada a `$.http.fetch` | 5 |

320| El motivo de `drop` de un hook o el motivo de `deny` de `config.set` | 4,096 caracteres. Se corta el final de un motivo más largo, y el drop o deny se sigue aplicando. El corte requiere Claude Code v2.1.292 o posterior, y en versiones anteriores el hook [falla](/docs/es/plugins/mods/events#handle-a-hook-that-fails) en su lugar. |328| El motivo de `drop` de un hook o el motivo de `deny` de `config.set` | 4,096 caracteres. Se corta el final de un motivo más largo, y el drop o deny se sigue aplicando. El corte requiere Claude Code v2.1.292 o posterior, y en versiones anteriores el hook [falla](/docs/es/plugins/mods/events#handle-a-hook-that-fails) en su lugar. |

321| Texto en un árbol | Se dibujan los primeros 100,000 caracteres |329| Texto en un árbol | Se dibujan los primeros 100,000 caracteres |

322| El `language` o `path` de un `Code`, el `value` de una opción de `Select` o el `module` de un `Client` | 10,000 caracteres. Si alguno es más largo, Claude Code [dibuja su propia versión del sitio](/docs/es/plugins/mods/interface#build-a-tree-from-elements). |330| El `language` o `path` de un `Code`, el `value` de una opción de `Select` o el `module` de un `Client` | 10,000 caracteres. Si alguno es más largo, Claude Code [dibuja su propia versión del sitio](/docs/es/plugins/mods/interface#build-a-tree-from-elements). |

Details

78| `disableAllHooks in managed settings` | Tu organización desactivó los hooks de los plugins instalados |78| `disableAllHooks in managed settings` | Tu organización desactivó los hooks de los plugins instalados |

79| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` está establecido, o `disableAllHooks` está establecido en un archivo de configuración distinto de la configuración administrada |79| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` está establecido, o `disableAllHooks` está establecido en un archivo de configuración distinto de la configuración administrada |

80| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Iniciaste Claude Code con `--bare` |80| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Iniciaste Claude Code con `--bare` |

81| `another plugin of that name loads first` | Dos plugins comparten un nombre. Se usa el administrado, o el que se cargó primero. |81| `another plugin of that name loads first` | Otro plugin habilitado tiene el mismo nombre que tu mod y [se queda con el nombre](/docs/es/plugins/loading#hooks-when-two-enabled-plugins-share-a-name), así que tu módulo de hooks no se carga |

82 82 

83<h3 id="messages-from-the-built-in-guard">83<h3 id="messages-from-the-built-in-guard">

84 Mensajes de la protección integrada84 Mensajes de la protección integrada


191 191 

192Antes de la v2.1.292, la llamada se ejecutaba una segunda vez, por lo que el prompt se enviaba, el comando se ejecutaba o el subagente se iniciaba dos veces.192Antes de la v2.1.292, la llamada se ejecutaba una segunda vez, por lo que el prompt se enviaba, el comando se ejecutaba o el subagente se iniciaba dos veces.

193 193 

194<h3 id="$-agent-register-refused-the-hooks-module-that-made-the-call-is-no-longer-loaded">

195 `$.agent.register refused: the hooks module that made the call is no longer loaded`

196</h3>

197 

198La línea comienza con el nombre de tu mod, como en `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`, y el agente no queda registrado. Tu mod se recargó o se descargó antes de la llamada. Una recarga carga una copia nueva del módulo de hooks, y esta llamada provino de código que aún se ejecutaba en la copia anterior, como un hook que aún no había retornado.

199 

200Si ese hook no captura el rechazo, falla y Claude Code [lo omite](#hook-skipped). Para registrar el agente desde la copia que permanece cargada, haz la llamada en tu hook [`session.start`](/docs/es/plugins/mods/reference#session), que se ejecuta de nuevo en cada copia nueva después de una recarga.

201 

194<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">202<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">

195 `mods that run in the hooks worker are off for this session`203 `mods that run in the hooks worker are off for this session`

196</h3>204</h3>

Details

256 256 

257Antes de v2.1.295, Claude Code informaba la adición de este ejemplo como exitosa.257Antes de v2.1.295, Claude Code informaba la adición de este ejemplo como exitosa.

258 258 

259<h3 id="claude-code-reserves-this-name">

260 `Cannot add marketplace "<name>": Claude Code reserves this name and cannot register a marketplace under it`

261</h3>

262 

263Agregaste un marketplace, y el [`name`](/docs/es/plugins/marketplace-reference#top-level-fields) en su `marketplace.json` es uno de los nombres de miembro que tiene todo objeto de JavaScript, como `constructor`, `toString` o `valueOf`. Claude Code reserva esos nombres, por lo que rechaza la adición y no registra nada. [Nombres reservados](/docs/es/plugins/marketplace-reference#reserved-names) los enumera.

264 

265En este ejemplo, el marketplace se llama `constructor`:

266 

267```text theme={null}

268Cannot add marketplace "constructor": Claude Code reserves this name and cannot register a marketplace under it. The name is set by "name" in the marketplace's marketplace.json; ask its maintainer to change it.

269```

270 

271Si un archivo de configuración declara el marketplace en [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces), el intento de Claude Code de agregarlo al iniciar falla de la misma manera, y el mensaje aparece en la pestaña **Errors** de `/plugin`.

272 

273Dale al marketplace otro nombre y luego vuelve a agregarlo:

274 

275* **Eres el propietario del marketplace**: cambia `name` en `marketplace.json`

276* **Otra persona lo aloja**: pídele al propietario que cambie el nombre

277 

278Antes de v2.1.296, agregar un marketplace así fallaba con un error interno en lugar de este mensaje.

279 

259<h3 id="ssh-authentication-failed-or-https-authentication-failed">280<h3 id="ssh-authentication-failed-or-https-authentication-failed">

260 `SSH authentication failed` or `HTTPS authentication failed`281 `SSH authentication failed` or `HTTPS authentication failed`

261</h3>282</h3>


907 Hook loads but never fires928 Hook loads but never fires

908</h4>929</h4>

909 930 

910Si un hook se carga sin error pero nunca se dispara, verifique su definición y luego mírelo ejecutarse:931Si un hook se carga sin errores pero nunca se dispara, primero ejecuta `/plugin` en tu sesión y abre los detalles del plugin. Una nota allí que comienza con `Its hooks.json hooks do not run` significa que otro plugin habilitado con el mismo nombre registró sus hooks en su lugar, y [Hooks cuando dos plugins habilitados comparten nombre](/docs/es/plugins/loading#hooks-when-two-enabled-plugins-share-a-name) indica cuál es esa copia y cómo cambiarla. De lo contrario, revisa la definición del hook y luego obsérvalo ejecutarse:

911 932 

912<Steps>933<Steps>

913 <Step title="Check the event name">934 <Step title="Check the event name">

routines.md +3 −3

Details

86 </Step>86 </Step>

87 87 

88 <Step title="Seleccionar repositorios">88 <Step title="Seleccionar repositorios">

89 Agregue uno o más repositorios de GitHub para que Claude trabaje. Cada repositorio se clona al inicio de una ejecución, comenzando desde la rama predeterminada. Claude crea ramas con prefijo `claude/` para sus cambios.89 Agrega uno o más repositorios de GitHub para que Claude trabaje en ellos. Cada repositorio se clona al inicio de una ejecución. Claude crea ramas con prefijo `claude/` para sus cambios.

90 </Step>90 </Step>

91 91 

92 <Step title="Seleccionar un entorno">92 <Step title="Seleccionar un entorno">


359 Repositorios y permisos de rama359 Repositorios y permisos de rama

360</h3>360</h3>

361 361 

362Las rutinas necesitan acceso a GitHub para clonar repositorios. Cuando crea una rutina desde la CLI con `/schedule`, Claude verifica si su cuenta tiene acceso a GitHub para el repositorio desde el que la ejecutó y, si no es así, agrega una nota de configuración indicando cómo otorgarlo. Consulte [Opciones de autenticación de GitHub](/docs/es/claude-code-on-the-web#github-authentication-options) para las dos formas de otorgar acceso.362Las rutinas necesitan acceso a GitHub para clonar repositorios. Cuando creas una rutina desde la CLI con `/schedule`, Claude verifica si tu cuenta tiene acceso a GitHub para el repositorio desde el que la ejecutaste y, si no es así, agrega una nota de configuración indicando cómo otorgarlo. Consulta [Opciones de autenticación de GitHub](/docs/es/claude-code-on-the-web#github-authentication-options) para conocer las dos formas de otorgar acceso. En los planes Team y Enterprise, un [Owner](/docs/es/server-managed-settings#access-control) de tu organización de Claude tiene que activar cada método antes de que puedas usarlo; consulta [Conectar GitHub](/docs/es/web-quickstart#connect-github).

363 363 

364Si su conexión a GitHub falta o ha expirado cuando una ejecución está programada, la rutina omite ejecuciones hasta que se reconecte, hasta 72 horas. Reconecte GitHub dentro de esa ventana y la rutina se reanuda automáticamente. Después de 72 horas sin una conexión, la rutina se desactiva y usted la vuelve a activar después de reconectar GitHub.364Si su conexión a GitHub falta o ha expirado cuando una ejecución está programada, la rutina omite ejecuciones hasta que se reconecte, hasta 72 horas. Reconecte GitHub dentro de esa ventana y la rutina se reanuda automáticamente. Después de 72 horas sin una conexión, la rutina se desactiva y usted la vuelve a activar después de reconectar GitHub.

365 365 

366Cada repositorio que agregue se clona en cada ejecución. Claude comienza desde la rama predeterminada del repositorio a menos que su prompt especifique lo contrario.366Cada repositorio que agregues se clona en cada ejecución. Claude comienza desde la rama predeterminada del repositorio a menos que tu prompt especifique lo contrario. Si un [evento de pull request de GitHub](#add-a-github-trigger) dispara la ejecución y el repositorio del pull request es el primer repositorio de la rutina, ese repositorio comienza en cambio desde el commit head del pull request.

367 367 

368Claude envía su trabajo a una rama con el prefijo `claude/` a menos que tu prompt le indique enviarlo a otra rama. Para controlar a qué ramas puede enviar una ejecución, usa reglas de protección de ramas o rulesets en GitHub. Para las ejecuciones en infraestructura administrada por Anthropic, y para las ejecuciones autoalojadas que envían a través del [proxy de git de Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy), GitHub las aplica al acceso a GitHub que conectaste, por lo que una regla que ese acceso puede omitir no bloquea el envío de una ejecución. Una ejecución autoalojada que envía con las credenciales de git que proporciona tu despliegue se verifica en cambio contra esas credenciales. Consulta [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git).368Claude envía su trabajo a una rama con el prefijo `claude/` a menos que tu prompt le indique enviarlo a otra rama. Para controlar a qué ramas puede enviar una ejecución, usa reglas de protección de ramas o rulesets en GitHub. Para las ejecuciones en infraestructura administrada por Anthropic, y para las ejecuciones autoalojadas que envían a través del [proxy de git de Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy), GitHub las aplica al acceso a GitHub que conectaste, por lo que una regla que ese acceso puede omitir no bloquea el envío de una ejecución. Una ejecución autoalojada que envía con las credenciales de git que proporciona tu despliegue se verifica en cambio contra esas credenciales. Consulta [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git).

369 369 

sandboxing.md +1 −0

Details

203* Los comandos `rm` o `rmdir` que apuntan a una [ruta crítica](/docs/es/permission-modes#critical-paths) siguen pasando por el flujo de permisos habitual203* Los comandos `rm` o `rmdir` que apuntan a una [ruta crítica](/docs/es/permission-modes#critical-paths) siguen pasando por el flujo de permisos habitual

204* Las [reglas de consulta](/docs/es/permissions) limitadas por contenido, como `Bash(git push *)`, siguen forzando una solicitud de permiso incluso para los comandos del sandbox204* Las [reglas de consulta](/docs/es/permissions) limitadas por contenido, como `Bash(git push *)`, siguen forzando una solicitud de permiso incluso para los comandos del sandbox

205* Una regla de consulta `Bash` sin más, o la forma equivalente `Bash(*)`, se omite para los comandos que se ejecutan en el sandbox; sigue aplicándose a los comandos que recurren al flujo de permisos habitual. En el [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), la regla no se omite: también pide confirmación para los comandos del sandbox, incluidos los de solo lectura205* Una regla de consulta `Bash` sin más, o la forma equivalente `Bash(*)`, se omite para los comandos que se ejecutan en el sandbox; sigue aplicándose a los comandos que recurren al flujo de permisos habitual. En el [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), la regla no se omite: también pide confirmación para los comandos del sandbox, incluidos los de solo lectura

206* Los comandos de la [herramienta Monitor](/docs/es/tools-reference#monitor-tool) no se aprueban automáticamente, aunque siguen ejecutándose en el sandbox. Para omitir la solicitud de permiso, agrega una [regla de permiso](/docs/es/permissions#bash) que coincida con el comando, como `Bash(npm run *)`

206 207 

207<Info>208<Info>

208 El modo auto-allow funciona de forma independiente de tu ajuste de modo de permisos, con tres excepciones: el [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), un comando del modo automático que lleva [dominios permitidos por comando](#per-command-allowed-domains-in-auto-mode) y la [revisión del clasificador del lado del servidor](/docs/es/permission-modes#how-the-classifier-evaluates-actions) de los comandos del sandbox en el modo automático. Aunque no estés en el modo "accept edits", los comandos de Bash del sandbox se ejecutan automáticamente cuando auto-allow está habilitado. Esto significa que los comandos de Bash que modifican archivos dentro de los límites del sandbox se ejecutan sin pedir confirmación, incluso en el modo Manual, donde las herramientas de edición de archivos sí la pedirían.209 El modo auto-allow funciona de forma independiente de tu ajuste de modo de permisos, con tres excepciones: el [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), un comando del modo automático que lleva [dominios permitidos por comando](#per-command-allowed-domains-in-auto-mode) y la [revisión del clasificador del lado del servidor](/docs/es/permission-modes#how-the-classifier-evaluates-actions) de los comandos del sandbox en el modo automático. Aunque no estés en el modo "accept edits", los comandos de Bash del sandbox se ejecutan automáticamente cuando auto-allow está habilitado. Esto significa que los comandos de Bash que modifican archivos dentro de los límites del sandbox se ejecutan sin pedir confirmación, incluso en el modo Manual, donde las herramientas de edición de archivos sí la pedirían.

Details

132El ejecutor y sus sesiones hacen varios tipos de conexión saliente, y no se requiere conectividad entrante desde Anthropic:132El ejecutor y sus sesiones hacen varios tipos de conexión saliente, y no se requiere conectividad entrante desde Anthropic:

133 133 

134* **Plano de control**: el ejecutor sondea `api.anthropic.com` para trabajo y publica eventos de progreso de configuración y falla, todo HTTPS saliente. El sondeo funciona como el latido del corazón del ejecutor.134* **Plano de control**: el ejecutor sondea `api.anthropic.com` para trabajo y publica eventos de progreso de configuración y falla, todo HTTPS saliente. El sondeo funciona como el latido del corazón del ejecutor.

135* **Conector SCM**: el orquestador opcional [conector SCM](/docs/es/self-hosted-environments-reference#scm-connector-flags) tunnel es la única conexión WebSocket.135* **Git**: el ejecutor clona desde tu host de git y envía cambios a él sobre HTTPS o SSH, autenticado con credenciales que proporciona tu despliegue. Consulta [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git) para ver las opciones, incluidas las credenciales generadas por sesión. Con el [proxy de git de Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy), el tráfico de git para repositorios en github.com pasa en cambio por `api.anthropic.com`.

136* **Git**: el ejecutor clona desde y empuja a su host de git sobre HTTPS o SSH, autenticado con credenciales que su implementación proporciona; [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git) cubre las opciones, incluidas credenciales acuñadas por sesión y el [proxy de git de Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy), que enruta git a través de `api.anthropic.com` en su lugar.136* **Secundario de sesión**: el proceso secundario de Claude Code mantiene el stream de eventos de la sesión hacia `api.anthropic.com`, y realiza sus propias llamadas salientes para la inferencia de modelos y para los comandos de git ejecutados durante la sesión. En una sesión que usa [git administrado por Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy), el secundario envía su tráfico de `git` y `gh` para github.com a través de una conexión WebSocket que abre hacia `api.anthropic.com`.

137* **Secundario de sesión**: el proceso secundario de Claude Code mantiene el flujo de eventos de la sesión a `api.anthropic.com`, y realiza sus propias llamadas salientes para inferencia de modelos y para comandos de git ejecutados durante la sesión. Consulte [Requisitos de red](/docs/es/self-hosted-environments-deploy#network-requirements) para la lista completa de salida. El [diagrama anterior](#how-self-hosted-environments-work) muestra estas rutas, aparte del conector SCM opcional.137* **Conector SCM**: el [conector SCM](/docs/es/self-hosted-environments-reference#scm-connector-flags) opcional del orquestador no está disponible, por lo que su túnel no se abre. El túnel es una conexión WebSocket hacia `api.anthropic.com`.

138 

139Consulta [Requisitos de red](/docs/es/self-hosted-environments-deploy#network-requirements) para ver la lista completa de salida. El [diagrama anterior](#how-self-hosted-environments-work) muestra estas rutas, aparte del conector SCM opcional y la conexión de git administrado por Anthropic.

138 140 

139De forma predeterminada, la inferencia de modelos utiliza la API de Anthropic. El plano de control entrega el endpoint de la API a cada sesión, y la sesión se autentica con un token OAuth emitido por Anthropic con alcance de sesión. Para enviar en su lugar las solicitudes de modelo a tu propia cuenta en la nube, consulta [Enviar solicitudes de modelo a Bedrock o Agent Platform](/docs/es/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).141De forma predeterminada, la inferencia de modelos utiliza la API de Anthropic. El plano de control entrega el endpoint de la API a cada sesión, y la sesión se autentica con un token OAuth emitido por Anthropic con alcance de sesión. Para enviar en su lugar las solicitudes de modelo a tu propia cuenta en la nube, consulta [Enviar solicitudes de modelo a Bedrock o Agent Platform](/docs/es/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).

140 142 

Details

31| Variable | Descripción |31| Variable | Descripción |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El JWT de la sesión, con prefijo `sk-ant-cc-`. Su reclamación `act` identifica al creador de la sesión, con el correo electrónico del creador cuando la superficie de creación lo registró. El valor es el token en el momento de la generación; los refrescos llegan a través del stdin del hijo, por lo que un contenedor solo ve el valor inicial. Consulta [Verificar identidad de sesión](/docs/es/self-hosted-environments-identity). |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El JWT de la sesión, con prefijo `sk-ant-cc-`. Su reclamación `act` identifica al creador de la sesión, con el correo electrónico del creador cuando la superficie de creación lo registró. El valor es el token en el momento de la generación; los refrescos llegan a través del stdin del hijo, por lo que un contenedor solo ve el valor inicial. Consulta [Verificar identidad de sesión](/docs/es/self-hosted-environments-identity). |

34| `CCR_SESSION_ACCOUNT_EMAIL` | El correo electrónico del creador de la sesión, preextraído por el ejecutor de la reclamación `act.email` del token sin verificación de firma. Adecuado para etiquetado, como trailers de commit. Cuando el correo electrónico controla la emisión de credenciales, verifica el token y lee la reclamación de él en su lugar; consulta [Aprovisionar credenciales limitadas al creador de la sesión](#provision-credentials-scoped-to-the-session-creator). No está establecida cuando el token no lleva correo electrónico del creador. Trátala como información de identificación personal. |34| `CCR_SESSION_ACCOUNT_EMAIL` | El correo electrónico del creador de la sesión, preextraído por el ejecutor de la reclamación `act.email` del token sin verificación de firma. Adecuado para etiquetado, como trailers de commit. Cuando el correo electrónico controla la emisión de credenciales, verifica el token y lee la reclamación de él en su lugar. Consulta [Aprovisionar credenciales limitadas al creador de la sesión](#provision-credentials-scoped-to-the-session-creator). No está establecida cuando el token no lleva correo electrónico del creador, por ejemplo en sesiones que crea la identidad de servicio de tu organización. Trátala como información de identificación personal. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` o `scheduled_trigger`. Anthropic registra el valor una vez en la creación de la sesión, por lo que el contenedor y cada hook de ciclo de vida ven el mismo valor. Úsala solo para análisis de adopción y etiquetado, no como señal de autorización. No está establecida cuando la sesión no tiene una superficie registrada o reconocida, así que haz referencia a ella como `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` bajo `set -u`. Requiere Claude Code v2.1.229 o posterior. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` o `scheduled_trigger`. Anthropic registra el valor una vez en la creación de la sesión, por lo que el contenedor y cada hook de ciclo de vida ven el mismo valor. Úsala solo para análisis de adopción y etiquetado, no como señal de autorización. No está establecida cuando la sesión no tiene una superficie registrada o reconocida. Requiere Claude Code v2.1.229 o posterior. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | Ruta absoluta al binario de Claude Code propio del ejecutor. Termina tu contenedor con `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` para entregar el control al binario fijado sin codificar una ruta de instalación. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | Ruta absoluta al binario de Claude Code propio del ejecutor. Termina tu contenedor con `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` para entregar el control al binario fijado sin codificar una ruta de instalación. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID de sesión en forma etiquetada `cse_...`. Esta es la misma sesión que los [hooks de ciclo de vida](#lifecycle-hooks) ven como `CLAUDE_RUNNER_SESSION_ID` en forma `session_...`; las variables UUID coinciden en ambas, y sustituir el prefijo `cse_` con `session_` produce el ID que se muestra en la URL de la sesión. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID de sesión en forma etiquetada `cse_...`. Esta es la misma sesión que los [hooks de ciclo de vida](#lifecycle-hooks) ven como `CLAUDE_RUNNER_SESSION_ID` en forma `session_...`; las variables UUID coinciden en ambas, y sustituir el prefijo `cse_` con `session_` produce el ID que se muestra en la URL de la sesión. |

38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica, para sistemas que usan UUID como clave. |38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica, para sistemas que usan UUID como clave. |

39| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Para una sesión de [Claude Tag](https://claude.com/docs/claude-tag/overview) que pertenece a un hilo de Slack, el enlace a ese hilo. No está establecida para otras sesiones, y también puede no estar establecida para una sesión de hilo. |

40| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Para una sesión de Claude Tag que pertenece a un hilo de Slack, la marca de tiempo de Slack de ese hilo, como `1700000000.000100`. Puede no estar establecida, y puede estar establecida cuando `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` no lo está, así que comprueba cada variable por separado. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Ruta absoluta a un archivo por sesión que contiene el JWT de sesión actual, mantenido actualizado en los refrescos de token. Los subprocesos de shell lo leen para su encabezado `Authorization` al descargar archivos adjuntos que el usuario agregó a la sesión. `exec` preserva la variable automáticamente; un contenedor que reconstruye el entorno del hijo debe conservar la variable, o las descargas de archivos adjuntos dejan de funcionar silenciosamente. |41| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Ruta absoluta a un archivo por sesión que contiene el JWT de sesión actual, mantenido actualizado en los refrescos de token. Los subprocesos de shell lo leen para su encabezado `Authorization` al descargar archivos adjuntos que el usuario agregó a la sesión. `exec` preserva la variable automáticamente; un contenedor que reconstruye el entorno del hijo debe conservar la variable, o las descargas de archivos adjuntos dejan de funcionar silenciosamente. |

40| `CLAUDE_CONFIG_DIR` | Directorio de configuración de Claude por sesión, escrito al inicio de la sesión desde la instantánea de la configuración del host del ejecutor que el ejecutor captura al inicio; consulta [Permisos y aprobación de herramientas](#permissions-and-tool-approval). Las escrituras aquí se aíslan a esta sesión. El directorio permanece bajo `<base-dir>/_sessions/` después de que la sesión finaliza a menos que inicies el ejecutor con [`--remove-session-state`](/docs/es/self-hosted-environments-reference#runner-cli-flags); consulta [Reutilizar un checkout precalentado](/docs/es/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |42| `CLAUDE_CONFIG_DIR` | Directorio de configuración de Claude por sesión, escrito al inicio de la sesión desde la instantánea de la configuración del host del ejecutor que el ejecutor captura al inicio; consulta [Permisos y aprobación de herramientas](#permissions-and-tool-approval). Las escrituras aquí se aíslan a esta sesión. El directorio permanece bajo `<base-dir>/_sessions/` después de que la sesión finaliza a menos que inicies el ejecutor con [`--remove-session-state`](/docs/es/self-hosted-environments-reference#runner-cli-flags); consulta [Reutilizar un checkout precalentado](/docs/es/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |

41| `ANTHROPIC_BASE_URL` | La URL base de API que el hijo usará, entregada por el plano de control por sesión y normalmente `https://api.anthropic.com`. No la sobrescribas: la credencial de inferencia de la sesión es un token OAuth emitido por Anthropic que otros proveedores no aceptan. |43| `ANTHROPIC_BASE_URL` | La URL base de API que el hijo usará, entregada por el plano de control por sesión y normalmente `https://api.anthropic.com`. No la sobrescribas: la credencial de inferencia de la sesión es un token OAuth emitido por Anthropic que otros proveedores no aceptan. |


43 45 

44El contenedor también hereda el resto del entorno administrado del hijo, incluida cualquier variable de entorno proporcionada por el servidor. `exec` lo propaga todo automáticamente; si tu contenedor genera el hijo de otra manera, reenvía el entorno completo.46El contenedor también hereda el resto del entorno administrado del hijo, incluida cualquier variable de entorno proporcionada por el servidor. `exec` lo propaga todo automáticamente; si tu contenedor genera el hijo de otra manera, reenvía el entorno completo.

45 47 

48`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` y `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` llegan a tu contenedor o [hook `command`](#command). También llegan a lo que ejecuta la sesión, como comandos de shell, hooks de git y hooks de Claude Code. Los hooks `checkout`, `post-session` y `spawn-runner` no las reciben.

49 

50<h3 id="give-a-default-to-variables-that-can-be-unset">

51 Dar un valor predeterminado a las variables que pueden no estar establecidas

52</h3>

53 

54`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` y `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` pueden no estar establecidas. Si tu script usa `set -u`, Bash se detiene con `unbound variable` cuando expande una que no está establecida, así que expándelas con un valor predeterminado, como `${CCR_SESSION_ACCOUNT_EMAIL:-}`.

55 

56Dondequiera que un shell expanda el enlace del hilo de Slack, toma estas precauciones:

57 

58* **Ponlo entre comillas**: el enlace puede contener caracteres que un shell interpreta, como `?` y `&`, así que pon la variable entre comillas, como en `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`.

59* **Mantén su valor fuera de las cadenas de `eval` y `sh -c`**: no sustituyas su valor en una cadena que ejecuta `eval` o `sh -c`, ni siquiera entre comillas. En su lugar, haz que esa cadena haga referencia a la variable.

60 

46<h3 id="keep-stdin-and-file-descriptor-3-attached">61<h3 id="keep-stdin-and-file-descriptor-3-attached">

47 Mantener stdin y descriptor de archivo 3 adjuntos62 Mantener stdin y descriptor de archivo 3 adjuntos

48</h3>63</h3>

49 64 

50El stdin del hijo es el canal de control del ejecutor. Las rotaciones de token y las señales de fin de sesión llegan por él. El ejecutor también abre una tubería en el descriptor de archivo 3 y lee de ella las señales de actividad del hijo para controlar los tiempos de espera de inactividad e inicio. Un simple `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` preserva ambos automáticamente.65El stdin del hijo es el canal de control del ejecutor. Las rotaciones de token y las señales de fin de sesión llegan por él. El ejecutor también abre una tubería en el descriptor de archivo 3 y lee de ella las señales de actividad del hijo para controlar los tiempos de espera de inactividad e inicio. Un simple `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` preserva ambos automáticamente.

51 66 

52Si tu contenedor coloca el hijo en segundo plano con un simple `&`, corta el stdin del hijo: la sesión se ve saludable hasta que expira la vida útil de aproximadamente 30 minutos del token OAuth inicial, y luego cada llamada de API falla con `401 authentication_error`. Si tu contenedor debe colocar el hijo en segundo plano, por ejemplo para mantener viva una trampa de desmontaje, guarda stdin en el descriptor de archivo 4 o superior y vuelve a adjuntarlo explícitamente:67Si tu contenedor coloca el hijo en segundo plano con un simple `&`, corta el stdin del hijo. La sesión se ve saludable hasta que expira la vida útil de aproximadamente 30 minutos del token OAuth inicial, y luego cada llamada de API que usa el token falla con `401 authentication_error`. Si tu contenedor debe colocar el hijo en segundo plano, por ejemplo para mantener viva una trampa de desmontaje, guarda stdin en el descriptor de archivo 4 o superior y vuelve a adjuntarlo explícitamente:

53 68 

54```bash theme={null}69```bash theme={null}

55exec 4<&070exec 4<&0


59wait "$CHILD"74wait "$CHILD"

60```75```

61 76 

62No cierres ni reutilices el descriptor de archivo 3 en el contenedor. Redirigir stdout y stderr del hijo está bien.77Puedes redirigir el stdout del hijo. Mantén el descriptor de archivo 3 y stderr adjuntos al ejecutor:

78 

79* **Descriptor de archivo 3**: lleva las señales de actividad del hijo al ejecutor. No lo cierres ni lo reutilices en el contenedor.

80* **stderr**: cuando el contenedor o el hijo salen con un código distinto de cero, el ejecutor publica las últimas líneas de stderr en la sesión y las imprime en su propio registro. El usuario de la sesión ve esas líneas, así que no imprimas secretos en stderr y quita `set -x` antes de implementar el contenedor. Si rediriges stderr, las sesiones siguen ejecutándose, pero el ejecutor informa un fallo solo con el código de salida.

63 81 

64<h3 id="pass-the-system-prompt-flags-through">82<h3 id="pass-the-system-prompt-flags-through">

65 Transmitir los flags del prompt del sistema83 Transmitir los flags del prompt del sistema


108 checkout126 checkout

109</h3>127</h3>

110 128 

111Se ejecuta una vez por repositorio, en lugar del clon y fetch integrados del ejecutor. Usa el hook para clonar desde un espejo de lectura, sembrar un árbol de trabajo desde un archivo, o aplicar autenticación git por sesión. El ejecutor establece estas variables, y puede establecer otras variables `CLAUDE_RUNNER_` que la tabla no enumera:129Se ejecuta una vez por repositorio, en lugar del clon y fetch integrados del ejecutor. Usa el hook para clonar desde un espejo de lectura al que accedes por HTTPS o SSH, sembrar una copia de trabajo desde un archivo, o aplicar autenticación git por sesión. El ejecutor establece estas variables, y puede establecer otras variables `CLAUDE_RUNNER_` que la tabla no enumera:

112 130 

113| Variable | Descripción |131| Variable | Descripción |

114| :- | :- |132| :- | :- |

115| `CLAUDE_RUNNER_REPO_URL` | URL del repositorio a clonar, después de que se hayan aplicado `--git-host-rewrite` y `--git-ssh-rewrite` |133| `CLAUDE_RUNNER_REPO_URL` | URL del repositorio a clonar, después de que se hayan aplicado `--git-host-rewrite` y `--git-ssh-rewrite` |

116| `CLAUDE_RUNNER_REPO_REF` | Revisión a verificar: rama, etiqueta o SHA de commit como la sesión lo solicitó. Vacío significa la rama predeterminada del repositorio. |134| `CLAUDE_RUNNER_REPO_REF` | Revisión a extraer, tal como la sesión la solicitó: una rama, una etiqueta, un SHA de commit o un nombre de referencia completo como `refs/pull/<number>/head`. Vacío significa la rama predeterminada del repositorio. |

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | Ruta absoluta donde el árbol de trabajo debe dejarse |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | Ruta absoluta donde el árbol de trabajo debe dejarse |

118| `CLAUDE_RUNNER_SESSION_ID` | ID de sesión en forma etiquetada `session_...`, para registro y correlación |136| `CLAUDE_RUNNER_SESSION_ID` | ID de sesión en forma etiquetada `session_...`, para registro y correlación |

119| `CLAUDE_RUNNER_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica |137| `CLAUDE_RUNNER_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica |

120| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |138| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app` o `ios`. No establecido cuando la sesión no tiene una superficie registrada o reconocida. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app` o `ios`. No se establece cuando la sesión no tiene una superficie registrada o reconocida, así que haz referencia a ella como `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` con `set -u`. Requiere Claude Code v2.1.229 o posterior. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Ajustes de Git que el ejecutor fija para el git que ejecuta tu hook. [Configuración de Git dentro de los hooks de ciclo de vida](#git-configuration-inside-lifecycle-hooks) los describe. Requiere Claude Code v2.1.280 o posterior. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Ajustes de Git que el ejecutor fija para el git que ejecuta tu hook. [Configuración de Git dentro de los hooks de ciclo de vida](#git-configuration-inside-lifecycle-hooks) los describe. Requiere Claude Code v2.1.280 o posterior. |

124 142 

125El script debe dejar un árbol de trabajo en `CLAUDE_RUNNER_CHECKOUT_PATH` verificado en la revisión solicitada. HEAD desacoplado está bien; el ejecutor crea la rama de trabajo de la sesión encima. El ejecutor verifica que la ruta contenga un `.git` después; si su hook materializa una fuente no git como Perforce o un tarball desempaquetado, establezca `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` en el entorno del ejecutor para omitir esa verificación. Los flujos basados en git como la creación de rama de trabajo y el envío de resultados requieren un checkout de git, por lo que exporte resultados de árboles no git con un hook [`post-session`](#post-session).143El script debe dejar una copia de trabajo en `CLAUDE_RUNNER_CHECKOUT_PATH` extraída en la revisión solicitada. Un HEAD desacoplado funciona, porque el ejecutor crea la rama de trabajo de la sesión encima.

126 144 

127El ejecutor no pasa una credencial git al hook. En su lugar, acuñe una credencial de clon por sesión de la identidad de la sesión: verifique `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con una biblioteca JWT estándar contra el punto final JWKS bajo `CLAUDE_RUNNER_API_BASE_URL`, como se describe en [Verificar el token desde su servicio](/docs/es/self-hosted-environments-identity#verify-the-token-from-your-service), luego haga que su servicio de credenciales emita una credencial de clon de corta duración para la identidad en la reclamación `act` del token. `CLAUDE_RUNNER_CLAUDE_BIN` no se establece en el entorno del hook de checkout, por lo que el subcomando `decode-token` no está disponible aquí. Volver a la autenticación git que el host ya tiene, como un agente SSH, ayudante de credenciales o `.netrc`, también es una opción.145Después de que tu hook regresa, el ejecutor verifica que `CLAUDE_RUNNER_CHECKOUT_PATH` contenga un `.git`. Si tu hook materializa una fuente no git como Perforce o un tarball desempaquetado, establece `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` en el entorno del ejecutor para omitir esa verificación. Los flujos basados en git como la creación de la rama de trabajo y el envío de resultados requieren un checkout de git, así que exporta los resultados de copias no git con un [hook `post-session`](#post-session).

128 146 

129Cuando el hook sale con código distinto de cero, o sale con 0 sin dejar un checkout utilizable detrás, lo que hace el ejecutor depende del repositorio:147<h4 id="get-git-credentials-in-the-hook">

148 Obtener credenciales de git en el hook

149</h4>

130 150 

131* **Un repositorio al que la sesión envía resultados**: el ejecutor falla la sesión, y en una salida distinta de cero muestra la cola del stderr del script al usuario.151El ejecutor no pasa una credencial git al hook. El subcomando `decode-token` tampoco está disponible aquí, porque `CLAUDE_RUNNER_CLAUDE_BIN` no se establece en el entorno del hook de checkout. En su lugar, genera una credencial de clon por sesión a partir de la identidad de la sesión, o recurre a la autenticación git propia del host:

132* **Un repositorio que la sesión solo lee**, como un repositorio agregado a una sesión en ejecución: el ejecutor registra una línea `[runner:warn]` con el detalle de falla, publica un paso `Skipped` a la sesión, elimina lo que el hook dejó en la ruta de checkout y continúa con los repositorios restantes. Cuando el ejecutor no puede eliminar la ruta inmediatamente, reintenta la eliminación al final de la sesión. Si omitir deja la sesión sin repositorio en absoluto, el ejecutor falla la sesión de todas formas.

133 152 

134Antes de v2.1.228, el ejecutor fallaba la sesión en un fallo de hook para cualquier repositorio, por lo que un repositorio de solo lectura que el hook no podía servir fallaba la sesión nuevamente en cada ejecutor nuevo en el que la sesión se reanudaba.153* **Credencial de clon por sesión**: verifica `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con una biblioteca JWT estándar contra el endpoint JWKS bajo `CLAUDE_RUNNER_API_BASE_URL`, como se describe en [Verificar el token desde tu servicio](/docs/es/self-hosted-environments-identity#verify-the-token-from-your-service). Luego haz que tu servicio de credenciales emita una credencial de clon de corta duración para la identidad en la reclamación `act` del token. Asocia esa credencial a `act.sub`, y no exijas `act.email`.

154* **Autenticación git del host**: usa la autenticación git que el host ya tenga, como un agente SSH, un ayudante de credenciales o `.netrc`.

135 155 

136El ejecutor elimina la ruta de checkout después de que la sesión termina.156<h4 id="when-the-hook-fails">

157 Cuando el hook falla

158</h4>

159 

160El hook falla cuando sale con código distinto de cero, o sale con 0 sin dejar un checkout utilizable:

161 

162* **Un repositorio al que la sesión envía resultados**: el ejecutor falla la sesión, y en una salida distinta de cero muestra la cola del stderr del script al usuario.

163* **Un repositorio que la sesión solo lee**, como un repositorio agregado a una sesión en ejecución: el ejecutor registra una línea `[runner:warn]` con el detalle del fallo, publica un paso `Skipped` en la sesión, elimina lo que el hook haya dejado en la ruta de checkout y continúa con los repositorios restantes. Si al omitirlo la sesión queda sin ningún repositorio, el ejecutor falla la sesión de todas formas.

164 

165Cuando el hook tiene éxito, el ejecutor elimina la ruta de checkout después de que la sesión termina.

137 166 

138<h3 id="post-session">167<h3 id="post-session">

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Rutas absolutas separadas por dos puntos de los árboles de trabajo de la sesión. Vacío para sesiones sin repositorio. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Rutas absolutas separadas por dos puntos de los árboles de trabajo de la sesión. Vacío para sesiones sin repositorio. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Ruta al registro de depuración de la sesión, aún en disco mientras se ejecuta el hook |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Ruta al registro de depuración de la sesión, aún en disco mientras se ejecuta el hook |

153| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |182| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app` o `ios`. No establecido cuando la sesión no tiene una superficie registrada o reconocida. Requiere Claude Code v2.1.229 o posterior. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app` o `ios`. No se establece cuando la sesión no tiene una superficie registrada o reconocida, así que haz referencia a ella como `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` con `set -u`. Requiere Claude Code v2.1.229 o posterior. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Ajustes de Git que el ejecutor fija para el git que ejecuta tu hook. [Configuración de Git dentro de los hooks de ciclo de vida](#git-configuration-inside-lifecycle-hooks) los describe. Requiere Claude Code v2.1.280 o posterior. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Ajustes de Git que el ejecutor fija para el git que ejecuta tu hook. [Configuración de Git dentro de los hooks de ciclo de vida](#git-configuration-inside-lifecycle-hooks) los describe. Requiere Claude Code v2.1.280 o posterior. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON` toma uno de cuatro valores:187`CLAUDE_RUNNER_EXIT_REASON` toma uno de cuatro valores:

159 188 

160* `completed`: la sesión terminó limpiamente. El proceso de Claude Code salió normalmente, o la sesión fue archivada o eliminada mientras aún se estaba ejecutando.189* `completed`: la sesión terminó limpiamente. El proceso de Claude Code salió normalmente, o salió por sí mismo después de que la sesión fue archivada o eliminada.

161* `failed`: el proceso de Claude Code se bloqueó, o la configuración falló después de que comenzó.190* `failed`: el proceso de Claude Code se bloqueó, o la configuración falló después de que comenzó.

162* `interrupted`: el ejecutor detuvo la sesión. Liberó la sesión para liberar la ranura, la sesión agotó el tiempo de espera al inicio, el servidor movió la sesión fuera de este ejecutor, el ejecutor estaba drenando, o la sesión superó su límite [`--kill-session-after-min`](/docs/es/self-hosted-environments-reference#runner-cli-flags).191* `interrupted`: el ejecutor detuvo la sesión, en uno de estos casos:

192 * El ejecutor liberó la sesión para liberar la ranura.

193 * Se agotó el tiempo de espera de la sesión al inicio.

194 * El servidor movió la sesión fuera de este ejecutor.

195 * El sondeo del ejecutor detectó un archivado o una eliminación antes de que el proceso saliera.

196 * El ejecutor estaba drenando.

197 * La sesión superó su límite de [`--kill-session-after-min`](/docs/es/self-hosted-environments-reference#runner-cli-flags).

163* `abandoned`: reservado para una sesión que otro ejecutor reclamó. El hook actualmente no se dispara en ese caso.198* `abandoned`: reservado para una sesión que otro ejecutor reclamó. El hook actualmente no se dispara en ese caso.

164 199 

165Los [contadores de ciclo de vida de sesión](/docs/es/self-hosted-environments-reference#session-lifecycle-counter-semantics) cuentan una liberación, un tiempo de espera de inicio y un movimiento de servidor como `completed` en lugar de `interrupted`, porque el ejecutor devolvió la ranura limpiamente. Espere esa diferencia si compara recibos de hook con los contadores.200Si comparas los recibos del hook con los [contadores de ciclo de vida de sesión](/docs/es/self-hosted-environments-reference#session-lifecycle-counter-semantics), espera que algunos recibos `interrupted` cuenten allí como `completed`. Los contadores cuentan como `completed` una liberación, un tiempo de espera agotado al inicio, un movimiento de servidor y un archivado o eliminación que el sondeo del ejecutor detectó primero, porque el ejecutor devolvió la ranura limpiamente.

166 201 

167El estado de salida del hook nunca afecta el resultado de la sesión; un fallo se registra e ignora. El ejecutor espera hasta `--post-session-hook-timeout-sec`, 60 segundos por defecto, en cada fin de sesión incluido el apagado del ejecutor. Este ejemplo guarda trabajo no confirmado en una rama de rescate:202El estado de salida del hook nunca afecta el resultado de la sesión; un fallo se registra e ignora. El ejecutor espera hasta `--post-session-hook-timeout-sec`, 60 segundos por defecto, en cada fin de sesión incluido el apagado del ejecutor. Este ejemplo guarda trabajo no confirmado en una rama de rescate:

168 203 

169```bash theme={null}204```bash theme={null}

170#!/usr/bin/env bash205#!/usr/bin/env bash

171set -u206set -u

207export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

172IFS=':'208IFS=':'

173# Las sobrescrituras -c prevalecen sobre los ajustes a nivel de repositorio, lo que impide209# -c overrides beat repo-local settings, blocking session-written fsmonitor,

174# que la configuración de fsmonitor, ruta de hooks y programa gpg escrita por la sesión210# hook-path, and gpg-program config from executing code with the hook's

175# ejecute código con los privilegios del hook. -c commit.gpgsign=false también deja211# privileges. -c commit.gpgsign=false also leaves these rescue commits

176# estos commits de rescate sin firmar con --configure-git.212# unsigned under --configure-git.

177# credential.helper y pushurl a nivel de repositorio aún se aplican, y en un ejecutor213# Repo-local credential.helper and pushurl still apply, and on a runner

178# anterior a v2.1.280 también core.sshCommand; si el hook tiene credenciales que214# before v2.1.280 so does core.sshCommand; see the note below the script

179# la sesión no tenía, consulta la nota debajo del script.215# before you give this push a credential.

180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \216g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

181 -c commit.gpgsign=false "$@"; }217 -c commit.gpgsign=false "$@"; }

182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do218for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


188done224done

189```225```

190 226 

191El hook hace push con las credenciales git que estén disponibles en su propio entorno en el host del ejecutor. Con la [postura de no credenciales en la imagen](/docs/es/self-hosted-environments-deploy#configure-git), incluido cuando el clon integrado pasa por el proxy git de Anthropic, no hay ninguna, así que genera una credencial de push de corta duración dentro del hook antes de hacer push: intercambia el token de sesión que el hook recibe en `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con tu propio servicio de tokens, verificándolo como se describe en [Verificar la identidad de sesión](/docs/es/self-hosted-environments-identity). Cuando el hook tiene una credencial que la sesión no tenía, reemplaza `origin` con una URL proporcionada por el operador y pasa `-c credential.helper=` más tu propio ayudante. [Configuración de Git dentro de los hooks de ciclo de vida](#git-configuration-inside-lifecycle-hooks) describe lo que la configuración escrita por la sesión aún puede afectar.227La línea `GIT_ALLOW_PROTOCOL` del script limita git a remotos HTTPS, HTTP y SSH. Si el entorno del ejecutor ya establece su propia lista `GIT_ALLOW_PROTOCOL` no vacía, el script conserva esa lista.

228 

229El hook hace push con las credenciales git que estén disponibles en su propio entorno en el host del ejecutor. Con la [postura de no credenciales en la imagen](/docs/es/self-hosted-environments-deploy#configure-git), incluido cuando el clon integrado pasa por el proxy git de Anthropic, no hay ninguna, así que genera una credencial de push de corta duración dentro del hook antes de hacer push: intercambia el token de sesión que el hook recibe en `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con tu propio servicio de tokens, verificándolo como se describe en [Verificar la identidad de sesión](/docs/es/self-hosted-environments-identity).

230 

231Trata cualquier credencial que tu hook le dé a git como una que una sesión puede obtener, y genérala de modo que no pueda hacer más que este push. Git en tu hook lee archivos de configuración que una sesión puede escribir, y un ayudante de credenciales o un controlador de filtros nombrado en uno de ellos se ejecuta con los privilegios de tu hook. Los ajustes de esos archivos también pueden cambiar el destino de un push, sea cual sea el remoto que nombres. Para conocer los ajustes de git que el ejecutor fija en tu hook y los que deja en manos de esos archivos, consulta [Configuración de Git dentro de los hooks de ciclo de vida](#git-configuration-inside-lifecycle-hooks).

192 232 

193<h4 id="hook-timing-when-the-runner-releases-a-session">233<h4 id="hook-timing-when-the-runner-releases-a-session">

194 Tiempo del hook cuando el ejecutor libera una sesión234 Tiempo del hook cuando el ejecutor libera una sesión


264| `CLAUDE_RUNNER_ORDER_ID` | Clave de idempotencia opaca, única por solicitud de generación y segura para nombres de recursos de Kubernetes. Úsela como clave de deduplicación de su aprovisionador. |304| `CLAUDE_RUNNER_ORDER_ID` | Clave de idempotencia opaca, única por solicitud de generación y segura para nombres de recursos de Kubernetes. Úsela como clave de deduplicación de su aprovisionador. |

265| `CLAUDE_RUNNER_SESSION_ID` | La sesión para la que es esta solicitud. Se repite en cada resolicitud de la sesión, por lo que úsela para registro y enrutamiento, no como clave de deduplicación. Vacío para solicitudes de precalentamiento, que arrancan un ejecutor en espera antes de cualquier sesión específica cuando [`--min-idle`](/docs/es/self-hosted-environments-reference#orchestrator-cli-flags) se establece, por lo que no asuma que la variable se establece. |305| `CLAUDE_RUNNER_SESSION_ID` | La sesión para la que es esta solicitud. Se repite en cada resolicitud de la sesión, por lo que úsela para registro y enrutamiento, no como clave de deduplicación. Vacío para solicitudes de precalentamiento, que arrancan un ejecutor en espera antes de cualquier sesión específica cuando [`--min-idle`](/docs/es/self-hosted-environments-reference#orchestrator-cli-flags) se establece, por lo que no asuma que la variable se establece. |

266| `CLAUDE_RUNNER_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica. Vacío para solicitudes de precalentamiento. |306| `CLAUDE_RUNNER_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica. Vacío para solicitudes de precalentamiento. |

267| `CLAUDE_RUNNER_ATTEMPT` | Cuántas solicitudes de generación ha tenido esta sesión. `0` para solicitudes de precalentamiento. |307| `CLAUDE_RUNNER_ATTEMPT` | Un contador por sesión para usar en el registro. No es un recuento de reintentos ni un recuento de solicitudes. `0` para solicitudes de precalentamiento, aunque una solicitud para una sesión también puede llevar `0`. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Hora del servidor del encabezado HTTP `Date` de la respuesta de sondeo. Cuando el hook verifica el `exp` del JWT de orden de trabajo, compare contra este valor en lugar del reloj local para tolerar sesgo. Vacío cuando la puerta de enlace omitió el encabezado. |308| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Hora del servidor del encabezado HTTP `Date` de la respuesta de sondeo. Cuando el hook verifica el `exp` del JWT de orden de trabajo, compare contra este valor en lugar del reloj local para tolerar sesgo. Vacío cuando la puerta de enlace omitió el encabezado. |

269| `CLAUDE_RUNNER_POOL_ID` | El ID del entorno al que el nuevo ejecutor debe unirse, en forma `ccpool_...` |309| `CLAUDE_RUNNER_POOL_ID` | El ID del entorno al que el nuevo ejecutor debe unirse, en forma `ccpool_...` |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | ID etiquetado de la cuenta que encoló la sesión, para enrutamiento por cuenta, cuota o contracargo. Vacío cuando no está disponible, y siempre vacío para sesiones de canal Claude Tag, que ninguna cuenta encola. |310| `CLAUDE_RUNNER_ACCOUNT_ID` | ID etiquetado de la cuenta que encoló la sesión, para enrutamiento por cuenta, cuota o contracargo. Vacío cuando no está disponible, y siempre vacío para sesiones de canal Claude Tag, que ninguna cuenta encola. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Correo electrónico de la cuenta que encoló la sesión. Vacío cuando no está disponible. Trate el correo electrónico como información de identificación personal y no lo registre. |311| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Correo electrónico de la cuenta que encoló la sesión. Vacío cuando no está disponible. Trate el correo electrónico como información de identificación personal y no lo registre. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL de la primera fuente git de la sesión, para enrutamiento a un ejecutor con ese repositorio precalentado. Vacío cuando la sesión no tiene fuentes git. |312| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL de la primera fuente git de la sesión, para enrutamiento a un ejecutor con ese repositorio precalentado. Vacío cuando la sesión no tiene fuentes git. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisión de la primera fuente git de la sesión: rama, SHA o etiqueta. Vacío cuando no se especifica. |313| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisión de la primera fuente git de la sesión: rama, SHA, etiqueta o nombre de referencia completo. Vacío cuando no se especifica. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | Matriz JSON de `{url, revision}` para todas las fuentes git de la sesión, para hooks que enrutan en un repositorio secundario. Vacío cuando no hay fuentes. |314| `CLAUDE_RUNNER_REPO_SOURCES` | Matriz JSON de `{url, revision}` para todas las fuentes git de la sesión, para hooks que enrutan en un repositorio secundario. Vacío cuando no hay fuentes. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | El ID de correlación proporcionado en la creación de sesión, devuelto para que el hook pueda asignar esta orden de trabajo a la solicitud que creó la sesión. Vacío cuando la sesión no tiene ninguno. |315| `CLAUDE_RUNNER_CORRELATION_ID` | El ID de correlación proporcionado en la creación de sesión, devuelto para que el hook pueda asignar esta orden de trabajo a la solicitud que creó la sesión. Vacío cuando la sesión no tiene ninguno. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app`, `ios` o `scheduled_trigger`, para análisis de adopción. No establecido cuando la sesión no tiene una superficie registrada o reconocida, y para solicitudes de precalentamiento; verifíquelo con `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, que permanece seguro bajo `set -u`. |316| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie del cliente que creó la sesión, como `web_claude_ai`, `desktop_app`, `ios` o `scheduled_trigger`, para análisis de adopción. No establecido cuando la sesión no tiene una superficie registrada o reconocida, y para solicitudes de precalentamiento; verifíquelo con `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, que permanece seguro bajo `set -u`. |


282* **Use `--capacity 1` en ejecutores generados**: una orden de trabajo vinculada a sesión registra exactamente un ejecutor vinculado a esa sesión, por lo que una capacidad más alta agrega espacios que nunca reciben trabajo, y el ejecutor registra una advertencia al inicio.322* **Use `--capacity 1` en ejecutores generados**: una orden de trabajo vinculada a sesión registra exactamente un ejecutor vinculado a esa sesión, por lo que una capacidad más alta agrega espacios que nunca reciben trabajo, y el ejecutor registra una advertencia al inicio.

283* **Las órdenes de trabajo de precalentamiento registran sin vincular**: el ejecutor en espera no está vinculado a una sesión y reclama trabajo en cola como un ejecutor de flota fija.323* **Las órdenes de trabajo de precalentamiento registran sin vincular**: el ejecutor en espera no está vinculado a una sesión y reclama trabajo en cola como un ejecutor de flota fija.

284 324 

285El contrato tiene cuatro reglas agnósticas del aprovisionador:325El contrato tiene cuatro reglas, sea cual sea la plataforma en la que tu hook aprovisiona:

286 326 

2871. **Sea idempotente en `CLAUDE_RUNNER_ORDER_ID`.** La reentrega de la misma solicitud debe generar como máximo un ejecutor. Derive un nombre de recurso determinista del ID de orden y deje que su plataforma rechace el duplicado. No use `CLAUDE_RUNNER_SESSION_ID` como clave en su lugar. Cada resolicitud de una sesión lleva el mismo ID de sesión con un nuevo ID de orden, por lo que una carga de trabajo nombrada o deduplicada por el ID de sesión se crea una vez y nunca más para esa sesión.3271. **Sea idempotente en `CLAUDE_RUNNER_ORDER_ID`.** La reentrega de la misma solicitud debe generar como máximo un ejecutor. Derive un nombre de recurso determinista del ID de orden y deje que su plataforma rechace el duplicado. No use `CLAUDE_RUNNER_SESSION_ID` como clave en su lugar. Cada resolicitud de una sesión lleva el mismo ID de sesión con un nuevo ID de orden, por lo que una carga de trabajo nombrada o deduplicada por el ID de sesión se crea una vez y nunca más para esa sesión.

2882. **No reintente la carga de trabajo.** Un ID de orden significa como máximo una carga de trabajo creada. Si el ejecutor nunca se registra, Anthropic reintenta con un ID de orden nuevo después de `--expected-spawn-seconds`.3282. **No reintente la carga de trabajo.** Un ID de orden significa como máximo una carga de trabajo creada. Si el ejecutor nunca se registra, Anthropic reintenta con un ID de orden nuevo después de `--expected-spawn-seconds`.

2893. **Use el contrato de código de salida.** Salida 0 significa enviado. Salida 1 significa fallo reintentable; la sesión retrocede y se reintenta. Salida 2 o superior significa no reintentable; la sesión se bloquea de generar nuevamente hasta que un [Propietario](/docs/es/cloud-environments#organization-shared-environments) selecciona **Retry** en ella en la pestaña **Activity** del entorno. En salida distinta de cero, la cola del stderr del hook aparece allí como la razón de falla, por lo que escriba el error procesable a stderr y nunca secretos. Para una solicitud de precalentamiento no hay sesión para fallar: el orquestador registra una salida distinta de cero localmente solamente, y el servidor reintenta la generación después del arrendamiento.3293. **Usa el contrato de código de salida.** Sal con el estado que corresponda al resultado:

2904. **Establezca `--expected-spawn-seconds` a al menos su tiempo de arranque p99.** Este es el arrendamiento del lado del servidor. Todas las réplicas del orquestador deben usar el mismo valor.330 

331 * **Salida 0**: enviado.

332 * **Salida 1**: fallo reintentable. La sesión espera un tiempo y se vuelve a ofrecer.

333 * **Salida 2 o superior**: fallo no reintentable. La sesión queda bloqueada para generar nuevamente hasta que un usuario le envíe un mensaje nuevo o un [Propietario](/docs/es/cloud-environments#organization-shared-environments) seleccione **Retry** en ella en la pestaña **Activity** del entorno.

334 

335 En una salida distinta de cero, el final del stderr del hook aparece en la pestaña **Activity** como la razón del fallo, así que escribe el error procesable en stderr y nunca escribas secretos allí. En un hook de shell, [mantén los fallos transitorios reintentables](#keep-transient-failures-retryable-in-a-shell-hook).

336 

337 Una solicitud de precalentamiento no tiene sesión que pueda fallar: el orquestador registra una salida distinta de cero solo localmente, y el servidor vuelve a solicitar la generación después de que expira el arrendamiento de `--expected-spawn-seconds`.

3384. **Establece `--expected-spawn-seconds` en al menos tu tiempo p99 desde la solicitud de generación hasta el registro del ejecutor.** Mide desde el momento en que el orquestador recibe la solicitud de generación, e incluye cualquier espera de capacidad en tu plataforma además del tiempo de arranque. Este valor es el arrendamiento del lado del servidor, y la orden de trabajo expira con él, por lo que un ejecutor cuya carga de trabajo tarde más no puede registrarse. Todas las réplicas del orquestador deben usar el mismo valor.

291 339 

292Todo lo que el hook escribe a stdout o stderr aparece en el registro del orquestador con credenciales automáticamente redactadas. Si las sesiones permanecen en cola, verifique el cuerpo `/healthz` del orquestador para contar colas, luego abra la pestaña **Activity** de su entorno en la [página de administración **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): expanda una sesión fallida allí para su error de generación, y seleccione **Retry** para reintentarla.340Todo lo que el hook escribe a stdout o stderr aparece en el registro del orquestador con credenciales automáticamente redactadas. Si las sesiones permanecen en cola, verifique el cuerpo `/healthz` del orquestador para contar colas, luego abra la pestaña **Activity** de su entorno en la [página de administración **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): expanda una sesión fallida allí para su error de generación, y seleccione **Retry** para reintentarla.

293 341 

294Una sesión que permanece en cola sin error de generación en la pestaña **Activity** puede significar que el hook está codificado en el ID de sesión. Para confirmar, verifique si su plataforma tiene una carga de trabajo para la primera solicitud de generación de esa sesión y ninguna para las resolicitudes. Si es así, codifique la carga de trabajo en `CLAUDE_RUNNER_ORDER_ID` en su lugar.342Una sesión que permanece en cola sin error de generación en la pestaña **Activity** puede significar que el hook está codificado en el ID de sesión. Para confirmar, verifique si su plataforma tiene una carga de trabajo para la primera solicitud de generación de esa sesión y ninguna para las resolicitudes. Si es así, codifique la carga de trabajo en `CLAUDE_RUNNER_ORDER_ID` en su lugar.

295 343 

344<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

345 Mantén los fallos transitorios reintentables en un hook de shell

346</h4>

347 

348En un hook de shell que usa `set -e`, un fallo que un reintento podría haber resuelto puede bloquear la sesión. El hook se detiene en el comando que falla y sale con el estado propio de ese comando, y el orquestador aplica el contrato de código de salida a ese estado. Muchos fallos devuelven un estado de 2 o superior, como `127` cuando un comando no está instalado y `22` de `curl --fail` ante un error HTTP, por lo que bloquean la sesión en su primer fallo.

349 

350Una sesión que el hook ya bloqueó permanece bloqueada hasta que un usuario le envíe un mensaje nuevo o un [Propietario](/docs/es/cloud-environments#organization-shared-environments) seleccione **Retry** en ella en la pestaña **Activity** del entorno.

351 

352Para convertir ese tipo de fallo en una salida 1, coloca estas líneas justo debajo de la línea `#!` del hook, por encima de cualquier cosa que pueda fallar:

353 

354```bash theme={null}

355set -e

356PERMANENT=; permanent() { printf '%s\n' "$*" >&2; PERMANENT=1; exit 2; }

357trap 'rc=$?; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

358```

359 

360Estas líneas cambian cómo se comporta el resto del hook, así que revísalo en busca de cada uno de estos patrones después de agregarlas:

361 

362* **`exit 2` o superior a secas**: con el trap establecido, se convierte en salida 1. Para un error que ningún reintento puede corregir, llama a `permanent` con el motivo en su lugar, como `permanent "namespace claude-runners does not exist"`. Llámalo en el shell principal, no dentro de `$( )`, `( )` ni de una tubería.

363* **`exec`**: no inicies el último comando del hook con `exec`, porque `exec` reemplaza el shell y el trap no se ejecuta.

364* **Segundo trap `EXIT`**: un segundo `trap ... EXIT` reemplaza al primero, así que combina los dos en un solo trap. Coloca tus comandos de limpieza justo después de `rc=$?;` y termina cada uno con `|| true;`. Así la limpieza se ejecuta tanto en caso de fallo como de éxito, y un comando de limpieza que falla no establece el estado de salida del hook. Este trap combinado muestra la forma, con `your-cleanup-command` en lugar de tu propio comando:

365 

366 ```bash theme={null}

367 trap 'rc=$?; your-cleanup-command || true; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

368 ```

369* **Comandos a los que se les permite fallar**: si el hook no usaba `set -e` antes, ahora se detiene en el primer comando que devuelve un valor distinto de cero, como una búsqueda que no encuentra nada o un envío duplicado que tu plataforma rechaza. Si el hook actúa según el resultado, convierte ese comando en la condición de un `if`. Si ignora el resultado, añade `|| true` después del comando.

370 

371Para confirmar que el trap funciona, agrega justo debajo de la línea `trap` una línea que llame a un comando que no existe, como `no-such-command`. Ejecuta el archivo del hook desde tu shell y comprueba que `echo $?` imprima `1`; luego elimina la línea.

372 

296<h2 id="send-model-requests-to-bedrock-or-agent-platform">373<h2 id="send-model-requests-to-bedrock-or-agent-platform">

297 Enviar solicitudes de modelo a Bedrock o Agent Platform374 Enviar solicitudes de modelo a Bedrock o Agent Platform

298</h2>375</h2>


381Una sesión que envía solicitudes de modelo a Amazon Bedrock o a Agent Platform de Google Cloud difiere de una sesión en la API de Anthropic en estos aspectos:458Una sesión que envía solicitudes de modelo a Amazon Bedrock o a Agent Platform de Google Cloud difiere de una sesión en la API de Anthropic en estos aspectos:

382 459 

383* **Políticas de claude.ai**: la [configuración administrada por el servidor](/docs/es/server-managed-settings) no llega a estas sesiones. Tampoco llegan las políticas de organización que un Owner establece en la configuración de administración de Claude Code, por lo que Claude Code no las aplica dentro de la sesión. Coloca las reglas de las que dependes en el [archivo de configuración administrada](/docs/es/managed-settings#delivery-mechanisms) de la imagen del runner.460* **Políticas de claude.ai**: la [configuración administrada por el servidor](/docs/es/server-managed-settings) no llega a estas sesiones. Tampoco llegan las políticas de organización que un Owner establece en la configuración de administración de Claude Code, por lo que Claude Code no las aplica dentro de la sesión. Coloca las reglas de las que dependes en el [archivo de configuración administrada](/docs/es/managed-settings#delivery-mechanisms) de la imagen del runner.

461* **Skills de la cuenta**: estas sesiones no descargan los skills habilitados para la cuenta de claude.ai de una persona. Consulta [Cómo se ensambla la configuración de cada sesión](#how-each-session’s-config-is-assembled).

384* **Archivos**: los archivos que las personas adjuntan a una sesión en claude.ai o en la aplicación móvil o de escritorio no llegan a ella, y Claude no puede devolver archivos con la [herramienta `SendUserFile`](/docs/es/tools-reference). En su lugar, coloca los archivos de entrada en el repositorio o en el runner.462* **Archivos**: los archivos que las personas adjuntan a una sesión en claude.ai o en la aplicación móvil o de escritorio no llegan a ella, y Claude no puede devolver archivos con la [herramienta `SendUserFile`](/docs/es/tools-reference). En su lugar, coloca los archivos de entrada en el repositorio o en el runner.

385* **Selección de modelo**: el plano de control de Anthropic envía el modelo de cada sesión y, cuando una sesión se inicia sin uno, Claude Code usa su modelo predeterminado para el proveedor. El runner elimina `ANTHROPIC_MODEL` y `ANTHROPIC_DEFAULT_MODEL` del entorno que pasa a las sesiones. Los ejemplos de las páginas de los proveedores establecen `ANTHROPIC_MODEL`, pero en el entorno del runner ninguna de las dos variables tiene efecto. Las variables por familia de Fijar versiones de modelos para [Amazon Bedrock](/docs/es/amazon-bedrock#4-pin-model-versions) y [Agent Platform](/docs/es/google-vertex-ai#5-pin-model-versions) sí llegan a las sesiones. Deciden a qué se resuelve un alias como `opus`, no a qué se resuelve un ID de modelo completo.463* **Selección de modelo**: el plano de control de Anthropic envía el modelo de cada sesión y, cuando una sesión se inicia sin uno, Claude Code usa su modelo predeterminado para el proveedor. No puedes elegir el modelo con `ANTHROPIC_MODEL` ni con `ANTHROPIC_DEFAULT_MODEL` en el entorno del runner, pero sí puedes fijar a qué se resuelve un alias:

464 * **`ANTHROPIC_MODEL` y `ANTHROPIC_DEFAULT_MODEL`**: el runner las elimina del entorno que pasa a las sesiones, aunque los ejemplos de las páginas de los proveedores establezcan `ANTHROPIC_MODEL`.

465 * **Variables de fijación por familia**: las variables de Fijar versiones de modelos para [Amazon Bedrock](/docs/es/amazon-bedrock#4-pin-model-versions) y [Agent Platform](/docs/es/google-vertex-ai#5-pin-model-versions) sí llegan a las sesiones. Deciden a qué se resuelve un alias como `opus`, no a qué se resuelve un ID de modelo completo.

386* **Modelos que tu cuenta no ofrece**: una sesión puede fallar en un mensaje con un error que nombra el modelo. Habilita los modelos que tus desarrolladores pueden elegir, el modelo en segundo plano descrito en Fijar versiones de modelos y el modelo clasificador que usa el [modo automático](/docs/es/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). En Amazon Bedrock, permite cada uno de ellos en tu política.466* **Modelos que tu cuenta no ofrece**: una sesión puede fallar en un mensaje con un error que nombra el modelo. Habilita los modelos que tus desarrolladores pueden elegir, el modelo en segundo plano descrito en Fijar versiones de modelos y el modelo clasificador que usa el [modo automático](/docs/es/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). En Amazon Bedrock, permite cada uno de ellos en tu política.

387* **Búsqueda web y modo rápido**: la [búsqueda web](/docs/es/tools-reference#websearch-tool-behavior) no está disponible en Amazon Bedrock, y el [modo rápido](/docs/es/fast-mode) no está disponible en ninguno de los dos proveedores. Para otras capacidades que varían según el proveedor, consulta [Capacidades de la CLI que varían según el proveedor](/docs/es/feature-availability#cli-capabilities-that-vary-by-provider).467* **Búsqueda web y modo rápido**: la [búsqueda web](/docs/es/tools-reference#websearch-tool-behavior) no está disponible en Amazon Bedrock, y el [modo rápido](/docs/es/fast-mode) no está disponible en ninguno de los dos proveedores. Para otras capacidades que varían según el proveedor, consulta [Capacidades de la CLI que varían según el proveedor](/docs/es/feature-availability#cli-capabilities-that-vary-by-provider).

388 468 


411 491 

412Las sesiones heredan el entorno del runner, así que define [`ENABLE_TOOL_SEARCH`](/docs/es/mcp#scale-with-mcp-tool-search) allí para controlar la búsqueda de herramientas MCP en cada sesión que inicie un runner; la página de MCP describe los valores.492Las sesiones heredan el entorno del runner, así que define [`ENABLE_TOOL_SEARCH`](/docs/es/mcp#scale-with-mcp-tool-search) allí para controlar la búsqueda de herramientas MCP en cada sesión que inicie un runner; la página de MCP describe los valores.

413 493 

494<a id="connection-timing" />

495 

496<h3 id="wait-for-mcp-servers-before-the-first-turn">

497 Esperar a los servidores MCP antes del primer turno

498</h3>

499 

500Una sesión autohospedada espera brevemente a los servidores MCP que aún se están conectando, en dos momentos distintos. Si un servidor no llega a tiempo a una de las esperas, sus herramientas faltan cuando comienza el primer turno, y quedan disponibles más tarde sin que tengas que hacer nada. Las dos esperas son:

501 

502* **Inicio de la sesión**: antes de que se tome la lista de herramientas por primera vez, la sesión espera de forma predeterminada hasta 5 segundos a un servidor HTTP o SSE cuya entrada defina [`alwaysLoad: true`](/docs/es/mcp#exempt-a-server-from-deferral), o a todos los servidores cuando defines [`MCP_CONNECTION_NONBLOCKING=0`](/docs/es/env-vars) en el entorno del runner. En los demás casos, los servidores HTTP y SSE se conectan en segundo plano. Mientras la sesión espera aquí, tarda más en inicializarse. [`MCP_CONNECT_TIMEOUT_MS`](/docs/es/env-vars) cambia el valor predeterminado de 5 segundos.

503* **Primer turno**: después de que llega el mensaje, el primer turno espera hasta 2 segundos a los servidores stdio que aún se están conectando. Mientras la sesión espera aquí, la primera respuesta tarda más. Para cambiar cuánto dura esta espera, define [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/es/env-vars) en el entorno del runner. No cambia qué servidores abarca la espera. Requiere Claude Code v2.1.274 o posterior.

504 

505`claude mcp add` no tiene un flag `alwaysLoad`. Para definir la clave, agrega el servidor con `claude mcp add-json`, que la recibe en el JSON del servidor y la escribe en `.claude.json`. En tu Dockerfile:

506 

507```dockerfile theme={null}

508RUN claude mcp add-json core '{"type":"http","url":"https://mcp.example.com/mcp","alwaysLoad":true}' --scope user

509```

510 

511Si las herramientas de un servidor tampoco aparecen en turnos posteriores, comprueba si el servidor llegó a la sesión, como se describe en [Servidores MCP](#mcp-servers).

512 

414<h3 id="turn-off-built-in-session-tools">513<h3 id="turn-off-built-in-session-tools">

415 Desactivar las herramientas de sesión integradas514 Desactivar las herramientas de sesión integradas

416</h3>515</h3>


571 670 

572Establezca `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` para sembrar desde una ruta diferente, o apúntelo a un directorio vacío para deshabilitar la siembra.671Establezca `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` para sembrar desde una ruta diferente, o apúntelo a un directorio vacío para deshabilitar la siembra.

573 672 

574El `.claude/settings.json` confirmado en el repositorio se superpone como configuración del proyecto. En una sesión con varios repositorios, [como máximo tiene efecto el archivo de un solo repositorio](#repository-settings-in-sessions-with-several-repositories). Las sesiones también leen [`managed-settings.json`](/docs/es/settings#where-settings-live) desde la ruta estándar del sistema en tu imagen del ejecutor. Si sus claves se aplican junto con la [configuración administrada por el servidor](/docs/es/server-managed-settings) depende de [cómo Claude Code combina las fuentes administradas](/docs/es/managed-settings#how-claude-code-combines-managed-sources): de forma predeterminada, cuando tu organización entrega cualquier clave administrada por el servidor, las sesiones ignoran el archivo de la imagen del ejecutor, salvo las [claves que Claude Code lee de todas las fuentes de administrador](/docs/es/managed-settings#keys-read-from-every-admin-source), como el bloque `env`, los bloqueos del sandbox, las rutas de los binarios del sandbox y `forceRemoteSettingsRefresh`. Consulta [precedencia de configuración](/docs/es/settings#settings-precedence).673Las sesiones también leen estos archivos de configuración:

674 

675* **Configuración del proyecto**: un `.claude/settings.json` confirmado en el repositorio se superpone a la línea de base a nivel de usuario. En una sesión con varios repositorios, [como máximo tiene efecto el archivo de un solo repositorio](#repository-settings-in-sessions-with-several-repositories).

676* **Configuración administrada**: las sesiones leen [`managed-settings.json`](/docs/es/settings#where-settings-live) desde la ruta estándar del sistema en tu imagen del ejecutor. Para saber si sus claves se aplican junto con la [configuración administrada por el servidor](/docs/es/server-managed-settings), consulta [cómo Claude Code combina las fuentes administradas](/docs/es/managed-settings#how-claude-code-combines-managed-sources).

677 

678Para conocer el orden en que se aplican estas fuentes, consulta [precedencia de configuración](/docs/es/settings#settings-precedence).

575 679 

576Cuando el plano de control de Anthropic proporciona una sesión con [hooks de Claude Code](/docs/es/hooks), el ejecutor los instala junto a, no sobre, su propia configuración. Requiere Claude Code v2.1.229 o posterior.680Cuando el plano de control de Anthropic proporciona una sesión con [hooks de Claude Code](/docs/es/hooks), el ejecutor los instala junto a, no sobre, su propia configuración. Requiere Claude Code v2.1.229 o posterior.

577 681 


579* **Quién los autor**: el plano de control puebla los scripts desde constantes fijas en su propia implementación, nunca desde entrada por sesión o de terceros.683* **Quién los autor**: el plano de control puebla los scripts desde constantes fijas en su propia implementación, nunca desde entrada por sesión o de terceros.

580* **Qué aún los rige**: los hooks entregados a través de `--settings` entran en la configuración de hook ordinaria fusionada, no en el nivel administrado, por lo que su configuración administrada aún se aplica. `disableAllHooks` los deshabilita, y no están entre las categorías que [`allowManagedHooksOnly`](/docs/es/settings-reference#allowmanagedhooksonly) mantiene cargadas.684* **Qué aún los rige**: los hooks entregados a través de `--settings` entran en la configuración de hook ordinaria fusionada, no en el nivel administrado, por lo que su configuración administrada aún se aplica. `disableAllHooks` los deshabilita, y no están entre las categorías que [`allowManagedHooksOnly`](/docs/es/settings-reference#allowmanagedhooksonly) mantiene cargadas.

581 685 

686Cuando una persona inicia su propia sesión, Claude Code también descarga los [skills habilitados para su cuenta de claude.ai](/docs/es/skills#skills-in-cowork-and-cloud-sessions) en el directorio de configuración de esa sesión. Una ejecución de una [rutina](/docs/es/routines) no recibe los skills de su propietario, y una sesión que [envía solicitudes de modelo a Bedrock o Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) no descarga ninguno. Para un skill que esas sesiones necesiten, haz commit de él en el `.claude/skills/` del repositorio o agrégalo a tu imagen del ejecutor.

687 

582Fuera de las sesiones de [Claude Tag](https://claude.com/docs/claude-tag/overview), una sesión en un entorno autohospedado se ejecuta con la [memoria automática](/docs/es/memory#auto-memory) desactivada de forma predeterminada. Para instrucciones que deban mantenerse entre sesiones, usa el `CLAUDE.md` de tu imagen del ejecutor o del repositorio.688Fuera de las sesiones de [Claude Tag](https://claude.com/docs/claude-tag/overview), una sesión en un entorno autohospedado se ejecuta con la [memoria automática](/docs/es/memory#auto-memory) desactivada de forma predeterminada. Para instrucciones que deban mantenerse entre sesiones, usa el `CLAUDE.md` de tu imagen del ejecutor o del repositorio.

583 689 

584La instantánea del `~/.claude/` del host que toma el ejecutor excluye el directorio `projects/`. La ubicación de almacenamiento predeterminada de la memoria automática está dentro de ese directorio. Si colocas archivos de memoria allí, el ejecutor no los copia a las sesiones, y no activan la memoria automática.690La instantánea del `~/.claude/` del host que toma el ejecutor excluye el directorio `projects/`. La ubicación de almacenamiento predeterminada de la memoria automática está dentro de ese directorio. Si colocas archivos de memoria allí, el ejecutor no los copia a las sesiones, y no activan la memoria automática.

Details

20 20 

21* **Contenedores efímeros por sesión**: ejecuta cada proceso de runner en un contenedor o VM nuevo que se destruya cuando el proceso salga, con `--capacity 1` y el `--drain-grace-sec 0` predeterminado para que cada contenedor sirva exactamente una sesión. Con una capacidad más alta, o con un drenaje de gracia positivo, un contenedor sirve múltiples sesiones del mismo [propietario bloqueado](/docs/es/self-hosted-environments#key-concepts); consulta [Ciclo de vida del runner](/docs/es/self-hosted-environments#runner-lifecycle). No reutilices un sistema de archivos entre reinicios de runner, excepto en la configuración deliberada de [checkout precalentado](#reuse-a-pre-warmed-checkout), y nunca entre propietarios.21* **Contenedores efímeros por sesión**: ejecuta cada proceso de runner en un contenedor o VM nuevo que se destruya cuando el proceso salga, con `--capacity 1` y el `--drain-grace-sec 0` predeterminado para que cada contenedor sirva exactamente una sesión. Con una capacidad más alta, o con un drenaje de gracia positivo, un contenedor sirve múltiples sesiones del mismo [propietario bloqueado](/docs/es/self-hosted-environments#key-concepts); consulta [Ciclo de vida del runner](/docs/es/self-hosted-environments#runner-lifecycle). No reutilices un sistema de archivos entre reinicios de runner, excepto en la configuración deliberada de [checkout precalentado](#reuse-a-pre-warmed-checkout), y nunca entre propietarios.

22 * <span id="processes-a-stopped-session-leaves" />Cuando el runner detiene una sesión, no envía ninguna señal a un proceso que siga en ejecución después de que su comando de shell terminó, como un servicio que se convirtió en daemon. Destruir el contenedor o la VM finaliza ese proceso.22 * <span id="processes-a-stopped-session-leaves" />Cuando el runner detiene una sesión, no envía ninguna señal a un proceso que siga en ejecución después de que su comando de shell terminó, como un servicio que se convirtió en daemon. Destruir el contenedor o la VM finaliza ese proceso.

23* **Sin credenciales amplias en la imagen**: no incluya claves SSH de larga duración, credenciales de proveedor de nube, o tokens de acceso personal que otorguen más de lo que una sesión necesita. Genere credenciales utilizadas durante una sesión, como tokens de push o API, por sesión desde su [script de envoltura](/docs/es/self-hosted-environments-configuration#wrapper-scripts). Para el clon inicial, que ocurre antes de que se ejecute el envoltura, use un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout) o [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy); consulte [Configurar git](#configure-git).23* **Sin credenciales amplias en la imagen**: no incluyas claves SSH de larga duración, credenciales de proveedor de nube, o tokens de acceso personal que otorguen más de lo que una sesión necesita. Genera las credenciales utilizadas durante una sesión, como tokens de push o de API, por sesión desde tu [script de envoltura](/docs/es/self-hosted-environments-configuration#wrapper-scripts). El clon inicial ocurre antes de que se ejecute el script de envoltura, así que gestiónalo con un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout), o con [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) cuando todos los repositorios de una sesión estén en github.com. Para ambos casos, consulta [Configurar git](#configure-git).

24* **Mantén las credenciales de GitHub del host lejos de las sesiones**: Claude puede usar cualquier credencial de GitHub que una sesión pueda leer, con el acceso que esa credencial otorgue. Mantén las credenciales de GitHub de alcance amplio del propio host del runner fuera de todo lo que una sesión pueda leer. Una credencial así puede ser un token de acceso personal, el token que `gh auth login` guarda para tu cuenta, o un `GH_TOKEN` en el entorno del runner.

25 * **Con [git administrado por Anthropic](#use-the-anthropic-git-proxy)**: con una credencial así, Claude llega a GitHub directamente en lugar de hacerlo a través del git administrado por Anthropic.

26 * **Sin git administrado por Anthropic**: una credencial de clonación puede permanecer en la imagen si limitas su alcance tan estrictamente como describe [Incluir la configuración de git en tu imagen](#ship-git-config-in-your-image).

24* **Mantenga el secreto del entorno fuera de los hosts que ejecutan sesiones**: el secreto del entorno puede registrar runners y recoger cualquier sesión en cola en el entorno. En una flota fija vive en cada host de runner, donde el código de cualquier sesión puede leer el archivo secreto. Prefiera [runners bajo demanda](/docs/es/self-hosted-environments-configuration#on-demand-runners), donde el secreto permanece en el host del orquestador, que nunca ejecuta código de usuario, y cada runner recibe una orden de trabajo de un solo uso que registra exactamente un runner. En una flota fija, trate el archivo de secreto del entorno como legible por cada sesión y rote el secreto después de cualquier compromiso de sesión sospechoso.27* **Mantenga el secreto del entorno fuera de los hosts que ejecutan sesiones**: el secreto del entorno puede registrar runners y recoger cualquier sesión en cola en el entorno. En una flota fija vive en cada host de runner, donde el código de cualquier sesión puede leer el archivo secreto. Prefiera [runners bajo demanda](/docs/es/self-hosted-environments-configuration#on-demand-runners), donde el secreto permanece en el host del orquestador, que nunca ejecuta código de usuario, y cada runner recibe una orden de trabajo de un solo uso que registra exactamente un runner. En una flota fija, trate el archivo de secreto del entorno como legible por cada sesión y rote el secreto después de cualquier compromiso de sesión sospechoso.

25* **Salida de red de negación predeterminada**: restrinja el tráfico saliente del contenedor de runner y sesión en su propio límite de red en cada entorno; [Salida de negación predeterminada](#default-deny-egress) cubre qué permitir y por qué.28* **Salida de red de negación predeterminada**: restrinja el tráfico saliente del contenedor de runner y sesión en su propio límite de red en cada entorno; [Salida de negación predeterminada](#default-deny-egress) cubre qué permitir y por qué.

26* **IAM de host con privilegios mínimos**: la identidad de cálculo adjunta al host del runner, como un perfil de instancia o una cuenta de servicio de nodo, debe otorgar solo lo que el runner en sí necesita. Las sesiones deben obtener sus propias credenciales a través de su script de envoltura en lugar de heredar las del host.29* **IAM de host con privilegios mínimos**: la identidad de cálculo adjunta al host del runner, como un perfil de instancia o una cuenta de servicio de nodo, debe otorgar solo lo que el runner en sí necesita. Las sesiones deben obtener sus propias credenciales a través de su script de envoltura en lugar de heredar las del host.


42 La protección se ejecuta independientemente de [`--trust-workspace`](/docs/es/self-hosted-environments-reference#runner-cli-flags), y no cubre hooks de repositorio, `.mcp.json`, o reglas de Bash; consulte [Permisos y aprobación de herramientas](/docs/es/self-hosted-environments-configuration#permissions-and-tool-approval) para saber dónde pertenecen esas concesiones.45 La protección se ejecuta independientemente de [`--trust-workspace`](/docs/es/self-hosted-environments-reference#runner-cli-flags), y no cubre hooks de repositorio, `.mcp.json`, o reglas de Bash; consulte [Permisos y aprobación de herramientas](/docs/es/self-hosted-environments-configuration#permissions-and-tool-approval) para saber dónde pertenecen esas concesiones.

43 46 

44<Note>47<Note>

45 La lista de permitidos de IP de su organización no cubre el tráfico de runner autohospedado por defecto. No confíe en ella como control de red para el tráfico de runner o sesión; aplique salida de negación predeterminada en su propio límite de red en su lugar, y contacte a su equipo de cuenta de Anthropic si desea aplicación de lista de permitidos de IP para su organización.48 Si tu organización tiene habilitada la [lista de IP permitidas](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting), agrega las direcciones públicas de salida de tus runners y contenedores de sesión a la lista de permitidos antes de iniciarlos. Si ejecutas [runners bajo demanda](/docs/es/self-hosted-environments-configuration#on-demand-runners), agrega también la dirección del host del orquestador. No confíes en la lista de permitidos como control de red para el tráfico de runners o sesiones. En su lugar, aplica salida con denegación predeterminada en tu propio límite de red.

46</Note>49</Note>

47 50 

48<h2 id="network-requirements">51<h2 id="network-requirements">


55 58 

56| Host | Puerto | Utilizado para |59| Host | Puerto | Utilizado para |

57| :- | :- | :- |60| :- | :- | :- |

58| `api.anthropic.com` | 443, HTTPS; WSS solo para el conector SCM | Plano de control del runner y transmisión de sesión, inferencia de modelo, banderas de características, análisis de productos, obtenciones de claves [JWKS](/docs/es/self-hosted-environments-identity), firma de commits, el proxy de git cuando se establece `--use-anthropic-git-proxy`, y el túnel del [conector SCM](/docs/es/self-hosted-environments-reference#scm-connector-flags) del orquestador cuando se establece `--scm-connector-host` |61| `api.anthropic.com` | 443, HTTPS; WSS para [git administrado por Anthropic](#use-the-anthropic-git-proxy) | Plano de control del runner y streaming de sesiones, inferencia de modelos, banderas de características, análisis de productos, obtenciones de claves [JWKS](/docs/es/self-hosted-environments-identity), firma de commits y git administrado por Anthropic cuando se establece `--use-anthropic-git-proxy` |

59| Su host de git, como `github.com` o su host de GitHub Enterprise | 443 o 22 | Clonación e inserción de repositorios. No es necesario si el runner usa `--use-anthropic-git-proxy`, que enruta el tráfico de git a través de `api.anthropic.com`. |62| Tu host de git, como `github.com` o tu host de GitHub Enterprise | 443 o 22 | Clonación y push de repositorios en cada host de git que usan las sesiones del runner. En un runner que usa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), consulta [cuándo se sigue necesitando la ruta de `github.com`](#github-com-egress-with-the-anthropic-git-proxy). |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />Un runner que usa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) enruta su tráfico de git de `github.com` a través de `api.anthropic.com`, por lo que no necesita la ruta al host de git para `github.com`. Aún necesita esa ruta si estableces `--push-outcome-on-release` o haces push desde un hook `post-session`.

60 65 

61Si estos hosts son necesarios depende de su configuración:66Si estos hosts son necesarios depende de su configuración:

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Cargas de informes de errores de Anthropic, enviadas solo cuando [informe de errores](/docs/es/data-usage#telemetry-services) está habilitado para la cuenta de la sesión. Suprimido por `DISABLE_ERROR_REPORTING=1` o `DISABLE_TELEMETRY=1`. |76| `browser-intake-us5-datadoghq.com` | 443 | Cargas de informes de errores de Anthropic, enviadas solo cuando [informe de errores](/docs/es/data-usage#telemetry-services) está habilitado para la cuenta de la sesión. Suprimido por `DISABLE_ERROR_REPORTING=1` o `DISABLE_TELEMETRY=1`. |

72| Los endpoints de tu proveedor de nube para solicitudes de modelo, búsquedas de modelos y renovación de credenciales, como `bedrock-runtime.us-east-1.amazonaws.com` o `aiplatform.googleapis.com` | 443 | Solo cuando el runner [envía solicitudes de modelo a Amazon Bedrock o a Agent Platform de Google Cloud](/docs/es/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |77| Los endpoints de tu proveedor de nube para solicitudes de modelo, búsquedas de modelos y renovación de credenciales, como `bedrock-runtime.us-east-1.amazonaws.com` o `aiplatform.googleapis.com` | 443 | Solo cuando el runner [envía solicitudes de modelo a Amazon Bedrock o a Agent Platform de Google Cloud](/docs/es/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |

73 78 

74El runner no alcanza `statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, o `platform.claude.com`. Estos hosts aparecen en algunas listas de verificación de red empresarial más antiguas, pero no necesita permitirlos para el tráfico de runner o sesión: las obtenciones de banderas de características van a `api.anthropic.com`, y el runner se autentica con el secreto del entorno en lugar de OAuth interactivo. Dos flujos del lado del host alcanzan `claude.ai`, así que ejecútelos desde un host cuya salida permite en lugar de ampliar la salida del contenedor de sesión: el instalador de una línea obtiene `install.sh` de `claude.ai` en el momento de la instalación, e interactivo `claude auth login`, que el [configuración guiada](/docs/es/self-hosted-environments-quickstart#set-up-an-environment-and-runner), el modo firmado del `doctor`, y [envío de CI](/docs/es/self-hosted-environments-testing#authenticate-from-ci) usan, inicia sesión a través de `claude.ai`, `claude.com`, y `platform.claude.com`. `mcp-proxy.anthropic.com` tampoco es requerido: las sesiones autohospedadas no lo usan, y la entrega de los conectores de claude.ai de su organización a sesiones, cuando está habilitada para su organización, se enruta a través de `api.anthropic.com`. Consulte [Servidores MCP](/docs/es/self-hosted-environments-configuration#mcp-servers).79No necesitas agregar estos hosts a la lista de permitidos para el tráfico del runner o de las sesiones:

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai` y `platform.claude.com`**: estos hosts aparecen en algunas listas de verificación de red empresarial más antiguas, pero el runner no los alcanza. Las obtenciones de banderas de características van a `api.anthropic.com`, y el runner se autentica con el secreto del entorno en lugar de OAuth interactivo.

82* **`mcp-proxy.anthropic.com`**: las sesiones autohospedadas no lo usan. Cuando la entrega de conectores está habilitada para tu organización, los conectores de claude.ai de tu organización llegan a las sesiones a través de `api.anthropic.com`. Consulta [Servidores MCP](/docs/es/self-hosted-environments-configuration#mcp-servers).

83 

84Estos flujos del lado del host sí alcanzan `claude.ai`, así que ejecútalos desde un host cuya salida lo permita en lugar de ampliar la salida del contenedor de sesión:

85 

86* **El instalador de una línea**: obtiene `install.sh` de `claude.ai` en el momento de la instalación.

87* **`claude auth login` interactivo**: inicia sesión a través de `claude.ai`, `claude.com` y `platform.claude.com`. La [configuración guiada](/docs/es/self-hosted-environments-quickstart#run-the-guided-setup), el modo con sesión iniciada de `doctor` y el [envío desde CI](/docs/es/self-hosted-environments-testing#authenticate-from-ci) lo usan. El navegador con el que inicias sesión también carga las verificaciones de navegador de la página de inicio de sesión de claude.ai desde `hcaptcha.com`, `*.hcaptcha.com` y `challenges.cloudflare.com`.

75 88 

76<h3 id="default-deny-egress">89<h3 id="default-deny-egress">

77 Salida de negación predeterminada90 Salida de negación predeterminada


127* **Deje que el runner configure git**: inicie el runner con `--configure-git` para que escriba la misma identidad y configuración de firma de commit que usan las sesiones alojadas por Anthropic140* **Deje que el runner configure git**: inicie el runner con `--configure-git` para que escriba la misma identidad y configuración de firma de commit que usan las sesiones alojadas por Anthropic

128* **Envíe la configuración de git en su imagen**: establezca la identidad y las credenciales de push usted mismo, por ejemplo para hacer commits bajo su propia identidad de bot141* **Envíe la configuración de git en su imagen**: establezca la identidad y las credenciales de push usted mismo, por ejemplo para hacer commits bajo su propia identidad de bot

129 142 

143Para repositorios en github.com, también puedes iniciar el runner con [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), o establecer `CLAUDE_RUNNER_USE_GIT_PROXY=1`, para pedirle a Anthropic que atienda git para las sesiones del runner.

144 

130Pisos de versión de Git en el host del runner: [`--configure-git`](#let-the-runner-configure-git) la firma de commit SSH requiere Git 2.34 o más reciente, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) requiere 2.32 o más reciente, y reanudar sesiones desde ramas empujadas por [`--push-outcome-on-release`](/docs/es/self-hosted-environments-reference#runner-cli-flags) requiere 2.29 o más reciente. Git 2.24 es suficiente si omite los tres y gestiona la identidad de git usted mismo.145Pisos de versión de Git en el host del runner: [`--configure-git`](#let-the-runner-configure-git) la firma de commit SSH requiere Git 2.34 o más reciente, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) requiere 2.32 o más reciente, y reanudar sesiones desde ramas empujadas por [`--push-outcome-on-release`](/docs/es/self-hosted-environments-reference#runner-cli-flags) requiere 2.29 o más reciente. Git 2.24 es suficiente si omite los tres y gestiona la identidad de git usted mismo.

131 146 

132<h3 id="let-the-runner-configure-git">147<h3 id="let-the-runner-configure-git">


138* `user.name = Claude` y `user.email = noreply@anthropic.com`, coincidiendo con sesiones alojadas por Anthropic153* `user.name = Claude` y `user.email = noreply@anthropic.com`, coincidiendo con sesiones alojadas por Anthropic

139* Firma de commit y etiqueta en formato SSH, enrutada a través de un shim gestionado por el runner que firma cada commit a través del servicio de firma de Anthropic usando las credenciales de la sesión. Las firmas son verificables en GitHub contra la clave de firma SSH publicada de Anthropic.154* Firma de commit y etiqueta en formato SSH, enrutada a través de un shim gestionado por el runner que firma cada commit a través del servicio de firma de Anthropic usando las credenciales de la sesión. Las firmas son verificables en GitHub contra la clave de firma SSH publicada de Anthropic.

140* `push.negotiate = true`, para que git pregunte a su host de git qué commits ya tiene antes de empacar un push. Requiere Claude Code v2.1.257 o posterior.155* `push.negotiate = true`, para que git pregunte a su host de git qué commits ya tiene antes de empacar un push. Requiere Claude Code v2.1.257 o posterior.

141* `core.hooksPath` apuntando a un directorio de hooks gestionado por el runner. Sus hooks `commit-msg` y `prepare-commit-msg` añaden un tráiler `Co-authored-by:` para el creador de la sesión a cada commit, construido a partir del correo electrónico en [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/es/self-hosted-environments-configuration#wrapper-scripts) y omitido cuando esa variable no está establecida. Si su imagen ya establece `core.hooksPath`, el runner deja su configuración en su lugar, omite instalar estos hooks, e imprime una advertencia `[runner:git]`.156* `core.hooksPath` apuntando a un directorio de hooks gestionado por el runner. Sus hooks `commit-msg` y `prepare-commit-msg` añaden a cada commit un tráiler `Co-authored-by:` para el creador de la sesión. El tráiler se construye a partir del correo electrónico en [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/es/self-hosted-environments-configuration#wrapper-scripts) y se omite cuando esa variable no está establecida. Si tu imagen ya establece `core.hooksPath` y el runner no usa [git gestionado por Anthropic](#use-the-anthropic-git-proxy), el runner conserva tu ajuste, omite instalar estos hooks e imprime una advertencia `[runner:git]`.

142 157 

143La firma de commit requiere git 2.34 o más reciente; el runner verifica al inicio y sale con un error si su git es más antiguo. Esta bandera no configura credenciales de push, que aún proporciona en la imagen.158La firma de commit requiere git 2.34 o más reciente; el runner verifica al inicio y sale con un error si su git es más antiguo. Esta bandera no configura credenciales de push, que aún proporciona en la imagen.

144 159 

145En un runner con v2.1.280 o posterior, los commits que haces desde un hook de ciclo de vida `checkout` o `post-session` también se firman como la sesión, sin el tráiler `Co-authored-by:`. [Configuración de git dentro de los hooks de ciclo de vida](/docs/es/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) describe los ajustes de git que el runner fija dentro de esos hooks.160En un runner con v2.1.280 o posterior, los commits que haces desde un hook de ciclo de vida `checkout` o `post-session` también se firman como la sesión, sin el tráiler `Co-authored-by:`. [Configuración de git dentro de los hooks de ciclo de vida](/docs/es/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) describe los ajustes de git que el runner fija dentro de esos hooks.

146 161 

162Con o sin `--configure-git`, Claude Code le indica a Claude que termine sus mensajes de commit con un tráiler `Claude-Session: <url>` y sus descripciones de pull request con la URL de la sesión. Para omitir ambos, establece [`attribution.sessionUrl`](/docs/es/settings-reference#attribution-sessionurl) en `false` en el [`~/.claude/settings.json`](/docs/es/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) del host del runner y luego reinicia el runner.

163 

147<h3 id="ship-git-config-in-your-image">164<h3 id="ship-git-config-in-your-image">

148 Envíe la configuración de git en su imagen165 Envíe la configuración de git en su imagen

149</h3>166</h3>


186 Use el proxy de git de Anthropic203 Use el proxy de git de Anthropic

187</h3>204</h3>

188 205 

189Inicie el runner con `--use-anthropic-git-proxy`, o establezca `CLAUDE_RUNNER_USE_GIT_PROXY=1`, para que clone a través del proxy de git de Anthropic, autenticado con el token de corta duración de la sesión. Para sesiones de usuario ordinarias, el proxy usa el token OAuth de GitHub o GitHub Enterprise almacenado para el creador de la sesión; para sesiones de bot y agente, usa el token de instalación de GitHub App de su organización. De cualquier manera, la imagen del runner no necesita credenciales de git en absoluto: sin claves SSH, sin ayudante de credenciales, sin `.netrc`. Esta es la misma ruta de autenticación que usan los entornos alojados por Anthropic.206Con el proxy de git de Anthropic, también llamado git gestionado por Anthropic, la imagen del runner no necesita claves SSH, ayudante de credenciales, `.netrc` ni otras credenciales de git para la propia sesión. En su lugar, el runner le pide a Anthropic que atienda git para sus sesiones. Para una sesión de usuario que Anthropic atiende, el clon del runner y los propios fetch y push de la sesión pasan por Anthropic, que usa el token OAuth de GitHub almacenado para el creador de la sesión. [Cómo atiende Anthropic git para una sesión](#how-anthropic-serves-git-for-a-session) cubre las sesiones de bot y de agente.

207 

208El proxy de git está desactivado a menos que lo [actives](#turn-the-anthropic-git-proxy-on). Un runner que llega a tu host de git con sus propias credenciales no lo necesita, y su git funciona con cualquier host de git.

209 

210A cambio, el proxy de git limita lo que el runner admite y cambia lo que necesita:

211 

212* **Solo github.com**: Anthropic atiende una sesión solo cuando todos sus repositorios están en github.com, y el proxy de git aún no admite GitHub Enterprise Server. En un runner con el proxy de git, una sesión con un repositorio en otro host de git [no se inicia](#when-anthropic-doesnt-serve-a-session).

213* **Credenciales solo para los repositorios de la sesión**: Anthropic proporciona credenciales de git para los repositorios que forman parte de la sesión, no para otros repositorios en el mismo host de git. Un submódulo privado, una dependencia que tu gestor de paquetes obtiene con git o un marketplace de plugins en otro repositorio no reciben ninguna credencial de Anthropic. Pide a las personas que crean sesiones que [agreguen cada repositorio](/docs/es/web-quickstart#start-a-task) que una sesión necesita al crearla.

214* **Solo push de ramas**: un push que elimina una rama falla, y también falla un push a cualquier otro tipo de ref, como una etiqueta. Para saber qué ramas puede actualizar un push, consulta [Proxy de GitHub](/docs/es/cloud-environments#github-proxy).

215* **Cuentas de GitHub conectadas**: la persona que creó una sesión de usuario debe haber conectado GitHub en claude.ai, o la sesión [no se inicia](#creator-has-no-github-connection).

216* **`--capacity 1`**: el proxy de git requiere una sesión por proceso de runner, así que ejecuta más réplicas para paralelismo. [Activa el proxy de git de Anthropic](#turn-the-anthropic-git-proxy-on) enumera los requisitos.

217* **Configuración global de git reemplazada**: el runner [elimina y reemplaza la configuración global de git](#git-proxy-replaces-global-git-config) del usuario con el que se ejecuta. Ejecútalo como un usuario dedicado o en un contenedor.

218* **Credenciales del host para los push del host**: el push de [`--push-outcome-on-release`](/docs/es/self-hosted-environments-reference#runner-cli-flags) del runner y cualquier push que haga tu [hook `post-session`](/docs/es/self-hosted-environments-configuration#post-session) siguen usando las propias credenciales de git del host del runner y su [ruta de red hacia `github.com`](#github-com-egress-with-the-anthropic-git-proxy). Para esas credenciales, consulta [Incluye la configuración de git en tu imagen](#ship-git-config-in-your-image).

219* **Decisión por sesión**: Anthropic decide para cada sesión del runner si atiende su git, y una sesión que no atiende no se inicia. [Cuando las sesiones no se inician en un runner con el proxy de git](#when-anthropic-doesnt-serve-a-session) cubre las causas.

220 

221<span id="git-proxy-replaces-global-git-config" />

222 

223<Warning>

224 Con `--use-anthropic-git-proxy` establecido, el runner elimina y reemplaza la configuración global de git del usuario con el que se ejecuta, y no guarda ninguna copia de seguridad. Lo hace al inicio y antes de cada sesión. Cualquier inicio de sesión o ayudante de credenciales que tuvieras ahí se pierde. Los ajustes que escribe [`--configure-git`](#let-the-runner-configure-git) se conservan. Ejecuta el runner como un usuario dedicado o en un contenedor, nunca como tu propio usuario.

225</Warning>

226 

227Mantén los ajustes de git que no son secretos, como la identidad y `safe.directory`, en la configuración de git del sistema.

228 

229<h4 id="turn-the-anthropic-git-proxy-on">

230 Activa el proxy de git de Anthropic

231</h4>

232 

233Antes de iniciar el runner con `--use-anthropic-git-proxy`, confirma que el host del runner cumple cada uno de estos requisitos. El runner se niega a iniciar cuando no se cumple el requisito de capacidad o de git:

190 234 

191El proxy requiere `--capacity 1` porque la URL del proxy es por sesión, y git 2.32 o más reciente porque git más antiguo ignora el mecanismo de configuración que el proxy usa para aislar sesiones entre sí. El runner se niega a iniciar si alguno de los requisitos no se cumple. Porque el proxy obtiene del lado de Anthropic, su host de git debe ser alcanzable desde la infraestructura de Anthropic, el mismo requisito que tienen las sesiones alojadas por Anthropic; para un host de git que solo es enrutable dentro de su red, use un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout) en su lugar. Cada proceso de runner maneja una sesión a la vez, así que ejecute más réplicas para paralelismo. Cuando el proxy está habilitado, `--git-host-rewrite` y `--git-ssh-rewrite` no tienen efecto: la URL del proxy apunta a `api.anthropic.com`, no a su host de git.235* **Claude Code v2.1.267 o posterior**: las versiones anteriores aceptan el flag pero no reportan la solicitud para que Anthropic atienda git ni imprimen la línea `Registering as opted in`, por lo que Anthropic no atiende sus sesiones.

236* **`--capacity 1`, el valor predeterminado**: cada proceso de runner maneja una sesión a la vez, así que ejecuta más réplicas para paralelismo.

237* **Git 2.32 o posterior**: las versiones anteriores de git ignoran la configuración de git por sesión que el runner prepara para el proxy de git.

192 238 

193<Warning>239<Warning>

194 Las [recetas de Kubernetes](#kubernetes) y [Docker Compose](#docker-compose) en esta página usan `--capacity 4`. Si agrega `--use-anthropic-git-proxy` o `CLAUDE_RUNNER_USE_GIT_PROXY=1` a una de ellas sin cambiar la capacidad a `1`, el runner sale al inicio cada vez que su orquestador lo reinicia. Establezca `--capacity 1` y ejecute más réplicas para paralelismo. [Cuando el runner sale](#when-the-runner-exits) muestra la línea que imprime el runner.240 Las [recetas de Kubernetes](#kubernetes) y [Docker Compose](#docker-compose) en esta página usan `--capacity 4`. Si agrega `--use-anthropic-git-proxy` o `CLAUDE_RUNNER_USE_GIT_PROXY=1` a una de ellas sin cambiar la capacidad a `1`, el runner sale al inicio cada vez que su orquestador lo reinicia. Establezca `--capacity 1` y ejecute más réplicas para paralelismo. [Cuando el runner sale](#when-the-runner-exits) muestra la línea que imprime el runner.

195</Warning>241</Warning>

196 242 

197El runner también reporta la opción de participación a Anthropic cuando se registra, imprimiendo `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` al inicio. Reportar la opción de participación requiere Claude Code v2.1.267 o posterior, y versiones anteriores aceptan la bandera sin reportarla o imprimir esa línea. Cada sesión en un runner que ha optado por participar luego usa git gestionado por Anthropic o la URL del proxy por sesión. Cuando una sesión usa la URL del proxy por sesión, el runner registra una línea `[runner:warn]` diciendo así.243Para activar el proxy de git, agrega `--use-anthropic-git-proxy` al comando del runner, o establece `CLAUDE_RUNNER_USE_GIT_PROXY=1` en el entorno del runner. Este comando, ejecutado en un shell en el host del runner, inicia el runner del [inicio rápido](/docs/es/self-hosted-environments-quickstart#set-up-manually) con el proxy de git activado:

244 

245```bash theme={null}

246claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>' --use-anthropic-git-proxy

247```

248 

249Al inicio, el runner imprime `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`. Luego, Anthropic decide para cada sesión en ese runner si atiende su git. Para cada sesión que atiende, el runner registra una línea `[runner:session]` que contiene `governed git ACTIVE`. Si en cambio una sesión no se inicia, consulta [Cuando las sesiones no se inician en un runner con el proxy de git](#when-anthropic-doesnt-serve-a-session).

250 

251<h4 id="how-anthropic-serves-git-for-a-session">

252 Cómo atiende Anthropic git para una sesión

253</h4>

254 

255Para una sesión que Anthropic atiende, el clon del runner y los propios fetch y push de la sesión pasan por Anthropic, autenticados con el token de corta duración de la propia sesión:

256 

257* **Sesiones de usuario**: Anthropic usa el token OAuth de GitHub almacenado para el creador de la sesión.

258* **Sesiones de bot y de agente**: Anthropic usa el token de instalación de GitHub App de tu organización.

259* **Reescrituras de URL**: `--git-host-rewrite` y `--git-ssh-rewrite` no tienen efecto en un repositorio que atiende el proxy de git.

260 

261<h4 id="when-anthropic-doesnt-serve-a-session">

262 Cuando las sesiones no se inician en un runner con el proxy de git

263</h4>

264 

265En un runner iniciado con `--use-anthropic-git-proxy`, una sesión no se inicia cuando Anthropic no atiende su git. Busca en el registro del runner un error de git que nombre una dirección de `api.anthropic.com` que contenga `/git_proxy/`.

266 

267Para cada sesión, un runner con Claude Code v2.1.267 o posterior también registra una línea `[runner:session]` que contiene `governed git ACTIVE` cuando Anthropic atiende el git de la sesión, o una línea `[runner:warn]` que contiene `the server withheld Anthropic-managed git for this session` cuando no lo hace. Busca la línea que ves entre estos casos:

268 

269* **Ni `governed git ACTIVE` ni la línea `withheld`**: un runner anterior a Claude Code v2.1.267 no registra ninguna de las dos líneas, y Anthropic no atiende sus sesiones. Actualiza el runner a v2.1.267 o posterior siguiendo [Fija la versión](#pin-the-version).

270* **La línea `withheld`**: Anthropic no atendió la sesión. Un runner que antes funcionaba con el proxy de git puede fallar así sin ningún cambio de tu parte.

271 * **Un repositorio no está en github.com**: una sesión con aunque sea un repositorio en otro host de git, como GitHub Enterprise Server, no se atiende, incluidos sus repositorios de github.com. [Desactiva el proxy de git de Anthropic](#turn-the-anthropic-git-proxy-off) para los runners de ese entorno.

272 * **Todos los repositorios están en github.com**: reporta el fallo a [tu equipo de cuenta de Anthropic](#report-an-issue) con el ID de sesión de la línea `withheld`. Anthropic registra el motivo de su lado.

273* **Una línea que contiene `remote: access denied by the git proxy`**: una sesión que Anthropic atiende aún puede ser rechazada, por ejemplo cuando la política de la organización deniega el acceso a git para la sesión, o la sesión no está autorizada para el repositorio. El registro del runner muestra entonces una línea que contiene `remote: access denied by the git proxy`, y el resto de esa línea indica el motivo.

274* <span id="creator-has-no-github-connection" />**`GitHub authentication required`**: esto aparece cuando el creador de la sesión no tiene una conexión de GitHub funcional en claude.ai. El clon de la sesión falla, y el error de git dice `GitHub authentication required. Please reconnect your GitHub account.` Pídele a esa persona que conecte o vuelva a conectar GitHub en su configuración de claude.ai.

275 

276Después de corregir la causa, vuelve a iniciar las sesiones fallidas.

277 

278<h4 id="turn-the-anthropic-git-proxy-off">

279 Desactiva el proxy de git de Anthropic

280</h4>

281 

282Si las sesiones de un entorno usan un repositorio en un host de git distinto de github.com, como GitHub Enterprise Server, desactiva `--use-anthropic-git-proxy` para los runners de ese entorno.

283 

284<Steps>

285 <Step title="Quita el flag">

286 Quita `--use-anthropic-git-proxy` del comando del runner. Si estableciste `CLAUDE_RUNNER_USE_GIT_PROXY` en el entorno del runner, como en una especificación de pod o un archivo de Compose, quítala de ahí. En un shell, elimínala:

287 

288 ```bash theme={null}

289 unset CLAUDE_RUNNER_USE_GIT_PROXY

290 ```

291 </Step>

292 

293 <Step title="Dale credenciales de git al runner">

294 Proporciona credenciales que funcionen sin pedir nada para cada host de git que usan las sesiones de los runners, github.com incluido. Cualquier credencial que estuviera en la configuración global de git del usuario del runner ya no existe, porque el runner eliminó esa configuración mientras `--use-anthropic-git-proxy` estaba establecido. [Incluye las credenciales en tu imagen](#ship-git-config-in-your-image) o usa un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout).

295 </Step>

296 

297 <Step title="Abre la ruta de red">

298 Permite que el runner llegue a cada host de git que usan las sesiones de los runners en el puerto 443 o 22. Consulta la fila del host de git en [Requisitos de red](#network-requirements).

299 </Step>

300 

301 <Step title="Reinicia los runners">

302 Reinicia los runners para que se registren sin el proxy de git. Luego vuelve a iniciar cada sesión fallida.

303 </Step>

304</Steps>

198 305 

199<h4 id="github-api-access-without-the-github-cli">306<h4 id="github-api-access-without-the-github-cli">

200 Acceso a la API de GitHub sin la GitHub CLI307 Acceso a la API de GitHub sin la GitHub CLI


266```dockerfile theme={null}373```dockerfile theme={null}

267FROM debian:bookworm-slim374FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION375ARG CLAUDE_CODE_VERSION

269RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client \376RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \

270 && rm -rf /var/lib/apt/lists/*377 && rm -rf /var/lib/apt/lists/*

271RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \378RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

272 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude379 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners489kubectl create namespace claude-runners

383```490```

384 491 

385Cree el Secret de respaldo desde un archivo local que contenga el valor que copió en el paso [**Copiar clave de entorno**](/docs/es/self-hosted-environments-quickstart#set-up-an-environment-and-runner) de la UI de administrador, para que el secreto nunca aparezca en su historial de shell. Ejecute `(umask 077 && cat > ./environment-secret)`, pegue el secreto, presione Enter, luego Ctrl-D. Luego cree el Secret y elimine el archivo:492Crea el Secret de respaldo desde un archivo local que contenga el valor que copiaste en el paso [**Copiar clave de entorno**](/docs/es/self-hosted-environments-quickstart#set-up-manually) de la UI de administración, para que el secreto nunca aparezca en tu historial del shell. Ejecuta `(umask 077 && cat > ./environment-secret)`, pega el secreto, presiona Enter y luego Ctrl-D. Después crea el Secret y elimina el archivo:

386 493 

387```bash theme={null}494```bash theme={null}

388kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret495kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret


500 Reutilice un checkout precalentado607 Reutilice un checkout precalentado

501</h2>608</h2>

502 609 

503Para repositorios grandes, el clon puede dominar el inicio de sesión. En `--capacity 1` sin [hook `checkout`](/docs/es/self-hosted-environments-configuration#checkout), el runner mantiene un clon canónico por repositorio en `<base-dir>/<repo-owner>/<repo>` y lo reutiliza en sesiones: obtiene la ref solicitada, desasocia `HEAD`, y reinicia duro a ella, que es casi instantáneo cuando poco ha cambiado. Para omitir el clon frío, suministre el clon de una de dos maneras:610Para repositorios grandes, el clon puede dominar el inicio de sesión. Para omitir el clon frío, proporciona tú mismo un clon en la ruta donde el runner mantiene el suyo. Sin [hook `checkout`](/docs/es/self-hosted-environments-configuration#checkout), el runner mantiene un clon canónico por repositorio en `<base-dir>/<repo-owner>/<repo>` y lo reutiliza entre sesiones:

611 

612* **Con `--capacity 1`**: el runner obtiene la ref solicitada, desasocia `HEAD` y hace un reinicio duro a ella, lo cual es casi instantáneo cuando ha cambiado poco.

613* **Con un `--capacity` mayor que uno**: el runner obtiene en ese clon y luego extrae un worktree separado a partir de él para cada sesión. Un clon precalentado ahorra la descarga, pero no el checkout.

614 

615Proporciona el clon en la imagen o en un volumen persistente:

504 616 

505* **Clon en la imagen**: construya el clon en su imagen de runner en esa ruta. Cada contenedor nuevo comienza con el clon precalentado sin reutilizar un disco.617* **Clon en la imagen**: construya el clon en su imagen de runner en esa ruta. Cada contenedor nuevo comienza con el clon precalentado sin reutilizar un disco.

506* **Clon en un volumen persistente**: en runners que prebloquea a la cuenta de un usuario con [`--lock-to-account`](/docs/es/self-hosted-environments-reference#runner-cli-flags), apunte `--base-dir` a un volumen persistente, para que el disco solo sirva esa cuenta. Un runner prebloquado nunca recoge sesiones de canal de Claude Tag, por lo que esta opción no se aplica a runners que las sirven.618* **Clon en un volumen persistente**: en runners que prebloquea a la cuenta de un usuario con [`--lock-to-account`](/docs/es/self-hosted-environments-reference#runner-cli-flags), apunte `--base-dir` a un volumen persistente, para que el disco solo sirva esa cuenta. Un runner prebloquado nunca recoge sesiones de canal de Claude Tag, por lo que esta opción no se aplica a runners que las sirven.


508Lo que la ruta de reutilización hace y no garantiza:620Lo que la ruta de reutilización hace y no garantiza:

509 621 

510* **Cualquier forma de clon funciona**: un clon completo, superficial, o de rama única en la ruta se usa tal cual. El runner nunca pasa `--depth` cuando obtiene en un clon existente, por lo que un precalentamiento completo mantiene su historial completo y uno superficial permanece superficial. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, o un número; valor predeterminado 50) controla solo el clon frío que el runner hace cuando no existe clon aún.622* **Cualquier forma de clon funciona**: un clon completo, superficial, o de rama única en la ruta se usa tal cual. El runner nunca pasa `--depth` cuando obtiene en un clon existente, por lo que un precalentamiento completo mantiene su historial completo y uno superficial permanece superficial. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, o un número; valor predeterminado 50) controla solo el clon frío que el runner hace cuando no existe clon aún.

511* **Los cambios rastreados se reinician, los archivos sin rastrear persisten**: cada sesión comienza desde un reinicio duro que borra las modificaciones rastreadas de la sesión anterior, pero el runner nunca ejecuta `git clean`, por lo que los archivos sin rastrear de las sesiones anteriores del propietario bloqueado permanecen en el árbol.623* **Los cambios rastreados se reinician, los archivos sin rastrear persisten**: con `--capacity 1`, cada sesión comienza desde un reinicio duro que borra las modificaciones rastreadas de la sesión anterior, pero el runner nunca ejecuta `git clean`, por lo que los archivos sin rastrear de las sesiones anteriores del propietario bloqueado permanecen en el árbol.

512* **Directorios por sesión persisten también**: junto al checkout, el runner crea entradas por sesión bajo `<base-dir>/_sessions/` para cada sesión que ejecuta. El directorio de configuración de Claude de la sesión contiene una copia local de la transcripción de la conversación. Junto a él se encuentran los archivos cargados de la sesión, cuando la sesión tiene alguno. El directorio de sesión también se encuentra allí: contiene cualquier worktree por sesión y checkouts de hook `checkout` mientras se ejecuta la sesión, y mantiene cualquier otra cosa que Claude escribió en él.624* **Directorios por sesión persisten también**: junto al checkout, el runner crea entradas por sesión bajo `<base-dir>/_sessions/` para cada sesión que ejecuta. El directorio de configuración de Claude de la sesión contiene una copia local de la transcripción de la conversación. Junto a él se encuentran los archivos cargados de la sesión, cuando la sesión tiene alguno. El directorio de sesión también se encuentra allí: contiene cualquier worktree por sesión y checkouts de hook `checkout` mientras se ejecuta la sesión, y mantiene cualquier otra cosa que Claude escribió en él.

513 625 

514 Por defecto, el runner deja estos en su lugar cuando termina la sesión, por lo que en un disco que sobrevive al proceso del runner se acumulan. Cada sesión se ejecuta como el usuario del runner, por lo que cualquier sesión posterior que ese disco sirva puede leerlos. Si mantiene un `--base-dir` persistente, dimensione el volumen para ese crecimiento. Lo mismo se aplica a cualquier configuración que reinicie el runner en el mismo sistema de archivos, incluida la [receta de Docker Compose](#docker-compose).626 Por defecto, el runner deja estos en su lugar cuando termina la sesión, por lo que en un disco que sobrevive al proceso del runner se acumulan. Cada sesión se ejecuta como el usuario del runner, por lo que cualquier sesión posterior que ese disco sirva puede leerlos. Si mantiene un `--base-dir` persistente, dimensione el volumen para ese crecimiento. Lo mismo se aplica a cualquier configuración que reinicie el runner en el mismo sistema de archivos, incluida la [receta de Docker Compose](#docker-compose).


522 634 

523El proceso hijo de Claude Code de cada sesión ejecuta el binario propio del runner, y el runner desactiva la actualización automática dentro de las sesiones que genera, por lo que cada sesión ejecuta la versión que instaló en el host o construyó en la imagen. Una actualización a nivel de host entra en vigor la próxima vez que el runner comienza.635El proceso hijo de Claude Code de cada sesión ejecuta el binario propio del runner, y el runner desactiva la actualización automática dentro de las sesiones que genera, por lo que cada sesión ejecuta la versión que instaló en el host o construyó en la imagen. Una actualización a nivel de host entra en vigor la próxima vez que el runner comienza.

524 636 

525Un modelo que sus sesiones utilizan puede requerir una versión más reciente de Claude Code que la que ejecutan. El servidor rechaza las solicitudes para ese modelo con [Claude Code no admite este modelo](/docs/es/errors#claude-code-does-not-support-this-model). Antes de fijar una versión, compruebe [las versiones de Claude Code que los modelos requieren](/docs/es/model-config#available-models) para cada modelo que sus sesiones utilizan.637Elige qué versión ejecutan tus sesiones y cuándo cambia:

526 638 

639* **Antes de fijar una versión**: consulta [las versiones de Claude Code que requieren los modelos](/docs/es/model-config#available-models) para cada modelo que usan tus sesiones. Si un modelo requiere una versión más reciente que la que ejecutan tus sesiones, el servidor rechaza las solicitudes para ese modelo con [Claude Code no admite este modelo](/docs/es/errors#claude-code-does-not-support-this-model).

527* **Para mantener una flota en una versión**: construya la imagen con una versión fijada, o en un host desnudo instale una versión específica y [desactive las actualizaciones automáticas](/docs/es/setup#disable-auto-updates)640* **Para mantener una flota en una versión**: construya la imagen con una versión fijada, o en un host desnudo instale una versión específica y [desactive las actualizaciones automáticas](/docs/es/setup#disable-auto-updates)

528* **Para actualizar**: instale la versión más reciente o reconstruya la imagen, luego reinicie los runners641* **Para actualizar una flota fija**: lee las entradas del [changelog](/docs/en/changelog) entre tu versión y la que vas a instalar; luego instala la versión más reciente o vuelve a crear la imagen y reinicia los runners

642* **Para actualizar runners bajo demanda**: lee las entradas del [changelog](/docs/en/changelog) entre tu versión y la que vas a instalar; luego cambia la imagen que inicia tu [hook `spawn-runner`](/docs/es/self-hosted-environments-configuration#the-spawn-runner-hook). Cada runner nuevo obtiene la nueva versión. Un runner que ya está en ejecución, incluido un runner en espera que inició [`--min-idle`](/docs/es/self-hosted-environments-reference#orchestrator-cli-flags), conserva su versión hasta que termina. No lo reinicies, porque su orden de trabajo es de un solo uso.

529* **Plugins**: los mercados de plugins tampoco se actualizan automáticamente; establezca `FORCE_AUTOUPDATE_PLUGINS=1` en el entorno del runner para permitir que los plugins se actualicen automáticamente mientras el binario permanece fijado643* **Plugins**: los mercados de plugins tampoco se actualizan automáticamente; establezca `FORCE_AUTOUPDATE_PLUGINS=1` en el entorno del runner para permitir que los plugins se actualicen automáticamente mientras el binario permanece fijado

530 644 

531<h2 id="scale-the-fleet">645<h2 id="scale-the-fleet">


580</h3>694</h3>

581 695 

582* **Las sesiones reanudadas pierden el trabajo sin push**: un runner nuevo vuelve a clonar el repositorio desde su rama inicial, por lo que el trabajo al que la sesión no había hecho push se pierde.696* **Las sesiones reanudadas pierden el trabajo sin push**: un runner nuevo vuelve a clonar el repositorio desde su rama inicial, por lo que el trabajo al que la sesión no había hecho push se pierde.

583 * **Para conservar el trabajo con commit**: establece [`--push-outcome-on-release`](/docs/es/self-hosted-environments-reference#runner-cli-flags). Así, el runner hace, en la medida de lo posible, push de las ramas de resultado de la sesión antes de liberarla, y la sesión reanudada comienza desde esos commits. Los cambios sin commit se siguen perdiendo.697 * **Para conservar el trabajo con commit**: establece [`--push-outcome-on-release`](/docs/es/self-hosted-environments-reference#runner-cli-flags) en todos los runners del entorno, porque un runner sin el flag reanuda la sesión desde su rama inicial. Un runner con el flag hace, en la medida de lo posible, push de las ramas de resultado de la sesión antes de liberarla, y la sesión reanudada comienza desde esos commits. El push usa las credenciales de git propias del host del runner, incluso en un runner que usa [git administrado por Anthropic](#use-the-anthropic-git-proxy). Los cambios sin commit se siguen perdiendo.

698 * **Con un hook `checkout`**: a los repositorios obtenidos mediante un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout) no se les hace push. En su lugar, guarda una instantánea de ellos desde el [hook `post-session`](/docs/es/self-hosted-environments-configuration#post-session).

584 * **Antes de habilitar el flag**: restringe quién puede hacer push a las refs `claude/*` en el remoto de origen. Al reanudar, el runner obtiene la rama a la que se hizo push previamente sin verificar quién hizo el push.699 * **Antes de habilitar el flag**: restringe quién puede hacer push a las refs `claude/*` en el remoto de origen. Al reanudar, el runner obtiene la rama a la que se hizo push previamente sin verificar quién hizo el push.

585* **Un repositorio agregado a mitad de sesión puede fallar al clonarse**: Claude lo clona con `git clone` a través de HTTPS. En un runner sin [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), la clonación falla con un error de autenticación de git si nada en el host puede leer el repositorio. Siempre que puedas, selecciona todos los repositorios que la sesión necesita al crearla.700* **Un repositorio agregado a mitad de sesión puede fallar al clonarse**: Claude lo clona con `git clone` a través de HTTPS. En un runner sin [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), la clonación falla con un error de autenticación de git si nada en el host puede leer el repositorio. Siempre que puedas, selecciona todos los repositorios que la sesión necesita al crearla.

586* **Algunos conectores no aparecen en sesiones autohospedadas**: un conector que aún no ha conectado en la configuración de claude.ai no se enumera en una sesión autohospedada, y la sesión no le pedirá que lo conecte. Conéctelo en Configuración primero, luego inicie una sesión nueva. Agregar un conector a una sesión ya en ejecución tampoco hace que sus herramientas estén disponibles para Claude; inicie una sesión nueva para recoger un conector recién agregado.701* **Algunos conectores no aparecen en sesiones autohospedadas**: un conector que aún no ha conectado en la configuración de claude.ai no se enumera en una sesión autohospedada, y la sesión no le pedirá que lo conecte. Conéctelo en Configuración primero, luego inicie una sesión nueva. Agregar un conector a una sesión ya en ejecución tampoco hace que sus herramientas estén disponibles para Claude; inicie una sesión nueva para recoger un conector recién agregado.


606* **El runner no aparece en el entorno**: confirme que el host pueda alcanzar `api.anthropic.com` sobre HTTPS, que el secreto del entorno sea actual y que el reloj del host esté dentro de cinco minutos de la hora real; un sesgo mayor causa que la autenticación falle. El runner registra `[runner:fatal]` con el motivo del rechazo en caso de fallo de autenticación.721* **El runner no aparece en el entorno**: confirme que el host pueda alcanzar `api.anthropic.com` sobre HTTPS, que el secreto del entorno sea actual y que el reloj del host esté dentro de cinco minutos de la hora real; un sesgo mayor causa que la autenticación falle. El runner registra `[runner:fatal]` con el motivo del rechazo en caso de fallo de autenticación.

607* **El runner se cierra al inicio con `cannot create or write to base directory`**: el runner no puede crear ni escribir en `--base-dir`, que por defecto es `/workspace`. Corrija la propiedad del directorio o apunte `--base-dir` a una ruta escribible, como se describe en [Mantener el directorio base y la capacidad idénticos en todos los runners](#keep-the-base-directory-and-capacity-identical-across-runners). Si el runner registra `[runner:fatal]` diciendo que la verificación del directorio base agotó el tiempo de espera, el directorio está en un montaje NFS o CSI colgado. Verifique la salud del montaje en lugar de los permisos. El runner imprime ambas fallas de inicio en stderr antes de abrir `--log-file`, así que búsquelas en la terminal o en los registros del contenedor de su plataforma en lugar del archivo de registro. Antes de v2.1.225, el runner no verificaba el directorio base al inicio, y esta configuración incorrecta fallaba en las sesiones después de la recogida.722* **El runner se cierra al inicio con `cannot create or write to base directory`**: el runner no puede crear ni escribir en `--base-dir`, que por defecto es `/workspace`. Corrija la propiedad del directorio o apunte `--base-dir` a una ruta escribible, como se describe en [Mantener el directorio base y la capacidad idénticos en todos los runners](#keep-the-base-directory-and-capacity-identical-across-runners). Si el runner registra `[runner:fatal]` diciendo que la verificación del directorio base agotó el tiempo de espera, el directorio está en un montaje NFS o CSI colgado. Verifique la salud del montaje en lugar de los permisos. El runner imprime ambas fallas de inicio en stderr antes de abrir `--log-file`, así que búsquelas en la terminal o en los registros del contenedor de su plataforma en lugar del archivo de registro. Antes de v2.1.225, el runner no verificaba el directorio base al inicio, y esta configuración incorrecta fallaba en las sesiones después de la recogida.

608* **Las sesiones permanecen en cola**: cada runner en línea puede estar bloqueado a un propietario diferente. Verifique la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_locked_account` de cada runner o el campo `locked_account` de su línea de registro `[runner:health]` para ver quién la mantiene. Ambos muestran el correo electrónico del propietario solo después de que el runner haya recibido un token de sesión que lleve un reclamo `act.email`, que las sesiones de un agente Claude Tag nunca hacen. Sin el reclamo, el runner no emite ninguna serie `locked_account` y registra `locked_account=yes`, lo que le indica que el runner está bloqueado pero no a qué propietario. Agregue réplicas o espere a que un runner existente se drene y reinicie. Si el entorno usa runners bajo demanda, verifique el orquestador en su lugar; consulte [On-demand runners](/docs/es/self-hosted-environments-configuration#on-demand-runners).723* **Las sesiones permanecen en cola**: cada runner en línea puede estar bloqueado a un propietario diferente. Verifique la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_locked_account` de cada runner o el campo `locked_account` de su línea de registro `[runner:health]` para ver quién la mantiene. Ambos muestran el correo electrónico del propietario solo después de que el runner haya recibido un token de sesión que lleve un reclamo `act.email`, que las sesiones de un agente Claude Tag nunca hacen. Sin el reclamo, el runner no emite ninguna serie `locked_account` y registra `locked_account=yes`, lo que le indica que el runner está bloqueado pero no a qué propietario. Agregue réplicas o espere a que un runner existente se drene y reinicie. Si el entorno usa runners bajo demanda, verifique el orquestador en su lugar; consulte [On-demand runners](/docs/es/self-hosted-environments-configuration#on-demand-runners).

609* **Las sesiones fallan inmediatamente después de la recogida**: abra la sesión en claude.ai/code para ver el error. Las causas más comunes son las [credenciales de git](#configure-git) faltantes en la imagen del runner y las herramientas de compilación que no están instaladas. Un directorio base no escribible detiene el runner al inicio en lugar de fallar en las sesiones. Consulte la entrada **El runner se cierra al inicio con `cannot create or write to base directory`** en esta lista.724* **Las sesiones fallan inmediatamente después de la recogida**: abre la sesión en claude.ai/code para ver el error. Las causas más comunes son las [credenciales de git](#configure-git) faltantes en la imagen del runner y las herramientas de compilación que no están instaladas. En un runner iniciado con `--use-anthropic-git-proxy`, consulta [Cuando las sesiones no se inician en un runner con el proxy de git](#when-anthropic-doesnt-serve-a-session). Un directorio base no escribible detiene el runner al inicio en lugar de hacer fallar las sesiones. Consulta la entrada **El runner se cierra al inicio con `cannot create or write to base directory`** en esta lista.

725* **Las sesiones no se inician en un runner que estableció `--use-anthropic-git-proxy`**: busca en el registro del runner `access denied by the git proxy`, o un error de git que nombre una dirección de `api.anthropic.com` que contenga `/git_proxy/`. Para saber si Anthropic atendió la sesión y corregir la causa, consulta [Cuando las sesiones no se inician en un runner con el proxy de git](#when-anthropic-doesnt-serve-a-session).

610* **Las sesiones no pueden alcanzar la red a través de un proxy de salida autenticador**: cuando la fuente que estableció con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falla, agota el tiempo de espera después de 30 segundos o produce un valor vacío, el runner responde esa conexión con `502 Bad Gateway` y registra por qué. El runner redacta stderr del comando en ese registro y nunca registra el valor del encabezado. Con `--proxy-authorization-command`, ejecute el comando usted mismo en el host para confirmar que imprime el valor de encabezado completo en stdout. Si el runner se cierra al inicio con `could not start the proxy-authorization listener`, no pudo abrir su oyente de loopback.726* **Las sesiones no pueden alcanzar la red a través de un proxy de salida autenticador**: cuando la fuente que estableció con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falla, agota el tiempo de espera después de 30 segundos o produce un valor vacío, el runner responde esa conexión con `502 Bad Gateway` y registra por qué. El runner redacta stderr del comando en ese registro y nunca registra el valor del encabezado. Con `--proxy-authorization-command`, ejecute el comando usted mismo en el host para confirmar que imprime el valor de encabezado completo en stdout. Si el runner se cierra al inicio con `could not start the proxy-authorization listener`, no pudo abrir su oyente de loopback.

611* **El runner registra líneas `Poll failed` que contienen `rejecting the malformed poll response`**: el runner recibió una respuesta de sondeo de trabajo cuyo cuerpo no es el JSON esperado de la cola, la mayoría de las veces porque algo entre el runner y `api.anthropic.com`, como un proxy interceptor o un portal cautivo, respondió con su propia página. El runner rechaza la respuesta, la cuenta bajo el tipo `transport` de la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, y reintenta en el cronograma de sondeo fallido descrito en [Session lifecycle](/docs/es/self-hosted-environments#session-lifecycle). El runner continúa sirviendo sus sesiones activas. Configure el proxy para pasar las respuestas de `api.anthropic.com` sin alterar. Antes de v2.1.246, el runner leía tal respuesta como una cola de trabajo vacía, lo que podría terminar sus sesiones activas o hacer que se cierre.727* **El runner registra líneas `Poll failed` que contienen `rejecting the malformed poll response`**: el runner recibió una respuesta de sondeo de trabajo cuyo cuerpo no es el JSON esperado de la cola, la mayoría de las veces porque algo entre el runner y `api.anthropic.com`, como un proxy interceptor o un portal cautivo, respondió con su propia página. El runner rechaza la respuesta, la cuenta bajo el tipo `transport` de la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, y reintenta en el cronograma de sondeo fallido descrito en [Session lifecycle](/docs/es/self-hosted-environments#session-lifecycle). El runner continúa sirviendo sus sesiones activas. Configure el proxy para pasar las respuestas de `api.anthropic.com` sin alterar. Antes de v2.1.246, el runner leía tal respuesta como una cola de trabajo vacía, lo que podría terminar sus sesiones activas o hacer que se cierre.

612* **La rama de una sesión ya no existe en el remoto**: para una fuente de git que la sesión solo lee, el runner omite esa fuente y continúa con las restantes. Para la fuente a la que la sesión envía resultados, una rama eliminada, típicamente porque fue fusionada y auto-eliminada, falla la sesión con un error que nombra el repositorio y la rama y le pide que restaure la rama y reintente. El runner falla la sesión con el mismo error cuando omitir dejaría sin repositorio en absoluto. Antes de v2.1.228, tal sesión comenzaba en un directorio vacío.728* **La rama de una sesión ya no existe en el remoto**: para una fuente de git que la sesión solo lee, el runner omite esa fuente y continúa con las restantes. Para la fuente a la que la sesión envía resultados, una rama eliminada, típicamente porque fue fusionada y auto-eliminada, falla la sesión con un error que nombra el repositorio y la rama y le pide que restaure la rama y reintente. El runner falla la sesión con el mismo error cuando omitir dejaría sin repositorio en absoluto. Antes de v2.1.228, tal sesión comenzaba en un directorio vacío.


616 732 

617 La verificación de acceso se ejecuta nuevamente cada vez que la sesión comienza en un runner, así que una vez que la identidad de git del runner tiene acceso de lectura, el siguiente inicio clona el repositorio. Antes de v2.1.274, cada uno de estos rechazos fallaba el inicio de sesión.733 La verificación de acceso se ejecuta nuevamente cada vez que la sesión comienza en un runner, así que una vez que la identidad de git del runner tiene acceso de lectura, el siguiente inicio clona el repositorio. Antes de v2.1.274, cada uno de estos rechazos fallaba el inicio de sesión.

618* **Las sesiones tardan minutos en iniciarse**: el clon inicial generalmente domina. Observe la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` para confirmar, y corte el clon con un [pre-warmed checkout](#reuse-a-pre-warmed-checkout) o un `CLAUDE_RUNNER_FETCH_DEPTH` más pequeño.734* **Las sesiones tardan minutos en iniciarse**: el clon inicial generalmente domina. Observe la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` para confirmar, y corte el clon con un [pre-warmed checkout](#reuse-a-pre-warmed-checkout) o un `CLAUDE_RUNNER_FETCH_DEPTH` más pequeño.

619* **Los turnos fallan con un 401**: cada sesión autentica llamadas de modelo con el [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/es/self-hosted-environments-configuration#wrapper-scripts) de corta duración que el runner obtiene de Anthropic y rota sobre stdin de la sesión. Cuando un turno termina con un 401 o 403 de la API del modelo, el runner obtiene un token fresco y lo pasa a la sesión. El turno fallido no se reintenta.735* **Los turnos fallan con un 401**: cuando un turno termina con un 401 o 403 de la API de Anthropic, el runner obtiene un [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/es/self-hosted-environments-configuration#wrapper-scripts) nuevo de Anthropic y lo pasa a la sesión. El turno fallido no se reintenta. Este token es de corta duración, y el runner lo rota a través del stdin de la sesión.

620 736 

621 Cuando una obtención falla, el runner registra una línea `inference_token refresh failed` que dice cuándo reintentará, y continúa reintentando mientras la sesión se ejecute.737 Cuando una obtención falla, el runner registra una línea `inference_token refresh failed` que dice cuándo reintentará, y continúa reintentando mientras la sesión se ejecute.

622 738 


637 753 

638* **Una salida normal**: el runner terminó sus sesiones y se drenó, alcanzó su tiempo de jubilación, o se le indicó que se detuviera. Reinícielo para que el entorno tenga capacidad nuevamente. [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle) describe estas salidas.754* **Una salida normal**: el runner terminó sus sesiones y se drenó, alcanzó su tiempo de jubilación, o se le indicó que se detuviera. Reinícielo para que el entorno tenga capacidad nuevamente. [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle) describe estas salidas.

639* **Un inicio fallido**: el runner no puede iniciarse con la configuración o el host que se le proporcionó, por lo que se cierra segundos después de que comienza, y se cierra de la misma manera cada vez que lo reinicia. Reiniciarlo más rápido no ayuda. Alguien necesita leer su salida y corregir la causa.755* **Un inicio fallido**: el runner no puede iniciarse con la configuración o el host que se le proporcionó, por lo que se cierra segundos después de que comienza, y se cierra de la misma manera cada vez que lo reinicia. Reiniciarlo más rápido no ayuda. Alguien necesita leer su salida y corregir la causa.

756* **Pérdida de contacto**: un runner que no puede comunicarse con Anthropic durante más tiempo que su [lease](/docs/es/self-hosted-environments#session-lifecycle), por ejemplo mientras su host está suspendido, puede ser eliminado del entorno. Cuando un runner eliminado se reconecta, se cierra. Su registro puede mostrar una línea `[runner:fatal]` que contiene `runner record gone server-side` o, tras una interrupción más larga, [`poll auth failed`](/docs/es/self-hosted-environments-quickstart#set-up-an-environment-and-runner). El runner no vuelve a registrarse por sí solo, así que reinícialo.

640 757 

641Configure su supervisor para reiniciar el runner cada vez que se cierre, para esperar más tiempo entre reinicios cuando el runner sigue cerrándose justo después de que comienza, y para notificar a alguien cuando eso sigue sucediendo.758Configure su supervisor para reiniciar el runner cada vez que se cierre, para esperar más tiempo entre reinicios cuando el runner sigue cerrándose justo después de que comienza, y para notificar a alguien cuando eso sigue sucediendo.

642 759 

Details

195 195 

196Los contenedores reciben la ruta absoluta al propio binario del ejecutor en `CLAUDE_RUNNER_CLAUDE_BIN`; usa esa ruta en lugar de un `claude` resuelto por PATH para que la decodificación se ejecute en el mismo binario que usa el ejecutor.196Los contenedores reciben la ruta absoluta al propio binario del ejecutor en `CLAUDE_RUNNER_CLAUDE_BIN`; usa esa ruta en lugar de un `claude` resuelto por PATH para que la decodificación se ejecute en el mismo binario que usa el ejecutor.

197 197 

198Usa `jq -re` en lugar de `jq -r` para que una reclamación faltante cause una salida distinta de cero. Con solo `-r`, una reclamación faltante imprime la cadena literal `null` y sale con cero, lo que silenciosamente pasa un valor incorrecto aguas abajo. Pasa `--no-verify` a `decode-token` solo para inspección sin conexión donde el endpoint de JWKS es inaccesible.198Usa `jq -re` en lugar de `jq -r` para que una reclamación faltante cause una salida distinta de cero. Con solo `-r`, una reclamación faltante imprime la cadena literal `null` y sale con cero, lo que silenciosamente pasa un valor incorrecto aguas abajo.

199 

200Si `decode-token` no puede obtener las claves del endpoint de JWKS o no puede verificar el token, imprime el motivo en stderr, no imprime ninguna reclamación y sale con el código 1. Pasa `--no-verify` a `decode-token` solo para inspección sin conexión donde el endpoint de JWKS es inaccesible.

199 201 

200<h2 id="claims-reference">202<h2 id="claims-reference">

201 Referencia de reclamaciones203 Referencia de reclamaciones

Details

34El host del runner necesita:34El host del runner necesita:

35 35 

36* Un host o contenedor Linux o macOS con HTTPS saliente a `api.anthropic.com`, a `claude.ai` y a los hosts de descarga a los que redirige para el paso de instalación a continuación, y a su host de git para el clon; la [tabla de requisitos de red](/docs/es/self-hosted-environments-deploy#network-requirements) tiene la lista completa. Windows no se admite como host de runner; ejecute el runner en un contenedor Linux en su lugar. Las estaciones de trabajo de desarrolladores no se ven afectadas, ya que las sesiones se inician desde claude.ai en un navegador.36* Un host o contenedor Linux o macOS con HTTPS saliente a `api.anthropic.com`, a `claude.ai` y a los hosts de descarga a los que redirige para el paso de instalación a continuación, y a su host de git para el clon; la [tabla de requisitos de red](/docs/es/self-hosted-environments-deploy#network-requirements) tiene la lista completa. Windows no se admite como host de runner; ejecute el runner en un contenedor Linux en su lugar. Las estaciones de trabajo de desarrolladores no se ven afectadas, ya que las sesiones se inician desde claude.ai en un navegador.

37* Un repositorio para la sesión de prueba: uno público, o uno que este host ya pueda clonar mediante su URL HTTPS sin que se le soliciten credenciales.

37* Un reloj sincronizado con la hora real, por ejemplo con NTP. La autenticación falla cuando el reloj está más de cinco minutos desincronizado; consulte [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).38* Un reloj sincronizado con la hora real, por ejemplo con NTP. La autenticación falla cuando el reloj está más de cinco minutos desincronizado; consulte [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).

38 39 

39<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


57 Configurar un entorno y runner58 Configurar un entorno y runner

58</h2>59</h2>

59 60 

60Claude Code incluye una configuración guiada: una sesión interactiva de Claude Code que lo guía a través de crear el entorno en la interfaz de administración, inicia un runner local con el archivo secreto que guarda, confirma que el runner se registra, y escribe una hoja de trucos en `./runner-setup/CHEAT-SHEET.md`. Ejecútelo en una máquina donde haya iniciado sesión con `claude auth login` usando una cuenta que tenga un rol Owner; no está disponible con claves API o proveedores de modelos de terceros. En hosts donde una sesión interactiva no es posible, use los pasos manuales a continuación en su lugar. Confirme que la [verificación de versión](#software-on-the-runner-host) pasó primero: en versiones anteriores a 2.1.224, este comando inicia una sesión ordinaria de Claude con las palabras como el prompt en lugar de la configuración guiada. Para iniciar la configuración guiada, ejecute el subcomando setup y siga los prompts:61Usa la [configuración guiada](#run-the-guided-setup) o los [pasos manuales](#set-up-manually). La configuración guiada es un solo comando que inicia una sesión interactiva de Claude Code y te guía por el resto. Usa los pasos manuales en su lugar en un host donde no sea posible una sesión interactiva. Úsalos también cuando alguien con el rol Owner haya creado el entorno y te haya entregado su secreto, ya que la configuración guiada necesita un inicio de sesión de Owner.

62 

63<h3 id="run-the-guided-setup">

64 Ejecutar la configuración guiada

65</h3>

66 

67La configuración guiada te acompaña en la creación del entorno en la interfaz de administración, inicia un runner local con el archivo secreto que guardes, confirma que el runner se registra y escribe una hoja de referencia rápida en `./runner-setup/CHEAT-SHEET.md`. Antes de ejecutarla, confirma tu inicio de sesión y tu versión:

68 

69* **Inicio de sesión**: ejecútala en una máquina donde hayas iniciado sesión con `claude auth login` usando una cuenta que tenga un rol Owner. Con solo una clave de API o un proveedor de modelos de terceros, la sesión se inicia, pero sus verificaciones de organización fallan.

70* **Versión**: confirma que la [verificación de versión](#software-on-the-runner-host) pasó. En versiones anteriores a 2.1.224, el comando setup inicia una sesión de Claude con las palabras como prompt en lugar de la configuración guiada.

71 

72Para iniciar la configuración guiada, ejecuta el subcomando setup en tu shell y sigue las instrucciones:

61 73 

62```bash theme={null}74```bash theme={null}

63claude self-hosted-runner setup75claude self-hosted-runner setup

64```76```

65 77 

66Para configurar manualmente en su lugar:78La configuración no inicia una sesión de prueba por sí misma: te indica que inicies una en claude.ai/code. El último paso de la configuración detiene el runner que inició. Si sales de la configuración antes de ese paso, el runner sigue ejecutándose. Para continuar después del último paso, vuelve a iniciar el runner en tu shell con el comando que aparece en `./runner-setup/CHEAT-SHEET.md` y luego [enruta una sesión al entorno](#route-a-session).

79 

80<h3 id="set-up-manually">

81 Configurar manualmente

82</h3>

83 

84Crea el entorno en claude.ai, inicia el runner desde una terminal en el host y luego regresa a claude.ai para confirmar que el runner aparece y enrutar una sesión hacia él. Si alguien con el rol Owner ya creó el entorno y te entregó su secreto, empieza en el paso 2.

67 85 

68<Steps>86<Steps>

69 <Step title="Crear un entorno">87 <Step title="Crear un entorno">

70 Vaya a la [página **Cloud environments**](https://claude.ai/admin-settings/cloud-environments) en la configuración de administración. Bajo **Self-hosted environments**, seleccione **New**, nombre el entorno, y seleccione **Create**. En el segundo paso del asistente, seleccione **Copy environment key** para copiar el secreto del entorno, que la interfaz de administración etiqueta como una clave de entorno. claude.ai muestra el secreto una vez, y no puede recuperarlo más tarde; expira 365 días después de la creación. El ID `ccpool_...` del entorno permanece visible en su diálogo de detalle; lo necesitará para la verificación `aud` en [verificación de token](/docs/es/self-hosted-environments-identity) y para enviar [sesiones de prueba desde CI](/docs/es/self-hosted-environments-testing#run-the-test-loop).88 Vaya a la [página **Cloud environments**](https://claude.ai/admin-settings/cloud-environments) en la configuración de administración. Bajo **Self-hosted environments**, seleccione **New**, nombre el entorno, y seleccione **Create**. En el segundo paso del asistente, seleccione **Copy environment key** para copiar el secreto del entorno, que la interfaz de administración etiqueta como una clave de entorno. claude.ai muestra el secreto una vez, y no puede recuperarlo más tarde; expira 365 días después de la creación. El ID `ccpool_...` del entorno permanece visible en su diálogo de detalle; lo necesitará para la verificación `aud` en [verificación de token](/docs/es/self-hosted-environments-identity) y para enviar [sesiones de prueba desde CI](/docs/es/self-hosted-environments-testing#run-the-test-loop).

71 89 

72 Si pierde el secreto o necesita rotarlo, cree un nuevo secreto desde la pestaña **Configuration** del entorno, implemente el nuevo secreto en sus runners, luego revoque el antiguo. Los runners que tengan un secreto revocado fallan su siguiente sondeo autenticado y salen, registrando `poll auth failed`, y su orquestador los reinicia con el nuevo secreto.90 Si pierdes el secreto o necesitas rotarlo, crea un nuevo secreto desde la pestaña **Configuration** del entorno, distribuye el nuevo secreto a tus runners y luego revoca el antiguo. Los runners que tengan un secreto revocado fallan en su siguiente sondeo autenticado y salen, registrando `poll auth failed`, y tu orquestador los reinicia con el nuevo secreto.

73 </Step>91 </Step>

74 92 

75 <Step title="Iniciar un runner">93 <Step title="Iniciar un runner">

76 Cree el directorio secreto. Este paso y el siguiente necesitan root para la ruta `/etc/claude`; cualquier ruta que el proceso runner pueda leer funciona, así que ajuste ambos comandos y el valor `--environment-secret-file` juntos si usa uno diferente.94 Crea el directorio del secreto. Este comando y el siguiente usan `/etc/claude`, que necesita root, y el archivo secreto que crean solo puede leerlo el usuario que los ejecuta. Si el runner se ejecutará como otro usuario, sale con `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`. En ese caso, ejecuta ambos comandos como el usuario del runner, con un directorio en el que ese usuario pueda escribir en lugar de `/etc/claude`, y pasa la misma ruta a `--environment-secret-file`. Funciona cualquier ruta que el proceso del runner pueda leer.

77 95 

78 ```bash theme={null}96 ```bash theme={null}

79 mkdir -p /etc/claude97 mkdir -p /etc/claude


89 107 

90 Si el runner no puede crear o escribir en la ruta, sale al inicio con un error nombrando el directorio en lugar de registrarse. Consulte [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).108 Si el runner no puede crear o escribir en la ruta, sale al inicio con un error nombrando el directorio en lugar de registrarse. Consulte [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).

91 109 

92 Luego inicie el runner con `--environment-secret-file` y `--base-dir`. El runner se registra con su entorno y comienza a sondear trabajo. Si el runner sale, reinícielo manualmente. Las implementaciones de producción ejecutan el runner bajo un orquestador que reinicia runners salidos, normalmente con un sistema de archivos fresco por reinicio; [Reutilizar un checkout precalentado](/docs/es/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) cubre la configuración de disco persistente admitida.110 Luego inicia el runner con `--environment-secret-file` y `--base-dir`:

93 111 

94 ```bash theme={null}112 ```bash theme={null}

95 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

96 ```114 ```

115 

116 El runner registra `Registered: runner_id=<runner-id>` una vez que se ha registrado en tu entorno y luego comienza a sondear en busca de trabajo. Si el runner sale más tarde, reinícialo tú mismo. Consulta [Si el runner sale](#if-the-runner-exits) para saber cuándo ocurre eso.

97 </Step>117 </Step>

98 118 

99 <Step title="Verificar que el runner aparece">119 <Step title="Verificar que el runner aparece">

100 Regrese a la [página **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). El estado de su entorno cambia de **No runners deployed** a **Healthy** dentro de unos pocos segundos de que el runner inicie; abra el entorno y seleccione **Activity** para ver el runner mismo.120 Regresa a la [página **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). El estado de tu entorno cambia de **No runners deployed** a **Healthy** a los pocos segundos de que el runner se inicie; abre el entorno y selecciona **Activity** para ver el runner en sí. Si no tienes acceso a la página de administración, la línea `Registered: runner_id=<runner-id>` en el registro del runner del paso anterior te da la misma señal.

101 </Step>121 </Step>

102 122 

103 <Step title="Enrutar una sesión al entorno">123 <Step title="Enrutar una sesión al entorno">

104 Inicie una sesión en claude.ai/code y seleccione su entorno del selector de entorno, donde los entornos autohospedados aparecen junto a los alojados por Anthropic. El runner clona con las credenciales de git que el host ya tiene, así que seleccione un repositorio que este host ya pueda clonar, o uno público; las opciones de credenciales para repositorios privados en producción están en [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git). El siguiente runner disponible recoge la sesión en cola y registra `Picked up session <session-id>` junto con su recuento activo y capacidad, para que pueda confirmar desde la propia salida del runner qué host tomó la sesión. Vea la sesión trabajar y lea las respuestas de Claude en [claude.ai/code](https://claude.ai/code). Si la sesión permanece en cola en su lugar, consulte [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).124 <span id="route-a-session" />Inicia una sesión en claude.ai/code y selecciona tu entorno en el selector de entornos, donde los entornos autohospedados aparecen junto a los alojados por Anthropic. Como repositorio, elige el de los [requisitos previos](#host-and-network): un repositorio público o uno que este host ya pueda clonar. El runner clona con las credenciales de git que el host ya tenga.

125 

126 El siguiente runner disponible toma la sesión en cola y registra `Picked up session <session-id>` junto con su recuento de sesiones activas y su capacidad, para que puedas confirmar desde la propia salida del runner qué host tomó la sesión. Observa cómo trabaja la sesión y lee las respuestas de Claude en [claude.ai/code](https://claude.ai/code).

127 

128 Si la sesión no empieza a trabajar, identifica lo que ves:

129 

130 * **La sesión permanece en cola**: consulta [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).

131 * **La sesión no se inicia por un error de git**: el error aparece en la sesión y en el registro del runner. Si incluye el mensaje de git `could not read Username for` seguido de la URL de tu host de git, el runner no tenía credenciales HTTPS para ese host. Consulta [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git), que también cubre las opciones de credenciales para repositorios privados en producción.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108El runner sale por diseño una vez que sus sesiones activas terminan; consulte [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle). Para producción, implántelo bajo un orquestador que lo reinicie al salir y espere más tiempo entre reinicios cuando el runner siga saliendo justo después de que inicia. Consulte [Implementar en producción](/docs/es/self-hosted-environments-deploy) y [Cuando el runner sale](/docs/es/self-hosted-environments-deploy#when-the-runner-exits).135<h3 id="if-the-runner-exits">

136 Si el runner sale

137</h3>

138 

139Si el runner sale durante este inicio rápido, vuelve a iniciarlo con el mismo comando. El runner puede salir por sí solo:

140 

141* **Sesiones terminadas**: el registro muestra `[runner:exit] account workload drained — exiting`. El runner sale por diseño una vez que terminan sus sesiones activas. Consulta [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle).

142* **Pérdida de contacto**: el registro muestra una línea `[runner:fatal]` con `runner record gone server-side` o con `poll auth failed`. Si el runner pierde contacto con Anthropic durante un tiempo, por ejemplo porque el host entra en suspensión, puede salir la próxima vez que se comunique con Anthropic.

143 

144Un turno terminado no finaliza tu sesión de prueba. Después del primer turno, la sesión sigue conectada y el runner sigue activo, así que puedes [enviar un mensaje de seguimiento a la sesión](#send-a-follow-up-message-to-a-running-session) sin reiniciar primero el runner.

145 

146Para producción, implementa el runner bajo un orquestador que lo reinicie al salir y espere más tiempo entre reinicios cuando el runner siga saliendo justo después de iniciarse. Consulta [Implementar en producción](/docs/es/self-hosted-environments-deploy) y [Cuando el runner sale](/docs/es/self-hosted-environments-deploy#when-the-runner-exits).

109 147 

110<h2 id="send-a-follow-up-message-to-a-running-session">148<h2 id="send-a-follow-up-message-to-a-running-session">

111 Enviar un mensaje de seguimiento a una sesión en ejecución149 Enviar un mensaje de seguimiento a una sesión en ejecución

Details

52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Libere un slot de sesión después de N minutos de inactividad una vez que un turno termina o la sesión espera la acción del usuario. Una sesión que aún está a mitad de turno, incluida una que sostiene una tarea de fondo que nunca termina o una aprobación solicitada desde dentro de una llamada de herramienta en ejecución, no cuenta como inactiva; empareje con `--kill-session-after-min` como el tope duro. Después de que la tarea de fondo de una sesión termina, el runner considera la sesión ocupada hasta que comienza el turno de seguimiento que lee el resultado, durante como máximo la ventana [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Hasta que el runner reciba una señal de apagado o alcance su tiempo de retiro, una liberación que deja el runner sin sesiones activas inicia la misma ruta de salida que un drenaje normal, gobernado por `--drain-grace-sec`. Después de una primera señal que difirió con [`--defer-shutdown-max-min`](/docs/es/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), el runner sale tan pronto como una liberación lo deja sin sesiones. `0` desactiva. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Libere un slot de sesión después de N minutos de inactividad una vez que un turno termina o la sesión espera la acción del usuario. Una sesión que aún está a mitad de turno, incluida una que sostiene una tarea de fondo que nunca termina o una aprobación solicitada desde dentro de una llamada de herramienta en ejecución, no cuenta como inactiva; empareje con `--kill-session-after-min` como el tope duro. Después de que la tarea de fondo de una sesión termina, el runner considera la sesión ocupada hasta que comienza el turno de seguimiento que lee el resultado, durante como máximo la ventana [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Hasta que el runner reciba una señal de apagado o alcance su tiempo de retiro, una liberación que deja el runner sin sesiones activas inicia la misma ruta de salida que un drenaje normal, gobernado por `--drain-grace-sec`. Después de una primera señal que difirió con [`--defer-shutdown-max-min`](/docs/es/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), el runner sale tan pronto como una liberación lo deja sin sesiones. `0` desactiva. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | off | Elimine los directorios por sesión de una sesión bajo `<base-dir>/_sessions/` cuando la sesión termina en este runner, sin importar el resultado. [Reuse a pre-warmed checkout](/docs/es/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) describe lo que contienen y quién puede leerlos cuando permanecen. La eliminación es mejor esfuerzo: los directorios por sesión permanecen en su lugar cuando el runner es asesinado o alcanza su plazo de drenaje antes de que se ejecute la limpieza. Con el flag activado, el log de depuración de una sesión fallida o interrumpida no se mantiene en disco. Requiere Claude Code v2.1.268 o posterior. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | off | Elimine los directorios por sesión de una sesión bajo `<base-dir>/_sessions/` cuando la sesión termina en este runner, sin importar el resultado. [Reuse a pre-warmed checkout](/docs/es/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) describe lo que contienen y quién puede leerlos cuando permanecen. La eliminación es mejor esfuerzo: los directorios por sesión permanecen en su lugar cuando el runner es asesinado o alcanza su plazo de drenaje antes de que se ejecute la limpieza. Con el flag activado, el log de depuración de una sesión fallida o interrumpida no se mantiene en disco. Requiere Claude Code v2.1.268 o posterior. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Retire el runner en una marca de tiempo Unix absoluta en segundos, para infraestructura que mata el runner en un tiempo conocido; [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle) describe la secuencia de liberación y cómo dimensionar el margen. Los valores antes de 2001 o después del año 5138 son rechazados por el flag e ignorados por la variable de entorno. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Retire el runner en una marca de tiempo Unix absoluta en segundos, para infraestructura que mata el runner en un tiempo conocido; [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle) describe la secuencia de liberación y cómo dimensionar el margen. Los valores antes de 2001 o después del año 5138 son rechazados por el flag e ignorados por la variable de entorno. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Cuáles de las listas de reglas del clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) que el plano de control envía con una sesión pueden llegar a esa sesión: `all`, `no-allow` o `none`. Consulta [Listas de reglas del modo automático](#auto-mode-rule-lists) para ver qué aplica cada valor. Un valor no válido detiene el runner al iniciar. Requiere Claude Code v2.1.295 o posterior. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Cuánto tiempo esperar a que el proceso de Claude salga limpiamente después de que una sesión termina, antes de matarlo por la fuerza. Aumente el valor si los hooks `SessionEnd` propios del hijo necesitan más tiempo. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Cuánto tiempo esperar a que el proceso de Claude salga limpiamente después de que una sesión termina, antes de matarlo por la fuerza. Aumente el valor si los hooks `SessionEnd` propios del hijo necesitan más tiempo. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libere un slot de sesión si el hijo no ha señalado que se inicializó dentro de N minutos de generación. Borrado por la señal de inicialización del hijo en el [canal de actividad](/docs/es/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), no por salida ordinaria, después de lo cual `--release-idle-session-min` toma el control. `0` desactiva. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libera un slot de sesión si el proceso hijo no ha señalado que se inicializó dentro de N minutos después de generarse. La clonación ocurre antes de generarse el proceso, así que el tiempo de clonación no cuenta. Se borra con la señal de inicialización del proceso hijo en el [canal de actividad](/docs/es/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), no con la salida ordinaria, después de lo cual `--release-idle-session-min` toma el control. `0` desactiva. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Semilla de confianza persistida para las rutas del repositorio de cada sesión para que `permissions.allow` y `additionalDirectories` comprometidos en el repositorio sean honrados. Establezca `false` para descartar concesiones de permisos comprometidas en el repositorio y configure reglas de permiso en la `settings.json` de la configuración del host en su lugar; la configuración `sandbox.*` comprometida en el repositorio aún se aplica de cualquier forma, que es por qué el [guard de configuración de repositorio](/docs/es/self-hosted-environments-deploy#harden-your-deployment) los escanea independientemente de este flag. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Semilla de confianza persistida para las rutas del repositorio de cada sesión para que `permissions.allow` y `additionalDirectories` comprometidos en el repositorio sean honrados. Establezca `false` para descartar concesiones de permisos comprometidas en el repositorio y configure reglas de permiso en la `settings.json` de la configuración del host en su lugar; la configuración `sandbox.*` comprometida en el repositorio aún se aplica de cualquier forma, que es por qué el [guard de configuración de repositorio](/docs/es/self-hosted-environments-deploy#harden-your-deployment) los escanea independientemente de este flag. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clone a través del [proxy de git de Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy) en lugar de autenticación de git administrada por el cliente. Requiere `--capacity 1` y git 2.32 o más nuevo; el runner se niega a iniciar de otra forma. Supersede los flags de reescritura. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clona los repositorios de github.com a través del [proxy de git de Anthropic](/docs/es/self-hosted-environments-deploy#use-the-anthropic-git-proxy) en lugar de la autenticación de git administrada por el cliente. Requiere `--capacity 1` y git 2.32 o posterior; de lo contrario, el runner se niega a iniciar. Reemplaza los flags de reescritura. |

59 60 

60La mayoría de los flags de duración tienen un máximo, elegido para mantener cada timeout dentro del techo del temporizador de 32 bits del runtime de aproximadamente 24,85 días. Los flags `--*-min` se limitan a 10080 minutos, 7 días; `--drain-grace-sec` a 604800 segundos, también 7 días; y `--drain-wait-sec` a 86400 segundos, 24 horas. `--session-stop-grace-sec` y `--post-session-hook-timeout-sec` no tienen límite. Exceder un límite se comporta diferente por superficie:61La mayoría de los flags de duración tienen un máximo, elegido para mantener cada timeout dentro del techo del temporizador de 32 bits del runtime de aproximadamente 24,85 días. Los flags `--*-min` se limitan a 10080 minutos, 7 días; `--drain-grace-sec` a 604800 segundos, también 7 días; y `--drain-wait-sec` a 86400 segundos, 24 horas. `--session-stop-grace-sec` y `--post-session-hook-timeout-sec` no tienen límite. Exceder un límite se comporta diferente por superficie:

61 62 

62* **Flag**: el inicio falla con un error.63* **Flag**: el inicio falla con un error.

63* **Variable de entorno**: el runner fija el valor al techo del temporizador en lugar de rechazarlo.64* **Variable de entorno**: el runner fija el valor al techo del temporizador en lugar de rechazarlo.

64 65 

66<h3 id="auto-mode-rule-lists">

67 Listas de reglas del modo automático

68</h3>

69 

70`--server-auto-mode-lists` te permite decidir qué reglas del clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) procedentes de fuera del runner llegan a las sesiones de tus runners. El plano de control de Anthropic puede enviar listas de reglas con una sesión y pedir al runner que las aplique. Algunas entradas pueden ser reglas que escribió un administrador de tu organización. Las listas son `environment`, `soft_deny` y `allow`:

71 

72* **`environment`**: una entrada puede hacer que el clasificador permita más, así como menos.

73* **`soft_deny`**: una entrada bloquea una acción a menos que el usuario la haya pedido explícitamente o se aplique una excepción de `allow`.

74* **`allow`**: las excepciones a las entradas de `soft_deny`.

75 

76El valor del flag elige qué listas aplica el runner:

77 

78* **`no-allow`**: el valor predeterminado. Aplica `environment` y `soft_deny` y retiene `allow`. Una entrada de `environment` todavía puede hacer que el clasificador permita más, así que el valor predeterminado no descarta toda relajación.

79* **`all`**: aplica las tres listas.

80* **`none`**: no aplica ninguna de ellas. Elige `none` para descartar toda relajación proveniente de estas listas. También elimina las restricciones de `soft_deny`.

81 

82Ningún ajuste del runner hace que el plano de control le pida al runner que aplique las listas. Cuando no se lo pide, las sesiones no reciben ninguna lista, sin importar lo que establezcas. Para ver qué ocurrió, inicia el runner con `--log-level debug`. Para cada sesión, el runner registra entonces una línea que contiene `the server asked this runner to apply`, o una que contiene `the server did not ask this runner to apply the auto mode lists it sends`.

83 

65<h2 id="orchestrator-cli-flags">84<h2 id="orchestrator-cli-flags">

66 Banderas de CLI del Orchestrator85 Banderas de CLI del Orchestrator

67</h2>86</h2>


72| :- | :- | :- |91| :- | :- | :- |

73| `--hook-concurrency <n>` | `4` | Máximo de hooks `spawn-runner` ejecutándose en paralelo. También limita cuántas solicitudes de generación se reclaman por sondeo. |92| `--hook-concurrency <n>` | `4` | Máximo de hooks `spawn-runner` ejecutándose en paralelo. También limita cuántas solicitudes de generación se reclaman por sondeo. |

74| `--hook-timeout <sec>` | `60` | Terminar el árbol de procesos del hook después de este número de segundos. El tiempo de espera más su período de gracia de 5 segundos debe mantenerse por debajo de `--expected-spawn-seconds`; el orchestrator lo aplica al inicio. |93| `--hook-timeout <sec>` | `60` | Terminar el árbol de procesos del hook después de este número de segundos. El tiempo de espera más su período de gracia de 5 segundos debe mantenerse por debajo de `--expected-spawn-seconds`; el orchestrator lo aplica al inicio. |

75| `--expected-spawn-seconds <sec>` | `120` | Tiempo de arranque esperado p99 para runners generados, en el rango aplicado por el servidor de 10 a 3600. Se envía en cada sondeo como el arrendamiento del lado del servidor; si ningún runner se registra antes de que transcurra, la sesión se vuelve a ofrecer con un ID de orden nuevo. Todas las réplicas deben compartir este valor. |94| `--expected-spawn-seconds <sec>` | `120` | Tiempo p99 esperado desde que el orchestrator recibe una solicitud de generación hasta que el runner se registra, incluida cualquier espera de capacidad en tu plataforma. El servidor aplica un rango de 10 a 3600. Se envía en cada sondeo como el arrendamiento del lado del servidor: si ningún runner se registra antes de que transcurra, la sesión se vuelve a ofrecer con un ID de orden nuevo. Todas las réplicas deben compartir este valor. |

76| `--min-idle <n>` | `0` | Mantener al menos N espacios de sesión inactivos libres generando runners en espera de forma proactiva. `0` desactiva el precalentamiento. Emparejar con `--exit-if-unused-min` del runner para que los runners en espera excedentes se reclamen a sí mismos. |95| `--min-idle <n>` | `0` | Mantener al menos N espacios de sesión inactivos libres generando runners en espera de forma proactiva. `0` desactiva el precalentamiento. Emparejar con `--exit-if-unused-min` del runner para que los runners en espera excedentes se reclamen a sí mismos. |

77| `--debug-dir <path>` | sin establecer | Escribir la orden de trabajo de cada solicitud de generación y stderr del hook en el disco. Solo para depuración; nunca establecer en producción. |96| `--debug-dir <path>` | sin establecer | Escribir la orden de trabajo de cada solicitud de generación y stderr del hook en el disco. Solo para depuración; nunca establecer en producción. |

78 97 


108| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Límite en cuánto tiempo el runner cuenta una sesión como ocupada para el drenaje `--drain-wait-sec` después de que un turno termina, mientras el proceso de la sesión reporta el final del turno a Anthropic. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.275 o posterior. |127| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Límite en cuánto tiempo el runner cuenta una sesión como ocupada para el drenaje `--drain-wait-sec` después de que un turno termina, mientras el proceso de la sesión reporta el final del turno a Anthropic. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.275 o posterior. |

109| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Cuánto tiempo el runner espera a que el SO entregue `SIGKILL` a un hijo atascado en E/S no interrumpible antes de salir él mismo. Limitado a `--post-session-hook-timeout-sec` más 15 segundos, y 30 más cuando `--push-outcome-on-release` está establecido, por lo que el mínimo efectivo es 75 segundos en valores predeterminados. |128| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Cuánto tiempo el runner espera a que el SO entregue `SIGKILL` a un hijo atascado en E/S no interrumpible antes de salir él mismo. Limitado a `--post-session-hook-timeout-sec` más 15 segundos, y 30 más cuando `--push-outcome-on-release` está establecido, por lo que el mínimo efectivo es 75 segundos en valores predeterminados. |

110| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidad de búsqueda de git para clones frescos. Establezca un entero positivo, o `full` o `0` para una búsqueda completa. Los repositorios ya presentes en el workspace mantienen su profundidad existente. |129| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidad de búsqueda de git para clones frescos. Establezca un entero positivo, o `full` o `0` para una búsqueda completa. Los repositorios ya presentes en el workspace mantienen su profundidad existente. |

130| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Cuánto tiempo en milisegundos, por intento, una búsqueda de git puede esperar sus primeros datos mientras los números de progreso del propio servidor git siguen aumentando, como cuando el servidor prepara el pack para un repositorio grande. `0` u `off` desactiva la espera: esa búsqueda se corta entonces después de dos minutos sin datos. Cualquier otro número entero se limita a un valor entre `120000` y `1800000`, de 2 a 30 minutos. Requiere Claude Code v2.1.295 o posterior. |

111| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Cuando es `1`, omita la verificación de presencia `.git` después de que se ejecute un hook `checkout`. Establezca esto cuando su hook materializa una fuente que no es git. |131| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Cuando es `1`, omita la verificación de presencia `.git` después de que se ejecute un hook `checkout`. Establezca esto cuando su hook materializa una fuente que no es git. |

112| `FORCE_AUTOUPDATE_PLUGINS` | unset | Cuando es `1`, permita que los mercados de plugins se actualicen automáticamente aunque el binario esté fijado |132| `FORCE_AUTOUPDATE_PLUGINS` | unset | Cuando es `1`, permita que los mercados de plugins se actualicen automáticamente aunque el binario esté fijado |

113| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Cuando es `1`, desactive la herramienta Artifact en sesiones independientemente de la configuración de administración de la organización, y elimine el requisito de salida `*.frame.claudeusercontent.com` |133| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Cuando es `1`, desactive la herramienta Artifact en sesiones independientemente de la configuración de administración de la organización, y elimine el requisito de salida `*.frame.claudeusercontent.com` |


178| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Fallos acumulativos de PollSpawnHints por tipo: `transport`, `timeout`, `5xx`, `429`, o `4xx`. Las cinco series están presentes desde el inicio del proceso; alerte en `rate(...[5m]) > 0`. |198| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Fallos acumulativos de PollSpawnHints por tipo: `transport`, `timeout`, `5xx`, `429`, o `4xx`. Las cinco series están presentes desde el inicio del proceso; alerte en `rate(...[5m]) > 0`. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Solicitudes de generación reclamables ahora mismo |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Solicitudes de generación reclamables ahora mismo |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Solicitudes de generación en retroceso de reintento después de una falla de hook reintentable |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Solicitudes de generación en retroceso de reintento después de una falla de hook reintentable |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Solicitudes de generación bloqueadas hasta que un Owner las reintente desde la pestaña **Activity** del entorno; alerte si es superior a cero |201| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Sesiones bloqueadas para generarse. Cada una permanece bloqueada hasta que un usuario le envía un nuevo mensaje o un Owner la reintenta desde la pestaña **Activity** del entorno. El recuento puede permanecer por encima de cero después de que corrijas la causa. Alerta si es superior a cero. |

182| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total de sesiones esperando un runner para este entorno. Agregado de todo el entorno, idéntico en cada instancia del orquestador: use `MAX` en lugar de `SUM` entre instancias. |202| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total de sesiones esperando un runner para este entorno. Agregado de todo el entorno, idéntico en cada instancia del orquestador: use `MAX` en lugar de `SUM` entre instancias. |

183| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sesiones actualmente asignadas a un runner vivo en este entorno. Agregado de todo el entorno, idéntico en cada instancia del orquestador: use `MAX` en lugar de `SUM` entre instancias. |203| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sesiones actualmente asignadas a un runner vivo en este entorno. Agregado de todo el entorno, idéntico en cada instancia del orquestador: use `MAX` en lugar de `SUM` entre instancias. |

184| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Resultados acumulativos del hook `spawn-runner`: `ok`, `retryable`, `non_retryable`. Cuenta invocaciones de hook del orquestador, no hijos de sesión que los runners generan: no comparable a `sessions_started_total`, ya que la capacidad superior a uno, grupos cálidos, y runners generados nuevamente para la misma sesión divergen los dos. |204| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Resultados acumulativos del hook `spawn-runner`: `ok`, `retryable`, `non_retryable`. Cuenta invocaciones de hook del orquestador, no hijos de sesión que los runners generan: no comparable a `sessions_started_total`, ya que la capacidad superior a uno, grupos cálidos, y runners generados nuevamente para la misma sesión divergen los dos. |


230Estas reglas de alerta de ejemplo son un punto de partida; ajuste los umbrales para el tamaño de su flota:250Estas reglas de alerta de ejemplo son un punto de partida; ajuste los umbrales para el tamaño de su flota:

231 251 

232```yaml theme={null}252```yaml theme={null}

233# Reglas de alerta de Prometheus de ejemplo para el runner + orquestador253# Example Prometheus alert rules for the Claude Code self-hosted runner

234# autohospedado de Claude Code. Ajuste los umbrales para el tamaño de su flota254# + orchestrator. Tune thresholds for your fleet size and SLOs.

235# y SLOs.

236groups:255groups:

237 - name: claude-code-self-hosted-runner256 - name: claude-code-self-hosted-runner

238 rules:257 rules:


241 for: 2m260 for: 2m

242 labels: {severity: warning}261 labels: {severity: warning}

243 annotations:262 annotations:

244 summary: "Runner {{ $labels.pod }} no ha sondado en >60s"263 summary: "Runner {{ $labels.pod }} has not polled in >60s"

245 - alert: ClaudeRunnerVersionDrift264 - alert: ClaudeRunnerVersionDrift

246 expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1265 expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1

247 for: 30m266 for: 30m

248 labels: {severity: info}267 labels: {severity: info}

249 annotations:268 annotations:

250 summary: "Los runners están ejecutando versiones mixtas"269 summary: "Runners are running mixed versions"

251 - alert: ClaudeRunnerInitErrorsHigh270 - alert: ClaudeRunnerInitErrorsHigh

252 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3271 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3

253 for: 5m272 for: 5m

254 labels: {severity: warning}273 labels: {severity: warning}

255 annotations:274 annotations:

256 summary: "Runner {{ $labels.pod }}: >3 fallos de inicialización de sesión en 10m (hook de checkout / git / token / bloqueo previo a la inicialización)"275 summary: "Runner {{ $labels.pod }}: >3 session init failures in 10m (checkout hook / git / token / pre-init crash)"

257 - alert: ClaudeRunnerPollErrors276 - alert: ClaudeRunnerPollErrors

258 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0277 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

259 for: 2m278 for: 2m

260 labels: {severity: warning}279 labels: {severity: warning}

261 annotations:280 annotations:

262 summary: "Runner {{ $labels.pod }}: PollWork fallando ({{ $value | humanize }}/s en 5m)"281 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"

263 - alert: ClaudeRunnerSessionStartHookErrors282 - alert: ClaudeRunnerSessionStartHookErrors

264 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3283 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3

265 for: 5m284 for: 5m

266 labels: {severity: warning}285 labels: {severity: warning}

267 annotations:286 annotations:

268 summary: "Runner {{ $labels.pod }}: >3 fallos de hook SessionStart en 10m"287 summary: "Runner {{ $labels.pod }}: >3 SessionStart hook failures in 10m"

269 288 

270 - name: claude-code-self-hosted-orchestrator289 - name: claude-code-self-hosted-orchestrator

271 rules:290 rules:


274 for: 2m293 for: 2m

275 labels: {severity: critical}294 labels: {severity: critical}

276 annotations:295 annotations:

277 summary: "El orquestador {{ $labels.pod }} no puede alcanzar el plano de control de Anthropic"296 summary: "Orchestrator {{ $labels.pod }} cannot reach the Anthropic control plane"

278 - alert: ClaudeOrchestratorPollStale297 - alert: ClaudeOrchestratorPollStale

279 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90298 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90

280 for: 2m299 for: 2m

281 labels: {severity: warning}300 labels: {severity: warning}

282 annotations:301 annotations:

283 summary: "El orquestador {{ $labels.pod }} no ha sondado en >90s (el bucle de sondeo espera en la ejecución del hook)"302 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"

284 - alert: ClaudeOrchestratorCircuitBroken303 - alert: ClaudeOrchestratorCircuitBroken

285 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0304 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0

286 for: 1m305 for: 1m

287 labels: {severity: critical}306 labels: {severity: critical}

288 annotations:307 annotations:

289 summary: "{{ $value }} sesiones con circuito abierto — el hook spawn-runner es repetidamente no reintentable; corrija la infraestructura y luego reintente desde la pestaña Activity"308 summary: "Sessions blocked from spawning: {{ $value }}. Read each one's error in the Activity tab, fix the cause, then select Retry"

290 - alert: ClaudeOrchestratorPollErrors309 - alert: ClaudeOrchestratorPollErrors

291 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0310 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

292 for: 2m311 for: 2m

293 labels: {severity: warning}312 labels: {severity: warning}

294 annotations:313 annotations:

295 summary: "Orquestador {{ $labels.pod }}: PollSpawnHints fallando ({{ $value | humanize }}/s en 5m)"314 summary: "Orchestrator {{ $labels.pod }}: PollSpawnHints failing ({{ $value | humanize }}/s over 5m)"

296 - alert: ClaudeOrchestratorSpawnHookFailing315 - alert: ClaudeOrchestratorSpawnHookFailing

297 expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3316 expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3

298 for: 5m317 for: 5m

299 labels: {severity: warning}318 labels: {severity: warning}

300 annotations:319 annotations:

301 summary: "Orquestador {{ $labels.pod }}: >3 fallos de hook spawn-runner en 5m"320 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

302```321```

303 322 

304<h3 id="pass-through-session-child-metrics">323<h3 id="pass-through-session-child-metrics">


321 340 

322Antes de v2.1.260, el runner terminaba cada sesión que alcanzaba su límite `--kill-session-after-min` y la contaba en `sessions_interrupted_total`.341Antes de v2.1.260, el runner terminaba cada sesión que alcanzaba su límite `--kill-session-after-min` y la contaba en `sessions_interrupted_total`.

323 342 

324El `CLAUDE_RUNNER_EXIT_REASON` del hook [`post-session`](/docs/es/self-hosted-environments-configuration#post-session) clasifica traspasos limpios de manera diferente. El hook reporta una liberación, un timeout de inicio, y una desasignación del servidor como `interrupted`, porque el runner detuvo el hijo. Estos contadores registran esos mismos eventos como `completed`, porque el slot fue devuelto limpiamente.343El `CLAUDE_RUNNER_EXIT_REASON` del [hook `post-session`](/docs/es/self-hosted-environments-configuration#post-session) clasifica los traspasos limpios de manera diferente. El hook los reporta como `interrupted`, porque el runner detuvo el hijo: una liberación, un agotamiento del tiempo de espera de inicio, una desasignación del servidor, y un archivado o eliminación que el sondeo notó primero. Estos contadores registran esos mismos eventos como `completed`, porque el slot fue devuelto limpiamente.

325 344 

326Si reconcilia recibos de hook contra `sessions_completed_total` directamente, subestima completaciones. Use el hook para garantías por sesión y los contadores para tasas agregadas.345Si reconcilia recibos de hook contra `sessions_completed_total` directamente, subestima completaciones. Use el hook para garantías por sesión y los contadores para tasas agregadas.

327 346 

Details

87 87 

88Los indicadores de envío `--environment` y `--ref` requieren Claude Code v2.1.224 o posterior en la máquina que ejecuta el script, el mismo piso que el ejecutor en sí. Con el hook en su lugar y un ejecutor iniciado en este host, el script de prueba:88Los indicadores de envío `--environment` y `--ref` requieren Claude Code v2.1.224 o posterior en la máquina que ejecuta el script, el mismo piso que el ejecutor en sí. Con el hook en su lugar y un ejecutor iniciado en este host, el script de prueba:

89 89 

901. Crea una sesión en el entorno de prueba con `claude -p "<prompt>" --environment <environment-id> --output-format json`, ejecutado desde un checkout de git para que la CLI pueda detectar automáticamente el repositorio desde el remoto `origin`. El `--ref <branch>` opcional basa el checkout de la sesión en una ref nombrada en lugar de HEAD local. El comando crea la sesión, imprime una línea de JSON que contiene `session_id` y sale sin esperar la respuesta de Claude.901. Crea una sesión en el entorno de prueba con `claude -p "<prompt>" --environment <environment-id> --output-format json`. Ejecuta el comando desde un checkout de git para que la CLI pueda detectar automáticamente el repositorio desde el remoto `origin`. El `--ref <branch>` opcional basa el checkout de la sesión en una ref nombrada en lugar de HEAD local. El comando sale sin esperar la respuesta de Claude. Lo que imprime le indica a tu script el resultado:

91 * **Sesión creada**: una línea de JSON como `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`

92 * **Falló la creación de la sesión**: la línea `{"ok":false,"error":"..."}`, y el comando sale con el estado 1

93 * **Algunos errores anteriores**, como que las sesiones en la nube no estén disponibles para tu organización o que falte el prompt: el error en stderr sin línea de JSON, y el comando sale con el estado 1

912. Espera a que la respuesta aparezca en `$E2E_REPLY_DIR/<session_id>.txt`, escrita por el hook Stop en el ejecutor una vez que el turno se completa.942. Espera a que la respuesta aparezca en `$E2E_REPLY_DIR/<session_id>.txt`, escrita por el hook Stop en el ejecutor una vez que el turno se completa.

923. Envía un seguimiento con `claude -p "<message>" --cloud <session_id> --output-format json` (consulte [Enviar un mensaje de seguimiento a una sesión en ejecución](/docs/es/claude-code-on-the-web#send-follow-ups-from-the-cli)), que publica un evento de usuario en la sesión existente y sale.953. Envía un seguimiento con `claude -p "<message>" --cloud <session_id> --output-format json` (consulte [Enviar un mensaje de seguimiento a una sesión en ejecución](/docs/es/claude-code-on-the-web#send-follow-ups-from-the-cli)), que publica un evento de usuario en la sesión existente y sale.

934. Espera la respuesta del seguimiento de la misma manera que el paso 2.964. Espera la respuesta del seguimiento de la misma manera que el paso 2.


104 Script de ejemplo107 Script de ejemplo

105</h2>108</h2>

106 109 

107El script a continuación ejecuta el bucle completo contra `$CLAUDE_TEST_ENVIRONMENT_ID`, el ID `ccpool_...` de tu entorno de prueba, que se muestra en el diálogo de detalles del entorno en la página de administración o se devuelve por la [llamada create-environment](#create-a-dedicated-test-environment), y afirma una frase centinela en cada respuesta. Ejecútalo desde un checkout de git del repositorio en el que quieres que trabaje la sesión, después de iniciar un ejecutor en este host con el hook de captura instalado y `E2E_REPLY_DIR` exportado. Primero inicia sesión con una cuenta de claude.ai en la máquina que ejecuta el script, como se describe en [Autenticarse desde CI](#authenticate-from-ci). Sin ese inicio de sesión, el primer envío falla con un error como `Unable to get organization UUID for cloud session creation`.110El script de ejemplo se ejecuta en la misma máquina que el ejecutor de pruebas. Antes de ejecutarlo, prepara esa máquina:

111 

112* **Checkout del repositorio**: ejecuta el script desde un checkout de git del repositorio en el que quieres que trabaje la sesión.

113* **Ejecutor**: inicia un ejecutor en este host con el hook de captura instalado y `E2E_REPLY_DIR` exportado.

114* **Inicio de sesión**: inicia sesión con una cuenta de claude.ai en la máquina que ejecuta el script, como se describe en [Autenticarse desde CI](#authenticate-from-ci).

115* **ID del entorno**: establece `CLAUDE_TEST_ENVIRONMENT_ID` en el ID `ccpool_...` de tu entorno de prueba, que se muestra en el diálogo de detalles del entorno en la página de administración o se devuelve por la [llamada create-environment](#create-a-dedicated-test-environment).

116 

117El script a continuación ejecuta el bucle completo contra `$CLAUDE_TEST_ENVIRONMENT_ID` y afirma una frase centinela en cada respuesta.

108 118 

109```bash theme={null}119```bash theme={null}

110#!/usr/bin/env bash120#!/usr/bin/env bash


152TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"162TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"

153EXPECT1="ok: custom tools are reachable"163EXPECT1="ok: custom tools are reachable"

154create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \164create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \

155 --ref "$TEST_REPO_REF" --output-format json)165 --ref "$TEST_REPO_REF" --output-format json < /dev/null)

156echo "create: $create_json"166echo "create: $create_json"

157SESSION_ID=$(jq -er '.session_id' <<<"$create_json")167SESSION_ID=$(jq -er '.session_id' <<<"$create_json")

158 168 


163# 3. Post a follow-up via the CLI.173# 3. Post a follow-up via the CLI.

164TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"174TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"

165EXPECT2="ok: follow-up delivered"175EXPECT2="ok: follow-up delivered"

166followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json)176followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json < /dev/null)

167echo "followup: $followup_json"177echo "followup: $followup_json"

168jq -e '.ok == true' <<<"$followup_json" >/dev/null178jq -e '.ok == true' <<<"$followup_json" >/dev/null

169 179 

sessions.md +43 −41

Details

6 6 

7> Nombre, reanude, ramifique y cambie entre conversaciones de Claude Code. Cubre `--continue`, `--resume`, `--from-pr`, el selector `/resume`, nombres de sesión, exportación de transcripciones y dónde se almacenan las transcripciones.7> Nombre, reanude, ramifique y cambie entre conversaciones de Claude Code. Cubre `--continue`, `--resume`, `--from-pr`, el selector `/resume`, nombres de sesión, exportación de transcripciones y dónde se almacenan las transcripciones.

8 8 

9Una sesión es una conversación guardada vinculada a un directorio de proyecto. Claude Code la almacena localmente mientras trabaja, para que pueda reanudar donde lo dejó, ramificarse para probar un enfoque diferente o cambiar entre tareas.9Una [sesión](/docs/es/glossary#session) es una conversación guardada vinculada a un directorio de proyecto. Claude Code la almacena localmente mientras trabajas, para que puedas reanudar donde lo dejaste, crear una rama para probar un enfoque diferente o cambiar entre tareas.

10 10 

11La [aplicación de escritorio](/docs/es/desktop#work-in-parallel-with-sessions), [claude.ai/code](/docs/es/claude-code-on-the-web) y la [extensión de VS Code](/docs/es/vs-code#resume-past-conversations) mantienen cada una su propio historial de sesiones, y la aplicación de escritorio también puede [reanudar una sesión de CLI](/docs/es/desktop#coming-from-the-cli). Esta página cubre la CLI.11La [aplicación de escritorio](/docs/es/desktop#work-in-parallel-with-sessions), [claude.ai/code](/docs/es/claude-code-on-the-web) y la [extensión de VS Code](/docs/es/vs-code#resume-past-conversations) mantienen cada una su propio historial de sesiones, y la aplicación de escritorio también puede [reanudar una sesión de CLI](/docs/es/desktop#coming-from-the-cli). Esta página cubre la CLI.

12 12 


18 18 

19| Comando | Qué hace |19| Comando | Qué hace |

20| :- | :- |20| :- | :- |

21| `claude --continue` | Reabre la conversación más reciente en el directorio actual |21| `claude --continue` | Reabre la sesión más reciente en el directorio actual |

22| `claude --resume` | Abre el [selector de sesiones](#use-the-session-picker) |22| `claude --resume` | Abre el [selector de sesiones](#use-the-session-picker) |

23| `claude --resume <name>` | Reanuda la sesión nombrada directamente |23| `claude --resume <name>` | Reanuda la sesión nombrada directamente |

24| `claude --resume <transcript-path>` | Reanuda la conversación almacenada en el archivo de [transcripción](#where-transcripts-are-stored) `.jsonl` en esa ruta absoluta |24| `claude --resume <transcript-path>` | Reanuda la sesión almacenada en el [archivo de transcripción](#where-transcripts-are-stored) `.jsonl` en esa ruta absoluta |

25| `claude --from-pr <number>` | Abre el selector de sesiones filtrado a sesiones vinculadas a ese pull request |25| `claude --from-pr <number>` | Abre el selector de sesiones filtrado a sesiones vinculadas a ese pull request |

26| `/resume` | Cambia a una conversación diferente desde dentro de una sesión activa |26| `/resume` | Cambia a una sesión diferente desde dentro de una sesión activa |

27 

28Claude Code deja fuera del selector de sesiones y fuera de `claude --continue` las sesiones creadas con [`claude -p`](/docs/es/headless) o el [Agent SDK](/docs/es/agent-sdk/overview). Aún puedes reanudar una pasando su ID de sesión a `claude --resume <session-id>`. Con `claude --continue`, Claude Code también omite [sesiones cuyo primer prompt fue `/loop`](#where-the-session-picker-looks). Cuando ejecutas [`claude -p --continue`](/docs/es/headless#continue-conversations), Claude Code incluye sesiones `-p`, SDK y `/loop`.

29 

30Puedes ejecutar `claude --resume <session-id>` desde cualquier directorio, así que puedes reanudar una sesión que comenzó en otro lugar o se movió con [`/cd`](/docs/es/commands). Claude Code busca el ID en este orden:

31 

321. El directorio del proyecto actual y sus git worktrees

332. Todos los demás proyectos en esta máquina

34 

35La búsqueda entre proyectos resuelve el ID solo cuando exactamente otro proyecto contiene una transcripción con mensajes para él, por lo que un duplicado copiado manualmente hace que Claude Code reporte que no lo encontró en lugar de reanudar una copia arbitraria. Si ninguna sesión almacenada coincide con el ID, Claude Code reporta `No conversation found with session ID: <session-id>`.

36 

37Antes de v2.1.223, la búsqueda se detenía en el directorio del proyecto actual y sus git worktrees, por lo que tenías que reanudar desde el directorio en el que la sesión trabajó por última vez.

38 

39`claude --continue` abre una [sesión en segundo plano](/docs/es/agent-view) que ha terminado, pero no una que aún se está ejecutando; abrir sesiones en segundo plano terminadas requiere Claude Code v2.1.257 o posterior. Si tu conversación más reciente es una que [moviste al segundo plano](/docs/es/agent-view#send-the-session-to-the-background) y aún se está ejecutando allí, Claude Code sale con `Your most recent conversation is running in the background` y el ID de esa sesión. Conéctate a la sesión desde [`claude agents`](/docs/es/agent-view#attach-to-a-session), o ejecuta `claude --resume` para elegir otra.

40 27 

41<h3 id="resume-a-running-background-session">28<h3 id="resume-a-running-background-session">

42 Reanuda una sesión en segundo plano en ejecución29 Reanuda una sesión en segundo plano en ejecución


64 51 

65Cuando Claude Code carga una conversación desde su transcripción, la sesión reanudada restaura la conversación junto con el estado guardado en ella:52Cuando Claude Code carga una conversación desde su transcripción, la sesión reanudada restaura la conversación junto con el estado guardado en ella:

66 53 

67* Historial de conversación: el historial completo, incluidas las llamadas a herramientas y los resultados. Una herramienta que aún se estaba ejecutando cuando terminó el proceso anterior, por ejemplo en un bloqueo, no termina ni se ejecuta de nuevo cuando reanudas. Claude ve la llamada marcada como cortada antes de que se registrara su resultado y se le indica que verifique si tuvo efecto antes de ejecutarla de nuevo, a menos que [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars#variables) esté configurado. Antes de v2.1.281, Claude Code eliminaba la llamada cortada de la conversación o se la mostraba a Claude como una que tú interrumpiste.54* Historial de conversación: el historial completo, incluidas las llamadas a herramientas y los resultados. Una herramienta que aún se estaba ejecutando cuando terminó el proceso anterior, por ejemplo en un bloqueo, no termina ni se ejecuta de nuevo cuando reanudas. Claude ve la llamada marcada como cortada antes de que se registrara su resultado y se le indica que verifique si tuvo efecto antes de ejecutarla de nuevo, a menos que [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars#variables) esté configurado.

68* Modelo: la sesión continúa en el modelo que estaba usando, excepto en los casos descritos en [Configurar tu modelo](/docs/es/model-config#setting-your-model).55* Modelo: la sesión continúa en el modelo que estaba usando, excepto en los casos descritos en [Configurar tu modelo](/docs/es/model-config#setting-your-model).

69* Agente: una sesión iniciada con [`--agent`](/docs/es/sub-agents#invoke-subagents-explicitly) o el ajuste `agent` continúa como ese agente, manteniendo sus restricciones de herramientas y modelo. Pasa `--agent` al reanudar para elegir uno diferente; para el prompt del sistema en cualquier caso, consulta [Flags del prompt del sistema en conversaciones reanudadas](/docs/es/cli-reference#system-prompt-flags-in-resumed-conversations). Claude Code busca el agente en dos lugares: el directorio original de la sesión, siempre que hayas [confiado en ese espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust), y luego el directorio desde el que reanudas, por lo que un agente con alcance de proyecto aún se carga cuando reanudas desde otro directorio. Si Claude Code no encuentra el agente en ninguno de los dos lugares, la sesión se reanuda con las herramientas predeterminadas y muestra una [advertencia que nombra el agente](/docs/es/errors#session-agent-no-longer-available).56* Agente: una sesión iniciada con [`--agent`](/docs/es/sub-agents#invoke-subagents-explicitly) o el ajuste `agent` continúa como ese agente, manteniendo sus restricciones de herramientas y modelo. Pasa `--agent` al reanudar para elegir uno diferente; para el prompt del sistema en cualquier caso, consulta [Flags del prompt del sistema en conversaciones reanudadas](/docs/es/cli-reference#system-prompt-flags-in-resumed-conversations). Claude Code busca el agente en dos lugares: el directorio original de la sesión, siempre que hayas [confiado en ese espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust), y luego el directorio desde el que reanudas, por lo que un agente con alcance de proyecto aún se carga cuando reanudas desde otro directorio. Si Claude Code no encuentra el agente en ninguno de los dos lugares, la sesión se reanuda con las herramientas predeterminadas y muestra una [advertencia que nombra el agente](/docs/es/errors#session-agent-no-longer-available).

70* Modo de permisos: si reanudas desde una terminal con `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` cuando el nombre coincide con una sesión, sin `-p`, Claude Code restaura el modo de permisos en el que estaba la sesión, excepto en los casos en [modo de permisos al reanudar](#permission-mode-on-resume), que también cubre el selector de sesiones, `/resume` y reanudar con `claude -p`. Pasa `--permission-mode` o `--dangerously-skip-permissions` para sobrescribir el modo restaurado.57* Modo de permisos: si reanudas desde una terminal con `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` cuando el nombre coincide con una sesión, sin `-p`, Claude Code restaura el modo de permisos en el que estaba la sesión, excepto en los casos en [modo de permisos al reanudar](#permission-mode-on-resume), que también cubre el selector de sesiones, `/resume` y reanudar con `claude -p`. Pasa `--permission-mode` o `--dangerously-skip-permissions` para sobrescribir el modo restaurado.


83* Terminal: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` cuando el nombre coincide con una sesión, sin `-p`. Claude Code restaura el modo de permisos en el que estaba la sesión, excepto en los casos de la tabla. Pasa `--permission-mode` o `--dangerously-skip-permissions` para sobrescribir el modo restaurado.70* Terminal: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` cuando el nombre coincide con una sesión, sin `-p`. Claude Code restaura el modo de permisos en el que estaba la sesión, excepto en los casos de la tabla. Pasa `--permission-mode` o `--dangerously-skip-permissions` para sobrescribir el modo restaurado.

84* No interactivo: `claude -p --resume` o `claude -p --continue`. Claude Code inicia la ejecución en el modo de permisos en el que se iniciaría una nueva ejecución de `claude -p`, excepto que una sesión que terminó en modo plan se reanuda en modo plan bajo las [condiciones a continuación](#resume-in-plan-mode-with-p).71* No interactivo: `claude -p --resume` o `claude -p --continue`. Claude Code inicia la ejecución en el modo de permisos en el que se iniciaría una nueva ejecución de `claude -p`, excepto que una sesión que terminó en modo plan se reanuda en modo plan bajo las [condiciones a continuación](#resume-in-plan-mode-with-p).

85* VS Code: el panel de conversación de la extensión. La tabla cubre solo una conversación que terminó en modo plan; para el resto, consulta [reanudar conversaciones pasadas](/docs/es/vs-code#resume-past-conversations).72* VS Code: el panel de conversación de la extensión. La tabla cubre solo una conversación que terminó en modo plan; para el resto, consulta [reanudar conversaciones pasadas](/docs/es/vs-code#resume-past-conversations).

86* Selector de sesiones en el lanzamiento: una sesión que seleccionas del [selector de sesiones](#use-the-session-picker), ya sea que lo hayas abierto con `claude --resume` solo, `claude --from-pr` o un nombre que coincida con más de una sesión. Claude Code inicia la sesión en el modo de permisos en el que iniciaría una nueva sesión desde la misma línea de comandos, excepto que una sesión que terminó en modo plan se reanuda en modo plan a menos que pases `--permission-mode`, `--dangerously-skip-permissions` o `--fork-session`. No se restaura ningún otro modo de permisos almacenado.73* Selector de sesiones en el lanzamiento: una sesión que seleccionas del [selector de sesiones](#use-the-session-picker), ya sea que lo hayas abierto con `claude --resume` solo, `claude --from-pr` o un nombre que coincida con más de una sesión. Claude Code inicia la sesión en el modo de permisos en el que iniciaría una nueva sesión desde la misma línea de comandos, excepto que una sesión que terminó en modo plan se reanuda en modo plan. Si pasas `--permission-mode`, `--dangerously-skip-permissions` o `--fork-session`, Claude Code no restaura el modo plan. No se restaura ningún otro modo de permisos almacenado.

87* `/resume` dentro de una sesión, con o sin argumento: la conversación a la que cambias continúa en el modo de permisos en el que está tu sesión actual, excepto que una conversación que terminó en modo plan se reanuda en modo plan, incluso si iniciaste Claude Code con `--permission-mode` o `--dangerously-skip-permissions`. Si esa conversación ya estaba abierta antes en esta ejecución de Claude Code, como la conversación con la que empezaste o una que dejaste con `/clear` o `/resume`, continúa en cambio en tu modo de permisos actual.74* `/resume` dentro de una sesión, con o sin argumento: la conversación a la que cambias continúa en el modo de permisos en el que está tu sesión actual, excepto que una conversación que terminó en modo plan se reanuda en modo plan, incluso si iniciaste Claude Code con `--permission-mode` o `--dangerously-skip-permissions`. Si esa conversación ya estaba abierta antes en esta ejecución de Claude Code, como la conversación con la que empezaste o una que dejaste con `/clear` o `/resume`, continúa en cambio en tu modo de permisos actual.

88 75 

76Si una [regla de denegación](/docs/es/permissions#manage-permissions) elimina la herramienta [`ExitPlanMode`](/docs/es/tools-reference), Claude no puede presentar un plan para aprobación, por lo que Claude Code no restaura el modo plan. La sesión se inicia en el modo de permisos en el que se iniciaría una nueva sesión desde la misma línea de comandos. Con `/resume`, la conversación continúa en tu modo de permisos actual.

77 

89Restaurar el modo plan en las rutas no interactiva y de VS Code requiere Claude Code v2.1.246 o posterior. Cada fila nombra el modo de permisos en el que terminó la sesión, por cuál de las rutas de terminal, no interactiva y VS Code la reanudas, y el modo de permisos en el que Claude Code inicia la sesión reanudada.78Restaurar el modo plan en las rutas no interactiva y de VS Code requiere Claude Code v2.1.246 o posterior. Cada fila nombra el modo de permisos en el que terminó la sesión, por cuál de las rutas de terminal, no interactiva y VS Code la reanudas, y el modo de permisos en el que Claude Code inicia la sesión reanudada.

90 79 

91| Sesión terminada en | Cómo la reanudas | Modo de permisos después de reanudar |80| Sesión terminada en | Cómo la reanudas | Modo de permisos después de reanudar |

92| :- | :- | :- |81| :- | :- | :- |

93| `bypassPermissions` | Terminal | El modo de permisos en el que se iniciaría una nueva sesión. Para [omitir permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) de nuevo, habilítalo en el lanzamiento con uno de sus flags de lanzamiento o `permissions.defaultMode: "bypassPermissions"` en [configuración de usuario, `--settings` o configuración administrada](/docs/es/settings-reference#permissions-defaultmode) |82| `bypassPermissions` | Terminal | El modo de permisos en el que se iniciaría una nueva sesión. Para [omitir permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) de nuevo, habilítalo en el lanzamiento con uno de sus flags de lanzamiento o `permissions.defaultMode: "bypassPermissions"` en [configuración de usuario, `--settings` o configuración administrada](/docs/es/settings-reference#permissions-defaultmode) |

94| `plan` | Terminal | Modo plan. Con `--fork-session`, el modo de permisos en el que se iniciaría una nueva sesión |83| `plan` | Terminal | Modo plan. Con `--fork-session`, el modo de permisos en el que se iniciaría una nueva sesión |

84| `plan` | Terminal, cuando una regla de denegación elimina `ExitPlanMode` | El modo de permisos en el que se iniciaría una nueva sesión |

95| `auto` | Terminal | `auto`, solo cuando tu cuenta aún cumple con los [requisitos del modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) |85| `auto` | Terminal | `auto`, solo cuando tu cuenta aún cumple con los [requisitos del modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) |

96| Manual | Terminal | Manual cuando una nueva sesión se iniciaría en modo automático desde el [valor predeterminado integrado](/docs/es/permission-modes#which-mode-a-session-starts-in). Cuando un `defaultMode` de un archivo de configuración [entra en vigor](/docs/es/permission-modes#which-mode-a-session-starts-in), Claude Code inicia la sesión reanudada en ese modo en su lugar |86| Manual | Terminal | Manual cuando una nueva sesión se iniciaría en modo automático desde el [valor predeterminado integrado](/docs/es/permission-modes#which-mode-a-session-starts-in). Cuando un `defaultMode` de un archivo de configuración [entra en vigor](/docs/es/permission-modes#which-mode-a-session-starts-in), Claude Code inicia la sesión reanudada en ese modo en su lugar |

97| `plan` | No interactivo, bajo las [condiciones a continuación](#resume-in-plan-mode-with-p) | Modo plan |87| `plan` | No interactivo, bajo las [condiciones a continuación](#resume-in-plan-mode-with-p) | Modo plan |


110* No pasas `--permission-mode` ni `--dangerously-skip-permissions`100* No pasas `--permission-mode` ni `--dangerously-skip-permissions`

111* No pasas `--fork-session`101* No pasas `--fork-session`

112* La ejecución no se inicia a través de [canales](/docs/es/channels)102* La ejecución no se inicia a través de [canales](/docs/es/channels)

103* Ninguna [regla de denegación](/docs/es/permissions#manage-permissions) elimina la herramienta `ExitPlanMode`

113 104 

114<h3 id="resume-from-a-summary">105<h3 id="resume-from-a-summary">

115 Reanuda desde un resumen106 Reanuda desde un resumen


117 108 

118En un plan Pro o Max, cuando reanudas una sesión que ha estado inactiva durante más de una hora aproximadamente y tiene más de 100,000 tokens, Claude Code restaura la conversación y luego abre un diálogo antes de que envíes tu primer mensaje. La [caché de prompts](/docs/es/prompt-caching#cache-lifetime) de la sesión habrá expirado para entonces, por lo que la siguiente solicitud procesa el historial completo una vez sin importar cuál de las opciones del diálogo elijas.109En un plan Pro o Max, cuando reanudas una sesión que ha estado inactiva durante más de una hora aproximadamente y tiene más de 100,000 tokens, Claude Code restaura la conversación y luego abre un diálogo antes de que envíes tu primer mensaje. La [caché de prompts](/docs/es/prompt-caching#cache-lifetime) de la sesión habrá expirado para entonces, por lo que la siguiente solicitud procesa el historial completo una vez sin importar cuál de las opciones del diálogo elijas.

119 110 

120El diálogo ofrece tres formas de continuar la sesión. Difieren en cuánta parte de la conversación cada una lleva adelante en solicitudes posteriores, lo que es un equilibrio entre mantener cada detalle y enviar menos tokens por solicitud:111El diálogo ofrece tres formas de continuar la sesión:

121 112 

122* **Reanudar desde resumen**: ejecuta [`/compact`](/docs/es/context-window#what-survives-compaction) inmediatamente. Claude Code envía una solicitud de resumen sobre el historial completo, luego reemplaza el historial con el resumen, tus intercambios más recientes y hasta cinco archivos leídos recientemente. Las solicitudes posteriores llevan el resumen en lugar del historial completo.113* **Reanudar desde resumen**: ejecuta [`/compact`](/docs/es/context-window#what-survives-compaction) inmediatamente. Las solicitudes posteriores llevan el resumen en lugar del historial completo.

123* **Reanudar la sesión completa tal como está**: carga la conversación sin cambios. Después de que envíes tu primer mensaje, Claude Code reprocesa y almacena en caché nuevamente el historial completo, luego lo relee de la caché en solicitudes posteriores mientras la caché se mantiene activa.114* **Reanudar la sesión completa tal como está**: carga la conversación sin cambios.

124* **No me preguntes de nuevo**: reanuda la sesión completa y deja de mostrar el diálogo en todas las reanudaciones futuras.115* **No me preguntes de nuevo**: reanuda la sesión completa y deja de mostrar el diálogo en todas las reanudaciones futuras.

125 116 

126Reanudar tal como está mantiene cada detalle de la conversación disponible, a un costo por solicitud que escala con el tamaño de la conversación. Reanudar desde el resumen cuesta menos en cada solicitud posterior porque lleva el resumen en lugar del historial completo, pero lo que sea que el resumen deje fuera ya no está en el contexto de Claude. Consulta [por qué el uso aumenta en una sesión larga](/docs/es/costs#why-usage-climbs-in-a-long-session) para saber de dónde proviene ese costo por solicitud.117Reanudar tal como está mantiene cada detalle de la conversación disponible, a un costo por solicitud que escala con el tamaño de la conversación. Reanudar desde el resumen cuesta menos en cada solicitud posterior porque lleva el resumen en lugar del historial completo, pero lo que sea que el resumen deje fuera ya no está en el contexto de Claude. Consulta [por qué el uso aumenta en una sesión larga](/docs/es/costs#why-usage-climbs-in-a-long-session) para saber de dónde proviene ese costo por solicitud.


136 127 

137Usa `Ctrl+W` para ampliar a todos los worktrees del repositorio o `Ctrl+A` para ampliar a cada proyecto en esta máquina.128Usa `Ctrl+W` para ampliar a todos los worktrees del repositorio o `Ctrl+A` para ampliar a cada proyecto en esta máquina.

138 129 

139Las sesiones cuyo primer prompt fue un comando [`/loop`](/docs/es/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) no aparecen en el selector, y `claude --continue` también las omite. Ejecutar `/loop` más adelante en una conversación no oculta la sesión. Antes de v2.1.211, una ejecución de `/loop` al principio de una conversación ocultaba la sesión del selector de forma permanente.130<h4 id="/loop-p-agent-sdk-and-background-sessions">

131 `/loop`, `-p`, Agent SDK y sesiones en segundo plano

132</h4>

133 

134Las sesiones cuyo primer prompt fue un comando [`/loop`](/docs/es/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) no aparecen en el selector, y `claude --continue` también las omite. Ejecutar `/loop` más adelante en una conversación no oculta la sesión.

135 

136Claude Code deja fuera del selector de sesiones y fuera de `claude --continue` las sesiones creadas con [`claude -p`](/docs/es/headless) o el [Agent SDK](/docs/es/agent-sdk/overview). Aún puedes reanudar una pasando su ID de sesión a `claude --resume <session-id>`. Cuando ejecutas [`claude -p --continue`](/docs/es/headless#continue-conversations), Claude Code incluye sesiones `-p`, SDK y `/loop`.

140 137 

141Mover una sesión con [`/cd`](/docs/es/commands) la traslada al almacenamiento del proyecto del nuevo directorio, por lo que aparece en el selector de ese directorio después. A partir de v2.1.196, una sesión movida se mantiene fuera del selector del directorio anterior incluso después de un bloqueo o salida forzada. En versiones anteriores, también podía reaparecer en la lista del directorio anterior después de una salida que no fue limpia cuando la ruta anterior contenía caracteres especiales como guiones bajos.138`claude --continue` abre una [sesión en segundo plano](/docs/es/agent-view) que ha terminado, pero no una que aún se está ejecutando; abrir sesiones en segundo plano terminadas requiere Claude Code v2.1.257 o posterior. Si tu conversación más reciente es una que [moviste al segundo plano](/docs/es/agent-view#send-the-session-to-the-background) y aún se está ejecutando allí, Claude Code sale con `Your most recent conversation is running in the background` y el ID de esa sesión. Conéctate a la sesión desde [`claude agents`](/docs/es/agent-view#attach-to-a-session), o ejecuta `claude --resume` para elegir otra.

139 

140<h4 id="sessions-in-other-worktrees-and-projects">

141 Sesiones en otros worktrees y proyectos

142</h4>

142 143 

143Cuando seleccionas una sesión de otro worktree del mismo repositorio, Claude Code la reanuda en su lugar; cuando el propio worktree de la sesión ya no existe, Claude Code [la reanuda en tu directorio actual](/docs/es/worktrees#resume-a-worktree-session). Cuando seleccionas una sesión de un proyecto no relacionado, Claude Code copia en cambio un comando `cd` y de reanudación a tu portapapeles. Si el directorio de ese proyecto ya no existe, Claude Code reanuda la sesión en tu directorio actual en lugar de copiar un comando `cd` que fallaría.144Cuando seleccionas una sesión de otro worktree del mismo repositorio, Claude Code la reanuda en su lugar; cuando el propio worktree de la sesión ya no existe, Claude Code [la reanuda en tu directorio actual](/docs/es/worktrees#resume-a-worktree-session). Cuando seleccionas una sesión de un proyecto no relacionado, Claude Code copia en cambio un comando `cd` y de reanudación a tu portapapeles. Si el directorio de ese proyecto ya no existe, Claude Code reanuda la sesión en tu directorio actual en lugar de copiar un comando `cd` que fallaría.

144 145 

146Mover una sesión con [`/cd`](/docs/es/commands) la traslada al almacenamiento del proyecto del nuevo directorio, por lo que aparece en el selector de ese directorio después.

147 

148<h4 id="resume-by-session-id-or-name">

149 Reanuda por ID de sesión o nombre

150</h4>

151 

152Puedes ejecutar `claude --resume <session-id>` desde cualquier directorio, así que puedes reanudar una sesión que comenzó en otro lugar o se movió con [`/cd`](/docs/es/commands). Claude Code busca el ID en este orden:

153 

1541. El directorio del proyecto actual y sus git worktrees

1552. Todos los demás proyectos en esta máquina

156 

157La búsqueda entre proyectos resuelve el ID solo cuando exactamente otro proyecto contiene una transcripción con mensajes para él, por lo que un duplicado copiado manualmente hace que Claude Code reporte que no lo encontró en lugar de reanudar una copia arbitraria. Si ninguna sesión almacenada coincide con el ID, Claude Code reporta `No conversation found with session ID: <session-id>`.

158 

145Reanudar por nombre se resuelve en el repositorio actual y sus worktrees. Ambas formas buscan una coincidencia exacta y la reanudan directamente incluso si vive en un worktree diferente:159Reanudar por nombre se resuelve en el repositorio actual y sus worktrees. Ambas formas buscan una coincidencia exacta y la reanudan directamente incluso si vive en un worktree diferente:

146 160 

147| Comando | Coincidencia exacta | Nombre ambiguo |161| Comando | Coincidencia exacta | Nombre ambiguo |


166 180 

167Una vez que nombre una sesión a través de una ruta CLI o desde claude.ai, vuelva a ella con `claude --resume <name>` o `/resume <name>`; una sesión de la aplicación de escritorio se reanuda en la [aplicación de escritorio](/docs/es/desktop#work-in-parallel-with-sessions). Vea [Reanude una sesión](#resume-a-session) para saber cómo se comporta la resolución de nombres en worktrees.181Una vez que nombre una sesión a través de una ruta CLI o desde claude.ai, vuelva a ella con `claude --resume <name>` o `/resume <name>`; una sesión de la aplicación de escritorio se reanuda en la [aplicación de escritorio](/docs/es/desktop#work-in-parallel-with-sessions). Vea [Reanude una sesión](#resume-a-session) para saber cómo se comporta la resolución de nombres en worktrees.

168 182 

169Cuando inicia o reanuda una sesión interactiva con un nombre que otra sesión activa en esta máquina ya usa, o renombra una sesión a ese nombre, Claude Code deja el nombre con la sesión que ya lo tiene, renombra la suya a una variante con un sufijo de dos palabras, como `auth-refactor-graceful-unicorn`, y se lo comunica. Ejecute `/rename` con un nuevo nombre si prefiere elegir uno usted mismo. Antes de v2.1.232, ambas sesiones mantenían el nombre.

170 

171En tres casos Claude Code no renombra el duplicado, por lo que aún puede ver dos sesiones con el mismo nombre en los listados:

172 

173* No comprueba títulos generados por IA ni nombres de visualización predeterminados.

174* No comprueba el `--name` de una sesión [en segundo plano](/docs/es/agent-view#from-your-shell) o `-p` al inicio.

175* No puede renombrar una sesión en una versión anterior de Claude Code.

176 

177Las sesiones que no nombra aún obtienen dos etiquetas que Claude Code asigna. Solo el título generado funciona como identificador de reanudación:183Las sesiones que no nombra aún obtienen dos etiquetas que Claude Code asigna. Solo el título generado funciona como identificador de reanudación:

178 184 

179* Nombre de visualización predeterminado: las sesiones interactivas que nunca nombra aún obtienen un nombre de visualización predeterminado cuando se inician. Requiere Claude Code v2.1.196 o posterior. El valor predeterminado combina el nombre del directorio de trabajo con un sufijo de dos caracteres, por ejemplo `my-app-3f`, e identifica la sesión en listados de sesiones en ejecución, como [vista de agente](/docs/es/agent-view) y salida de `claude agents --json`. El valor predeterminado no es un identificador de reanudación. Si lo pasa a `claude --resume` o `/resume`, Claude Code no encuentra la sesión. Nombrar la sesión reemplaza el valor predeterminado en esos listados, y también lo hace aceptar un plan.185* Nombre de visualización predeterminado: las sesiones interactivas que nunca nombras aún obtienen un nombre de visualización predeterminado cuando se inician. Requiere Claude Code v2.1.196 o posterior. El valor predeterminado combina el nombre del directorio de trabajo con un sufijo de dos caracteres, por ejemplo `my-app-3f`, e identifica la sesión en los listados de sesiones en ejecución, como la [vista de agente](/docs/es/agent-view) y la salida de `claude agents --json`. El valor predeterminado no es un identificador para reanudar. Si lo pasas a `claude --resume` o `/resume`, Claude Code no encuentra la sesión.

180* Título generado: si no nombra una sesión, Claude Code genera un título de sesión para ella. El título es un resumen breve de su primer indicador, escrito por una solicitud en segundo plano al modelo pequeño/rápido, normalmente un modelo de clase Haiku. Una ejecución `claude -p` que inicia directamente desde un shell o script no obtiene uno.186* Título generado: si no nombra una sesión, Claude Code genera un título de sesión para ella. El título es un resumen breve de su primer indicador, escrito por una solicitud en segundo plano al modelo pequeño/rápido, normalmente un modelo de clase Haiku. Una ejecución `claude -p` que inicia directamente desde un shell o script no obtiene uno.

181 187 

182 Aceptar un plan reemplaza el título del primer indicador con un título basado en el plan. Nombrar la sesión también lo reemplaza.188 Aceptar un plan reemplaza el título generado con un título basado en el plan. Puedes pasar cualquiera de los dos títulos a `claude --resume` o `/resume`, y Claude Code lo resuelve de la misma manera que un nombre que tú estableces.

183 

184 Verá el título del primer indicador en el [selector de sesiones](#use-the-session-picker) y en el campo [`session_name`](/docs/es/statusline) de la línea de estado cuando no hay nombre establecido. El título del plan se muestra en los mismos dos lugares y también en los listados de sesiones en ejecución, donde toma el lugar del nombre de visualización predeterminado.

185 

186 Puede pasar cualquiera de los dos títulos a `claude --resume` o `/resume`, y Claude Code lo resuelve de la misma manera que un nombre que usted establece.

187 189 

188<h2 id="use-the-session-picker">190<h2 id="use-the-session-picker">

189 Usar el selector de sesiones191 Usar el selector de sesiones


205| `Ctrl+B` | Filtra a sesiones de la rama git actual. Presione nuevamente para mostrar todas las ramas |207| `Ctrl+B` | Filtra a sesiones de la rama git actual. Presione nuevamente para mostrar todas las ramas |

206| `Esc` | Salga del selector de sesiones o del modo de búsqueda |208| `Esc` | Salga del selector de sesiones o del modo de búsqueda |

207 209 

208Cada fila muestra el nombre de la sesión si está establecido; de lo contrario, el título de sesión generado por IA, el resumen de la conversación o el primer indicador, junto con el tiempo desde la última actividad, la rama git y el tamaño del archivo. Amplíe a todos los proyectos con `Ctrl+A` para ver también la ruta del proyecto de cada sesión.210Cada fila muestra el nombre de la sesión si estableciste uno; de lo contrario, el título de sesión generado por IA, el resumen de la conversación o el primer prompt, junto con el tiempo desde la última actividad, la rama git y el tamaño del archivo.

209 211 

210Las sesiones creadas con `/branch` o `--fork-session` obtienen sus propios ID de sesión y aparecen como filas separadas. Cuando el selector encuentra más de una entrada para la misma sesión, las agrupa bajo una sola fila. Presione `→` para expandir un grupo.212Las sesiones creadas con `/branch` o `--fork-session` obtienen sus propios ID de sesión y aparecen como filas separadas. Cuando el selector encuentra más de una entrada para la misma sesión, las agrupa bajo una sola fila. Presione `→` para expandir un grupo.

211 213 


223/branch try-streaming-approach225/branch try-streaming-approach

224```226```

225 227 

226Si omite el nombre, Claude Code nombra la nueva rama después del primer prompt en la conversación. A partir de v2.1.198 esto también se aplica después de [compactación](/docs/es/how-claude-code-works#when-context-fills-up); las versiones anteriores recurrieron al nombre literal `Branched conversation` en lugar de mirar más allá del resumen de compactación al prompt original.228Si omites el nombre, Claude Code nombra la nueva rama a partir del primer prompt de la conversación.

227 229 

228Desde la línea de comandos, combine `--continue` o `--resume` con `--fork-session`:230Desde la línea de comandos, combine `--continue` o `--resume` con `--fork-session`:

229 231 


250 252 

251Estos comandos controlan qué hay en la ventana de contexto sin dejar la sesión:253Estos comandos controlan qué hay en la ventana de contexto sin dejar la sesión:

252 254 

253* **`/clear`**: comience de nuevo con un contexto vacío. Claude Code guarda la conversación anterior; reanúdela con `/resume`, o, en el mismo proceso de Claude Code, desde [la entrada de sesión anterior del menú de rewind](/docs/es/checkpointing#rewind-past-a-cleared-conversation). Sin argumentos, la nueva conversación mantiene un nombre que estableció con `--name` o `/rename`, pero no un título de sesión generado por IA. Para nombrar la conversación que está dejando, pase el nombre, como en `/clear release-prep`; la nueva conversación entonces comienza sin nombre255* **`/clear`**: comienza de nuevo con un contexto vacío. Claude Code guarda la sesión anterior; reanúdala con `/resume`, o, en el mismo proceso de Claude Code, desde [la entrada de sesión anterior del menú de rewind](/docs/es/checkpointing#rewind-past-a-cleared-conversation). Sin argumentos, la nueva sesión mantiene un nombre que estableciste con `--name` o `/rename`, pero no un título de sesión generado por IA. Para nombrar en su lugar la sesión que estás dejando, pasa el nombre, como en `/clear release-prep`; la nueva sesión entonces comienza sin nombre

254* **`/compact [instructions]`**: reemplace el historial con un resumen, opcionalmente enfocado en lo que especifique256* **`/compact [instructions]`**: reemplace el historial con un resumen, opcionalmente enfocado en lo que especifique

255* **`/context`**: muestre qué está consumiendo actualmente el contexto257* **`/context`**: muestre qué está consumiendo actualmente el contexto

256 258 

settings.md +2 −2

Details

495 495 

496Antes de v2.1.211, Claude Code mantenía el archivo en el directorio donde lo iniciaste. Aún lee un archivo que una versión anterior dejó allí junto al archivo de la raíz; donde ambos establecen la misma clave, se aplica el valor de la raíz, y se aplican las reglas de permisos de ambos archivos. El helper [`resolveSettings()`](/docs/es/agent-sdk/typescript#resolvesettings) del Agent SDK siempre lee el archivo desde el directorio donde se inició.496Antes de v2.1.211, Claude Code mantenía el archivo en el directorio donde lo iniciaste. Aún lee un archivo que una versión anterior dejó allí junto al archivo de la raíz; donde ambos establecen la misma clave, se aplica el valor de la raíz, y se aplican las reglas de permisos de ambos archivos. El helper [`resolveSettings()`](/docs/es/agent-sdk/typescript#resolvesettings) del Agent SDK siempre lee el archivo desde el directorio donde se inició.

497 497 

498Claude Code lee el `.claude/settings.json` compartido desde el [directorio de trabajo principal](/docs/es/permissions#working-directories) de la sesión, así que para usar un archivo con commit en la raíz del repositorio, inicia Claude Code allí. Después de [mover la sesión con `/cd`](/docs/es/permissions#move-the-session-to-another-directory), Claude Code lee ambos archivos de proyecto desde el nuevo directorio, ubicando el archivo local según las mismas reglas. Leerlos desde el directorio al que te moviste requiere Claude Code v2.1.246 o posterior.498Claude Code lee el `.claude/settings.json` compartido desde el [directorio de trabajo principal](/docs/es/permissions#working-directories) de la sesión, así que para usar un archivo con commit en la raíz del repositorio, inicia Claude Code allí. Después de [mover la sesión con `/cd`](/docs/es/permissions#move-the-session-to-another-directory), Claude Code lee ambos archivos de proyecto desde el nuevo directorio, ubicando el archivo local según las mismas reglas. Leerlos desde el directorio al que te moviste requiere Claude Code v2.1.246 o posterior. Para una sesión de worktree que inicias desde la aplicación de escritorio, consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).

499 499 

500<span id="managed-settings-delivery" />500<span id="managed-settings-delivery" />

501 501 


767 767 

768Dos cosas impiden que una clave en `.claude/settings.json` se aplique para todos los que lo clonan:768Dos cosas impiden que una clave en `.claude/settings.json` se aplique para todos los que lo clonan:

769 769 

770* **Claude Code ignora la clave en un archivo de repositorio.** Busca `User, local, or managed`, `User or managed`, `Managed` o `Global config` en la columna Scope del [índice de configuración](/docs/es/settings-reference#settings-index). Esas claves nunca se aplican desde el archivo compartido, salvo algunas que un archivo de repositorio aún puede desactivar. Cada una de esas entradas lo indica en su línea Scope. Las claves `Global config` se aplican solo desde `~/.claude.json`.770* **Claude Code ignora la clave en un archivo de repositorio.** Busca `User, local, or managed`, `User or managed`, `User`, `Managed` o `Global config` en la columna Scope del [índice de configuración](/docs/es/settings-reference#settings-index). Esas claves nunca se aplican desde el archivo compartido, salvo algunas que un archivo de repositorio aún puede desactivar. Cada una de esas entradas lo indica en su línea Scope. Las claves `Global config` se aplican solo desde `~/.claude.json`.

771 771 

772 Dentro de la clave `env`, las variables de exportación de telemetría tampoco se aplican nunca desde el archivo compartido, salvo algunos valores de desactivación; consulta [Variables que Claude Code ignora en `env`](/docs/es/settings-reference#variables-claude-code-ignores-in-env).772 Dentro de la clave `env`, las variables de exportación de telemetría tampoco se aplican nunca desde el archivo compartido, salvo algunos valores de desactivación; consulta [Variables que Claude Code ignora en `env`](/docs/es/settings-reference#variables-claude-code-ignores-in-env).

773* **La clave espera la confianza.** Las reglas `permissions.allow`, `permissions.additionalDirectories`, `extraKnownMarketplaces` y la mayoría de los valores de [`env`](/docs/es/settings-reference#env) se aplican solo después de que cada compañero de equipo [confíe en la carpeta](/docs/es/permissions#project-allow-rules-and-workspace-trust). Hasta entonces, siguen viendo solicitudes de permiso y no obtienen plugins de un marketplace que el archivo declara. Las reglas `deny` y `ask` se aplican de inmediato.773* **La clave espera la confianza.** Las reglas `permissions.allow`, `permissions.additionalDirectories`, `extraKnownMarketplaces` y la mayoría de los valores de [`env`](/docs/es/settings-reference#env) se aplican solo después de que cada compañero de equipo [confíe en la carpeta](/docs/es/permissions#project-allow-rules-and-workspace-trust). Hasta entonces, siguen viendo solicitudes de permiso y no obtienen plugins de un marketplace que el archivo declara. Las reglas `deny` y `ask` se aplican de inmediato.

Details

582<ReferenceFilter582<ReferenceFilter

583 noun="settings"583 noun="settings"

584 placeholder="Filter settings by key or purpose"584 placeholder="Filter settings by key or purpose"

585 facetOrder={{ scope: ["Any file", "User, local, or managed", "User or managed", "Managed", "Global config"] }}585 facetOrder={{ scope: ["Any file", "User, local, or managed", "User or managed", "User", "Managed", "Global config"] }}

586 columnHelp={{586 columnHelp={{

587topic: "The section of this page that holds the entry. Use Sort by to group the table by topic.",587topic: "The section of this page that holds the entry. Use Sort by to group the table by topic.",

588scope: "Which settings files can set the key: user (~/.claude/settings.json), project (.claude/settings.json), local (.claude/settings.local.json), or managed (deployed by your organization). Global config keys are in ~/.claude.json instead.",588scope: "Which settings files can set the key: user (~/.claude/settings.json), project (.claude/settings.json), local (.claude/settings.local.json), or managed (deployed by your organization). Global config keys are in ~/.claude.json instead.",


638| [`claudeMdExcludes`](#claudemdexcludes) | Omite archivos [CLAUDE.md](/docs/es/memory#exclude-specific-claude-md-files) específicos cuando se carga la memoria | Memoria y contexto | Any file |638| [`claudeMdExcludes`](#claudemdexcludes) | Omite archivos [CLAUDE.md](/docs/es/memory#exclude-specific-claude-md-files) específicos cuando se carga la memoria | Memoria y contexto | Any file |

639| [`cleanupPeriodDays`](#cleanupperioddays) | Elige cuántos días conserva Claude Code las [transcripciones](/docs/es/data-usage#data-retention) antes de eliminarlas | Privacidad y telemetría | Any file |639| [`cleanupPeriodDays`](#cleanupperioddays) | Elige cuántos días conserva Claude Code las [transcripciones](/docs/es/data-usage#data-retention) antes de eliminarlas | Privacidad y telemetría | Any file |

640| [`companyAnnouncements`](#companyannouncements) | Muestra los anuncios de tu organización al iniciar | Interfaz y terminal | Any file |640| [`companyAnnouncements`](#companyannouncements) | Muestra los anuncios de tu organización al iniciar | Interfaz y terminal | Any file |

641| [`copyFullResponse`](#copyfullresponse) | Haz que [`/copy`](/docs/es/commands) copie la respuesta completa sin mostrar el selector de bloques de código | Configuración de configuración global | Global config |641| [`copyFullResponse`](#copyfullresponse) | Haz que [`/copy`](/docs/es/commands) copie la respuesta completa sin mostrar el selector | Configuración de configuración global | Global config |

642| [`copyOnSelect`](#copyonselect) | Desactiva la copia automática del texto que seleccionas con el mouse en el [renderizado de pantalla completa](/docs/es/fullscreen#use-the-mouse) y en la vista de agentes | Configuración de configuración global | Global config |642| [`copyOnSelect`](#copyonselect) | Desactiva la copia automática del texto que seleccionas con el mouse en el [renderizado de pantalla completa](/docs/es/fullscreen#use-the-mouse) y en la vista de agentes | Configuración de configuración global | Global config |

643| [`crossSessionInbound`](#crosssessioninbound) | Elige si Claude Code entrega los [mensajes de tus otras sesiones](/docs/es/cross-session-messaging#control-inbound-messages), muestra un aviso sin entregarlos o los rechaza | Agentes, sesiones y worktrees | Any file |643| [`crossSessionInbound`](#crosssessioninbound) | Elige si Claude Code entrega los [mensajes de tus otras sesiones](/docs/es/cross-session-messaging#control-inbound-messages), muestra un aviso sin entregarlos o los rechaza | Agentes, sesiones y worktrees | Any file |

644| [`defaultShell`](#defaultshell) | Elige si Bash o PowerShell ejecuta los comandos de shell que escribes con el [prefijo `!`](/docs/es/interactive-mode#shell-mode-with-prefix) | Interfaz y terminal | Any file |644| [`defaultShell`](#defaultshell) | Elige si Bash o PowerShell ejecuta los comandos de shell que escribes con el [prefijo `!`](/docs/es/interactive-mode#shell-mode-with-prefix) | Interfaz y terminal | Any file |


684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Desactiva o activa las instantáneas de archivos que restaura [`/rewind`](/docs/es/checkpointing) | Memoria y contexto | Any file |684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Desactiva o activa las instantáneas de archivos que restaura [`/rewind`](/docs/es/checkpointing) | Memoria y contexto | Any file |

685| [`fileSuggestion`](#filesuggestion) | Proporciona el [autocompletado de archivos `@`](/docs/es/interactive-mode#quick-commands) desde tu propio comando | Interfaz y terminal | Any file |685| [`fileSuggestion`](#filesuggestion) | Proporciona el [autocompletado de archivos `@`](/docs/es/interactive-mode#quick-commands) desde tu propio comando | Interfaz y terminal | Any file |

686| [`footerLinksRegexes`](#footerlinksregexes) | Convierte los ID de issues o revisiones de la salida en [enlaces en los que se puede hacer clic](/docs/es/statusline#clickable-links) debajo del cuadro de entrada | Interfaz y terminal | User or managed |686| [`footerLinksRegexes`](#footerlinksregexes) | Convierte los ID de issues o revisiones de la salida en [enlaces en los que se puede hacer clic](/docs/es/statusline#clickable-links) debajo del cuadro de entrada | Interfaz y terminal | User or managed |

687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Establece la [URL del gateway](/docs/es/claude-apps-gateway#set-the-gateway-url) a la que se conecta la pantalla de inicio de sesión | Autenticación y proveedores | Managed |687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Establece la [URL del gateway](/docs/es/claude-apps-gateway#set-the-gateway-url) a la que se conecta la pantalla de inicio de sesión | Autenticación y proveedores | User or managed |

688| [`forceLoginMethod`](#forceloginmethod) | [Restringe el inicio de sesión](/docs/es/authentication#restrict-login-to-your-organization) a claude.ai, Claude Console o un [gateway en la nube](/docs/es/claude-apps-gateway) | Autenticación y proveedores | Any file |688| [`forceLoginMethod`](#forceloginmethod) | [Restringe el inicio de sesión](/docs/es/authentication#restrict-login-to-your-organization) a claude.ai, Claude Console o un [gateway en la nube](/docs/es/claude-apps-gateway) | Autenticación y proveedores | Any file |

689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Fija los inicios de sesión de claude.ai a tu organización](/docs/es/authentication#restrict-login-to-your-organization); solo una fuente administrada lo aplica | Autenticación y proveedores | Any file |689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Fija los inicios de sesión de claude.ai a tu organización](/docs/es/authentication#restrict-login-to-your-organization); solo una fuente administrada lo aplica | Autenticación y proveedores | Any file |

690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Bloquea el inicio hasta que la [configuración administrada por el servidor](/docs/es/server-managed-settings) se haya obtenido de nuevo | Configuración empresarial y administrada | Managed |690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Bloquea el inicio hasta que la [configuración administrada por el servidor](/docs/es/server-managed-settings) se haya obtenido de nuevo | Configuración empresarial y administrada | Managed |


831| [`worktree`](#worktree) | Configura cómo crea Claude Code los [worktrees](/docs/es/worktrees) de git | Agentes, sesiones y worktrees | Any file |831| [`worktree`](#worktree) | Configura cómo crea Claude Code los [worktrees](/docs/es/worktrees) de git | Agentes, sesiones y worktrees | Any file |

832| [`worktree.baseRef`](#worktree-baseref) | Crea nuevos [worktrees](/docs/es/worktrees) a partir de la rama predeterminada remota o de tu HEAD local | Agentes, sesiones y worktrees | Any file |832| [`worktree.baseRef`](#worktree-baseref) | Crea nuevos [worktrees](/docs/es/worktrees) a partir de la rama predeterminada remota o de tu HEAD local | Agentes, sesiones y worktrees | Any file |

833| [`worktree.bgIsolation`](#worktree-bgisolation) | Permite que las sesiones en segundo plano editen la copia de trabajo sin un [worktree](/docs/es/worktrees) | Agentes, sesiones y worktrees | Any file |833| [`worktree.bgIsolation`](#worktree-bgisolation) | Permite que las sesiones en segundo plano editen la copia de trabajo sin un [worktree](/docs/es/worktrees) | Agentes, sesiones y worktrees | Any file |

834| [`worktree.location`](#worktree-location) | Elige dónde crean sus worktrees las [sesiones SSH de Desktop](/docs/es/desktop#ssh-sessions) en una máquina remota | Agentes, sesiones y worktrees | User |

834| [`worktree.sparsePaths`](#worktree-sparsepaths) | Haz checkout solo de los directorios que necesitas en cada [worktree](/docs/es/worktrees) | Agentes, sesiones y worktrees | Any file |835| [`worktree.sparsePaths`](#worktree-sparsepaths) | Haz checkout solo de los directorios que necesitas en cada [worktree](/docs/es/worktrees) | Agentes, sesiones y worktrees | Any file |

835| [`worktree.symlinkDirectories`](#worktree-symlinkdirectories) | Crea enlaces simbólicos de directorios grandes en cada [worktree](/docs/es/worktrees) en lugar de duplicarlos | Agentes, sesiones y worktrees | Any file |836| [`worktree.symlinkDirectories`](#worktree-symlinkdirectories) | Crea enlaces simbólicos de directorios grandes en cada [worktree](/docs/es/worktrees) en lugar de duplicarlos | Agentes, sesiones y worktrees | Any file |

836| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | Haz que WSL lea la [configuración administrada](/docs/es/managed-settings) desde la cadena de políticas de Windows | Configuración empresarial y administrada | Managed |837| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | Haz que WSL lea la [configuración administrada](/docs/es/managed-settings) desde la cadena de políticas de Windows | Configuración empresarial y administrada | Managed |


1763 * `"acceptEdits"`: Claude Code también ejecuta ediciones de archivos y comandos comunes del sistema de archivos como `mkdir` y `mv` sin preguntar1764 * `"acceptEdits"`: Claude Code también ejecuta ediciones de archivos y comandos comunes del sistema de archivos como `mkdir` y `mv` sin preguntar

1764 * `"plan"`: Claude Code lee y planifica, pero bloquea las ediciones hasta que apruebes un plan1765 * `"plan"`: Claude Code lee y planifica, pero bloquea las ediciones hasta que apruebes un plan

1765 * `"auto"`: Claude Code se ejecuta sin solicitudes habituales; antes de que se ejecuten acciones como comandos de shell y solicitudes de red, un clasificador en segundo plano verifica que se alineen con tu solicitud1766 * `"auto"`: Claude Code se ejecuta sin solicitudes habituales; antes de que se ejecuten acciones como comandos de shell y solicitudes de red, un clasificador en segundo plano verifica que se alineen con tu solicitud

1766 * `"dontAsk"`: Claude Code deniega automáticamente cada llamada que de otro modo pediría confirmación; las lecturas, otras acciones que no necesitan aprobación y las herramientas preaprobadas se siguen ejecutando1767 * `"dontAsk"`: Claude Code deniega automáticamente cada llamada que de otro modo pediría confirmación; las lecturas de archivos dentro de tus directorios de trabajo, otras acciones que no necesitan aprobación y las herramientas preaprobadas se siguen ejecutando, salvo las lecturas desde [rutas de red](/docs/es/permissions#network-paths)

1767 * `"bypassPermissions"`: Claude Code ejecuta todo sin preguntar1768 * `"bypassPermissions"`: Claude Code ejecuta todo sin preguntar

1768 * `"manual"`: un alias de `"default"`1769 * `"manual"`: un alias de `"default"`

1769* **Default**: sin establecer1770* **Default**: sin establecer


2398 2399 

2399* Una entrada de `files` o `envVars` que aún tiene un `path` o `name` válido y un `mode` de `mask` o `deny`, como una cuyo patrón `extract` no tiene grupo de captura, se degrada a `mode: "deny"` con una advertencia, por lo que la credencial permanece bloqueada, no enmascarada, hasta que corrijas la entrada. Una entrada de `files` degradada fija [`filesystem.disabled`](/docs/es/sandboxing#disable-filesystem-isolation) igual que una entrada `deny` explícita, y la advertencia indica que su bloqueo de lectura no se aplica si la configuración administrada desactiva el aislamiento del sistema de archivos.2400* Una entrada de `files` o `envVars` que aún tiene un `path` o `name` válido y un `mode` de `mask` o `deny`, como una cuyo patrón `extract` no tiene grupo de captura, se degrada a `mode: "deny"` con una advertencia, por lo que la credencial permanece bloqueada, no enmascarada, hasta que corrijas la entrada. Una entrada de `files` degradada fija [`filesystem.disabled`](/docs/es/sandboxing#disable-filesystem-isolation) igual que una entrada `deny` explícita, y la advertencia indica que su bloqueo de lectura no se aplica si la configuración administrada desactiva el aislamiento del sistema de archivos.

2400* Una entrada con un `mode` desconocido o con un `path` o `name` no válido se elimina.2401* Una entrada con un `mode` desconocido o con un `path` o `name` no válido se elimina.

2401* Cada caso genera una advertencia; tanto si una entrada se degrada como si se elimina, las entradas válidas restantes siguen aplicándose, y un valor de `credentials` completamente no válido se descarta mientras el resto de `sandbox` sigue aplicándose.2402* Cada caso genera una advertencia; tanto si una entrada se degrada como si se elimina, las entradas válidas restantes siguen aplicándose.

2402 2403 

2403Se aplica en v2.1.191 y posterior; antes de v2.1.221, se eliminaba cada entrada no válida. Para las demás claves administradas con tratamiento por campo, consulta [Entradas no válidas en la configuración administrada](/docs/es/managed-settings#invalid-entries-in-managed-settings).2404Se aplica en v2.1.191 y posterior; antes de v2.1.221, se eliminaba cada entrada no válida. Para las demás claves administradas con tratamiento por campo, consulta [Entradas no válidas en la configuración administrada](/docs/es/managed-settings#invalid-entries-in-managed-settings).

2404 2405 


5681 5682 

5682Fuera de un repositorio git, un [hook `WorktreeCreate`](/docs/es/worktrees#non-git-version-control) que falla libera el bloqueo para que la sesión pueda editar el directorio de trabajo en su lugar; esa liberación requiere Claude Code v2.1.203 o posterior.5683Fuera de un repositorio git, un [hook `WorktreeCreate`](/docs/es/worktrees#non-git-version-control) que falla libera el bloqueo para que la sesión pueda editar el directorio de trabajo en su lugar; esa liberación requiere Claude Code v2.1.203 o posterior.

5683 5684 

5685<h3 id="worktree-location">

5686 `worktree.location`

5687</h3>

5688 

5689Elige la carpeta de una máquina remota donde las [sesiones SSH de Desktop](/docs/es/desktop#choose-where-ssh-session-worktrees-go) crean sus worktrees, en lugar de `<project-root>/.claude/worktrees/`. Solo la aplicación de escritorio lee esta clave: `--worktree`, la herramienta `EnterWorktree`, los subagentes aislados y las sesiones de fondo la ignoran. Requiere Claude Desktop v1.44121.0 o posterior.

5690 

5691* **Alcance**: [`Usuario`](#scopes), en `~/.claude/settings.json` en la máquina remota

5692* **Tipo**: cadena, una ruta absoluta o una que comience con `~/`

5693* **Predeterminado**: sin establecer, por lo que los worktrees se crean dentro del proyecto

5694 

5695Este ejemplo establece la carpeta en `~/worktrees`:

5696 

5697```json settings.json theme={null}

5698{

5699 "worktree": {

5700 "location": "~/worktrees"

5701 }

5702}

5703```

5704 

5705Una **carpeta de worktree** establecida en la conexión SSH en Desktop tiene prioridad. Si tu organización restringe qué carpetas pueden usar las sesiones, Desktop mantiene los worktrees dentro del proyecto.

5706 

5684<h2 id="remote-desktop-and-notifications">5707<h2 id="remote-desktop-and-notifications">

5685 Control remoto, escritorio y notificaciones5708 Control remoto, escritorio y notificaciones

5686</h2>5709</h2>


5813 `enableArtifact`5836 `enableArtifact`

5814</h3>5837</h3>

5815 5838 

5816Desactive la herramienta [Artifact](/docs/es/artifacts), que publica la salida de la sesión como una página web privada en claude.ai. Cuando desactiva la fila **Artifacts** en `/config`, Claude Code escribe esta clave en su configuración de usuario, por lo que normalmente no la edita a mano. Requiere Claude Code v2.1.196 o posterior.5839Desactiva la herramienta [Artifact](/docs/es/artifacts), que publica la salida de la sesión como una página web privada en claude.ai. Cuando desactivas la fila **Artifacts** en `/config`, Claude Code escribe esta clave en tu configuración de usuario, por lo que normalmente no la editas a mano.

5817 5840 

5818* **Scope**: [`Any file`](#scopes). Cada archivo puede desactivar la herramienta, y ninguno puede volver a activarla.5841* **Scope**: [`Any file`](#scopes). Cada archivo puede desactivar la herramienta, y ninguno puede volver a activarla.

5819* **Type**: Boolean5842* **Type**: Boolean


5920 `sshConfigs`5943 `sshConfigs`

5921</h3>5944</h3>

5922 5945 

5923Agregue conexiones SSH al menú desplegable del entorno [Desktop](/docs/es/desktop#pre-configure-ssh-connections-for-your-team). Los administradores lo usan para distribuir conexiones compartidas a un equipo. Las conexiones que define en la configuración administrada se muestran como administradas, por lo que los usuarios pueden seleccionarlas pero no pueden editarlas ni eliminarlas en la aplicación.5946Agrega conexiones SSH al menú desplegable de entornos de [Desktop](/docs/es/desktop#pre-configure-ssh-connections-for-your-team). Los administradores lo usan para distribuir conexiones compartidas a un equipo. Las conexiones que defines en la configuración administrada se muestran como administradas. Los usuarios pueden seleccionarlas y [establecer su propia **Worktree folder**](/docs/es/desktop#choose-where-ssh-session-worktrees-go) para ellas, pero no pueden editar nada más ni eliminarlas en la aplicación.

5924 5947 

5925* **Scope**: [`User or managed`](#scopes). La aplicación de escritorio lee esta clave. De forma predeterminada, lee las conexiones administradas desde [una fuente administrada](/docs/es/managed-settings#how-claude-code-combines-managed-sources).5948* **Scope**: [`User or managed`](#scopes). La aplicación de escritorio lee esta clave. De forma predeterminada, lee las conexiones administradas desde [una fuente administrada](/docs/es/managed-settings#how-claude-code-combines-managed-sources).

5926* **Type**: matriz de objetos, cada uno con `id`, `name` y `sshHost` requeridos y `sshPort` y `sshIdentityFile` opcionales5949* **Type**: matriz de objetos, cada uno con `id`, `name` y `sshHost` requeridos y `sshPort` y `sshIdentityFile` opcionales


6085 6108 

6086Restringe el tipo de cuenta con el que las personas pueden iniciar sesión. Establece `"claudeai"` para permitir solo cuentas de claude.ai, `"console"` para permitir solo cuentas de Claude Console, o `"gateway"` para enviar a las personas a un [cloud gateway](/docs/es/claude-apps-gateway) en lugar de un inicio de sesión propio de Anthropic. Los administradores lo establecen en la configuración administrada y lo combinan con [`forceLoginOrgUUID`](#forceloginorguuid) para mantener los inicios de sesión de claude.ai de los desarrolladores dentro de una organización. Si lo estableces en `"claudeai"` o `"console"` en cualquier archivo de configuración, Claude Code también deja de ofrecer el [inicio de sesión en Console sin clave](/docs/es/authentication#sign-in-without-an-api-key) en las sesiones a las que se aplica ese archivo.6109Restringe el tipo de cuenta con el que las personas pueden iniciar sesión. Establece `"claudeai"` para permitir solo cuentas de claude.ai, `"console"` para permitir solo cuentas de Claude Console, o `"gateway"` para enviar a las personas a un [cloud gateway](/docs/es/claude-apps-gateway) en lugar de un inicio de sesión propio de Anthropic. Los administradores lo establecen en la configuración administrada y lo combinan con [`forceLoginOrgUUID`](#forceloginorguuid) para mantener los inicios de sesión de claude.ai de los desarrolladores dentro de una organización. Si lo estableces en `"claudeai"` o `"console"` en cualquier archivo de configuración, Claude Code también deja de ofrecer el [inicio de sesión en Console sin clave](/docs/es/authentication#sign-in-without-an-api-key) en las sesiones a las que se aplica ese archivo.

6087 6110 

6088* **Scope**: [`Any file`](#scopes). Claude Code respeta `"gateway"` solo desde una fuente administrada en la máquina: `managed-settings.json`, el plist de macOS o el registro HKLM de Windows, o un auxiliar de políticas. Trata `"gateway"` como sin establecer en la configuración de usuario, de proyecto, local, HKCU y administrada por servidor, la misma regla que [`forceLoginGatewayUrl`](#forcelogingatewayurl).6111* **Scope**: [`Any file`](#scopes). Claude Code respeta `"gateway"` desde las mismas fuentes que [`forceLoginGatewayUrl`](#forcelogingatewayurl) y lo trata como sin establecer en cualquier otro lugar.

6089* **Type**: string, uno de:6112* **Type**: string, uno de:

6090 * `"claudeai"`: solo las cuentas de claude.ai pueden iniciar sesión6113 * `"claudeai"`: solo las cuentas de claude.ai pueden iniciar sesión

6091 * `"console"`: solo las cuentas de Claude Console pueden iniciar sesión6114 * `"console"`: solo las cuentas de Claude Console pueden iniciar sesión


6108 6131 

6109Establece la URL del gateway a la que se conecta la pantalla Cloud gateway de `/login`, para que las personas lleguen a tu [cloud gateway](/docs/es/claude-apps-gateway) sin escribir su dirección. La pantalla no tiene un campo de URL: con esta clave establecida, muestra la URL de tu gateway y se conecta cuando la persona presiona Intro; sin ella, le indica que se comunique con su administrador de TI.6132Establece la URL del gateway a la que se conecta la pantalla Cloud gateway de `/login`, para que las personas lleguen a tu [cloud gateway](/docs/es/claude-apps-gateway) sin escribir su dirección. La pantalla no tiene un campo de URL: con esta clave establecida, muestra la URL de tu gateway y se conecta cuando la persona presiona Intro; sin ella, le indica que se comunique con su administrador de TI.

6110 6133 

6111Esta clave o `forceLoginMethod: "gateway"` hace que la máquina sea solo de gateway, excepto para las sesiones que seleccionen un proveedor en la nube con `CLAUDE_CODE_USE_*`. `/login` entonces se abre en la pantalla Cloud gateway sin selector de método de inicio de sesión. Consulta [La política del administrador requiere un inicio de sesión en Cloud gateway](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) para ver qué sucede con un inicio de sesión propio de Anthropic que haya quedado o con una clave de API. Establece ambas claves para que la pantalla se conecte en lugar de mostrar un error.6134En la configuración administrada, esta clave o `forceLoginMethod: "gateway"` hace que la máquina sea solo de gateway, excepto para las sesiones que seleccionen un proveedor en la nube con `CLAUDE_CODE_USE_*`. `/login` entonces se abre en la pantalla Cloud gateway sin selector de método de inicio de sesión. Consulta [La política del administrador requiere un inicio de sesión en Cloud gateway](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) para ver qué sucede con un inicio de sesión propio de Anthropic que haya quedado o con una clave de API. Establece ambas claves para que la pantalla se conecte en lugar de mostrar un error.

6112 6135 

6113* **Scope**: [`Managed`](#scopes). Se lee solo desde una fuente en la máquina: `managed-settings.json`, el plist de macOS o el registro HKLM de Windows, o un auxiliar de políticas. Claude Code lo ignora en la configuración HKCU y en la administrada por servidor.6136* **Scope**: [`User or managed`](#scopes). Se lee desde una fuente administrada en la máquina: `managed-settings.json`, el plist de macOS o el registro HKLM de Windows, o un auxiliar de políticas. En una máquina sin ninguna de ellas, Claude Code v2.1.295 o posterior también lo lee desde la [configuración de usuario](/docs/es/claude-apps-gateway#set-the-gateway-url-in-user-settings). Claude Code lo ignora en la configuración HKCU y en la administrada por servidor.

6114* **Type**: string, una URL completa que incluya el esquema6137* **Type**: string, una URL completa que incluya el esquema

6115* **Default**: sin establecer, por lo que la pantalla Cloud gateway muestra un error que indica a las personas que se comuniquen con su administrador de TI6138* **Default**: sin establecer, por lo que la pantalla Cloud gateway muestra un error que indica a las personas que se comuniquen con su administrador de TI

6116 6139 


6140}6163}

6141```6164```

6142 6165 

6143Si una fuente administrada establece una matriz vacía, o un valor que Claude Code no puede analizar, Claude Code bloquea todos los inicios de sesión con un mensaje de configuración incorrecta.6166Si una fuente administrada establece una matriz vacía, o un valor que no es un string ni una matriz de strings, los usuarios que inician sesión con una cuenta de Anthropic no pueden iniciar Claude Code ni completar un inicio de sesión. Ven un mensaje que menciona `forceLoginOrgUUID` y les indica que se comuniquen con su administrador. En cambio, un [`policyHelper`](#policyhelper) que emite un valor del tipo incorrecto [hace fallar su ejecución](#helper-failures).

6144 6167 

6145Consulta [Restringir el inicio de sesión a tu organización](/docs/es/authentication#restrict-login-to-your-organization) para ver cómo trata Claude Code los inicios de sesión de Claude Console, las demás vías de inicio de sesión y las credenciales del entorno.6168Consulta [Restringir el inicio de sesión a tu organización](/docs/es/authentication#restrict-login-to-your-organization) para ver cómo trata Claude Code los inicios de sesión de Claude Console, las demás vías de inicio de sesión y las credenciales del entorno.

6146 6169 


6806 `copyFullResponse`6829 `copyFullResponse`

6807</h3>6830</h3>

6808 6831 

6809Haga que [`/copy`](/docs/es/commands) copie la respuesta completa cada vez, sin el selector que de otro modo muestra cuando la respuesta contiene bloques de código. Seleccionar **Siempre copiar respuesta completa** en ese selector establece esta clave en `true`. Aparece en `/config` como **Omitir el selector /copy**.6832Haz que [`/copy`](/docs/es/commands) copie la respuesta completa cada vez, sin mostrar el selector. Seleccionar **Siempre copiar respuesta completa** en ese selector establece esta clave en `true`. Aparece en `/config` como **Omitir el selector /copy**.

6810 6833 

6811* **Alcance**: [`Configuración global`](#scopes)6834* **Alcance**: [`Configuración global`](#scopes)

6812* **Tipo**: Booleano6835* **Tipo**: Booleano

6813 * `true`: `/copy` copia la respuesta completa sin mostrar el selector6836 * `true`: `/copy` copia la respuesta completa sin mostrar el selector

6814 * `false`: cuando la respuesta contiene bloques de código, `/copy` muestra un selector donde elige un bloque de código o la respuesta completa6837 * `false`: cuando la respuesta contiene bloques de código o citas en bloque, `/copy` muestra un selector donde eliges un bloque o la respuesta completa

6815* **Predeterminado**: `false`6838* **Predeterminado**: `false`

6816 6839 

6817```json ~/.claude.json theme={null}6840```json ~/.claude.json theme={null}


6903Con esta opción activada, el búfer que Claude Code abre se ve así, y solo el texto debajo de la línea del marcador se envía como su mensaje:6926Con esta opción activada, el búfer que Claude Code abre se ve así, y solo el texto debajo de la línea del marcador se envía como su mensaje:

6904 6927 

6905```text theme={null}6928```text theme={null}

6906# ─── Última respuesta de Claude (para referencia; eliminada al guardar) ───6929# ─── Claude's last response (for reference; removed on save) ───

6907# Agregué el bucle de reintentos a fetchUser en src/api.ts y una prueba6930# I added the retry loop to fetchUser in src/api.ts and a test

6908# para el caso de tiempo de espera. ¿Quiere que conecte el mismo reintento en6931# for the timeout case. Want me to wire the same retry into

6909# fetchOrders?6932# fetchOrders?

6910# ─── Escriba su respuesta debajo de esta línea ──────────────────────────6933# ─── Write your reply below this line ──────────────────────────

6911 6934 

6912Sí, y límitelo a tres intentos.6935Yes, and cap it at three attempts.

6913```6936```

6914 6937 

6915Claude Code mantiene las últimas 50 líneas de la respuesta y marca el corte con `# … (salida anterior truncada)`.6938Claude Code mantiene las últimas 50 líneas de la respuesta y marca el corte con `# … (earlier output truncated)`.

6916 6939 

6917Claude Code ignora esta clave en `settings.json`.6940Claude Code ignora esta clave en `settings.json`.

6918 6941 

skills.md +6 −6

Details

192 192 

193Claude Code carga skills de proyecto desde `.claude/skills/` en el directorio donde lo inicias y en cada directorio padre hasta la raíz del repositorio, por lo que iniciar en `packages/frontend/` aún recoge skills definidas en la raíz. Cuando [mueves la sesión con `/cd`](/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior, Claude Code añade las skills de proyecto del nuevo directorio.193Claude Code carga skills de proyecto desde `.claude/skills/` en el directorio donde lo inicias y en cada directorio padre hasta la raíz del repositorio, por lo que iniciar en `packages/frontend/` aún recoge skills definidas en la raíz. Cuando [mueves la sesión con `/cd`](/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior, Claude Code añade las skills de proyecto del nuevo directorio.

194 194 

195En una sesión que se ejecuta en un [git worktree](/docs/es/worktrees) vinculado, Claude Code busca directorios padre solo hasta la raíz del worktree. En Claude Code v2.1.277 o posterior, cuando el checkout del worktree no tiene directorio `.claude/skills` en su raíz, Claude Code carga las skills de proyecto del checkout principal en su lugar. Consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).195En una sesión que se ejecuta en un [git worktree](/docs/es/worktrees) vinculado que creaste con `--worktree` o `git worktree add`, Claude Code busca directorios padre solo hasta la raíz del worktree. En Claude Code v2.1.277 o posterior, cuando el checkout del worktree no tiene directorio `.claude/skills` en su raíz, Claude Code carga los skills de proyecto del checkout principal en su lugar. Consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).

196 196 

197Las skills en un directorio `.claude/skills/` debajo de donde iniciaste no cargan al inicio. Cargan la primera vez que Claude lee o edita un archivo en ese subdirectorio y permanecen disponibles para el resto de la sesión. Hasta entonces no aparecen en el menú `/` y no puedes invocarlas por nombre. Para cargarlas antes, ejecuta `/add-dir` con la ruta del subdirectorio, lo que requiere Claude Code v2.1.257 o posterior.197Los skills en un directorio `.claude/skills/` debajo de donde iniciaste no cargan al inicio. Cargan la primera vez que Claude lee o edita un archivo en ese subdirectorio y permanecen disponibles para el resto de la sesión. Hasta entonces no aparecen en el menú `/` y no puedes invocarlos por nombre. Para cargarlos antes, ejecuta `/add-dir` con la ruta del subdirectorio, lo que requiere Claude Code v2.1.257 o posterior. Para una sesión de worktree que inicias desde la aplicación de escritorio, consulta [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).

198 198 

199Cuando el nombre del directorio de una skill anidada coincide con el nombre de otra skill, ambas permanecen disponibles. Con una skill `deploy` en la raíz del repositorio y otra en `apps/web/.claude/skills/`:199Cuando el nombre del directorio de una skill anidada coincide con el nombre de otra skill, ambas permanecen disponibles. Con una skill `deploy` en la raíz del repositorio y otra en `apps/web/.claude/skills/`:

200 200 


235 235 

236Si una skill existe solo en `~/.claude/skills/` en tu máquina, Claude Code reporta que la skill no fue encontrada cuando una [rutina](/docs/es/routines) la invoca, porque cada ejecución de rutina comienza como una sesión en la nube nueva. Para hacer una skill personal disponible en estas sesiones:236Si una skill existe solo en `~/.claude/skills/` en tu máquina, Claude Code reporta que la skill no fue encontrada cuando una [rutina](/docs/es/routines) la invoca, porque cada ejecución de rutina comienza como una sesión en la nube nueva. Para hacer una skill personal disponible en estas sesiones:

237 237 

238* Para sesiones de Cowork y en la nube, habilita la skill para tu cuenta claude.ai.238* Para sesiones de Cowork y en la nube, habilita el skill para tu cuenta de claude.ai. [Algunas sesiones en un entorno autoalojado](/docs/es/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) no cargan los skills de tu cuenta.

239* Para sesiones en la nube, puedes en su lugar confirmar la skill en el `.claude/skills/` del repositorio. Los plugins declarados en el `.claude/settings.json` del repositorio y los plugins habilitados solo en tu configuración de usuario [no cargan en sesiones en la nube](/docs/es/cloud-environments#what-carries-over-from-your-setup).239* Para sesiones en la nube, puedes en su lugar confirmar la skill en el `.claude/skills/` del repositorio. Los plugins declarados en el `.claude/settings.json` del repositorio y los plugins habilitados solo en tu configuración de usuario [no cargan en sesiones en la nube](/docs/es/cloud-environments#what-carries-over-from-your-setup).

240 240 

241Las [tareas programadas de escritorio](/docs/es/desktop-scheduled-tasks) se ejecutan localmente en tu máquina, por lo que sí cargan `~/.claude/skills/`.241Las [tareas programadas de escritorio](/docs/es/desktop-scheduled-tasks) se ejecutan localmente en tu máquina, por lo que sí cargan `~/.claude/skills/`.


434| `when_to_use` | No | Contexto adicional para cuándo Claude debe invocar el skill, como frases desencadenantes o solicitudes de ejemplo. Se añade a `description` en el listado de skills y cuenta hacia el límite de 1.536 caracteres. |434| `when_to_use` | No | Contexto adicional para cuándo Claude debe invocar el skill, como frases desencadenantes o solicitudes de ejemplo. Se añade a `description` en el listado de skills y cuenta hacia el límite de 1.536 caracteres. |

435| `argument-hint` | No | Sugerencia mostrada durante el autocompletado para indicar argumentos esperados. Ejemplo: `[issue-number]` o `[filename] [format]`. |435| `argument-hint` | No | Sugerencia mostrada durante el autocompletado para indicar argumentos esperados. Ejemplo: `[issue-number]` o `[filename] [format]`. |

436| `arguments` | No | Argumentos posicionales nombrados para [`$name` substitution](#available-string-substitutions) en el contenido del skill. Acepta una cadena separada por espacios o una lista YAML. Los nombres se asignan a posiciones de argumentos en orden. |436| `arguments` | No | Argumentos posicionales nombrados para [`$name` substitution](#available-string-substitutions) en el contenido del skill. Acepta una cadena separada por espacios o una lista YAML. Los nombres se asignan a posiciones de argumentos en orden. |

437| `disable-model-invocation` | No | Establece en `true` para evitar que Claude cargue automáticamente este skill. Úsalo para flujos de trabajo que deseas activar manualmente con `/name`. También evita que el skill sea [precargado en subagentes](/docs/es/sub-agents#preload-skills-into-subagents). A partir de v2.1.196, también evita que el skill se ejecute cuando una [tarea programada](/docs/es/scheduled-tasks) se activa con el skill como su prompt. Por defecto: `false`. |437| `disable-model-invocation` | No | Establece en `true` para evitar que Claude cargue automáticamente este skill. Úsalo para flujos de trabajo que deseas activar manualmente con `/name`. También evita que el skill sea [precargado en subagentes](/docs/es/sub-agents#preload-skills-into-subagents) y que se ejecute cuando una [tarea programada](/docs/es/scheduled-tasks) se activa con el skill como su prompt. Por defecto: `false`. |

438| `user-invocable` | No | Establece en `false` cuando solo Claude debe invocar el skill: Claude Code lo oculta del menú `/` y no lo ejecuta cuando escribes `/name`. Úsalo para conocimiento de fondo que los usuarios no deben invocar directamente. Por defecto: `true`. |438| `user-invocable` | No | Establece en `false` cuando solo Claude debe invocar el skill: Claude Code lo oculta del menú `/` y no lo ejecuta cuando escribes `/name`. Úsalo para conocimiento de fondo que los usuarios no deben invocar directamente. Por defecto: `true`. |

439| `allowed-tools` | No | Herramientas que Claude puede usar sin pedir permiso durante el turno que invoca este skill. La concesión se borra cuando envías tu siguiente mensaje. Acepta una cadena separada por espacios o comas, o una lista YAML. Consulta [Pre-aprobar herramientas para un skill](#pre-approve-tools-for-a-skill). |439| `allowed-tools` | No | Herramientas que Claude puede usar sin pedir permiso durante el turno que invoca este skill. La concesión se borra cuando envías tu siguiente mensaje. Acepta una cadena separada por espacios o comas, o una lista YAML. Consulta [Pre-aprobar herramientas para un skill](#pre-approve-tools-for-a-skill). |

440| `disallowed-tools` | No | Herramientas eliminadas del grupo disponible de Claude mientras este skill está activo. Úsalo para skills autónomos que nunca deben llamar a ciertas herramientas, como `AskUserQuestion` para un bucle de fondo. Acepta una cadena separada por espacios o comas, o una lista YAML. La restricción se borra cuando envías tu siguiente mensaje. Como las reglas de denegación, el campo no puede eliminar [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior) mientras cualquier otra herramienta permanezca. |440| `disallowed-tools` | No | Herramientas eliminadas del grupo disponible de Claude mientras este skill está activo. Úsalo para skills autónomos que nunca deben llamar a ciertas herramientas, como `AskUserQuestion` para un bucle de fondo. Acepta una cadena separada por espacios o comas, o una lista YAML. La restricción se borra cuando envías tu siguiente mensaje. Como las reglas de denegación, el campo no puede eliminar [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior) mientras cualquier otra herramienta permanezca. |


528 528 

529Si este skill está instalado en `~/.claude/skills/render-chart/`, ambas ocurrencias de `${CLAUDE_SKILL_DIR}` se expanden a ese directorio. La regla `allowed-tools` luego coincide con el comando exacto que el cuerpo del skill le dice a Claude que ejecute, por lo que el script se ejecuta sin solicitar.529Si este skill está instalado en `~/.claude/skills/render-chart/`, ambas ocurrencias de `${CLAUDE_SKILL_DIR}` se expanden a ese directorio. La regla `allowed-tools` luego coincide con el comando exacto que el cuerpo del skill le dice a Claude que ejecute, por lo que el script se ejecuta sin solicitar.

530 530 

531La sustitución `${CLAUDE_PROJECT_DIR}` requiere Claude Code v2.1.196 o posterior.

532 

533Los argumentos indexados usan comillas de estilo shell, por lo que envuelve valores de varias palabras entre comillas para pasarlos como un único argumento. Por ejemplo, `/my-skill "hello world" second` hace que `$0` se expanda a `hello world` y `$1` a `second`. El marcador de posición `$ARGUMENTS` siempre se expande a la cadena de argumento completa tal como se escribió.531Los argumentos indexados usan comillas de estilo shell, por lo que envuelve valores de varias palabras entre comillas para pasarlos como un único argumento. Por ejemplo, `/my-skill "hello world" second` hace que `$0` se expanda a `hello world` y `$1` a `second`. El marcador de posición `$ARGUMENTS` siempre se expande a la cadena de argumento completa tal como se escribió.

534 532 

535Un marcador de posición indexado sin argumento correspondiente, como `$2` cuando solo se pasó un argumento, permanece en el contenido sin cambios. Un marcador de posición nombrado del frontmatter [`arguments`](#frontmatter-reference) sin argumento coincidente se expande a una cadena vacía.533Un marcador de posición indexado sin argumento correspondiente, como `$2` cuando solo se pasó un argumento, permanece en el contenido sin cambios. Un marcador de posición nombrado del frontmatter [`arguments`](#frontmatter-reference) sin argumento coincidente se expande a una cadena vacía.


843* Cuando invoca una skill bifurcada mientras una invocación anterior de la misma skill aún se está ejecutando841* Cuando invoca una skill bifurcada mientras una invocación anterior de la misma skill aún se está ejecutando

844* Cuando una [tarea programada](/docs/es/scheduled-tasks) se dispara con la skill como su prompt842* Cuando una [tarea programada](/docs/es/scheduled-tasks) se dispara con la skill como su prompt

845 843 

844Cuando un agente en un [flujo de trabajo dinámico](/docs/es/workflows) invoca un skill bifurcado, ese agente espera y recibe el resultado, incluso cuando el skill no establece `background: false`. Antes de v2.1.295, Claude Code no esperaba en este caso y, cuando el skill se ejecutaba en segundo plano, su resultado llegaba a tu conversación principal en lugar de llegar a ese agente.

845 

846Un fork en segundo plano también se ejecuta con el [conjunto de herramientas más estrecho que se aplica a los subagentes en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background): el subagente de la skill es un tipo de agente regular, por lo que la exención para subagentes que bifurcan la conversación no lo cubre. Si los pasos de su skill dependen de una herramienta fuera de ese conjunto, establezca `background: false` para mantener el conjunto completo de herramientas.846Un fork en segundo plano también se ejecuta con el [conjunto de herramientas más estrecho que se aplica a los subagentes en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background): el subagente de la skill es un tipo de agente regular, por lo que la exención para subagentes que bifurcan la conversación no lo cubre. Si los pasos de su skill dependen de una herramienta fuera de ese conjunto, establezca `background: false` para mantener el conjunto completo de herramientas.

847 847 

848Una skill bifurcada que se ejecuta en segundo plano aplica sus ediciones fuera de los [checkpoints](/docs/es/checkpointing) de su sesión, por lo que `/rewind` no las deshace; use git para revertirlas.848Una skill bifurcada que se ejecuta en segundo plano aplica sus ediciones fuera de los [checkpoints](/docs/es/checkpointing) de su sesión, por lo que `/rewind` no las deshace; use git para revertirlas.

sub-agents.md +4 −6

Details

237* **[Campos de frontmatter](#supported-frontmatter-fields)**: `description`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `omitClaudeMd`, e `isolation`.237* **[Campos de frontmatter](#supported-frontmatter-fields)**: `description`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `omitClaudeMd`, e `isolation`.

238* **Campos ignorados**: `color` y `experimental` no se aceptan aquí y se ignoran en lugar de rechazarse.238* **Campos ignorados**: `color` y `experimental` no se aceptan aquí y se ignoran en lugar de rechazarse.

239 239 

240Para lo que Claude Code hace con un valor que no puede cargar, y las banderas y variable de entorno que omiten esa verificación, consulte [`Configuración de --agents inválida`](/docs/es/errors#invalid-agents-configuration).240Para saber qué hace Claude Code con un valor que no puede cargar, y los flags y la variable de entorno que omiten esa verificación, consulta [`Invalid --agents configuration`](/docs/es/errors#invalid-agents-configuration).

241 241 

242**Los subagentes administrados** son implementados por administradores de la organización. Coloque archivos markdown en `.claude/agents/` dentro del [directorio de configuración administrada](/docs/es/managed-settings#delivery-mechanisms), usando el mismo formato de frontmatter que los subagentes de proyecto y usuario. Las definiciones administradas tienen precedencia sobre los subagentes de proyecto y usuario con el mismo nombre.242**Los subagentes administrados** son implementados por administradores de la organización. Coloque archivos markdown en `.claude/agents/` dentro del [directorio de configuración administrada](/docs/es/managed-settings#delivery-mechanisms), usando el mismo formato de frontmatter que los subagentes de proyecto y usuario. Las definiciones administradas tienen precedencia sobre los subagentes de proyecto y usuario con el mismo nombre.

243 243 


386* **El modelo de la conversación principal pertenece a esa familia**: el subagente se ejecuta en el modelo exacto de la conversación principal, incluyendo cualquier sufijo `[1m]`, por lo que obtiene la misma ventana de [contexto extendido](/docs/es/model-config#extended-context) que la conversación principal.386* **El modelo de la conversación principal pertenece a esa familia**: el subagente se ejecuta en el modelo exacto de la conversación principal, incluyendo cualquier sufijo `[1m]`, por lo que obtiene la misma ventana de [contexto extendido](/docs/es/model-config#extended-context) que la conversación principal.

387* **Claude Code no puede determinar la familia del modelo de la conversación principal, en [un proveedor distinto de la API de Anthropic](/docs/es/third-party-integrations)**: esto puede suceder con un [ARN de perfil de inferencia de aplicación](/docs/es/amazon-bedrock#iam-configuration) en Amazon Bedrock que Claude Code no ha resuelto a un modelo de respaldo. Este caso cubre solo el alias `opus`, y no se aplica cuando establece [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/es/model-config#environment-variables), ya que `opus` entonces se resuelve al modelo que establece.387* **Claude Code no puede determinar la familia del modelo de la conversación principal, en [un proveedor distinto de la API de Anthropic](/docs/es/third-party-integrations)**: esto puede suceder con un [ARN de perfil de inferencia de aplicación](/docs/es/amazon-bedrock#iam-configuration) en Amazon Bedrock que Claude Code no ha resuelto a un modelo de respaldo. Este caso cubre solo el alias `opus`, y no se aplica cuando establece [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/es/model-config#environment-variables), ya que `opus` entonces se resuelve al modelo que establece.

388 388 

389Un alias en `CLAUDE_CODE_SUBAGENT_MODEL` siempre se resuelve a la versión a la que apunta el alias, incluso cuando nombra la familia de la conversación principal.389Un alias en `CLAUDE_CODE_SUBAGENT_MODEL` siempre se resuelve en la versión a la que apunta el alias, incluso cuando nombra la familia de la conversación principal. Establecer la variable en `inherit` es lo mismo que dejarla sin establecer.

390 390 

391Establecer `CLAUDE_CODE_SUBAGENT_MODEL` por sí solo no cambia el modelo en el que se ejecutan los subagentes integrados Explore y Plan. Para cambiarlo, consulte [Ejecutar cada subagente en un modelo](#run-every-subagent-on-one-model).391Establecer `CLAUDE_CODE_SUBAGENT_MODEL` por sí solo no cambia el modelo en el que se ejecutan los subagentes integrados Explore y Plan. Para cambiarlo, consulte [Ejecutar cada subagente en un modelo](#run-every-subagent-on-one-model).

392 392 

393Antes de v2.1.251, `CLAUDE_CODE_SUBAGENT_MODEL` venía primero en este orden y anulaba tanto el parámetro por invocación como el frontmatter, incluyendo `model: inherit`.393Antes de v2.1.251, `CLAUDE_CODE_SUBAGENT_MODEL` venía primero en este orden y anulaba tanto el parámetro por invocación como el frontmatter, incluyendo `model: inherit`.

394 394 

395Establecer la variable en `inherit` es lo mismo que dejarla sin establecer. Antes de v2.1.196, ese valor forzaba subagentes al modelo de la conversación principal e ignoraba las otras fuentes.

396 

397Claude Code verifica el parámetro por invocación, frontmatter y valores de variable de entorno contra la lista de permitidos [`availableModels`](/docs/es/model-config#restrict-model-selection) de su organización. Para un valor bloqueado, sustituye otro modelo:395Claude Code verifica el parámetro por invocación, frontmatter y valores de variable de entorno contra la lista de permitidos [`availableModels`](/docs/es/model-config#restrict-model-selection) de su organización. Para un valor bloqueado, sustituye otro modelo:

398 396 

399* Cuando el valor bloqueado es un alias de familia como `opus`, Claude Code ejecuta el subagente en la versión más nueva de esa familia que la lista de permitidos permite, siguiendo las mismas [reglas de sustitución y alcance de proveedor](/docs/es/model-config#restrict-model-selection) que `/model`. Antes de v2.1.222, Claude Code ejecutaba el subagente en el modelo heredado para un alias de familia bloqueado también.397* Cuando el valor bloqueado es un alias de familia como `opus`, Claude Code ejecuta el subagente en la versión más nueva de esa familia que la lista de permitidos permite, siguiendo las mismas [reglas de sustitución y alcance de proveedor](/docs/es/model-config#restrict-model-selection) que `/model`. Antes de v2.1.222, Claude Code ejecutaba el subagente en el modelo heredado para un alias de familia bloqueado también.


620| `default` | Modo Manual: solicita permiso |618| `default` | Modo Manual: solicita permiso |

621| `acceptEdits` | Aceptar automáticamente ediciones de archivo y comandos comunes del sistema de archivos para rutas en el directorio de trabajo o `additionalDirectories` |619| `acceptEdits` | Aceptar automáticamente ediciones de archivo y comandos comunes del sistema de archivos para rutas en el directorio de trabajo o `additionalDirectories` |

622| `auto` | [Modo auto](/docs/es/permission-modes#eliminate-prompts-with-auto-mode): un clasificador de fondo revisa comandos y escrituras de directorio protegido |620| `auto` | [Modo auto](/docs/es/permission-modes#eliminate-prompts-with-auto-mode): un clasificador de fondo revisa comandos y escrituras de directorio protegido |

623| `dontAsk` | Denegar automáticamente solicitudes de permiso. Las herramientas explícitamente permitidas aún funcionan; `AskUserQuestion`, herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool), y herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code se deniegan incluso si las ha permitido |621| `dontAsk` | Deniega automáticamente las solicitudes de permiso. Las herramientas permitidas explícitamente siguen funcionando; `AskUserQuestion`, las herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool), las [lecturas desde rutas de red](/docs/es/permissions#network-paths) y las herramientas de conectores [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools), en sesiones donde ese ajuste llega a Claude Code, se deniegan incluso si las has permitido |

624| `bypassPermissions` | [Omitir solicitudes de permiso](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode). Un subagente se ejecuta en este modo solo cuando la conversación principal lo hace |622| `bypassPermissions` | [Omitir solicitudes de permiso](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode). Un subagente se ejecuta en este modo solo cuando la conversación principal lo hace |

625| `plan` | Modo plan (exploración de solo lectura) |623| `plan` | Modo plan (exploración de solo lectura) |

626 624 


1150* **Prompt del sistema**: el prompt propio del agente más detalles del entorno que Claude Code añade, no el prompt del sistema de Claude Code. Los subagentes personalizados definen el suyo en el [cuerpo markdown](#write-subagent-files) o el campo `prompt`. Los agentes integrados tienen prompts predefinidos.1148* **Prompt del sistema**: el prompt propio del agente más detalles del entorno que Claude Code añade, no el prompt del sistema de Claude Code. Los subagentes personalizados definen el suyo en el [cuerpo markdown](#write-subagent-files) o el campo `prompt`. Los agentes integrados tienen prompts predefinidos.

1151* **Mensaje de tarea**: el prompt de delegación que Claude escribe cuando entrega el trabajo.1149* **Mensaje de tarea**: el prompt de delegación que Claude escribe cuando entrega el trabajo.

1152* **Archivos CLAUDE.md**: cada nivel de la [jerarquía CLAUDE.md](/docs/es/memory#how-claude-md-files-load) que la conversación principal carga, incluyendo `~/.claude/CLAUDE.md`, reglas del proyecto, `CLAUDE.local.md`, archivos de política administrada, y cualquier archivo [`AGENTS.md`](/docs/es/memory#agents-md) cargado como instrucciones del proyecto. Los agentes integrados Explore y Plan omiten esto. Un subagente cuya definición establece [`omitClaudeMd`](#supported-frontmatter-fields) carga solo los archivos de política administrada, o ninguno en absoluto cuando la definición viene de la [configuración administrada](#choose-the-subagent-scope).1150* **Archivos CLAUDE.md**: cada nivel de la [jerarquía CLAUDE.md](/docs/es/memory#how-claude-md-files-load) que la conversación principal carga, incluyendo `~/.claude/CLAUDE.md`, reglas del proyecto, `CLAUDE.local.md`, archivos de política administrada, y cualquier archivo [`AGENTS.md`](/docs/es/memory#agents-md) cargado como instrucciones del proyecto. Los agentes integrados Explore y Plan omiten esto. Un subagente cuya definición establece [`omitClaudeMd`](#supported-frontmatter-fields) carga solo los archivos de política administrada, o ninguno en absoluto cuando la definición viene de la [configuración administrada](#choose-the-subagent-scope).

1153* **Estado de Git**: una instantánea que Claude Code lee de tu repositorio cuando el subagente comienza. Ausente fuera de un repositorio Git o siempre que la instantánea esté desactivada; consulta [`includeGitInstructions`](/docs/es/settings-reference#includegitinstructions). Explore y Plan la omiten independientemente.1151* **Estado de Git**: una instantánea que Claude Code lee de tu repositorio cuando el subagente comienza. Para un subagente en [su propio worktree](/docs/es/worktrees#isolate-subagents-with-worktrees) de ese repositorio, la instantánea muestra la rama, el estado y los commits recientes del worktree. Ausente fuera de un repositorio Git o siempre que la instantánea esté desactivada; consulta [`includeGitInstructions`](/docs/es/settings-reference#includegitinstructions). Explore y Plan la omiten independientemente.

1154* **Skills precargados**: contenido completo de cualquier skill nombrado en el campo [`skills`](#preload-skills-into-subagents) del agente. Los agentes integrados no precargan skills.1152* **Skills precargados**: contenido completo de cualquier skill nombrado en el campo [`skills`](#preload-skills-into-subagents) del agente. Los agentes integrados no precargan skills.

1155* **Roster de hermanos**: un [recordatorio del sistema](/docs/es/glossary#system-reminder) listando `main` y cada otro agente nombrado en la sesión, cada uno un valor `to` válido para [`SendMessage`](#resume-subagents). Requiere Claude Code v2.1.206 o posterior. El roster aparece solo cuando las herramientas del subagente incluyen `SendMessage` y al menos otro agente tiene un nombre, ya sea que Claude lo nombró al generarlo o se ejecuta como compañero de [equipo de agentes](/docs/es/agent-teams). Es una instantánea tomada cuando el subagente comienza, por lo que los agentes nombrados después no aparecen.1153* **Roster de hermanos**: un [recordatorio del sistema](/docs/es/glossary#system-reminder) listando `main` y cada otro agente nombrado en la sesión, cada uno un valor `to` válido para [`SendMessage`](#resume-subagents). Requiere Claude Code v2.1.206 o posterior. El roster aparece solo cuando las herramientas del subagente incluyen `SendMessage` y al menos otro agente tiene un nombre, ya sea que Claude lo nombró al generarlo o se ejecuta como compañero de [equipo de agentes](/docs/es/agent-teams). Es una instantánea tomada cuando el subagente comienza, por lo que los agentes nombrados después no aparecen.

1156 1154 

Details

122}122}

123```123```

124 124 

125<h2 id="see-session-status-in-your-terminal">

126 Ver el estado de la sesión en tu terminal

127</h2>

128 

129Si tu terminal implementa el OSC 7501 Program Status Protocol, puede mostrar si cada sesión interactiva de Claude Code está trabajando, esperándote o terminada, lo que ayuda cuando ejecutas tareas largas o varias sesiones a la vez. No hay nada que activar en Claude Code. Para saber si tu terminal implementa el protocolo y dónde muestra el estado, consulta su documentación.

130 

131Si la terminal sí implementa el protocolo y no ves ningún estado para una sesión, revisa cada una de estas causas:

132 

133* **Versión de Claude Code**: el reporte de estado requiere Claude Code v2.1.295 o posterior. Ejecuta `claude --version` en tu shell para comprobarlo.

134* **tmux**: dentro de tmux, Claude Code comprueba la compatibilidad en tmux en lugar de en tu terminal, y [`allow-passthrough`](#configure-tmux) no tiene efecto en eso. Inicia la sesión fuera de tmux.

135* **Sesión en segundo plano**: una [sesión en segundo plano](/docs/es/agent-view) no reporta su estado a tu terminal, incluso mientras estás conectado a ella. La vista de agentes muestra su estado en su lugar.

136* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](/docs/es/env-vars#variables)**: si estableces esta variable en `1`, Claude Code no comprueba la compatibilidad ni reporta el estado. Elimínala.

137 

125<h2 id="configure-tmux">138<h2 id="configure-tmux">

126 Configurar tmux139 Configurar tmux

127</h2>140</h2>

tools-reference.md +32 −11

Details

279 279 

280La herramienta Edit realiza reemplazo exacto de cadenas. Toma un `old_string` y un `new_string` y reemplaza el primero con el segundo. No utiliza expresiones regulares ni coincidencia aproximada.280La herramienta Edit realiza reemplazo exacto de cadenas. Toma un `old_string` y un `new_string` y reemplaza el primero con el segundo. No utiliza expresiones regulares ni coincidencia aproximada.

281 281 

282Deben pasar tres comprobaciones para que se aplique una edición. Antes de cualquiera de ellas, se rechaza una ruta coincidente con una [regla de denegación `Read`](/docs/es/permissions#tool-specific-permission-rules), incluida la creación de un archivo nuevo allí. El rechazo requiere Claude Code v2.1.208 o posterior.282Estas comprobaciones deben pasar para que se aplique una edición. Antes de cualquiera de ellas, se rechaza una ruta coincidente con una [regla de denegación `Read`](/docs/es/permissions#tool-specific-permission-rules), incluida la creación de un archivo nuevo allí. El rechazo requiere Claude Code v2.1.208 o posterior.

283 283 

284* **Read-before-edit**: Claude lee el archivo en la conversación actual antes de editarlo, y una lectura interrumpida con un aviso [`PARTIAL view`](#read-tool-behavior) no cuenta. Claude Opus 4.6, Claude Haiku 4.5 y modelos más antiguos siempre requieren la lectura. Los modelos más nuevos pueden editar un archivo no leído cuando leerlo no requeriría un aviso de permiso y la herramienta Read está disponible.284* **Read-before-edit**: Claude lee el archivo en la conversación actual antes de editarlo, y una lectura interrumpida con un aviso [`PARTIAL view`](#large-files) no cuenta. Claude Opus 4.6, Claude Haiku 4.5 y modelos más antiguos siempre requieren la lectura. Los modelos más nuevos pueden editar un archivo no leído cuando leerlo no requeriría una solicitud de permiso y la herramienta Read está disponible.

285* **Match**: `old_string` debe aparecer en el archivo exactamente como está escrito. Una sola diferencia de carácter de espacio en blanco o indentación es suficiente para no coincidir.285* **Match**: `old_string` debe aparecer en el archivo exactamente como está escrito. Una sola diferencia de carácter de espacio en blanco o indentación es suficiente para no coincidir.

286* **Uniqueness**: `old_string` debe aparecer exactamente una vez. Cuando aparece más de una vez, Claude proporciona una cadena más larga con suficiente contexto circundante para identificar una ocurrencia, o establece `replace_all: true` para reemplazarlas todas.286* **Uniqueness**: `old_string` debe aparecer exactamente una vez. Cuando aparece más de una vez, Claude proporciona una cadena más larga con suficiente contexto circundante para identificar una ocurrencia, o establece `replace_all: true` para reemplazarlas todas.

287 287 

288Un archivo que cambió en el disco después de que Claude lo leyó por última vez aún puede editarse cuando `old_string` coincide exactamente con el contenido actual de forma inequívoca y Claude Code puede leer el archivo sin solicitar permiso. La coincidencia con el contenido actual del archivo mantiene esto seguro, y el resultado indica que el archivo contiene otros cambios para que Claude lo vuelva a leer antes de ediciones que dependan del contenido circundante. En cualquier otro caso, como un `old_string` obsoleto o uno que coincida más de una vez sin `replace_all`, Claude lee el archivo nuevamente antes de editar. El manejo relajado de archivos no leídos y modificados requiere Claude Code v2.1.208 o posterior; antes de eso, Claude Code rechazaba cualquier edición a un archivo que no hubiera leído en la conversación o que hubiera cambiado en el disco después de la lectura.288Un archivo que cambió en el disco después de que Claude lo leyó por última vez aún puede editarse cuando `old_string` coincide exactamente con el contenido actual de forma inequívoca y Claude Code puede leer el archivo sin solicitar permiso. La coincidencia con el contenido actual del archivo mantiene esto seguro, y el resultado indica que el archivo contiene otros cambios para que Claude lo vuelva a leer antes de ediciones que dependan del contenido circundante. En cualquier otro caso, como un `old_string` obsoleto o uno que coincida más de una vez sin `replace_all`, Claude lee el archivo nuevamente antes de editar. El manejo relajado de archivos no leídos y modificados requiere Claude Code v2.1.208 o posterior; antes de eso, Claude Code rechazaba cualquier edición a un archivo que no hubiera leído en la conversación o que hubiera cambiado en el disco después de la lectura.

289 289 

290Ver un archivo con Bash también satisface el requisito de read-before-edit cuando el comando es `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, o `rg` en un único archivo sin tuberías o redirecciones. La salida canalizada y otros comandos Bash no cuentan hacia la comprobación de read-before-edit.290Claude también puede editar un archivo sin un Read por separado después de verlo con un comando Bash como `cat` o `grep`. Esos comandos son `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep` y `rg`, cada uno ejecutado en un único archivo sin tuberías ni redirecciones. Una búsqueda que no imprime coincidencias no cuenta como lectura, ni tampoco ningún comando fuera de esta lista.

291 291 

292Cuando Claude ve un archivo de esta manera, Claude Code también carga cualquier [`CLAUDE.md` de subdirectorio](/docs/es/memory#how-claude-md-files-load) y las [reglas con alcance de ruta](/docs/es/memory#path-specific-rules) que se apliquen a ese archivo. Consulta [Reglas de permisos Read y Edit](/docs/es/permissions#read-and-edit) para saber qué comandos Bash cubren tus reglas de denegación `Read` y `Edit`.292Cuando Claude ve un archivo de esta manera, Claude Code también carga cualquier [`CLAUDE.md` de subdirectorio](/docs/es/memory#how-claude-md-files-load) y las [reglas con alcance de ruta](/docs/es/memory#path-specific-rules) que se apliquen a ese archivo. Consulta [Reglas de permisos Read y Edit](/docs/es/permissions#read-and-edit) para saber qué comandos Bash cubren tus reglas de denegación `Read` y `Edit`.

293 293 

294<h3 id="non-utf-8-files">

295 Archivos que no son UTF-8

296</h3>

297 

298Claude no puede usar [NotebookEdit](#notebookedit-tool-behavior) en un archivo que no sea UTF-8 válido. Lo mismo ocurre con Edit, a menos que el archivo comience con una marca de orden de bytes UTF-16 little-endian. Cuando Claude lo intenta, la herramienta rechaza el cambio y deja el archivo intacto. Los archivos rechazados incluyen texto no ASCII guardado en una codificación heredada como Windows-1252 o Shift-JIS, archivos binarios y UTF-8 con una secuencia de bytes no válida.

299 

300Las herramientas lo rechazan porque guardan todo el archivo de nuevo como UTF-8, lo que reemplazaría cada byte que no pueden decodificar con el carácter de reemplazo `U+FFFD`. En su lugar, el [error que recibe Claude](/docs/es/errors#file-is-not-valid-utf-8) le indica que realice el cambio con un comando de shell que conserve la codificación del archivo, o que te pregunte si debe convertirlo primero a UTF-8.

301 

302Claude aún puede reemplazar un archivo así con Write, a menos que el contenido nuevo contenga `U+FFFD`, el carácter que Read le muestra a Claude en lugar de los bytes que no puede decodificar. Esa protección evita que Claude vuelva a escribir el texto corrupto que leyó. Cuando Write sí reemplaza el archivo, guarda el contenido nuevo como UTF-8, por lo que se pierde la codificación original del archivo.

303 

294<h2 id="endconversation-tool-behavior">304<h2 id="endconversation-tool-behavior">

295 Comportamiento de la herramienta EndConversation305 Comportamiento de la herramienta EndConversation

296</h2>306</h2>


455* `insert`: agrega una nueva celda después de la objetivo. Sin `cell_id`, la nueva celda va al inicio del cuaderno. Requiere `cell_type` establecido a `code` o `markdown`.465* `insert`: agrega una nueva celda después de la objetivo. Sin `cell_id`, la nueva celda va al inicio del cuaderno. Requiere `cell_type` establecido a `code` o `markdown`.

456* `delete`: elimina la celda objetivo.466* `delete`: elimina la celda objetivo.

457 467 

468NotebookEdit rechaza un archivo de cuaderno que no se decodifica como UTF-8, según la [misma regla que Edit](#non-utf-8-files), y no escribe nada.

469 

458Las reglas de permisos utilizan el formato de ruta `Edit(...)`. Una regla como `Edit(notebooks/**)` cubre llamadas de NotebookEdit en archivos en ese directorio.470Las reglas de permisos utilizan el formato de ruta `Edit(...)`. Una regla como `Edit(notebooks/**)` cubre llamadas de NotebookEdit en archivos en ese directorio.

459 471 

460<h2 id="powershell-tool">472<h2 id="powershell-tool">


514* `"shell": "powershell"` en [hooks de comando](/docs/es/hooks#command-hook-fields) individuales: ejecuta ese hook en PowerShell. Los hooks inician PowerShell directamente, por lo que esto funciona independientemente de `CLAUDE_CODE_USE_POWERSHELL_TOOL`.526* `"shell": "powershell"` en [hooks de comando](/docs/es/hooks#command-hook-fields) individuales: ejecuta ese hook en PowerShell. Los hooks inician PowerShell directamente, por lo que esto funciona independientemente de `CLAUDE_CODE_USE_POWERSHELL_TOOL`.

515* `shell: powershell` en [frontmatter de skill](/docs/es/skills#frontmatter-reference): ejecuta bloques `` !`command` `` en PowerShell. Requiere que la herramienta PowerShell esté habilitada.527* `shell: powershell` en [frontmatter de skill](/docs/es/skills#frontmatter-reference): ejecuta bloques `` !`command` `` en PowerShell. Requiere que la herramienta PowerShell esté habilitada.

516 528 

517El mismo comportamiento de reinicio del directorio de trabajo de la sesión principal descrito en la sección de la herramienta Bash se aplica a los comandos de PowerShell, incluida la variable de entorno `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR`.529Los comandos de PowerShell siguen el [mismo comportamiento de reinicio del directorio de trabajo de la sesión principal](#what-persists-between-commands) que los comandos de Bash, incluida la variable de entorno `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR`.

530 

531Los comandos de PowerShell también reciben las variables que los hooks persisten mediante `CLAUDE_ENV_FILE`, en las condiciones descritas en [Variables persistidas en comandos de PowerShell](/docs/es/hooks#persisted-variables-in-powershell-commands). Requiere Claude Code v2.1.296 o posterior.

518 532 

519El código de salida 1 de `grep`, `rg`, `egrep`, `fgrep`, `findstr` y `git grep` significa que no hay coincidencias. El código de salida 1 de `git diff` significa que existen diferencias. Ninguno de estos resultados se reporta a Claude como un error de comando. Para `robocopy`, los códigos de salida de 0 a 7 son resultados informativos, como archivos copiados o archivos adicionales detectados. Los códigos de salida de 8 o superior cuentan como errores.533El código de salida 1 de `grep`, `rg`, `egrep`, `fgrep`, `findstr` y `git grep` significa que no hay coincidencias. El código de salida 1 de `git diff` significa que existen diferencias. Ninguno de estos resultados se reporta a Claude como un error de comando. Para `robocopy`, los códigos de salida de 0 a 7 son resultados informativos, como archivos copiados o archivos adicionales detectados. Los códigos de salida de 8 o superior cuentan como errores.

520 534 


547 561 

548La herramienta Read toma una ruta de archivo y devuelve el contenido con números de línea. Claude recibe instrucciones para pasar siempre rutas absolutas.562La herramienta Read toma una ruta de archivo y devuelve el contenido con números de línea. Claude recibe instrucciones para pasar siempre rutas absolutas.

549 563 

550De forma predeterminada, Read devuelve el archivo desde el inicio. Cuando una lectura de archivo completo excede el límite de tokens, Read devuelve la primera página con un aviso de `PARTIAL view` que le indica a Claude cuánto del archivo recibió y cómo leer más con `offset` y `limit`. Una lectura que pasa un `offset` o `limit` explícito y aún así excede el límite de tokens devuelve un error.

551 

552Una lectura con un `limit` explícito se detiene tan pronto como las líneas seleccionadas excedan lo que el límite de tokens podría caber y devuelve un error sin cargar el resto del rango. El error le indica a Claude que use un `limit` más pequeño, o que busque contenido específico con [Grep](#grep-tool-behavior) en su lugar cuando una sola línea sea tan grande. Antes de v2.1.208, Claude Code cargaba todo el rango en memoria antes de rechazarlo, por lo que leer un archivo con una sola línea extremadamente larga podría agotar la memoria.

553 

554Leer un archivo vacío devuelve un aviso de que el archivo existe pero su contenido está vacío, y un `offset` más allá de la última línea devuelve un aviso que proporciona el recuento de líneas del archivo. Antes de v2.1.208, leer un archivo vacío devolvía el aviso de fin de archivo en su lugar.564Leer un archivo vacío devuelve un aviso de que el archivo existe pero su contenido está vacío, y un `offset` más allá de la última línea devuelve un aviso que proporciona el recuento de líneas del archivo. Antes de v2.1.208, leer un archivo vacío devolvía el aviso de fin de archivo en su lugar.

555 565 

556Read maneja varios tipos de archivo más allá del texto sin formato:566Read maneja varios tipos de archivo más allá del texto sin formato:

557 567 

558* **Imágenes**: PNG, JPG y otros formatos de imagen se devuelven como contenido visual que Claude puede ver, no como bytes sin procesar. Claude Code redimensiona y recomprime imágenes grandes para que se ajusten a los límites de tamaño de imagen del modelo antes de enviarlas, por lo que Claude puede ver una versión reducida de una captura de pantalla grande. Una imagen que sigue siendo más grande que 500KB después de ese redimensionamiento se recodifica como JPEG con calidad reducida con sus dimensiones de píxeles sin cambios. Si Claude pierde detalles a nivel de píxel fino en una imagen grande, pídele que primero recorte la región de interés, por ejemplo con ImageMagick a través de Bash.568* **Imágenes**: PNG, JPG y otros formatos de imagen se devuelven como contenido visual que Claude puede ver, no como bytes sin procesar. Claude Code redimensiona y recomprime imágenes grandes para que se ajusten a los límites de tamaño de imagen del modelo antes de enviarlas, por lo que Claude puede ver una versión reducida de una captura de pantalla grande. Una imagen que sigue siendo más grande que 500KB después de ese redimensionamiento se recodifica como JPEG con calidad reducida con sus dimensiones de píxeles sin cambios. Si Claude pierde detalles a nivel de píxel fino en una imagen grande, pídele que primero recorte la región de interés, por ejemplo con ImageMagick a través de Bash.

559* **PDFs**: Claude lee archivos `.pdf` cortos completos. Para PDFs más largos que 10 páginas, lee en rangos con un parámetro `pages`, como `"1-5"`, hasta 20 páginas a la vez. Las lecturas de rango de páginas renderizan páginas con `pdftoppm` de poppler-utils, así que instálelo con `brew install poppler` en macOS o `apt-get install poppler-utils` en Debian y Ubuntu. En Windows y otras plataformas, instale una compilación de poppler que ponga `pdftoppm` en su `PATH`. Sin él, una lectura de rango de páginas falla con `pdftoppm is not installed`.569* **PDFs**: Claude lee archivos `.pdf` cortos completos. Para PDFs más largos que 10 páginas, lee en rangos con un parámetro `pages`, como `"1-5"`, hasta 20 páginas a la vez. Las lecturas de rango de páginas renderizan páginas con `pdftoppm` de poppler-utils, así que instálelo con `brew install poppler` en macOS o `apt-get install poppler-utils` en Debian y Ubuntu. En Windows y otras plataformas, instale una compilación de poppler que ponga `pdftoppm` en su `PATH`. Sin él, una lectura de rango de páginas falla con `pdftoppm is not installed`.

560* **Cuadernos Jupyter**: Los archivos `.ipynb` devuelven todas las celdas con sus salidas, incluido código, markdown y visualizaciones. Claude Code se niega a leer un archivo de cuaderno de más de 100 MB; el error le indica a Claude cómo leer una porción del cuaderno en su lugar, como un segmento de celdas, con un comando de shell.570* **Cuadernos Jupyter**: Los archivos `.ipynb` devuelven todas las celdas con sus salidas, incluido código, markdown y visualizaciones. Un cuaderno cuyas celdas suman más de 256 KB, o más del [límite de tokens](#large-files), devuelve un error en su lugar. Claude Code se niega a leer un archivo de cuaderno de más de 100 MB; el error le indica a Claude cómo leer una porción del cuaderno en su lugar, como un segmento de celdas, con un comando de shell.

561 571 

562Read solo lee archivos, no directorios. Claude enumera el contenido del directorio con un comando de shell como `ls`.572Read solo lee archivos, no directorios. Claude enumera el contenido del directorio con un comando de shell como `ls`.

563 573 

574<h3 id="large-files">

575 Archivos grandes

576</h3>

577 

578Claude puede leer un archivo de texto más grande de lo que devuelve una sola llamada a Read. De forma predeterminada, una llamada devuelve como máximo 25,000 tokens, o el valor que establezcas en [`CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS`](/docs/es/env-vars), y rechaza un archivo completo de más de 256 KB, por lo que Claude lee un archivo más grande por páginas con `offset` y `limit`. En Claude Code v2.1.296 o posterior, en su lugar puede leer el archivo completo, o un rango de líneas largo, en una sola llamada estableciendo `allow_large: true` cuando lo necesite, por ejemplo porque pediste el archivo completo. Esa lectura se dimensiona según el espacio que queda en la [ventana de contexto](/docs/es/context-window) de la sesión en lugar de los límites predeterminados. Las imágenes, los PDFs y los cuadernos mantienen sus límites.

579 

580Lo que Claude recibe cuando una lectura supera los límites predeterminados:

581 

582* **Archivo completo que supera el límite de tokens**: la primera página del archivo, con un aviso de `PARTIAL view` que indica cuánto del archivo recibió y cómo leer más con `offset` y `limit`

583* **Archivo completo de más de 256 KB, o una lectura con `offset` o `limit` que supera el límite de tokens**: un error que le indica que lea una porción con `offset` y `limit`, o que busque contenido específico con [Grep](#grep-tool-behavior) en su lugar

584 

564<h2 id="sendfeedback-tool-behavior">585<h2 id="sendfeedback-tool-behavior">

565 Comportamiento de la herramienta SendFeedback586 Comportamiento de la herramienta SendFeedback

566</h2>587</h2>


734 Comportamiento de la herramienta Write755 Comportamiento de la herramienta Write

735</h2>756</h2>

736 757 

737La herramienta Write crea un archivo nuevo o sobrescribe uno existente con el contenido completo proporcionado. No añade ni fusiona.758La herramienta Write crea un archivo nuevo o sobrescribe uno existente con el contenido completo proporcionado. No añade ni fusiona. Write también sobrescribe un archivo existente cuyos bytes no se pueden decodificar y guarda el nuevo contenido como UTF-8, como se describe en [archivos que no son UTF-8](#non-utf-8-files).

738 759 

739Si Claude debe leer un archivo existente en la conversación actual antes de sobrescribirlo depende del modelo y del archivo:760Si Claude debe leer un archivo existente en la conversación actual antes de sobrescribirlo depende del modelo y del archivo:

740 761 

741* Claude Opus 4.6, Claude Haiku 4.5 y modelos más antiguos siempre requieren la lectura, por lo que una operación Write en un archivo existente no leído falla con un error.762* Claude Opus 4.6, Claude Haiku 4.5 y modelos más antiguos siempre requieren la lectura, por lo que una operación Write en un archivo existente no leído falla con un error.

742* Los modelos más nuevos pueden sobrescribir un archivo que nunca leyeron en esta sesión bajo las mismas condiciones que [read-before-edit](#edit-tool-behavior): leerlo no necesitaría un aviso de permiso y la herramienta Read está disponible.763* Los modelos más nuevos pueden sobrescribir un archivo que nunca leyeron en esta sesión bajo las mismas condiciones que [read-before-edit](#edit-tool-behavior): leerlo no necesitaría un aviso de permiso y la herramienta Read está disponible.

743* Los notebooks de Jupyter y los archivos que Claude ha leído solo parcialmente con un aviso [`PARTIAL view`](#read-tool-behavior) requieren la lectura en todos los modelos.764* Los notebooks de Jupyter y los archivos que Claude ha leído solo parcialmente con un [aviso `PARTIAL view`](#large-files) requieren la lectura en todos los modelos.

744 765 

745Esta restricción no se aplica a archivos nuevos. Antes de v2.1.228, todos los modelos requerían la lectura antes de sobrescribir un archivo existente.766Esta restricción no se aplica a archivos nuevos. Antes de v2.1.228, todos los modelos requerían la lectura antes de sobrescribir un archivo existente.

746 767 

Details

1212Si ves `API Error: 403 Request not allowed` después de iniciar sesión:1212Si ves `API Error: 403 Request not allowed` después de iniciar sesión:

1213 1213 

1214* **Usuarios de Claude Pro/Max**: verifica que tu suscripción esté activa en [claude.ai/settings](https://claude.ai/settings)1214* **Usuarios de Claude Pro/Max**: verifica que tu suscripción esté activa en [claude.ai/settings](https://claude.ai/settings)

1215* **Usuarios de Anthropic Console**: confirma que tu cuenta tiene el rol "Claude Code" o "Developer". Los administradores lo asignan en Anthropic Console, en Settings → Members.1215* **Usuarios de Anthropic Console**: confirma que tu cuenta tiene el rol "Claude Code" o "Developer". Los administradores lo asignan en la página Members de Console, en [platform.claude.com/settings/members](https://platform.claude.com/settings/members).

1216* **Detrás de un proxy**: los proxies corporativos pueden interferir con las solicitudes de API. Consulta [configuración de red](/docs/es/network-config) para la configuración del proxy.1216* **Detrás de un proxy**: los proxies corporativos pueden interferir con las solicitudes de API. Consulta [configuración de red](/docs/es/network-config) para la configuración del proxy.

1217 1217 

1218<h3 id="claude-code-access-has-not-been-granted-for-this-account">1218<h3 id="claude-code-access-has-not-been-granted-for-this-account">

vs-code.md +3 −2

Details

237 237 

238Para restaurar una sesión archivada, expanda **Archived sessions** y haga clic en **Unarchive session**. Para restaurar todas las sesiones archivadas a la vez, pase el cursor sobre el encabezado **Archived sessions** en la lista de sesiones en la Barra de actividades y haga clic en su icono de desarchivado, lo que requiere Claude Code v2.1.277 o posterior. Antes de v2.1.257, la acción era **Delete session**, que ocultaba una sesión sin forma de restaurarla. Las sesiones que eliminó aparecen bajo **Archived sessions** después de actualizar.238Para restaurar una sesión archivada, expanda **Archived sessions** y haga clic en **Unarchive session**. Para restaurar todas las sesiones archivadas a la vez, pase el cursor sobre el encabezado **Archived sessions** en la lista de sesiones en la Barra de actividades y haga clic en su icono de desarchivado, lo que requiere Claude Code v2.1.277 o posterior. Antes de v2.1.257, la acción era **Delete session**, que ocultaba una sesión sin forma de restaurarla. Las sesiones que eliminó aparecen bajo **Archived sessions** después de actualizar.

239 239 

240Cuando la conversación que reanuda terminó en modo plan, Claude Code restaura el modo plan. Requiere Claude Code v2.1.246 o posterior. Claude Code no lo restaura en dos casos:240Cuando la conversación que reanudas terminó en modo plan, Claude Code restaura el modo plan. Requiere Claude Code v2.1.246 o posterior. Claude Code no lo restaura en estos casos:

241 241 

242* La extensión [elige el modo de permiso inicial](/docs/es/permission-modes#switch-permission-modes) de `claudeCode.initialPermissionMode` o una selección que se transfiere de una conversación anterior242* La extensión [elige el modo de permiso inicial](/docs/es/permission-modes#switch-permission-modes) de `claudeCode.initialPermissionMode` o una selección que se transfiere de una conversación anterior

243* Tiene `claudeCode.claudeProcessWrapper` configurado243* Tiene `claudeCode.claudeProcessWrapper` configurado

244* Una [regla de denegación](/docs/es/permissions#manage-permissions) elimina la herramienta [`ExitPlanMode`](/docs/es/tools-reference)

244 245 

245<h3 id="resume-cloud-sessions-from-claude-ai">246<h3 id="resume-cloud-sessions-from-claude-ai">

246 Reanudar sesiones en la nube desde Claude.ai247 Reanudar sesiones en la nube desde Claude.ai


479 480 

480Claude abre nuevas pestañas para tareas del navegador y comparte el estado de inicio de sesión de tu navegador, por lo que puede acceder a cualquier sitio en el que ya hayas iniciado sesión.481Claude abre nuevas pestañas para tareas del navegador y comparte el estado de inicio de sesión de tu navegador, por lo que puede acceder a cualquier sitio en el que ya hayas iniciado sesión.

481 482 

482Para que cada sesión se conecte a tu navegador al iniciarse, sin escribir `@browser`, consulta [Habilitar Chrome de forma predeterminada](/docs/es/chrome#enable-chrome-by-default). Para saber qué ocurre cuando Claude Code te pide confirmación antes de una acción del navegador en una sesión conectada de esa forma, consulta [Solicitudes de permiso en sesiones de VS Code](/docs/es/chrome#permission-prompts-in-vs-code-sessions).483Para que cada sesión se conecte a tu navegador al iniciarse, sin escribir `@browser`, consulta [Habilitar Chrome de forma predeterminada](/docs/es/chrome#enable-chrome-by-default). Para saber qué ocurre cuando Claude Code te pide confirmación antes de una acción del navegador, consulta [Solicitudes de permiso en sesiones de VS Code](/docs/es/chrome#permission-prompts-in-vs-code-sessions).

483 484 

484Para obtener instrucciones de configuración, la lista completa de capacidades y solución de problemas, consulta [Usar Claude Code con Chrome](/docs/es/chrome).485Para obtener instrucciones de configuración, la lista completa de capacidades y solución de problemas, consulta [Usar Claude Code con Chrome](/docs/es/chrome).

485 486 

workflows.md +1 −1

Details

511* Verifique `/model` antes de una ejecución grande si generalmente cambia a un modelo más pequeño para trabajo rutinario511* Verifique `/model` antes de una ejecución grande si generalmente cambia a un modelo más pequeño para trabajo rutinario

512* Pida a Claude que use un modelo más pequeño para etapas que no necesitan el más fuerte cuando describe la tarea512* Pida a Claude que use un modelo más pequeño para etapas que no necesitan el más fuerte cuando describe la tarea

513 513 

514Cuando la lista de permitidos [`availableModels`](/docs/es/model-config#restrict-model-selection) de su organización bloquea un modelo que el script solicita para un agente, ese agente se ejecuta en un modelo sustituido en su lugar, siguiendo las mismas [reglas de sustitución que los subagentes](/docs/es/sub-agents#choose-a-model). La vista de progreso de la ejecución en [`/workflows`](#watch-the-run) muestra una advertencia que nombra tanto los modelos solicitados como los sustituidos.514Cuando la [lista de permitidos `availableModels`](/docs/es/model-config#restrict-model-selection) de tu organización bloquea un modelo que el script solicita para un agente, ese agente se ejecuta en un modelo sustituido en su lugar, siguiendo las mismas [reglas de sustitución que los subagentes](/docs/es/sub-agents#choose-a-model).

515 515 

516<h3 id="set-a-size-guideline">516<h3 id="set-a-size-guideline">

517 Establecer una directriz de tamaño517 Establecer una directriz de tamaño

worktrees.md +3 −1

Details

268 268 

269 La misma lectura de paso cubre `.claude/agents` y `.claude/commands`. Para skills, la lectura de paso requiere Claude Code v2.1.277 o posterior.269 La misma lectura de paso cubre `.claude/agents` y `.claude/commands`. Para skills, la lectura de paso requiere Claude Code v2.1.277 o posterior.

270 270 

271Todos estos se aplican si crea el worktree con `--worktree`, con `git worktree add`, o a través de la [aplicación de escritorio](/docs/es/desktop#work-in-parallel-with-sessions).271Todos estos se aplican tanto si creas el worktree con `--worktree` como con `git worktree add`.

272 

273En una sesión de worktree que inicias desde la [aplicación de escritorio](/docs/es/desktop#work-in-parallel-with-sessions), Claude Code lee la configuración del proyecto, como ajustes, hooks, skills, agentes, comandos y servidores de [`.mcp.json`](/docs/es/mcp#project-scope), desde la raíz del checkout principal en lugar de desde el worktree. Los comandos de los hooks se ejecutan en esa raíz, y `${CLAUDE_PROJECT_DIR}` apunta a ella. Para acceder a los archivos en los que Claude está trabajando, lee la ruta del worktree desde el [campo de entrada `cwd`](/docs/es/hooks#common-input-fields) del hook. Los archivos `CLAUDE.md` y `.claude/rules/` se siguen cargando desde el worktree.

272 274 

273<h2 id="manage-worktrees-manually">275<h2 id="manage-worktrees-manually">

274 Administre worktrees manualmente276 Administre worktrees manualmente