SpyBara
Go Premium

Documentation 2026-10-13 23:57 UTC to 2026-10-14 22:58 UTC

73 files changed +1,426 −778. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23: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

14 Activar el modo lector de pantalla14 Activar el modo lector de pantalla

15</h2>15</h2>

16 16 

17Elija el método que se ajuste a la frecuencia con la que utiliza un lector de pantalla:17Elige el método que se ajuste a la frecuencia con la que utilizas un lector de pantalla:

18 18 

19* Para una sesión: ejecute `claude --ax-screen-reader`.19* Para una sesión: ejecuta `claude --ax-screen-reader`.

20* Para sesiones iniciadas desde un shell: establezca la variable de entorno `CLAUDE_AX_SCREEN_READER` en `1`. En Bash o Zsh, ejecute `export CLAUDE_AX_SCREEN_READER=1`. En PowerShell, ejecute `$env:CLAUDE_AX_SCREEN_READER = "1"`. Agregue esa línea a su perfil de shell para mantenerla en shells futuros.20* Para sesiones iniciadas desde un shell: establece la variable de entorno `CLAUDE_AX_SCREEN_READER` en `1`. En Bash o Zsh, ejecuta `export CLAUDE_AX_SCREEN_READER=1`. En PowerShell, ejecuta `$env:CLAUDE_AX_SCREEN_READER = "1"`. Agrega esa línea a tu perfil de shell para mantenerla en shells futuros.

21* Para cada sesión en la máquina: agregue `"axScreenReader": true` a su [archivo de configuración](/docs/es/settings) de usuario. La configuración se aplica en cualquier terminal, incluida la terminal integrada de VS Code.21* Para cada sesión en la máquina: agrega `"axScreenReader": true` a tu [archivo de configuración](/docs/es/settings) de usuario. El ajuste se aplica en cualquier terminal, incluida la terminal integrada de VS Code.

22 22 

23Si combina métodos, Claude Code aplica la bandera [`--ax-screen-reader`](/docs/es/cli-reference#cli-flags) sobre la variable de entorno [`CLAUDE_AX_SCREEN_READER`](/docs/es/env-vars#variables), y la variable sobre la configuración [`axScreenReader`](/docs/es/settings-reference#axscreenreader).23Si combinas métodos, Claude Code aplica el flag [`--ax-screen-reader`](/docs/es/cli-reference#cli-flags) sobre la variable de entorno [`CLAUDE_AX_SCREEN_READER`](/docs/es/env-vars#variables), y la variable sobre el ajuste [`axScreenReader`](/docs/es/settings-reference#axscreenreader).

24 24 

25Si utiliza Claude Code a través de SSH, establezca la variable de entorno o la configuración en la máquina remota donde se ejecuta Claude Code.25Si utilizas Claude Code a través de SSH, establece la variable de entorno o el ajuste en la máquina remota donde se ejecuta Claude Code.

26 26 

27La primera línea que imprime Claude Code confirma el modo: `[Screen Reader Mode: on via flag]`, `[Screen Reader Mode: on via env]`, o `[Screen Reader Mode: on via settings]`.27La primera línea que imprime Claude Code confirma el modo: `[Screen Reader Mode: on via flag]`, `[Screen Reader Mode: on via env]`, o `[Screen Reader Mode: on via settings]`.

28 28 

Details

855 855 

856El estado de un servidor remoto también puede cambiar después de que reporta `"connected"`. Cuando la conexión a él se cae a mitad de sesión, Claude Code mueve el servidor de vuelta a `"pending"` mientras [se reconecta](/docs/es/mcp#automatic-reconnection). Una llamada posterior a `mcpServerStatus()` en TypeScript, o [`ClaudeSDKClient.get_mcp_status()`](/docs/es/agent-sdk/python#methods) en Python, puede entonces reportar `"pending"` para un servidor que vio conectado anteriormente, sin cambio de configuración de su parte.856El estado de un servidor remoto también puede cambiar después de que reporta `"connected"`. Cuando la conexión a él se cae a mitad de sesión, Claude Code mueve el servidor de vuelta a `"pending"` mientras [se reconecta](/docs/es/mcp#automatic-reconnection). Una llamada posterior a `mcpServerStatus()` en TypeScript, o [`ClaudeSDKClient.get_mcp_status()`](/docs/es/agent-sdk/python#methods) en Python, puede entonces reportar `"pending"` para un servidor que vio conectado anteriormente, sin cambio de configuración de su parte.

857 857 

858Después de que cinco intentos de reconexión fallen, el servidor reporta `"failed"`, o `"needs-auth"` cuando necesita ser autorizado nuevamente. Para reintentar manualmente, llame a [`reconnectMcpServer()`](/docs/es/agent-sdk/typescript#methods) en TypeScript o [`ClaudeSDKClient.reconnect_mcp_server()`](/docs/es/agent-sdk/python#methods) en Python.858Después de que cinco intentos de reconexión fallen, el servidor reporta `"failed"`, o `"needs-auth"` cuando necesita ser autorizado nuevamente. Un servidor HTTP o SSE en estado `"failed"` aún puede volver a `"connected"` sin que hagas ninguna llamada, porque Claude Code sigue [reintentando en segundo plano](/docs/es/mcp#mid-session-drops-of-a-remote-server) después de un error transitorio. Para reintentar manualmente, llama a [`reconnectMcpServer()`](/docs/es/agent-sdk/typescript#methods) en TypeScript o [`ClaudeSDKClient.reconnect_mcp_server()`](/docs/es/agent-sdk/python#methods) en Python.

859 859 

860<h2 id="troubleshooting">860<h2 id="troubleshooting">

861 Solución de problemas861 Solución de problemas

Details

424 Contexto que Claude Code añade fuera del mensaje del sistema424 Contexto que Claude Code añade fuera del mensaje del sistema

425</h2>425</h2>

426 426 

427Los recordatorios del sistema son mensajes que Claude Code añade a la conversación durante una sesión para proporcionar contexto a Claude, como el contenido de sus archivos CLAUDE.md o una nota de que un archivo cambió en el disco. Claude Code los envía en la conversación, no en el mensaje del sistema, por lo que llegan a Claude tanto si utiliza el preset `claude_code` como si pasa su propia cadena como `systemPrompt`.427Los recordatorios del sistema son mensajes que Claude Code añade a la conversación durante una sesión para proporcionar contexto a Claude, como el contenido de tus archivos CLAUDE.md o una nota de que un archivo cambió en el disco. Claude Code los envía en la conversación, no en el prompt del sistema, por lo que la mayoría llegan a Claude tanto si usas el preset `claude_code` como si pasas tu propia cadena como `systemPrompt`.

428 428 

429Esta sección cubre los [recordatorios más probables de cambiar cómo se comporta su agente](#reminders-claude-code-adds-to-the-conversation), cómo [desactivar los que su agente reemplaza](#turn-off-the-context-your-agent-replaces), y cómo [ver qué recibió Claude](#see-what-claude-received) en una solicitud específica.429Esta sección cubre los [recordatorios más probables de cambiar cómo se comporta su agente](#reminders-claude-code-adds-to-the-conversation), cómo [desactivar los que su agente reemplaza](#turn-off-the-context-your-agent-replaces), y cómo [ver qué recibió Claude](#see-what-claude-received) en una solicitud específica.

430 430 


467| Cada archivo CLAUDE.md | Establezca `CLAUDE_CODE_DISABLE_CLAUDE_MDS=1` |467| Cada archivo CLAUDE.md | Establezca `CLAUDE_CODE_DISABLE_CLAUDE_MDS=1` |

468| Empujones de lista de tareas, notas de archivo modificado y la lista de skills | Establezca `CLAUDE_CODE_DISABLE_ATTACHMENTS=1` |468| Empujones de lista de tareas, notas de archivo modificado y la lista de skills | Establezca `CLAUDE_CODE_DISABLE_ATTACHMENTS=1` |

469 469 

470Las instrucciones integradas de commit y solicitud de extracción de Claude Code no son un recordatorio. Son parte de la descripción de la herramienta Bash, por lo que también llegan a Claude cuando pasa un `systemPrompt` personalizado.470Establece `includeGitInstructions` en `false` para excluir las instrucciones integradas de commit y pull request, que forman parte de la descripción de la herramienta Bash y llegan a Claude incluso con un `systemPrompt` personalizado. Sin embargo, con el valor predeterminado mínimo, un `systemPrompt` personalizado o un agente personalizado del hilo principal que tenga su propio prompt, la sesión comienza sin la instantánea del estado de git.

471 471 

472Si establece `CLAUDE_CODE_DISABLE_ATTACHMENTS`, Claude Code también envía menciones de archivo `@` como texto sin formato en lugar de expandirlas en contenido de archivo. La lista de subagentes disponibles y las notificaciones de tareas en segundo plano aún llegan.472Si estableces `CLAUDE_CODE_DISABLE_ATTACHMENTS`, Claude Code también envía las menciones de archivo `@` como texto sin formato en lugar de expandirlas en contenido de archivo. La lista de subagentes disponibles y las notificaciones de tareas en segundo plano siguen llegando. Para evitar solo que se expandan las menciones de archivo `@`, establece en su lugar [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/es/env-vars#variables), en Claude Code v2.1.299 o posterior. Claude recibe entonces las rutas mencionadas junto con una nota para leerlas con sus herramientas de archivos.

473 473 

474El siguiente ejemplo es para un agente que lleva sus propias reglas de commit en `append`. Establece ambas claves de `attribution` en cadenas vacías para eliminar el trailer y el pie de página, y desactiva `includeGitInstructions` para que las instrucciones de flujo de trabajo de commit propias de Claude Code no compitan con las suyas:474El siguiente ejemplo es para un agente que lleva sus propias reglas de commit en `append`. Establece ambas claves de `attribution` en cadenas vacías para eliminar el trailer y el pie de página, y desactiva `includeGitInstructions` para que las instrucciones de flujo de trabajo de commit propias de Claude Code no compitan con las suyas:

475 475 

Details

164| `mcpServers` | `(string \| object)[]` | No | Servidores MCP disponibles para este agente, por nombre o configuración en línea |164| `mcpServers` | `(string \| object)[]` | No | Servidores MCP disponibles para este agente, por nombre o configuración en línea |

165| `initialPrompt` | `string` | No | Se envía automáticamente como el primer turno del usuario cuando este agente se ejecuta como el agente del hilo principal. Se ignora cuando el agente se invoca como subagente |165| `initialPrompt` | `string` | No | Se envía automáticamente como el primer turno del usuario cuando este agente se ejecuta como el agente del hilo principal. Se ignora cuando el agente se invoca como subagente |

166| `maxTurns` | `number` | No | Número máximo de turnos de agente antes de que el agente se detenga. Cuando el agente alcanza el límite, Claude Code devuelve su salida marcada como parcial, y puede [reanudar el agente](#resume-subagents) para continuar. La marca parcial requiere Claude Code v2.1.246 o posterior |166| `maxTurns` | `number` | No | Número máximo de turnos de agente antes de que el agente se detenga. Cuando el agente alcanza el límite, Claude Code devuelve su salida marcada como parcial, y puede [reanudar el agente](#resume-subagents) para continuar. La marca parcial requiere Claude Code v2.1.246 o posterior |

167| `autoCompactWindow` | `number` | No | Reduce la [ventana de compactación automática](/docs/es/sub-agents#subagent-auto-compact-window) de este agente cuando se ejecuta como subagente, a un recuento de tokens de `100000` a `1000000`. Requiere TypeScript Agent SDK v0.3.296 o posterior. El [`AgentDefinition`](/docs/es/agent-sdk/python#agentdefinition) del SDK de Python no tiene este campo |

167| `background` | `boolean` | No | Ejecutar este agente como una tarea de fondo no bloqueante cuando se invoque |168| `background` | `boolean` | No | Ejecutar este agente como una tarea de fondo no bloqueante cuando se invoque |

168| `omitClaudeMd` | `boolean` | No | Ejecutar este agente sin los archivos CLAUDE.md del usuario, proyecto y local cuando se ejecuta como subagente; los archivos de política administrados aún se cargan. Se ignora cuando el agente se ejecuta como el agente del hilo principal. Requiere TypeScript Agent SDK v0.3.271 o posterior. El SDK de Python [`AgentDefinition`](/docs/es/agent-sdk/python#agentdefinition) no tiene este campo |169| `omitClaudeMd` | `boolean` | No | Deja fuera del contexto inicial de este agente los archivos CLAUDE.md del usuario, del proyecto y locales; los archivos de política administrados aún se cargan. Se ignora cuando el agente se ejecuta como el agente del hilo principal. Requiere TypeScript Agent SDK v0.3.271 o posterior. El [`AgentDefinition`](/docs/es/agent-sdk/python#agentdefinition) del SDK de Python no tiene este campo |

169| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | No | Nivel de esfuerzo de razonamiento para este agente |170| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | No | Nivel de esfuerzo de razonamiento para este agente |

170| `permissionMode` | `PermissionMode` | No | Modo de permiso para la ejecución de herramientas dentro de este agente. Las [reglas de herencia de subagentes](/docs/es/agent-sdk/permissions#available-modes) deciden cuándo se aplica |171| `permissionMode` | `PermissionMode` | No | Modo de permiso para la ejecución de herramientas dentro de este agente. Las [reglas de herencia de subagentes](/docs/es/agent-sdk/permissions#available-modes) deciden cuándo se aplica |

171 172 


200| El subagente recibe | El subagente no recibe |201| El subagente recibe | El subagente no recibe |

201| :- | :- |202| :- | :- |

202| Su propio prompt del sistema (`AgentDefinition.prompt`) y el prompt de la herramienta Agent | El historial de conversación del padre o resultados de herramientas |203| Su propio prompt del sistema (`AgentDefinition.prompt`) y el prompt de la herramienta Agent | El historial de conversación del padre o resultados de herramientas |

203| Project CLAUDE.md (cargado a través de [`settingSources`](/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources)), a menos que el agente establezca [`omitClaudeMd`](#agentdefinition-configuration) | Contenido de skills precargado, a menos que esté listado en `AgentDefinition.skills` |204| CLAUDE.md del proyecto (cargado a través de [`settingSources`](/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources)). Un agente que establece [`omitClaudeMd`](#agentdefinition-configuration) comienza sin él | Contenido de skills precargado, a menos que esté listado en `AgentDefinition.skills` |

204| Definiciones de herramientas (heredadas del padre o el subconjunto en `tools`, [filtrado para ejecuciones en segundo plano](/docs/es/sub-agents#available-tools)) | El prompt del sistema del padre |205| Definiciones de herramientas (heredadas del padre o el subconjunto en `tools`, [filtrado para ejecuciones en segundo plano](/docs/es/sub-agents#available-tools)) | El prompt del sistema del padre |

205 206 

206<Note>207<Note>

Details

908 | "malformed"908 | "malformed"

909 | "not_honoured"909 | "not_honoured"

910 >;910 >;

911 claude_code_version?: string;

911};912};

912```913```

913 914 


922 923 

923El campo `sdkMcpServerManifests` de la solicitud y el campo `sdk_mcp_manifests_parked` de la respuesta son para los [servidores MCP del SDK](/docs/es/agent-sdk/custom-tools) en proceso que creaste con [`createSdkMcpServer()`](#createsdkmcpserver). Tu aplicación no establece ni lee ninguno de los dos campos.924El campo `sdkMcpServerManifests` de la solicitud y el campo `sdk_mcp_manifests_parked` de la respuesta son para los [servidores MCP del SDK](/docs/es/agent-sdk/custom-tools) en proceso que creaste con [`createSdkMcpServer()`](#createsdkmcpserver). Tu aplicación no establece ni lee ninguno de los dos campos.

924 925 

926`claude_code_version` es la versión de Claude Code del proceso que ejecuta los turnos de la sesión. Es el mismo valor que incluye el mensaje init [`SDKSystemMessage`](#sdksystemmessage), por lo que puedes leer la versión de la CLI antes del primer turno.

927 

928* El campo requiere Agent SDK v0.3.296 o posterior, que incluye Claude Code v2.1.296.

929* Si el campo es `undefined` y estableciste `pathToClaudeCodeExecutable`, apúntalo a Claude Code v2.1.296 o posterior.

930 

925La respuesta siempre informa `fast_mode_state` y, cuando algo bloquea el [modo rápido](/docs/es/fast-mode), `fast_mode_disabled_reason` lleva junto a él el código del motivo, para que puedas explicar el estado bloqueado en lugar de volver a deducir la disponibilidad. Ambos comportamientos requieren Claude Code v2.1.219 o posterior. Antes de v2.1.219, la respuesta omitía `fast_mode_state` cuando el modo rápido no estaba disponible y nunca incluía un motivo. Para conocer los códigos de motivo y sus significados, consulta [`fast_mode_disabled_reason`](#sdkresultmessage) en el mensaje de resultado.931La respuesta siempre informa `fast_mode_state` y, cuando algo bloquea el [modo rápido](/docs/es/fast-mode), `fast_mode_disabled_reason` lleva junto a él el código del motivo, para que puedas explicar el estado bloqueado en lugar de volver a deducir la disponibilidad. Ambos comportamientos requieren Claude Code v2.1.219 o posterior. Antes de v2.1.219, la respuesta omitía `fast_mode_state` cuando el modo rápido no estaba disponible y nunca incluía un motivo. Para conocer los códigos de motivo y sus significados, consulta [`fast_mode_disabled_reason`](#sdkresultmessage) en el mensaje de resultado.

926 932 

927El contenedor de la respuesta de control para un `initialize` exitoso también lleva un array `pending_permission_requests`. El campo está en el propio contenedor de la respuesta, no en el payload `SDKControlInitializeResponse` anterior. Cada entrada es un mensaje `control_request` completo con la misma forma `{ type: "control_request", request_id, request }` que la sesión transmite en streaming para las solicitudes de permiso mientras se ejecuta.933El contenedor de la respuesta de control para un `initialize` exitoso también lleva un array `pending_permission_requests`. El campo está en el propio contenedor de la respuesta, no en el payload `SDKControlInitializeResponse` anterior. Cada entrada es un mensaje `control_request` completo con la misma forma `{ type: "control_request", request_id, request }` que la sesión transmite en streaming para las solicitudes de permiso mientras se ejecuta.


1218 skills?: string[];1224 skills?: string[];

1219 initialPrompt?: string;1225 initialPrompt?: string;

1220 maxTurns?: number;1226 maxTurns?: number;

1227 autoCompactWindow?: number;

1221 background?: boolean;1228 background?: boolean;

1222 omitClaudeMd?: boolean;1229 omitClaudeMd?: boolean;

1223 memory?: "user" | "project" | "local";1230 memory?: "user" | "project" | "local";


1238| `skills` | No | Array de nombres de skills que se precargan en el contexto del agente |1245| `skills` | No | Array de nombres de skills que se precargan en el contexto del agente |

1239| `initialPrompt` | No | Se envía automáticamente como el primer turno del usuario cuando este agente se ejecuta como agente del hilo principal |1246| `initialPrompt` | No | Se envía automáticamente como el primer turno del usuario cuando este agente se ejecuta como agente del hilo principal |

1240| `maxTurns` | No | Número máximo de turnos agénticos (ciclos de ida y vuelta con la API) antes de detenerse |1247| `maxTurns` | No | Número máximo de turnos agénticos (ciclos de ida y vuelta con la API) antes de detenerse |

1248| `autoCompactWindow` | No | Reduce la [ventana de compactación automática](/docs/es/sub-agents#subagent-auto-compact-window) para este agente cuando se ejecuta como subagente, a un número de tokens entre `100000` y `1000000`. Requiere TypeScript Agent SDK v0.3.296 o posterior |

1241| `background` | No | Ejecuta este agente como una tarea en segundo plano no bloqueante cuando se invoca |1249| `background` | No | Ejecuta este agente como una tarea en segundo plano no bloqueante cuando se invoca |

1242| `omitClaudeMd` | No | Ejecuta este agente sin los archivos CLAUDE.md de usuario, de proyecto y locales cuando se ejecuta como subagente; los archivos de política administrada se siguen cargando. Úsalo para agentes que obtienen todo lo que necesitan del prompt de la herramienta Agent. Se ignora cuando este agente se ejecuta como agente del hilo principal. Requiere TypeScript Agent SDK v0.3.271 o posterior |1250| `omitClaudeMd` | No | Deja fuera del contexto inicial de este agente los archivos CLAUDE.md de usuario, de proyecto y locales; los archivos de política administrada se siguen cargando. Úsalo para agentes que obtienen todo lo que necesitan del prompt de la herramienta Agent. Se ignora cuando este agente se ejecuta como agente del hilo principal. Requiere TypeScript Agent SDK v0.3.271 o posterior |

1243| `memory` | No | Fuente de memoria para este agente: `'user'`, `'project'` o `'local'` |1251| `memory` | No | Fuente de memoria para este agente: `'user'`, `'project'` o `'local'` |

1244| `effort` | No | Nivel de esfuerzo de razonamiento para este agente. Acepta un nivel con nombre o un entero |1252| `effort` | No | Nivel de esfuerzo de razonamiento para este agente. Acepta un nivel con nombre o un entero |

1245| `permissionMode` | No | Modo de permisos para la ejecución de herramientas dentro de este agente. Las [reglas de herencia de subagentes](/docs/es/agent-sdk/permissions#available-modes) deciden cuándo se aplica. Consulta [`PermissionMode`](#permissionmode) |1253| `permissionMode` | No | Modo de permisos para la ejecución de herramientas dentro de este agente. Las [reglas de herencia de subagentes](/docs/es/agent-sdk/permissions#available-modes) deciden cuándo se aplica. Consulta [`PermissionMode`](#permissionmode) |


2434* `fromMode`: la clase de permisos de la sesión que envía, `bypass` o `prompting`, declarada por un host que retransmite un mensaje de par entre tus sesiones, como la [aplicación de escritorio](/docs/es/desktop#work-across-sessions). Claude Code lo lee en la sesión receptora cuando aplica los [controles de mensajes entrantes](/docs/es/cross-session-messaging#control-inbound-messages). Requiere Agent SDK v0.3.234 o posterior.2442* `fromMode`: la clase de permisos de la sesión que envía, `bypass` o `prompting`, declarada por un host que retransmite un mensaje de par entre tus sesiones, como la [aplicación de escritorio](/docs/es/desktop#work-across-sessions). Claude Code lo lee en la sesión receptora cuando aplica los [controles de mensajes entrantes](/docs/es/cross-session-messaging#control-inbound-messages). Requiere Agent SDK v0.3.234 o posterior.

2435* `senderTaskId`: el ID de tarea del compañero de equipo. Ausente en el caso de un par entre sesiones.2443* `senderTaskId`: el ID de tarea del compañero de equipo. Ausente en el caso de un par entre sesiones.

2436* `name`: el nombre para mostrar del remitente, normalizado por Claude Code: elimina los puntos de código Unicode de control, de formato, sustitutos y separadores de línea o de párrafo, luego recorta el resultado y lo limita a 64 puntos de código con puntos suspensivos. Requiere Claude Code v2.1.205 o posterior.2444* `name`: el nombre para mostrar del remitente, normalizado por Claude Code: elimina los puntos de código Unicode de control, de formato, sustitutos y separadores de línea o de párrafo, luego recorta el resultado y lo limita a 64 puntos de código con puntos suspensivos. Requiere Claude Code v2.1.205 o posterior.

2437* `body`: el cuerpo decodificado del mensaje sin el envoltorio de par, idéntico byte a byte a lo que ve el modelo. Siempre presente en un mensaje de un compañero de equipo; en el caso de un par entre sesiones, presente solo cuando el turno es exactamente un envoltorio de par formado por Claude Code. Renderiza `name` y `body` en lugar de volver a analizar el texto del mensaje. Requiere Claude Code v2.1.205 o posterior.2445* `body`: el cuerpo del mensaje decodificado sin el sobre peer, idéntico byte a byte a lo que ve el modelo. Presente en un único mensaje de compañero de equipo, ausente cuando se combinan varios; en el caso de un par entre sesiones, presente solo cuando el turno es exactamente un sobre peer formado por Claude Code. Muestra `name` y `body` en lugar de volver a analizar el texto del mensaje. Antes de la v2.1.299, los mensajes combinados conservaban el `body` del primer mensaje. Requiere Claude Code v2.1.205 o posterior.

2438* `fromSession`: el ID de sesión del remitente que su host puede abrir, establecido por el host del remitente para que tu interfaz pueda enlazar de vuelta a la sesión que envió el mensaje. Al igual que `from`, lo afirma el remitente: úsalo solo como destino de navegación y no lo trates como prueba de la identidad del remitente. Requiere Claude Code v2.1.216 o posterior.2446* `fromSession`: el ID de sesión del remitente que su host puede abrir, establecido por el host del remitente para que tu interfaz pueda enlazar de vuelta a la sesión que envió el mensaje. Al igual que `from`, lo afirma el remitente: úsalo solo como destino de navegación y no lo trates como prueba de la identidad del remitente. Requiere Claude Code v2.1.216 o posterior.

2439* `verifiedPeerPid`: el ID del proceso que se conectó al socket de mensajería entre sesiones de esta sesión, verificado por el kernel y leído de la propia conexión, nunca del payload. Úsalo, y no `from`, para identificar al remitente: cualquier proceso del mismo usuario puede falsificar `from`. El campo está ausente cuando Claude Code no puede verificarlo, como en Windows o en entradas que no llegan por socket, así que un valor ausente significa que el remitente no está verificado. En el tráfico retransmitido identifica al relay en lugar del autor del mensaje, y los ID de proceso se reutilizan, así que trátalo como procedencia y no como un token de autenticación. Requiere Claude Code v2.1.216 o posterior.2447* `verifiedPeerPid`: el ID del proceso que se conectó al socket de mensajería entre sesiones de esta sesión, verificado por el kernel y leído de la propia conexión, nunca del payload. Úsalo, y no `from`, para identificar al remitente: cualquier proceso del mismo usuario puede falsificar `from`. El campo está ausente cuando Claude Code no puede verificarlo, como en Windows o en entradas que no llegan por socket, así que un valor ausente significa que el remitente no está verificado. En el tráfico retransmitido identifica al relay en lugar del autor del mensaje, y los ID de proceso se reutilizan, así que trátalo como procedencia y no como un token de autenticación. Requiere Claude Code v2.1.216 o posterior.

2440 2448 


3443 offset?: number;3451 offset?: number;

3444 limit?: number;3452 limit?: number;

3445 pages?: string;3453 pages?: string;

3454 allow_large?: boolean;

3446};3455};

3447```3456```

3448 3457 

3449Lee archivos del sistema de archivos local, incluyendo texto, imágenes, PDFs y cuadernos Jupyter. Usa `pages` para rangos de páginas PDF (por ejemplo, `"1-5"`).3458Lee archivos del sistema de archivos local, incluyendo texto, imágenes, PDFs y cuadernos Jupyter.

3459 

3460* Usa `pages` para rangos de páginas PDF (por ejemplo, `"1-5"`).

3461* `allow_large` permite que Claude lea un archivo de texto más allá de los [límites de tamaño habituales](/docs/es/tools-reference#large-files) cuando la ventana de contexto de la sesión tiene espacio. Requiere Agent SDK v0.3.296 o posterior, que incluye Claude Code v2.1.296.

3450 3462 

3451Para un PDF, Claude recibe el contenido del archivo dentro del contenido `tool_result` de la llamada Read. Una lectura que devuelve la [salida](#tool-output-types) `pdf` lleva un bloque `text` de resumen seguido de un bloque `document`. Una que devuelve la salida `parts` lleva el bloque `text` de resumen seguido de un bloque por página extraída: un bloque `image`, o un bloque `text` nombrando la página cuando Claude Code no pudo renderizarla como imagen. Antes de Agent SDK v0.3.242, Claude Code entregaba el contenido del archivo como un mensaje `user` separado después del resultado de la herramienta.3463Para un PDF, Claude recibe el contenido del archivo dentro del contenido `tool_result` de la llamada Read. Una lectura que devuelve la [salida](#tool-output-types) `pdf` lleva un bloque `text` de resumen seguido de un bloque `document`. Una que devuelve la salida `parts` lleva el bloque `text` de resumen seguido de un bloque por página extraída: un bloque `image`, o un bloque `text` nombrando la página cuando Claude Code no pudo renderizarla como imagen. Antes de Agent SDK v0.3.242, Claude Code entregaba el contenido del archivo como un mensaje `user` separado después del resultado de la herramienta.

3452 3464 

agent-teams.md +2 −1

Details

271| **Lista de tareas** | Lista compartida de elementos de trabajo que los compañeros de equipo reclaman y completan |271| **Lista de tareas** | Lista compartida de elementos de trabajo que los compañeros de equipo reclaman y completan |

272| **Buzón** | Sistema de mensajería para la comunicación entre agentes |272| **Buzón** | Sistema de mensajería para la comunicación entre agentes |

273 273 

274El buzón de cada agente es un archivo JSON en `~/.claude/teams/{team-name}/inboxes/{agent-name}.json`. Claude Code valida cada entrada cuando lee un archivo de buzón. Las entradas que no coinciden con el formato de mensaje se reportan como errores y se eliminan del archivo; los mensajes válidos aún se entregan. Antes de v2.1.207, una única entrada de buzón malformada causaba un error repetido cada segundo y bloqueaba la entrega para ese buzón hasta que eliminara el archivo manualmente.274El buzón de cada agente es un archivo JSON en `~/.claude/teams/{team-name}/inboxes/{agent-name}.json`. Claude Code valida cada entrada cuando lee un archivo de buzón. Las entradas que no coinciden con el formato de mensaje se reportan como errores y se eliminan del archivo; los mensajes válidos aún se entregan.

275 275 

276Claude Code reporta un mensaje como enviado solo cuando la escritura en el archivo de buzón del destinatario tiene éxito, ya sea que el mensaje sea texto sin formato o un mensaje de protocolo estructurado como una aprobación de plan o una solicitud de cierre. Cuando la escritura falla, por ejemplo porque el disco está lleno o el directorio de buzón no es escribible, el agente que envía recibe un error y nada se envía. Consulte [No se pudo escribir en la bandeja de entrada de un compañero de equipo](/docs/es/errors#failed-to-write-to-a-teammate-inbox) para los mensajes de error y los pasos de recuperación.276Claude Code reporta un mensaje como enviado solo cuando la escritura en el archivo de buzón del destinatario tiene éxito, ya sea que el mensaje sea texto sin formato o un mensaje de protocolo estructurado como una aprobación de plan o una solicitud de cierre. Cuando la escritura falla, por ejemplo porque el disco está lleno o el directorio de buzón no es escribible, el agente que envía recibe un error y nada se envía. Consulte [No se pudo escribir en la bandeja de entrada de un compañero de equipo](/docs/es/errors#failed-to-write-to-a-teammate-inbox) para los mensajes de error y los pasos de recuperación.

277 277 


310* **`model`**: Claude Code usa el `model` de la definición en cualquier modo de visualización cuando su solicitud de generación no nombra uno. Consulte [cómo Claude Code elige el modelo de un compañero de equipo](#specify-teammates-and-models).310* **`model`**: Claude Code usa el `model` de la definición en cualquier modo de visualización cuando su solicitud de generación no nombra uno. Consulte [cómo Claude Code elige el modelo de un compañero de equipo](#specify-teammates-and-models).

311* **`disallowedTools`**: para un compañero de equipo en proceso, Claude Code quita del conjunto del compañero de equipo las herramientas en el `disallowedTools` de la definición. `SendMessage` y las herramientas Task que agrega siguen disponibles incluso cuando la lista las nombra.311* **`disallowedTools`**: para un compañero de equipo en proceso, Claude Code quita del conjunto del compañero de equipo las herramientas en el `disallowedTools` de la definición. `SendMessage` y las herramientas Task que agrega siguen disponibles incluso cuando la lista las nombra.

312* **`effort`**: para un compañero de equipo en proceso, Claude Code aplica el [`effort`](/docs/es/sub-agents#supported-frontmatter-fields) de la definición según las [reglas de esfuerzo del frontmatter](/docs/es/model-config#set-the-effort-level).312* **`effort`**: para un compañero de equipo en proceso, Claude Code aplica el [`effort`](/docs/es/sub-agents#supported-frontmatter-fields) de la definición según las [reglas de esfuerzo del frontmatter](/docs/es/model-config#set-the-effort-level).

313* **`autoCompactWindow`**: para un compañero de equipo en proceso, Claude Code aplica el [`autoCompactWindow`](/docs/es/sub-agents#supported-frontmatter-fields) de la definición según [las reglas de ese campo](/docs/es/sub-agents#subagent-auto-compact-window). Un compañero de equipo de panel dividido ignora el campo. Requiere Claude Code v2.1.296 o posterior.

313* **Body**: para un compañero de equipo en proceso, Claude Code agrega el cuerpo de la definición a su solicitud de sistema predeterminada como instrucciones adicionales. Para un compañero de equipo de panel dividido, Claude Code usa el cuerpo en lugar de su solicitud de sistema predeterminada.314* **Body**: para un compañero de equipo en proceso, Claude Code agrega el cuerpo de la definición a su solicitud de sistema predeterminada como instrucciones adicionales. Para un compañero de equipo de panel dividido, Claude Code usa el cuerpo en lugar de su solicitud de sistema predeterminada.

314* **`skills`**: Claude Code no aplica los `skills` de la definición a un compañero de equipo en ningún modo de visualización. El compañero de equipo carga skills de su configuración de proyecto y usuario.315* **`skills`**: Claude Code no aplica los `skills` de la definición a un compañero de equipo en ningún modo de visualización. El compañero de equipo carga skills de su configuración de proyecto y usuario.

315* **`mcpServers`**: para un compañero de equipo de panel dividido, Claude Code aplica el `mcpServers` de la definición bajo las [reglas para ese campo](/docs/es/sub-agents#scope-mcp-servers-to-a-subagent), que cubren una sesión iniciada con `--agent` también. Un compañero de equipo en proceso ignora el campo y carga servidores MCP de su configuración de proyecto y usuario.316* **`mcpServers`**: para un compañero de equipo de panel dividido, Claude Code aplica el `mcpServers` de la definición bajo las [reglas para ese campo](/docs/es/sub-agents#scope-mcp-servers-to-a-subagent), que cubren una sesión iniciada con `--agent` también. Un compañero de equipo en proceso ignora el campo y carga servidores MCP de su configuración de proyecto y usuario.

agent-view.md +18 −18

Details

26 Inicio rápido26 Inicio rápido

27</h2>27</h2>

28 28 

29Este tutorial cubre el bucle principal de la vista de agentes: distribuir una tarea, observar cómo se actualiza su fila mientras Claude trabaja, echar un vistazo para verificar y responder, y conectarse para la conversación completa. La sesión que distribuye sigue ejecutándose después de cerrar la vista de agentes, por lo que puede irse y volver a ella.29Este tutorial cubre el bucle principal de la vista de agentes: distribuir una tarea, observar cómo se actualiza su fila mientras Claude trabaja, echar un vistazo para verificar y responder, y conectarte para ver la conversación completa. La sesión que distribuyes sigue ejecutándose después de cerrar la vista de agentes, por lo que puedes irte y volver a ella.

30 30 

31<Steps>31<Steps>

32 <Step title="Abrir la vista de agentes">32 <Step title="Abrir la vista de agentes">

33 Desde su shell, ejecute:33 Desde tu shell, ejecuta:

34 34 

35 ```bash theme={null}35 ```bash theme={null}

36 claude agents36 claude agents

37 ```37 ```

38 38 

39 Si aún no ha aceptado el [diálogo de confianza del espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust) para el directorio, Claude Code lo muestra antes de que se abra la vista de agentes, el mismo diálogo que muestra `claude`. Acepte para guardar la confianza del espacio de trabajo y continuar. Si rechaza, Claude Code se cierra sin abrir la vista de agentes.39 Si aún no has aceptado el [diálogo de confianza del espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust) para el directorio, Claude Code lo muestra antes de que se abra la vista de agentes, el mismo diálogo que muestra `claude`. Acepta para guardar la confianza del espacio de trabajo y continuar. Si rechazas, Claude Code se cierra sin abrir la vista de agentes.

40 40 

41 La vista de agentes se abre con una entrada en la parte inferior y una tabla que se completa a medida que comienzan las sesiones. Presione `Esc` para volver a su shell; si abrió la vista de agentes poniendo una sesión en segundo plano con `←`, `Esc` vuelve a esa conversación en su lugar. Sus sesiones siguen ejecutándose mientras está fuera y reaparecen la próxima vez que abra la vista de agentes.41 La vista de agentes se abre con una entrada en la parte inferior y una tabla que se completa a medida que comienzan las sesiones. Presiona `Esc` para volver a tu shell; si abriste la vista de agentes enviando una sesión al segundo plano con `←`, `Esc` vuelve a esa conversación en su lugar. Tus sesiones siguen ejecutándose mientras no estás y reaparecen la próxima vez que abras la vista de agentes.

42 </Step>42 </Step>

43 43 

44 <Step title="Distribuir una sesión">44 <Step title="Distribuir una sesión">

45 Escriba un mensaje describiendo una tarea y presione `Enter`. Una nueva sesión en segundo plano comienza en esa tarea y aparece como una fila que muestra si está funcionando, esperando su entrada o está hecha. La nueva sesión utiliza el modelo mostrado en el encabezado de la vista de agentes. [El modo de permisos en el que comienza](#permission-mode-model-and-effort) depende de cómo abrió la vista de agentes.45 Escribe un prompt que describa una tarea y presiona `Enter`. Una nueva sesión en segundo plano comienza con esa tarea y aparece como una fila que muestra si está trabajando, esperándote o terminada. La nueva sesión utiliza el modelo que se muestra en el encabezado de la vista de agentes. [El modo de permisos en el que comienza](#permission-mode-model-and-effort) depende de cómo abriste la vista de agentes.

46 46 

47 Cada mensaje que ingrese aquí inicia su propia sesión nueva. Escribir otro mensaje y presionar `Enter` lanza una segunda sesión junto a la primera en lugar de enviar una continuación a ella. Puede ejecutar varias en paralelo de esta manera.47 Cada prompt que ingresas aquí inicia su propia sesión nueva. Escribir otro prompt y presionar `Enter` lanza una segunda sesión junto a la primera en lugar de enviarle una continuación. Puedes ejecutar varias en paralelo de esta manera.

48 48 

49 Cada sesión utiliza su cuota de suscripción de forma independiente, así que consulte [Limitaciones](#limitations) antes de distribuir muchas a la vez.49 Cada sesión utiliza tu cuota de suscripción de forma independiente, así que consulta [Limitaciones](#limitations) antes de distribuir muchas a la vez.

50 </Step>50 </Step>

51 51 

52 <Step title="Echar un vistazo y responder">52 <Step title="Echar un vistazo y responder">

53 Seleccione una fila con las teclas de flecha y presione `Space` para abrir el panel de vista previa. Muestra la salida más reciente de la sesión, o la pregunta en la que está esperando, en lugar de la transcripción completa. Escriba una respuesta y presione `Enter` para enviarla sin salir de la vista de agentes.53 Selecciona una fila con las teclas de flecha y presiona `Space` para abrir el panel de vista previa. Muestra la salida más reciente de la sesión, o la pregunta que está esperando que respondas, en lugar de la transcripción completa. Escribe una respuesta y presiona `Enter` para enviarla sin salir de la vista de agentes.

54 </Step>54 </Step>

55 55 

56 <Step title="Conectar y desconectar">56 <Step title="Conectar y desconectar">

57 Presione `Enter` o `→` en una fila para conectarse cuando desee la conversación completa. La sesión toma el control de la terminal como una sesión completa e interactiva de Claude Code. Presione `←` en un mensaje vacío para desconectarse y volver a la tabla.57 Presiona `Enter` o `→` en una fila para conectarte cuando quieras ver la conversación completa. La sesión toma el control de la terminal como una sesión completa e interactiva de Claude Code. Presiona `←` en un prompt vacío para desconectarte y volver a la tabla.

58 </Step>58 </Step>

59 59 

60 <Step title="Traer una sesión existente">60 <Step title="Traer una sesión existente">

61 Este paso necesita una sesión en ejecución. Si siguió los pasos anteriores, no tiene una abierta en esta terminal, así que abra una sesión regular de `claude` en otra terminal y envíele un mensaje primero.61 Este paso necesita una sesión en ejecución. Si seguiste los pasos anteriores, no tienes una abierta en esta terminal, así que abre una sesión regular de `claude` en otra terminal y envíale un mensaje primero.

62 62 

63 Para mover una sesión que ya tiene abierta a la vista de agentes, ejecute `/bg` dentro de ella, o presione `←` en un mensaje vacío para enviarla al segundo plano y abrir la vista de agentes en un paso. En una sesión nueva sin mensajes aún, `/bg` le pide que envíe un mensaje primero, mientras que `←` funciona de inmediato. La sesión sigue ejecutándose y aparece como una fila junto a las que distribuyó.63 Para mover una sesión que ya tienes abierta a la vista de agentes, ejecuta `/bg` dentro de ella, o presiona `←` en un prompt vacío para enviarla al segundo plano y abrir la vista de agentes en un solo paso. En una sesión nueva sin mensajes aún, `/bg` te pide que envíes un mensaje primero, mientras que `←` funciona de inmediato. La sesión sigue ejecutándose y aparece como una fila junto a las que distribuiste.

64 </Step>64 </Step>

65</Steps>65</Steps>

66 66 

67Dentro de una sesión regular de `claude`, la pista `←` del pie de página del mensaje cuenta los agentes en segundo plano que están esperando su entrada, como `← 2 agents`, y vuelve a `← for agents` cuando ninguno necesita entrada. Los conteos superiores a 99 se muestran como `99+`. El conteo se actualiza aproximadamente cada diez segundos mientras la terminal está enfocada e inmediatamente cuando el enfoque regresa. Cambia brevemente de color cuando se mueve y cuando un agente se completa, y cuando una sesión en segundo plano se completa mientras ninguno necesita su entrada, muestra brevemente el número completado, como `← 2 done`. Ambos destellos se desactivan cuando la configuración [`prefersReducedMotion`](/docs/es/settings-reference#prefersreducedmotion) está activada, y la pista se oculta en [modo de lector de pantalla](/docs/es/accessibility).67Dentro de una sesión regular de `claude`, la pista `←` del pie del prompt cuenta los agentes en segundo plano que te están esperando, como `← 2 agents`, y vuelve a `← for agents` cuando ninguno necesita tu intervención. Los conteos superiores a 99 se muestran como `99+`. El conteo se actualiza aproximadamente cada diez segundos mientras la terminal tiene el foco e inmediatamente cuando el foco regresa. Cambia brevemente de color cuando se modifica y cuando un agente termina, y cuando una sesión en segundo plano termina mientras ninguna necesita tu intervención, muestra brevemente el número de las completadas, como `← 2 done`. Ambos destellos se desactivan cuando el [ajuste `prefersReducedMotion`](/docs/es/settings-reference#prefersreducedmotion) está activado, y la pista se oculta en [modo de lector de pantalla](/docs/es/accessibility).

68 68 

69<h3 id="open-agent-view-by-default">69<h3 id="open-agent-view-by-default">

70 Abrir la vista de agentes de forma predeterminada70 Abrir la vista de agentes de forma predeterminada

71</h3>71</h3>

72 72 

73Para que `claude` sin argumentos abra la vista de agentes en lugar de una nueva conversación, active una configuración `/config`.73Para que `claude` sin argumentos abra la vista de agentes en lugar de una nueva conversación, activa un ajuste de `/config`.

74 74 

75<Steps>75<Steps>

76 <Step title="Activar la configuración">76 <Step title="Activar el ajuste">

77 En una sesión regular de `claude`, ejecute `/config` y active **Abrir vista de agentes de forma predeterminada**. Para omitir el menú, establezca la clave [`defaultToAgentsView`](/docs/es/settings-reference#defaulttoagentsview) directamente:77 En una sesión regular de `claude`, ejecuta `/config` y activa **Abrir vista de agentes de forma predeterminada**. Para omitir el menú, establece la clave [`defaultToAgentsView`](/docs/es/settings-reference#defaulttoagentsview) directamente:

78 78 

79 ```text theme={null}79 ```text theme={null}

80 /config defaultToAgentsView=true80 /config defaultToAgentsView=true


82 </Step>82 </Step>

83 83 

84 <Step title="Iniciar Claude Code">84 <Step title="Iniciar Claude Code">

85 Salga de la sesión y luego ejecute `claude` sin argumentos:85 Sal de la sesión y luego ejecuta `claude` sin argumentos:

86 86 

87 ```bash theme={null}87 ```bash theme={null}

88 claude88 claude


92 </Step>92 </Step>

93</Steps>93</Steps>

94 94 

95Para iniciar una sesión regular mientras la configuración está activada, pase un mensaje: `claude "fix the login test"`. Para desactivar la configuración, ejecute `/config defaultToAgentsView=false` en una sesión regular o en una a la que se conecte desde la vista de agentes.95Para iniciar una sesión regular mientras el ajuste está activado, pasa un prompt: `claude "fix the login test"`. Para desactivar el ajuste, ejecuta `/config defaultToAgentsView=false` en una sesión regular o en una a la que te conectes desde la vista de agentes.

96 96 

97<h2 id="monitor-sessions-with-agent-view">97<h2 id="monitor-sessions-with-agent-view">

98 Monitorear sesiones con la vista de agentes98 Monitorear sesiones con la vista de agentes


290 290 

291La fila desde la que presionaste `←` también mantiene un nombre en negrita y sin atenuar después de que muevas la selección con las teclas de flecha o el ratón, para que puedas saber de qué sesión viniste.291La fila desde la que presionaste `←` también mantiene un nombre en negrita y sin atenuar después de que muevas la selección con las teclas de flecha o el ratón, para que puedas saber de qué sesión viniste.

292 292 

293Si una herramienta se está ejecutando cuando presionas `←`, Claude Code espera a que termine antes de pasar a segundo plano, y Claude continúa la respuesta en la sesión en segundo plano. Presiona `←` de nuevo para pasar a segundo plano de inmediato en lugar de esperar. Cuando el trabajo en curso no puede trasladarse a la sesión en segundo plano, Claude Code muestra primero el diálogo `Background this session?`, igual que con [`/background`](#from-inside-a-session).293Si una herramienta se está ejecutando cuando presionas `←`, Claude Code espera a que termine antes de pasar a segundo plano, y Claude continúa la respuesta en la sesión en segundo plano. Presiona `←` de nuevo para pasar a segundo plano de inmediato en lugar de esperar. Cuando el trabajo en segundo plano en curso no puede trasladarse a la sesión en segundo plano, Claude Code muestra primero el diálogo `Background this session?`, igual que con [`/background`](#from-inside-a-session).

294 294 

295Despué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:

296 296 

Details

219 Almacenamiento en caché de credenciales y tiempo de espera de resolución219 Almacenamiento en caché de credenciales y tiempo de espera de resolución

220</h4>220</h4>

221 221 

222Claude Code resuelve la cadena de proveedores de credenciales predeterminada de AWS una vez y mantiene las credenciales resueltas en memoria. Las reutiliza hasta cinco minutos antes de que expiren, o durante una hora cuando no tienen expiración, por lo que un perfil respaldado por SSO solicita credenciales del Centro de identidades de IAM aproximadamente una vez por vida útil de credenciales. Un error de credenciales de la API borra el caché, y el reintento resuelve credenciales nuevas. Requiere Claude Code v2.1.207 o posterior.222Claude Code resuelve la cadena de proveedores de credenciales predeterminada de AWS una vez y mantiene las credenciales resueltas en memoria. Las reutiliza hasta cinco minutos antes de que expiren, o durante una hora cuando no tienen expiración, por lo que un perfil respaldado por SSO solicita credenciales del Centro de identidades de IAM aproximadamente una vez por vida útil de credenciales. Un error de credenciales de la API borra la caché, y el reintento resuelve credenciales nuevas.

223 223 

224La caché cubre todos los métodos de credenciales enumerados al inicio de este paso excepto una clave de API de Amazon Bedrock, que no utiliza la cadena de proveedores. Para resolver la cadena en cada solicitud en su lugar, establece [`CLAUDE_CODE_SKIP_AWS_CRED_CACHE=1`](/docs/es/env-vars).224La caché cubre todos los métodos de credenciales enumerados al inicio de este paso excepto una clave de API de Amazon Bedrock, que no utiliza la cadena de proveedores. Para resolver la cadena en cada solicitud en su lugar, establece [`CLAUDE_CODE_SKIP_AWS_CRED_CACHE=1`](/docs/es/env-vars).

225 225 


276 276 

277`Expiration` es opcional. Cuando el comando devuelve un `Expiration` ISO 8601 válido, Claude Code almacena en caché las credenciales hasta cinco minutos antes de esa hora. Sin él, las credenciales se almacenan en caché durante una hora.277`Expiration` es opcional. Cuando el comando devuelve un `Expiration` ISO 8601 válido, Claude Code almacena en caché las credenciales hasta cinco minutos antes de esa hora. Sin él, las credenciales se almacenan en caché durante una hora.

278 278 

279Cuando configura `awsCredentialExport` sin `awsAuthRefresh`, Claude Code utiliza las credenciales exportadas directamente y no vuelve a resolver la cadena de proveedores de credenciales predeterminada de AWS al inicio. Requiere Claude Code v2.1.206 o posterior.279Cuando configuras `awsCredentialExport` sin `awsAuthRefresh`, Claude Code utiliza las credenciales exportadas directamente y no vuelve a resolver la cadena de proveedores de credenciales predeterminada de AWS al inicio.

280 280 

281<h3 id="3-configure-claude-code">281<h3 id="3-configure-claude-code">

282 3. Configurar Claude Code282 3. Configurar Claude Code


358* Para usar Haiku para tareas en segundo plano, establezca `ANTHROPIC_DEFAULT_HAIKU_MODEL` en un ID de modelo que esté disponible en su cuenta.358* Para usar Haiku para tareas en segundo plano, establezca `ANTHROPIC_DEFAULT_HAIKU_MODEL` en un ID de modelo que esté disponible en su cuenta.

359 359 

360<Warning>360<Warning>

361 Los modelos Opus tienen un precio por token más alto que los modelos Sonnet, por lo que un despliegue que no fija un modelo principal se factura a la tarifa de Opus una vez que se actualiza a v2.1.207 o posterior. Para mantener Sonnet 4.5 como el modelo principal, establezca `ANTHROPIC_MODEL` en su ID de modelo completo. Un despliegue que dirige el predeterminado con `ANTHROPIC_DEFAULT_SONNET_MODEL` y no establece `ANTHROPIC_DEFAULT_OPUS_MODEL` mantiene su modelo Sonnet dirigido como el predeterminado.361 Los modelos Opus tienen un precio por token más alto que los modelos Sonnet, así que si no fijas un modelo principal, se te factura a la tarifa de Opus. Para usar Sonnet 4.5 como el modelo principal, establece `ANTHROPIC_MODEL` en su ID de modelo completo. Un despliegue que dirige el predeterminado con `ANTHROPIC_DEFAULT_SONNET_MODEL` y no establece `ANTHROPIC_DEFAULT_OPUS_MODEL` mantiene su modelo Sonnet dirigido como el predeterminado.

362</Warning>362</Warning>

363 363 

364Antes de v2.1.280, el modelo principal en Amazon Bedrock predeterminaba a Opus 5 y el alias `opus` se resolvía a Opus 5 desde v2.1.219. En v2.1.207 a v2.1.218, el modelo principal en Amazon Bedrock predeterminaba a Opus 4.8 y el alias `opus` se resolvía a Opus 4.8. Antes de v2.1.207, el modelo principal predeterminaba a Sonnet 4.5, el alias `opus` se resolvía a Opus 4.6, y las tareas en segundo plano siempre utilizaban el modelo principal.364Antes de v2.1.280, el modelo principal en Amazon Bedrock era Opus 5 de forma predeterminada y el alias `opus` se resolvía a Opus 5 desde v2.1.219. De v2.1.207 a v2.1.218, el modelo principal en Amazon Bedrock era Opus 4.8 de forma predeterminada y el alias `opus` se resolvía a Opus 4.8.

365 365 

366Para personalizar modelos aún más, utilice uno de estos métodos:366Para personalizar modelos aún más, utilice uno de estos métodos:

367 367 

artifacts.md +1 −1

Details

188 188 

189Su [modo de permiso](/docs/es/permission-modes) decide qué hace Claude cuando llega un comentario enviado:189Su [modo de permiso](/docs/es/permission-modes) decide qué hace Claude cuando llega un comentario enviado:

190 190 

191* **Claude responde por su cuenta**: cuando su modo de permiso permite que Claude publique la respuesta sin pedirle, Claude lee el hilo y responde, y edita el artefacto cuando el comentario pide un cambio. Usted ve `Auto-replied to comment thread on Artifact: <name>` o `Auto-edited Artifact: <name> in response to a comment thread`.191* **Claude responde por su cuenta**: si estás en un modo de permisos que permite que Claude publique la respuesta sin preguntarte, Claude lee el hilo y responde. Ves `Auto-replied to comment thread on Artifact: <name>`.

192* **Claude espera por usted**: fuera del Plan Mode, cuando publicar la respuesta necesitaría su aprobación, usted ve `Comments are waiting on Artifact: <name>`. Claude entonces le pide aprobación para leer el hilo, y nuevamente para publicar la respuesta.192* **Claude espera por usted**: fuera del Plan Mode, cuando publicar la respuesta necesitaría su aprobación, usted ve `Comments are waiting on Artifact: <name>`. Claude entonces le pide aprobación para leer el hilo, y nuevamente para publicar la respuesta.

193* **Claude pausa en Plan Mode**: usted ve `Comments are waiting on Artifact: <name>`, y Claude no responde hasta que salga del Plan Mode y le pida que lea y responda.193* **Claude pausa en Plan Mode**: usted ve `Comments are waiting on Artifact: <name>`, y Claude no responde hasta que salga del Plan Mode y le pida que lea y responda.

194 194 

chrome.md +14 −14

Details

65 claude --chrome65 claude --chrome

66 ```66 ```

67 67 

68 La primera vez que inicia con Chrome, Claude Code muestra un diálogo único que presenta la integración y explica cómo funcionan los permisos del sitio. Presione Intro para continuar.68 La primera vez que inicias con Chrome, Claude Code muestra un diálogo único que presenta la integración y explica cómo funcionan los permisos del sitio. Presiona Intro para continuar.

69 69 

70 Para habilitar Chrome para futuras sesiones sin la bandera, consulte [Habilitar Chrome de forma predeterminada](#enable-chrome-by-default).70 Para habilitar Chrome para futuras sesiones sin la bandera, consulta [Habilitar Chrome de forma predeterminada](#enable-chrome-by-default).

71 </Step>71 </Step>

72 72 

73 <Step title="Pídele a Claude que use el navegador">73 <Step title="Pídele a Claude que use el navegador">

74 Este ejemplo navega a una página, interactúa con ella e informa lo que encuentra, todo desde su terminal o editor:74 Este ejemplo navega a una página, interactúa con ella e informa lo que encuentra, todo desde tu terminal o editor:

75 75 

76 ```text wrap theme={null}76 ```text wrap theme={null}

77 Go to code.claude.com/docs, click on the search box,77 Go to code.claude.com/docs, click on the search box,


84 84 

85Ejecuta `/chrome` en cualquier momento para verificar el estado de la conexión, administrar permisos, reconectar la extensión o elegir qué navegador conectado usar. La integración funciona cuando el panel de estado muestra "Status: Enabled" y "Extension: Installed".85Ejecuta `/chrome` en cualquier momento para verificar el estado de la conexión, administrar permisos, reconectar la extensión o elegir qué navegador conectado usar. La integración funciona cuando el panel de estado muestra "Status: Enabled" y "Extension: Installed".

86 86 

87Si más de un navegador está conectado, usted elige cuál usa Claude. Cuando una acción del navegador comienza antes de que haya elegido, Claude le solicita que elija uno. Para cambiar de navegador más tarde, ejecuta `/chrome` y selecciona **Select browser…**. Claude sigue usando su elección incluso cuando se conecta otro navegador.87Si más de un navegador está conectado, tú eliges cuál usa Claude. Cuando una acción del navegador comienza antes de que hayas elegido, Claude te pide que elijas uno. Para cambiar de navegador más tarde, ejecuta `/chrome` y selecciona **Select browser…**. Claude sigue usando tu elección incluso cuando se conecta otro navegador.

88 88 

89Para VS Code, consulte [automatización del navegador en VS Code](/docs/es/vs-code#automate-browser-tasks-with-chrome).89Para VS Code, consulta [automatización del navegador en VS Code](/docs/es/vs-code#automate-browser-tasks-with-chrome).

90 90 

91<h3 id="install-the-extension-when-claude-asks">91<h3 id="install-the-extension-when-claude-asks">

92 Instalar la extensión cuando Claude lo solicita92 Instalar la extensión cuando Claude lo solicita

93</h3>93</h3>

94 94 

95Cuando Claude necesita su navegador en una sesión interactiva y Claude Code no detecta la extensión, Claude Code muestra un aviso de instalación titulado "Claude wants to use your browser". Claude Code pregunta como máximo una vez por sesión.95Cuando Claude necesita tu navegador en una sesión interactiva y Claude Code no detecta la extensión, Claude Code muestra una solicitud de instalación titulada "Claude wants to use your browser". Claude Code pregunta como máximo una vez por sesión.

96 96 

97El aviso ofrece tres opciones:97La solicitud ofrece tres opciones:

98 98 

99* **Install extension**: abre la página de instalación de la extensión en su navegador e inicia una configuración guiada. Claude Code espera la instalación, conecta la extensión y habilita las herramientas del navegador en la misma sesión. Cuando la conexión esté lista, seleccione "Continue with browser tools" y Claude reanuda la tarea en su navegador. Puede abandonar la configuración seleccionando "Continue without browser tools" y terminar más tarde con `/chrome`.99* **Install extension**: abre la página de instalación de la extensión en tu navegador e inicia una configuración guiada. Claude Code espera la instalación, conecta la extensión y habilita las herramientas del navegador en la misma sesión. Cuando la conexión esté lista, selecciona "Continue with browser tools" y Claude reanuda la tarea en tu navegador. Puedes abandonar la configuración seleccionando "Continue without browser tools" y terminar más tarde con `/chrome`.

100* **Not now**: continúa la tarea sin herramientas del navegador. Claude Code puede preguntar nuevamente en una sesión posterior.100* **Not now**: continúa la tarea sin herramientas del navegador. Claude Code puede preguntar nuevamente en una sesión posterior.

101* **Don't ask again**: detiene el aviso en futuras sesiones. Aún puede configurar la integración en cualquier momento con `/chrome`.101* **Don't ask again**: detiene la solicitud en futuras sesiones. Aún puedes configurar la integración en cualquier momento con `/chrome`.

102 102 

103Dos políticas MCP administradas desactivan el aviso:103Dos políticas MCP administradas desactivan la solicitud:

104 104 

105* Si su organización bloquea el servidor MCP `claude-in-chrome` con la [configuración administrada `deniedMcpServers`](/docs/es/managed-mcp#policy-based-control-with-allowlists-and-denylists), Claude Code no muestra el aviso de instalación.105* Si tu organización bloquea el servidor MCP `claude-in-chrome` con la [configuración administrada `deniedMcpServers`](/docs/es/managed-mcp#policy-based-control-with-allowlists-and-denylists), Claude Code no muestra la solicitud de instalación.

106* Si su organización implementa un archivo [`managed-mcp.json`](/docs/es/managed-mcp#exclusive-control-with-managed-mcp-json) sin [permitir Claude in Chrome junto con el conjunto administrado](/docs/es/managed-mcp#allow-claude-in-chrome-alongside-the-managed-set), Claude Code no muestra el aviso de instalación.106* Si tu organización implementa un archivo [`managed-mcp.json`](/docs/es/managed-mcp#exclusive-control-with-managed-mcp-json) sin [permitir Claude in Chrome junto con el conjunto administrado](/docs/es/managed-mcp#allow-claude-in-chrome-alongside-the-managed-set), Claude Code no muestra la solicitud de instalación.

107 107 

108<h3 id="enable-chrome-by-default">108<h3 id="enable-chrome-by-default">

109 Habilitar Chrome de forma predeterminada109 Habilitar Chrome de forma predeterminada


123 Administrar permisos del sitio123 Administrar permisos del sitio

124</h3>124</h3>

125 125 

126Los permisos a nivel de sitio se heredan de la extensión de Chrome. Administre los permisos en la configuración de la extensión de Chrome para controlar qué sitios puede examinar Claude, hacer clic e introducir texto. En [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), cuando el clasificador del modo automático aprueba una llamada del navegador a un sitio, la extensión omite su propia verificación por sitio para esa llamada, a menos que sus reglas de permisos denieguen cualquier sitio a Claude in Chrome.126Los permisos a nivel de sitio se heredan de la extensión de Chrome. Administra los permisos en la configuración de la extensión de Chrome para controlar en qué sitios Claude puede navegar, hacer clic y escribir. En [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), cuando el propio clasificador del modo automático aprueba una llamada del navegador a un sitio, la extensión omite su propia verificación por sitio para esa llamada, a menos que tus reglas de permisos denieguen cualquier sitio a Claude in Chrome.

127 127 

128<h3 id="permission-prompts-in-vs-code-sessions">128<h3 id="permission-prompts-in-vs-code-sessions">

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


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.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 135 

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

137 Herramientas del navegador en Plan Mode137 Herramientas del navegador en modo plan

138</h3>138</h3>

139 139 

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.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.

Details

858El bloque `models` es una lista de modelos opcional seleccionada por el administrador, servida en `/v1/models` y usada para traducir los ID de modelo por upstream. Es obligatoria para regiones de Amazon Bedrock fuera de EE. UU., ARN de rendimiento aprovisionado de Amazon Bedrock y nombres de despliegue de Microsoft Foundry.858El bloque `models` es una lista de modelos opcional seleccionada por el administrador, servida en `/v1/models` y usada para traducir los ID de modelo por upstream. Es obligatoria para regiones de Amazon Bedrock fuera de EE. UU., ARN de rendimiento aprovisionado de Amazon Bedrock y nombres de despliegue de Microsoft Foundry.

859 859 

860```yaml theme={null}860```yaml theme={null}

861auto_include_builtin_models: true # false: exponer solo la lista de abajo861auto_include_builtin_models: true # false: expose only the list below

862models:862models:

863 - id: claude-opus-4-8863 - id: claude-opus-4-8

864 label: Claude Opus 4.8864 label: Claude Opus 4.8

865 # description: texto opcional que se muestra en los clientes que lo muestran865 # description: optional text shown in clients that surface it

866 upstream_model:866 upstream_model:

867 anthropic: claude-opus-4-8867 anthropic: claude-opus-4-8

868 bedrock: us.anthropic.claude-opus-4-8 # o un ARN de perfil de inferencia868 bedrock: us.anthropic.claude-opus-4-8 # or an inference-profile ARN

869 foundry: your-opus-deployment-name869 foundry: your-opus-deployment-name

870```870```

871 871 


1020 policies:1020 policies:

1021 - match: {}1021 - match: {}

1022 cli:1022 cli:

1023 # Acceso a modelos (también aplicado del lado del servidor en /v1/messages)1023 # Model access (also enforced server-side at /v1/messages)

1024 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]1024 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]

1025 enforceAvailableModels: true # Default se resuelve dentro de la lista1025 enforceAvailableModels: true # Default resolves inside the list

1026 1026 

1027 # Política de permisos1027 # Permission policy

1028 permissions:1028 permissions:

1029 deny:1029 deny:

1030 - "WebFetch"1030 - "WebFetch"

1031 - "Read(./.env)"1031 - "Read(./.env)"

1032 - "Read(./secrets/**)"1032 - "Read(./secrets/**)"

1033 disableBypassPermissionsMode: disable # bloquea --dangerously-skip-permissions1033 disableBypassPermissionsMode: disable # blocks --dangerously-skip-permissions

1034 allowManagedPermissionRulesOnly: true # ignora las reglas de permisos de usuario/proyecto1034 allowManagedPermissionRulesOnly: true # ignore user/project permission rules

1035 1035 

1036 # Entorno enviado al proceso del CLI. DISABLE_UPDATES bloquea1036 # Environment pushed into the CLI process. DISABLE_UPDATES blocks

1037 # las actualizaciones en segundo plano y manuales; DISABLE_AUTOUPDATER detiene solo1037 # background and manual updates; DISABLE_AUTOUPDATER stops only

1038 # las actualizaciones en segundo plano.1038 # background updates.

1039 env:1039 env:

1040 DISABLE_UPDATES: "1" # fija las versiones mediante tu propia distribución1040 DISABLE_UPDATES: "1" # pin versions via your own distribution

1041 1041 

1042 # Hooks de toda la organización. Los comandos de hook se ejecutan en las máquinas de los desarrolladores, no en el1042 # Org-wide hooks. Hook commands run on developer machines, not the

1043 # gateway, por lo que la ruta debe existir en cada sistema operativo cliente de la política.1043 # gateway, so the path must exist on every client OS in the policy.

1044 hooks:1044 hooks:

1045 PostToolUse:1045 PostToolUse:

1046 - matcher: "Edit|Write"1046 - matcher: "Edit|Write"


1074 1074 

1075La configuración de [telemetría](#telemetry) del gateway envía `OTEL_EXPORTER_OTLP_ENDPOINT`, por lo que establecer `telemetry.forward_to` activa el diálogo en cada cliente interactivo. El diálogo protege la máquina del desarrollador frente a un gateway comprometido u hostil, no a la organización frente al desarrollador.1075La configuración de [telemetría](#telemetry) del gateway envía `OTEL_EXPORTER_OTLP_ENDPOINT`, por lo que establecer `telemetry.forward_to` activa el diálogo en cada cliente interactivo. El diálogo protege la máquina del desarrollador frente a un gateway comprometido u hostil, no a la organización frente al desarrollador.

1076 1076 

1077Una [ejecución no interactiva](/docs/es/server-managed-settings#security-approval-dialogs), como `claude -p`, una sesión del Agent SDK o una sesión en la pestaña Code de Claude Desktop, no puede mostrar el diálogo. Aplica la configuración enviada solo para esa ejecución y no la registra como aprobada, así que la siguiente sesión interactiva del desarrollador sigue mostrando el diálogo. Antes de v2.1.207, una ejecución no interactiva guardaba la configuración como aprobada y ninguna sesión interactiva posterior mostraba el diálogo para ella.1077Una [ejecución no interactiva](/docs/es/server-managed-settings#security-approval-dialogs), como `claude -p`, una sesión del Agent SDK o una sesión en la pestaña Code de Claude Desktop, no puede mostrar el diálogo. Aplica la configuración enviada solo para esa ejecución y no la registra como aprobada, así que la siguiente sesión interactiva del desarrollador sigue mostrando el diálogo.

1078 1078 

1079Si un desarrollador rechaza, Claude Code cierra esa sesión en lugar de aplicar la política. Por lo tanto, cuando envías un hook nuevo, o cualquier variable de entorno que active el diálogo, a una política amplia, cada desarrollador que coincide ve el diálogo en sus sesiones interactivas. Una sesión interactiva en ejecución lo muestra en la siguiente consulta horaria y, de lo contrario, aparece en el siguiente inicio interactivo del desarrollador.1079Si un desarrollador rechaza, Claude Code cierra esa sesión en lugar de aplicar la política. Por lo tanto, cuando envías un hook nuevo, o cualquier variable de entorno que active el diálogo, a una política amplia, cada desarrollador que coincide ve el diálogo en sus sesiones interactivas. Una sesión interactiva en ejecución lo muestra en la siguiente consulta horaria y, de lo contrario, aparece en el siguiente inicio interactivo del desarrollador.

1080 1080 


1502```yaml theme={null}1502```yaml theme={null}

1503load_test_mode:1503load_test_mode:

1504 enabled: true1504 enabled: true

1505 reply_tokens: 750 # aproximadamente cuántos tokens de texto contiene cada respuesta predefinida1505 reply_tokens: 750 # roughly how many tokens of text each canned reply carries

1506 reply_seconds: 9.5 # cuánto tarda una respuesta transmitida1506 reply_seconds: 9.5 # how long a streamed reply takes

1507```1507```

1508 1508 

1509| Campo | Requerido | Descripción |1509| Campo | Requerido | Descripción |

Details

298 298 

299Las sesiones en la nube admiten [comandos integrados](/docs/es/commands) que producen salida de texto. Los comandos que solo se ejecutan en la interfaz de terminal, como `/plugin` o `/resume`, no están disponibles. Los comandos que abren un selector o panel en el terminal se comportan de manera diferente en sesiones en la nube:299Las sesiones en la nube admiten [comandos integrados](/docs/es/commands) que producen salida de texto. Los comandos que solo se ejecutan en la interfaz de terminal, como `/plugin` o `/resume`, no están disponibles. Los comandos que abren un selector o panel en el terminal se comportan de manera diferente en sesiones en la nube:

300 300 

301* **`/model`, `/effort`, `/color` y `/rename`**: pase el valor como argumento, por ejemplo `/model sonnet`, en lugar de abrir el selector de terminal o el control deslizante. Los formularios de argumento requieren Claude Code v2.1.205 o posterior en el entorno de la sesión y siguen las [notas de disponibilidad](/docs/es/commands#all-commands) de cada comando.301* **`/model`, `/effort`, `/color` y `/rename`**: pasa el valor como argumento, por ejemplo `/model sonnet`, en lugar de abrir el selector de terminal o el control deslizante. Las formas con argumento siguen las [notas de disponibilidad](/docs/es/commands#all-commands) de cada comando.

302* **`/fast`**: alterna el [modo rápido](/docs/es/fast-mode#use-fast-mode-in-cloud-sessions) para la sesión cuando el modo rápido está [disponible en su cuenta](/docs/es/fast-mode#requirements). Requiere Claude Code v2.1.271 o posterior en el entorno de la sesión.302* **`/fast`**: alterna el [modo rápido](/docs/es/fast-mode#use-fast-mode-in-cloud-sessions) para la sesión cuando el modo rápido está [disponible en su cuenta](/docs/es/fast-mode#requirements). Requiere Claude Code v2.1.271 o posterior en el entorno de la sesión.

303* **`/config`**: en su navegador en claude.ai/code, abre la sección Claude Code de su configuración en lugar de establecer un valor, y el texto después del comando, incluido `key=value`, se ignora. Para cambiar una configuración de una sesión en la nube, establezca una [variable de entorno](/docs/es/cloud-environments#set-environment-variables) en el entorno, o en una sesión con un repositorio, confirme la clave en el archivo `.claude/settings.json` de ese repositorio. [Configuración en sesiones en la nube](/docs/es/settings#settings-in-cloud-sessions) enumera lo que cada sesión lee.303* **`/config`**: en su navegador en claude.ai/code, abre la sección Claude Code de su configuración en lugar de establecer un valor, y el texto después del comando, incluido `key=value`, se ignora. Para cambiar una configuración de una sesión en la nube, establezca una [variable de entorno](/docs/es/cloud-environments#set-environment-variables) en el entorno, o en una sesión con un repositorio, confirme la clave en el archivo `.claude/settings.json` de ese repositorio. [Configuración en sesiones en la nube](/docs/es/settings#settings-in-cloud-sessions) enumera lo que cada sesión lee.

304 304 


420* **Máquinas virtuales aisladas**: cada sesión se ejecuta en una VM aislada administrada por Anthropic. Las sesiones que su organización enruta a un [entorno autohospedado](/docs/es/self-hosted-environments) se ejecutan en su propia infraestructura en su lugar, donde el aislamiento es responsabilidad de su implementación420* **Máquinas virtuales aisladas**: cada sesión se ejecuta en una VM aislada administrada por Anthropic. Las sesiones que su organización enruta a un [entorno autohospedado](/docs/es/self-hosted-environments) se ejecutan en su propia infraestructura en su lugar, donde el aislamiento es responsabilidad de su implementación

421* <span id="default-allowed-domains" />**Controles de acceso a la red**: en entornos alojados por Anthropic, el acceso a la red se limita de forma predeterminada y puede deshabilitarse. Consulte [Acceso a la red](/docs/es/cloud-environments#network-access) para los niveles de acceso, los [dominios permitidos predeterminados](/docs/es/cloud-environments#default-allowed-domains) y el tráfico que no pasa por la lista de permitidos. En un entorno autohospedado, usted restringe la salida de la sesión en su propio límite de red. Cuando se ejecuta con acceso a la red deshabilitado, Claude Code aún puede comunicarse con la API de Anthropic, lo que puede permitir que los datos salgan de la VM.421* <span id="default-allowed-domains" />**Controles de acceso a la red**: en entornos alojados por Anthropic, el acceso a la red se limita de forma predeterminada y puede deshabilitarse. Consulte [Acceso a la red](/docs/es/cloud-environments#network-access) para los niveles de acceso, los [dominios permitidos predeterminados](/docs/es/cloud-environments#default-allowed-domains) y el tráfico que no pasa por la lista de permitidos. En un entorno autohospedado, usted restringe la salida de la sesión en su propio límite de red. Cuando se ejecuta con acceso a la red deshabilitado, Claude Code aún puede comunicarse con la API de Anthropic, lo que puede permitir que los datos salgan de la VM.

422* **Protección de credenciales**: en entornos alojados por Anthropic, las credenciales de git y las claves de firma permanecen fuera del sandbox, y un proxy se autentica en nombre de la sesión con credenciales de alcance. En un entorno autohospedado, su implementación proporciona credenciales de git; consulte [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git)422* **Protección de credenciales**: en entornos alojados por Anthropic, las credenciales de git y las claves de firma permanecen fuera del sandbox, y un proxy se autentica en nombre de la sesión con credenciales de alcance. En un entorno autohospedado, su implementación proporciona credenciales de git; consulte [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git)

423* **Secretos de red**: en entornos alojados por Anthropic en planes Pro y Max, las claves que [agregas a un entorno en la nube](/docs/es/cloud-environments#add-network-secrets) permanecen fuera del sandbox de la misma manera, adjuntas a solicitudes coincidentes después de que salen de la sesión. Un entorno autohospedado no tiene secretos de red, y los planes Team y Enterprise aún no los tienen423* **Secretos de red**: en entornos alojados por Anthropic, las claves que [agregas a un entorno en la nube](/docs/es/cloud-environments#add-network-secrets) permanecen fuera del sandbox de la misma manera, adjuntas a solicitudes coincidentes después de que salen de la sesión. Un entorno autohospedado no tiene secretos de red

424* **Análisis seguro**: el código se analiza y modifica dentro del entorno aislado de la sesión antes de crear PRs424* **Análisis seguro**: el código se analiza y modifica dentro del entorno aislado de la sesión antes de crear PRs

425 425 

426<h2 id="troubleshooting">426<h2 id="troubleshooting">


472| Mensaje | Qué significa |472| Mensaje | Qué significa |

473| - | - |473| - | - |

474| `Cloud sessions aren't available with <provider>. They run on Anthropic's infrastructure and require an Anthropic account.` | Claude Code está configurado para un proveedor de terceros. El mensaje nombra al proveedor con la etiqueta que usa tu configuración, como `Amazon Bedrock` o `Google Vertex AI`. Elimina la configuración de ese proveedor, por ejemplo quitando la variable `CLAUDE_CODE_USE_BEDROCK`, e inicia sesión con una cuenta de Anthropic (`claude auth login`). |474| `Cloud sessions aren't available with <provider>. They run on Anthropic's infrastructure and require an Anthropic account.` | Claude Code está configurado para un proveedor de terceros. El mensaje nombra al proveedor con la etiqueta que usa tu configuración, como `Amazon Bedrock` o `Google Vertex AI`. Elimina la configuración de ese proveedor, por ejemplo quitando la variable `CLAUDE_CODE_USE_BEDROCK`, e inicia sesión con una cuenta de Anthropic (`claude auth login`). |

475| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | La política de organización `allow_remote_sessions` está desactivada. |475| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | La política `allow_remote_sessions` de tu organización está desactivada; consulta [Cloud sessions are disabled by your organization's policy](/docs/es/errors#cloud-sessions-are-disabled-by-your-organizations-policy). Si en cambio el mensaje nombra una credencial que está usando esta sesión, consulta [Cloud sessions use your claude.ai login](/docs/es/errors#cloud-sessions-use-your-claude-ai-login). |

476| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code no pudo obtener la política de tu organización, por lo que rechaza el envío en lugar de asumir que las sesiones en la nube están permitidas. Verifica tu conexión de red y reintenta. |476| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code no ha terminado de cargar la política de tu organización, por lo que rechaza el envío en lugar de asumir que las sesiones en la nube están permitidas. Verifica tu conexión de red y reintenta. |

477| `Cloud sessions aren't available:` seguido de una causa | No se pudo cargar la política de tu organización, y el resto del mensaje indica por qué. Actúa según la causa que nombra; consulta [Couldn't verify your organization's policy for cloud sessions](/docs/es/errors#couldnt-verify-your-organizations-policy-for-cloud-sessions). |

477| `Attaching to an existing cloud session is not enabled for your account.` | Ejecutaste `--cloud <session-id>` sin `-p`. Envía el mensaje con `claude -p "your message" --cloud <session-id>`. |478| `Attaching to an existing cloud session is not enabled for your account.` | Ejecutaste `--cloud <session-id>` sin `-p`. Envía el mensaje con `claude -p "your message" --cloud <session-id>`. |

478| `Session not found: <id>` | El ID o la URL no coincide con una sesión a la que tengas acceso. Compáralo con la URL de claude.ai/code de la sesión. |479| `Session not found: <id>` | El ID o la URL no coincide con una sesión a la que tengas acceso. Compáralo con la URL de claude.ai/code de la sesión. |

479| `cloud session <id> is archived and cannot accept new messages` | La sesión se archivó. Inicia una nueva sesión en su lugar. |480| `cloud session <id> is archived and cannot accept new messages` | La sesión se archivó. Inicia una nueva sesión en su lugar. |

Details

1525| - | - | - |1525| - | - | - |

1526| `skills/<name>/SKILL.md` | `name`, `description`, `when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`, `user-invocable`, `allowed-tools`, `disallowed-tools`, `model`, `effort`, `context`, `agent`, `background`, `hooks`, `paths`, `shell`, `metadata`, `license`, `compatibility` | [Frontmatter de skill](/docs/es/skills#frontmatter-reference) |1526| `skills/<name>/SKILL.md` | `name`, `description`, `when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`, `user-invocable`, `allowed-tools`, `disallowed-tools`, `model`, `effort`, `context`, `agent`, `background`, `hooks`, `paths`, `shell`, `metadata`, `license`, `compatibility` | [Frontmatter de skill](/docs/es/skills#frontmatter-reference) |

1527| `commands/*.md` | Los campos de skill excepto `name` y `paths` | [Frontmatter de skill](/docs/es/skills#frontmatter-reference) |1527| `commands/*.md` | Los campos de skill excepto `name` y `paths` | [Frontmatter de skill](/docs/es/skills#frontmatter-reference) |

1528| `agents/*.md` | `name`, `description`, `tools`, `disallowedTools`, `model`, `permissionMode`, `maxTurns`, `skills`, `mcpServers`, `hooks`, `memory`, `background`, `effort`, `isolation`, `color`, `initialPrompt`, `omitClaudeMd`, `experimental` | [Frontmatter de subagente](/docs/es/sub-agents#supported-frontmatter-fields) |1528| `agents/*.md` | `name`, `description`, `tools`, `disallowedTools`, `model`, `permissionMode`, `maxTurns`, `autoCompactWindow`, `skills`, `mcpServers`, `hooks`, `memory`, `background`, `effort`, `isolation`, `color`, `initialPrompt`, `omitClaudeMd`, `experimental` | [Frontmatter de subagente](/docs/es/sub-agents#supported-frontmatter-fields) |

1529| `output-styles/*.md` | `name`, `description`, `keep-coding-instructions`, `force-for-plugin` | [Frontmatter de estilo de salida](/docs/es/output-styles#frontmatter) |1529| `output-styles/*.md` | `name`, `description`, `keep-coding-instructions`, `force-for-plugin` | [Frontmatter de estilo de salida](/docs/es/output-styles#frontmatter) |

1530| `rules/*.md` | `paths` | [Frontmatter de regla](/docs/es/memory#rules-frontmatter-reference) |1530| `rules/*.md` | `paths` | [Frontmatter de regla](/docs/es/memory#rules-frontmatter-reference) |

1531 1531 

Details

291 291 

292Claude Platform on AWS utiliza los mismos ID de modelo que la API de Claude directa.292Claude Platform on AWS utiliza los mismos ID de modelo que la API de Claude directa.

293 293 

294Los alias predeterminados `fable`, `opus`, `sonnet` y `haiku` se resuelven a los valores predeterminados integrados de Claude Code para Claude Platform on AWS, que pueden estar retrasados respecto a la versión más reciente. Sin `ANTHROPIC_DEFAULT_OPUS_MODEL`, el alias `opus` se resuelve a Opus 5.5. Antes de v2.1.280, se resolvía a Opus 5 desde v2.1.219, a Opus 4.8 desde v2.1.207, y a Opus 4.7 antes de eso.294Los alias predeterminados `fable`, `opus`, `sonnet` y `haiku` se resuelven a los valores predeterminados integrados de Claude Code para Claude Platform on AWS, que pueden estar retrasados respecto a la versión más reciente. Sin `ANTHROPIC_DEFAULT_OPUS_MODEL`, el alias `opus` se resuelve a Opus 5.5. Antes de v2.1.280, se resolvía a Opus 5 desde v2.1.219, y a Opus 4.8 desde v2.1.207.

295 295 

296Si implementa Claude Code en un equipo, fije explícitamente los ID de modelo para que un nuevo lanzamiento no mueva a todos a la vez:296Si implementa Claude Code en un equipo, fije explícitamente los ID de modelo para que un nuevo lanzamiento no mueva a todos a la vez:

297 297 

Details

414 414 

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).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).

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).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).

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.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). 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.

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.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.

419 419 

420Para ver qué conectores tiene un hilo en la nube en ejecución en claude.ai/code, abre el hilo y selecciona **Conectores** en el menú **+** junto a su cuadro de mensaje. Desactivar un conector allí lo elimina de ese hilo y guarda eso como el predeterminado de tu cuenta, por lo que los nuevos hilos y chats de claude.ai comienzan sin él hasta que lo vuelvas a activar. Un hilo en la nube recoge un conector que agregues o reconectes después del siguiente mensaje que le envíes.420Para ver qué conectores tiene un hilo en la nube en ejecución en claude.ai/code, abre el hilo y selecciona **Conectores** en el menú **+** junto a su cuadro de mensaje. Desactivar un conector allí lo elimina de ese hilo y guarda eso como el predeterminado de tu cuenta, por lo que los nuevos hilos y chats de claude.ai comienzan sin él hasta que lo vuelvas a activar. Un hilo en la nube recoge un conector que agregues o reconectes después del siguiente mensaje que le envíes.


435| Instrucciones del proyecto | Memory | [Reglas permanentes](#give-a-project-standing-context) que cada hilo nuevo recibe |435| Instrucciones del proyecto | Memory | [Reglas permanentes](#give-a-project-standing-context) que cada hilo nuevo recibe |

436| Repositorios del proyecto | Environment | Los repositorios que los hilos nuevos clonan |436| Repositorios del proyecto | Environment | Los repositorios que los hilos nuevos clonan |

437| Entorno en la nube | Environment | El [entorno en la nube](#choose-an-environment-for-threads) en el que se ejecutan los hilos nuevos |437| Entorno en la nube | Environment | El [entorno en la nube](#choose-an-environment-for-threads) en el que se ejecutan los hilos nuevos |

438| Conectores | Environment | Un enlace para administrar los conectores de claude.ai que obtienen los hilos |

439| Plugins | Plugins | Los plugins que se cargan en cada hilo nuevo |438| Plugins | Plugins | Los plugins que se cargan en cada hilo nuevo |

440| Uso | Usage | [Uso de tokens](#usage-and-cost) por hilo y por modelo |439| Uso | Usage | [Uso de tokens](#usage-and-cost) por hilo y por modelo |

441| Memory | Memory | Los [archivos de memoria](#give-a-project-standing-context) del proyecto |440| Memory | Memory | Los [archivos de memoria](#give-a-project-standing-context) del proyecto |

Details

10 Los entornos en la nube se aplican a [sesiones en la nube](/docs/es/claude-code-on-the-web), que están disponibles en planes Pro, Max y Team, y para usuarios de Enterprise con [asientos premium o asientos de Chat + Claude Code](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan).10 Los entornos en la nube se aplican a [sesiones en la nube](/docs/es/claude-code-on-the-web), que están disponibles en planes Pro, Max y Team, y para usuarios de Enterprise con [asientos premium o asientos de Chat + Claude Code](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan).

11</Note>11</Note>

12 12 

13Cada [sesión en la nube](/docs/es/claude-code-on-the-web) se ejecuta en un entorno en la nube. Puedes configurar un entorno para permitir o denegar [acceso a la red](#access-levels), [establecer variables de entorno](#set-environment-variables) para la sesión, en planes Pro y Max almacenar [secretos de red](#add-network-secrets) que las sesiones utilizan sin verlos, y ejecutar un [script de configuración](#setup-scripts) antes de que Claude comience a trabajar.13Cada [sesión en la nube](/docs/es/claude-code-on-the-web) se ejecuta en un entorno en la nube. Puedes configurar un entorno para permitir o denegar [acceso a la red](#access-levels), [establecer variables de entorno](#set-environment-variables) para la sesión, almacenar [secretos de red](#add-network-secrets) que las sesiones utilizan sin verlos, y ejecutar un [script de configuración](#setup-scripts) antes de que Claude comience a trabajar.

14 14 

15Los mismos entornos se aplican dondequiera que inicie una sesión en la nube: la [aplicación de escritorio](/docs/es/desktop), la [aplicación móvil de Claude](/docs/es/mobile), su navegador en [claude.ai/code](https://claude.ai/code), la terminal con [`claude --cloud`](/docs/es/claude-code-on-the-web#from-terminal-to-cloud), [routines](/docs/es/routines) y [Claude Tag](https://claude.com/docs/claude-tag/overview). Cada una de estas superficies también puede enrutar a un [entorno autohospedado](/docs/es/self-hosted-environments). [Disponibilidad y limitaciones](/docs/es/self-hosted-environments#availability-and-limitations) cubre lo que Claude aún no puede usar cuando una sesión de Claude Tag se ejecuta en uno.15Los mismos entornos se aplican dondequiera que inicie una sesión en la nube: la [aplicación de escritorio](/docs/es/desktop), la [aplicación móvil de Claude](/docs/es/mobile), su navegador en [claude.ai/code](https://claude.ai/code), la terminal con [`claude --cloud`](/docs/es/claude-code-on-the-web#from-terminal-to-cloud), [routines](/docs/es/routines) y [Claude Tag](https://claude.com/docs/claude-tag/overview). Cada una de estas superficies también puede enrutar a un [entorno autohospedado](/docs/es/self-hosted-environments). [Disponibilidad y limitaciones](/docs/es/self-hosted-environments#availability-and-limitations) cubre lo que Claude aún no puede usar cuando una sesión de Claude Tag se ejecuta en uno.

16 16 


44 Configurar su entorno44 Configurar su entorno

45</h2>45</h2>

46 46 

47Cree, edite y archive entornos desde el selector de entornos, al que accede en [claude.ai/code](https://claude.ai/code) después de la [incorporación web](/docs/es/web-quickstart), o desde el cuadro de mensaje en la [aplicación de escritorio](/docs/es/desktop#cloud-sessions). Los entornos que crea son personales para su cuenta; los [entornos compartidos](#organization-shared-environments) creados por un Propietario aparecen en el mismo selector. Consulte [Herramientas instaladas](#installed-tools) para ver qué está disponible sin ninguna configuración.47Agrega, edita y archiva entornos desde el selector de entornos que se encuentra debajo del cuadro de mensaje en la pantalla donde inicias una nueva sesión en [claude.ai/code](https://claude.ai/code). Para llegar a esa pantalla, completa la [incorporación web](/docs/es/web-quickstart). Para la aplicación de escritorio, consulta [Sesiones en la nube](/docs/es/desktop#cloud-sessions). Los entornos que creas son personales para tu cuenta; los [entornos compartidos](#organization-shared-environments) creados por un Propietario aparecen en el selector junto a ellos. Consulta [Herramientas instaladas](#installed-tools) para ver qué está disponible sin ninguna configuración.

48 

49El selector solo aparece hasta que envías el primer mensaje de una nueva sesión. Para editar el entorno de una sesión en la nube propia que está en ejecución, selecciona el símbolo de intercalación después del título de la sesión en la parte superior y luego selecciona **Editar entorno en la nube**.

48 50 

49<Steps>51<Steps>

50 <Step title="Abrir el selector de entornos">52 <Step title="Abrir el selector de entornos">

51 En [claude.ai/code](https://claude.ai/code), seleccione el icono de nube que muestra el nombre del entorno actual, en la fila encima del cuadro de mensaje. No hay página de configuración ni URL directa para el selector.53 En la pantalla de nueva sesión, selecciona el primer control de la fila que está debajo del cuadro de mensaje.

52 

53 <Frame>

54 <img src="https://mintcdn.com/claude-code/ZFId6l95856c5LSw/images/cloud-environment-selector.png?fit=max&auto=format&n=ZFId6l95856c5LSw&q=85&s=cc2813a5664519eaf5a89d793ce5af26" alt="El selector de entornos abierto encima del cuadro de mensaje en claude.ai/code. El botón de nube que muestra el nombre del entorno Default se encuentra en la fila encima del cuadro de mensaje. El menú abierto enumera una fila Local con etiquetas de Descargar y Solo escritorio, una sección Cloud donde el entorno Default está seleccionado con una marca de verificación y muestra un icono de engranaje de configuración al pasar el ratón, una opción Agregar entorno en la nube y una sección Remote Control con instrucciones de configuración." width="1672" height="682" data-path="images/cloud-environment-selector.png" />

55 </Frame>

56 </Step>54 </Step>

57 55 

58 <Step title="Agregar o editar un entorno">56 <Step title="Agregar o editar un entorno">

59 Seleccione **Cloud** para enumerar sus entornos. Luego seleccione **Agregar entorno en la nube**, o pase el ratón sobre un entorno existente y seleccione el icono de configuración que aparece a la derecha.57 * **Agregar un entorno**: selecciona **Nuevo entorno** en la parte inferior del menú para abrir el diálogo **Nuevo entorno**. Completa el formulario y selecciona **Agregar entorno**. Tu nueva sesión usará entonces el entorno que agregaste.

58 * **Editar un entorno**: busca su fila bajo **Cloud**. Si **Cloud** es una sola fila, selecciónala para abrir la lista. Si tu entorno no aparece bajo **Cloud**, selecciona la fila **Más** bajo ese encabezado. Pasa el ratón sobre la fila del entorno y selecciona el icono de configuración que aparece a su derecha para abrir su diálogo.

60 59 

61 El diálogo incluye el nombre, nivel de acceso a la red, variables de entorno y script de configuración. Cuando editas un entorno en la nube existente en un plan Pro o Max, el diálogo también incluye [secretos de red](#add-network-secrets).60 El diálogo incluye el nombre, nivel de acceso a la red, variables de entorno y script de configuración. Para almacenar una clave que las sesiones usan sin verla, consulta [Agregar secretos de red](#add-network-secrets).

62 

63 <Frame>

64 <img src="https://mintcdn.com/claude-code/ZFId6l95856c5LSw/images/cloud-environment-dialog.png?fit=max&auto=format&n=ZFId6l95856c5LSw&q=85&s=30d4478b31d1f879f7ee287ddab32505" alt="El diálogo Nuevo entorno en la nube. Un campo Nombre con el texto de marcador de posición Default, un selector de Acceso a la red establecido en Trusted con enlaces a la política de red y niveles de acceso, un cuadro Variables de entorno que muestra texto de marcador de posición en formato .env con una nota de que los valores son visibles para cualquiera que use el entorno, un cuadro Script de configuración descrito como un script Bash que se ejecuta cuando comienza una nueva sesión antes de que se lance Claude Code, y botones Cancelar y Crear entorno." width="874" height="1372" data-path="images/cloud-environment-dialog.png" />

65 </Frame>

66 </Step>61 </Step>

67</Steps>62</Steps>

68 63 


91 86 

92Una sesión en la nube también establece algunas variables por sí misma cuando inicia. Para [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/docs/es/claude-code-on-the-web#manage-context), el valor que la sesión establece anula uno que agregue aquí, por lo que agregar esa clave aquí no tiene efecto.87Una sesión en la nube también establece algunas variables por sí misma cuando inicia. Para [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/docs/es/claude-code-on-the-web#manage-context), el valor que la sesión establece anula uno que agregue aquí, por lo que agregar esa clave aquí no tiene efecto.

93 88 

94Cualquiera que use el entorno puede leer los valores. En planes Pro y Max, usa en su lugar un [secreto de red](#add-network-secrets) para una clave que el proxy del agente pueda adjuntar a una solicitud. Las [solicitudes que nunca obtienen un secreto](#requests-that-never-get-the-credential) se enumeran allí.89Cualquiera que use el entorno puede leer los valores. En un entorno alojado por Anthropic, usa en su lugar un [secreto de red](#add-network-secrets) para una clave que el proxy del agente pueda adjuntar a una solicitud. Las [solicitudes que nunca obtienen un secreto](#requests-that-never-get-the-credential) se enumeran allí.

95 90 

96<span id="add-api-credentials" />91<span id="add-api-credentials" />

97 92 


101 96 

102Un secreto de red es una clave de API o token que almacenas en un entorno en la nube para que Claude pueda llamar a esa API desde cualquier sesión en el entorno sin ver la clave. El proxy del agente de Anthropic agrega la clave a las solicitudes de los hosts que enumeras, después de que cada solicitud sale de la VM de la sesión, por lo que la clave misma permanece fuera de la VM.97Un secreto de red es una clave de API o token que almacenas en un entorno en la nube para que Claude pueda llamar a esa API desde cualquier sesión en el entorno sin ver la clave. El proxy del agente de Anthropic agrega la clave a las solicitudes de los hosts que enumeras, después de que cada solicitud sale de la VM de la sesión, por lo que la clave misma permanece fuera de la VM.

103 98 

104Los secretos de red están disponibles en planes Pro y Max. Aún no están disponibles en planes Team o Enterprise, por lo que la sección **Secretos de red** no aparece en el diálogo de entorno en esos planes.99Los secretos de red están disponibles en planes Pro, Max, Team y Enterprise. Para comprobar si puedes agregar uno tú mismo, consulta [Requisitos](#requirements).

105 100 

106<h4 id="requirements">101<h4 id="requirements">

107 Requisitos102 Requisitos


109 104 

110Estos requisitos deciden si puedes agregar un secreto y si el proxy del agente puede usarlo una vez agregado:105Estos requisitos deciden si puedes agregar un secreto y si el proxy del agente puede usarlo una vez agregado:

111 106 

112* **Rol**: un rol de administrador de la organización en su organización claude.ai107* **Rol**: en planes Pro, Max y Team, puedes agregar y eliminar secretos en tus propios entornos sin importar tu rol. En Team y Enterprise, los Propietarios tienen un rol de administrador de la organización en tu organización de claude.ai y los Administradores no, lo que cambia lo que ves en estos casos:

113 * En Team y Enterprise, los Propietarios lo tienen y los Administradores no108 * **Tu propio entorno en Enterprise**: con un rol de administrador de la organización, agregas y eliminas secretos. Sin él, la sección **Secretos de red** enumera los secretos bajo la nota "Solo un administrador de la organización puede agregar o eliminar secretos de red", sin botón **Agregar secreto** ni de eliminar. Pide a un Propietario que agregue el secreto a un [entorno compartido](#organization-shared-environments) y luego ejecuta tus sesiones allí

114 * En Pro y Max, lo tiene en su propia organización109 * **Un entorno compartido**: los Propietarios [agregan y eliminan sus secretos](#add-a-credential) desde la configuración de administración. Sin un rol de administrador de la organización, pide a un Propietario que agregue el secreto, porque el diálogo del entorno no tiene sección **Secretos de red**

110 * **Tu propio entorno en Team**: sin un rol de administrador de la organización, **Agregar secreto** abre un [formulario más corto](#add-a-secret-without-the-role) que acepta un host

115* **Tipo de entorno**: un entorno en la nube alojado por Anthropic que ya existe. Un [entorno autohospedado](/docs/es/self-hosted-environments) no tiene secretos de red111* **Tipo de entorno**: un entorno en la nube alojado por Anthropic que ya existe. Un [entorno autohospedado](/docs/es/self-hosted-environments) no tiene secretos de red

116* **Accesibilidad de API**: la API acepta conexiones desde internet, porque las solicitudes salen de la red de Anthropic112* **Accesibilidad de API**: la API acepta conexiones desde internet, porque las solicitudes salen de la red de Anthropic

117* **Claves de cifrado**: si tu organización utiliza claves de cifrado administradas por el cliente, no puedes guardar secretos de red113* **Claves de cifrado**: si tu organización utiliza claves de cifrado administradas por el cliente, no puedes guardar secretos de red


122 118 

123Agregas secretos uno a la vez, y no puedes editar un secreto después de agregarlo. Para cambiar los hosts o el valor de un secreto, elimínalo y agrégalo de nuevo.119Agregas secretos uno a la vez, y no puedes editar un secreto después de agregarlo. Para cambiar los hosts o el valor de un secreto, elimínalo y agrégalo de nuevo.

124 120 

121Para agregar un secreto a un [entorno compartido](#organization-shared-environments), ábrelo para editar desde la página **Entornos en la nube** en la [configuración de administración](https://claude.ai/admin-settings) y luego continúa el paso 1 desde la sección **Secretos de red**. Si estás en un plan Team y no tienes un [rol de administrador de la organización](#requirements), sigue el paso 1 en tu propio entorno y luego [completa el formulario más corto](#add-a-secret-without-the-role).

122 

125<Steps>123<Steps>

126 <Step title="Abrir los secretos de red del entorno">124 <Step title="Abrir los secretos de red del entorno">

127 [Abre el entorno para editar](#configure-your-environment) en [claude.ai/code](https://claude.ai/code). En el diálogo **Editar entorno**, busca la sección **Secretos de red**. Ves los secretos que ya están en el entorno, cada uno con los hosts a los que se aplica.125 [Abre el entorno para editar](#configure-your-environment) en [claude.ai/code](https://claude.ai/code). En el diálogo **Editar entorno en la nube**, busca la sección **Secretos de red**. Ves los secretos que ya están en el entorno, cada uno con los hosts a los que se aplica.

128 </Step>126 </Step>

129 127 

130 <Step title="Agregar el secreto">128 <Step title="Agregar el secreto">

131 Selecciona **Agregar secreto** y completa el formulario. Mantén el **Tipo de credencial** predeterminado, **Bearer**, para una clave de API que viaja en un encabezado de solicitud, y completa estos campos:129 Selecciona **Agregar secreto** y completa el formulario. Mantén el **Tipo de secreto** predeterminado, **Bearer**, para una clave de API que viaja en un encabezado de solicitud, y completa estos campos:

132 130 

133 * **Nombre**: una etiqueta para el secreto, como `Internal billing API`131 * **Nombre**: una etiqueta para el secreto, como `Internal billing API`

134 * **Sitios web permitidos**: los hosts de la API, como `api.example.com`. Un `*.` inicial coincide con cada subdominio132 * **Sitios web permitidos**: los hosts de la API, como `api.example.com`. Un `*.` inicial coincide con cada subdominio

135 * **Encabezados personalizados**: una fila para el encabezado que lleva la clave. La fila comienza con `Authorization` como el **Nombre** del encabezado y `Bearer` como su **Prefijo**; pega la clave misma como el **Valor**. Para un encabezado como `X-Api-Key` que toma el valor sin prefijo, cambia el nombre y borra el prefijo133 * **Encabezados personalizados**: una fila para el encabezado que lleva la clave. La fila comienza con `Authorization` como el **Nombre** del encabezado y `Bearer` como su **Prefijo**; pega la clave misma como el **Valor**. Para un encabezado como `X-Api-Key` que toma el valor sin prefijo, cambia el nombre y borra el prefijo

136 134 

137 Para una API que se autentica de otra manera, elige un **Tipo de credencial** diferente. La lista es la misma que [Claude Tag](https://claude.com/docs/claude-tag/overview), la integración de Slack para planes Team y Enterprise, ofrece para [conexiones](https://claude.com/docs/claude-tag/admins/add-connections).135 Para una API que se autentica de otra manera, elige un **Tipo de secreto** diferente. La lista es la misma que [Claude Tag](https://claude.com/docs/claude-tag/overview), la integración de Slack para planes Team y Enterprise, ofrece para [conexiones](https://claude.com/docs/claude-tag/admins/add-connections).

138 </Step>136 </Step>

139 137 

140 <Step title="Guardar el secreto">138 <Step title="Guardar el secreto">

141 Selecciona **Conectar**. El secreto aparece en la lista con sus hosts, guardado sin el botón **Guardar cambios** del diálogo. No puedes ver el valor nuevamente después de guardar.139 Selecciona **Agregar**. El secreto aparece en la lista con sus hosts, guardado sin el botón **Guardar cambios** del diálogo. No puedes ver el valor nuevamente después de guardar.

142 </Step>140 </Step>

143</Steps>141</Steps>

144 142 

145Para confirmar que el secreto funciona, inicia una sesión en el entorno y pide a Claude que llame a la API, por ejemplo con `curl`. La API responde como si la clave estuviera en la solicitud, y la clave no aparece en las variables de entorno de la sesión ni en ningún archivo. Si en cambio la lista marca un secreto como **No enviado**, la nota debajo dice por qué y qué hacer. Dos secretos cuyos hosts se superponen sin coincidir exactamente no obtienen marcador, y el proxy del agente envía solo uno de ellos.143Para confirmar que el secreto funciona, inicia una sesión en el entorno y pide a Claude que llame a la API, por ejemplo con `curl`. La API responde como si la clave estuviera en la solicitud, y la clave no aparece en las variables de entorno de la sesión ni en ningún archivo. Si en cambio la lista marca un secreto como **No enviado**, la nota debajo dice por qué y qué hacer. Dos secretos cuyos hosts se superponen sin coincidir exactamente no obtienen marcador, y el proxy del agente envía solo uno de ellos.

146 144 

145<h4 id="add-a-secret-without-the-role">

146 Agregar un secreto en un plan Team sin un rol de administrador de la organización

147</h4>

148 

149Si estás en un plan Team y no tienes un [rol de administrador de la organización](#requirements), el formulario **Agregar secreto** acepta un secreto para un host. Selecciona **Agregar secreto** en la [sección **Secretos de red**](#add-a-credential) de tu entorno, completa estos campos y luego selecciona el botón **Agregar secreto** del formulario:

150 

151* **Host**: el único host que obtiene el secreto, como `api.example.com`. El formulario no acepta un comodín `*.`

152* **Nombre**: una etiqueta opcional para el secreto

153* **Tipo de secreto**: **Token** para una clave que viaja en un encabezado de solicitud, o **Nombre de usuario y contraseña**. Para un token, pega la clave como el **Valor**

154 

147<h4 id="which-requests-get-the-credential">155<h4 id="which-requests-get-the-credential">

148 Qué solicitudes obtienen el secreto156 Qué solicitudes obtienen el secreto

149</h4>157</h4>


175 Archivar un entorno183 Archivar un entorno

176</h3>184</h3>

177 185 

178Para archivar uno de sus propios entornos, ábralo para editar y seleccione **Archivar**. Un Propietario archiva un [entorno compartido](#organization-shared-environments) desde la página **Entornos en la nube** en la configuración de administrador. No puede eliminar un entorno, solo archivarlo.186Para archivar uno de tus propios entornos, ábrelo para editar, selecciona **Archivar entorno** y confirma. Si el entorno está [compartido con tu organización](#organization-shared-environments), en cambio lo archiva un Propietario desde la página **Entornos en la nube** en la [configuración de administración](https://claude.ai/admin-settings), así que pídeselo a un Propietario a menos que tú lo seas. No puedes eliminar un entorno, solo archivarlo.

179 187 

180El archivado afecta a las nuevas sesiones, no a las que se están ejecutando:188El archivado afecta a las nuevas sesiones, no a las que se están ejecutando:

181 189 


199 207 

200Los Propietarios eligen el [entorno predeterminado](#the-default-environment) de la organización por separado, en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).208Los Propietarios eligen el [entorno predeterminado](#the-default-environment) de la organización por separado, en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).

201 209 

202Las sesiones de cada miembro en un entorno compartido leen sus variables, por lo que no incluyas secretos en ellas. Los [secretos de red](#add-network-secrets), que dan a las sesiones una clave que no pueden leer, aún no están disponibles en planes Team o Enterprise.210Para dar a las sesiones de un entorno compartido una clave que no puedan leer, agrega un [secreto de red](#add-network-secrets) cuando edites el entorno en la página **Entornos en la nube**. No incluyas secretos en sus variables, porque las sesiones de cada miembro las leen.

203 211 

204<h3 id="set-the-environment-a-claude-tag-channel-uses">212<h3 id="set-the-environment-a-claude-tag-channel-uses">

205 Establecer el entorno que usa un canal de Claude Tag213 Establecer el entorno que usa un canal de Claude Tag


216 224 

217Cada entorno establece un nivel de acceso a la red, que controla las conexiones salientes que pueden hacer sus sesiones. El nivel predeterminado, **Trusted**, permite registros de paquetes y otros [dominios en la lista permitida](#default-allowed-domains); **Custom** toma su propia lista de dominios.225Cada entorno establece un nivel de acceso a la red, que controla las conexiones salientes que pueden hacer sus sesiones. El nivel predeterminado, **Trusted**, permite registros de paquetes y otros [dominios en la lista permitida](#default-allowed-domains); **Custom** toma su propia lista de dominios.

218 226 

219Para cambiar el acceso a la red de un entorno, [ábralo para editar](#configure-your-environment) y use el selector **Network access** en el diálogo. Un [entorno compartido](#organization-shared-environments) se abre como solo lectura allí, por lo que un Propietario cambia su acceso a la red desde la página **Cloud environments** en [configuración de administrador](https://claude.ai/admin-settings) en su lugar. El icono de nube que abre el selector aparece en las superficies de la aplicación enumeradas bajo [El entorno Default](#the-default-environment) y en el [editor de routines](/docs/es/routines#environments-and-network-access); los entornos personales no tienen una página separada en la configuración de su cuenta claude.ai.227Para cambiar el acceso a la red de un entorno, [ábrelo para editarlo](#configure-your-environment) y usa el selector **Network access** en el diálogo. Un [entorno compartido](#organization-shared-environments) se abre como de solo lectura allí, por lo que un Propietario cambia su acceso a la red desde la página **Cloud environments** en la [configuración de administración](https://claude.ai/admin-settings) en su lugar. El control que abre el selector aparece en las superficies de la aplicación enumeradas en [El entorno Default](#the-default-environment) y en el [editor de rutinas](/docs/es/routines#environments-and-network-access); los entornos personales no tienen una página separada en la configuración de tu cuenta de claude.ai.

220 228 

221Cuando cambia el acceso a la red de un entorno alojado por Anthropic, sus sesiones existentes siguen la nueva configuración dentro de aproximadamente un minuto, para solicitudes que pasan por la [lista permitida de red](#access-levels) de la sesión. No necesita iniciar una nueva sesión.229Cuando cambia el acceso a la red de un entorno alojado por Anthropic, sus sesiones existentes siguen la nueva configuración dentro de aproximadamente un minuto, para solicitudes que pasan por la [lista permitida de red](#access-levels) de la sesión. No necesita iniciar una nueva sesión.

222 230 


274* **Credenciales de Git**: el cliente git dentro de la VM utiliza una credencial con alcance, que el proxy verifica e intercambia por su token real de GitHub.282* **Credenciales de Git**: el cliente git dentro de la VM utiliza una credencial con alcance, que el proxy verifica e intercambia por su token real de GitHub.

275* **Solicitudes de API**: las solicitudes de las herramientas integradas de GitHub y de `gh` bajo el [marcador de posición `proxy-injected`](#work-with-github-issues-and-pull-requests), se envían con sus credenciales reales sustituidas.283* **Solicitudes de API**: las solicitudes de las herramientas integradas de GitHub y de `gh` bajo el [marcador de posición `proxy-injected`](#work-with-github-issues-and-pull-requests), se envían con sus credenciales reales sustituidas.

276* **Restricciones de push**: el proxy rechaza las eliminaciones de ramas y los pushes de cualquier cosa que no sea una rama, como una etiqueta. No limita qué ramas puede actualizar un push. Para eso, usa reglas de protección de ramas o rulesets en GitHub.284* **Restricciones de push**: el proxy rechaza las eliminaciones de ramas y los pushes de cualquier cosa que no sea una rama, como una etiqueta. No limita qué ramas puede actualizar un push. Para eso, usa reglas de protección de ramas o rulesets en GitHub.

277* **Alcance del repositorio**: el proxy atiende las solicitudes de API de GitHub para los repositorios adjuntos a la sesión. Una solicitud de API para otro repositorio obtiene un 403 cuyo mensaje comienza con `GitHub access to` y contiene `is not enabled for this session`.285* **Alcance del repositorio**: el proxy atiende las solicitudes de API de GitHub para los repositorios adjuntos a la sesión. Una solicitud de API para otro repositorio obtiene un 403 cuyo mensaje comienza con `GitHub access to` y contiene `is not enabled for this session`. Un archivo de código fuente que obtengas mediante una URL `github.com/{owner}/{repo}/archive/` o `codeload.github.com` obtiene ese mismo 403 cuando el repositorio no está adjunto, incluso si es público.

278* **Restricciones de GraphQL**: el proxy rechaza las solicitudes al endpoint de GraphQL de GitHub con un 403 cuyo mensaje comienza con `GitHub GraphQL is not available from Claude Code sessions` y nombra el respaldo de REST, `gh api repos/{owner}/{repo}/...`. Los subcomandos de `gh` que usan GraphQL, como `gh pr` y `gh issue`, obtienen el mismo 403. La restricción se aplica a cada solicitud a través del proxy independientemente de las credenciales que proporciones, por lo que un `GH_TOKEN` que establezcas obtiene el mismo 403. Claude no puede alcanzar APIs de GitHub que existen solo en GraphQL, como Projects v2, a través del proxy.286* **Restricciones de GraphQL**: el proxy rechaza las solicitudes al endpoint de GraphQL de GitHub con un 403 cuyo mensaje comienza con `GitHub GraphQL is not available from Claude Code sessions` y nombra el respaldo de REST, `gh api repos/{owner}/{repo}/...`. Los subcomandos de `gh` que usan GraphQL, como `gh pr` y `gh issue`, obtienen el mismo 403. La restricción se aplica a cada solicitud a través del proxy independientemente de las credenciales que proporciones, por lo que un `GH_TOKEN` que establezcas obtiene el mismo 403. Claude no puede alcanzar APIs de GitHub que existen solo en GraphQL, como Projects v2, a través del proxy.

279 287 

280Los archivos confirmados de repositorios públicos llegan a través de `raw.githubusercontent.com`, que el [proxy de seguridad](#security-proxy) maneja en su lugar. Ese dominio está en la [lista Trusted](#default-allowed-domains) predeterminada, por lo que esos archivos permanecen accesibles a menos que el [nivel de acceso](#access-levels) del entorno los excluya.288Los archivos confirmados de repositorios públicos llegan a través de `raw.githubusercontent.com`, que el [proxy de seguridad](#security-proxy) maneja en su lugar. Ese dominio está en la [lista Trusted](#default-allowed-domains) predeterminada, por lo que esos archivos permanecen accesibles a menos que el [nivel de acceso](#access-levels) del entorno los excluya.


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 |326| 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 |327| 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 |328| 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 |

321| Claves de API y tokens para servicios que Claude llama | En planes Pro y Max, como [secretos de red](#add-network-secrets) | Agregas la clave una vez en el entorno y el proxy del agente la adjunta a las solicitudes de los hosts que enumeras. Una clave que el proxy del agente [no puede adjuntar](#requests-that-never-get-the-credential), o cualquier clave en un plan Team o Enterprise, permanece en una variable de entorno |329| Claves de API y tokens para servicios que Claude llama | En un entorno alojado por Anthropic, como [secretos de red](#add-network-secrets) | Agregas la clave una vez en el entorno y el proxy del agente la adjunta a las solicitudes de los hosts que enumeras. Una clave que el proxy del agente [no puede adjuntar](#requests-that-never-get-the-credential) permanece en una variable de entorno |

322| Autenticación interactiva como AWS SSO | No | No compatible. SSO requiere un inicio de sesión basado en navegador que no puede ejecutarse en una sesión en la nube |330| Autenticación interactiva como AWS SSO | No | No compatible. SSO requiere un inicio de sesión basado en navegador que no puede ejecutarse en una sesión en la nube |

323 331 

324Para que tu propia configuración esté disponible en sesiones en la nube, haz commit de ella en el repositorio.332Para que tu propia configuración esté disponible en sesiones en la nube, haz commit de ella en el repositorio.

325 333 

326Cualquiera que use el entorno puede leer sus variables de entorno y su script de configuración. La nota del diálogo en **Variables de entorno** lo indica y advierte que no pongas secretos allí. En planes Pro y Max, almacena una clave que el proxy del agente pueda adjuntar como un [secreto de red](#add-network-secrets) en su lugar.334Cualquiera que use el entorno puede leer sus variables de entorno y su script de configuración. La nota del diálogo en **Variables de entorno** lo indica y advierte que no pongas secretos allí. En un entorno alojado por Anthropic, almacena una clave que el proxy del agente pueda adjuntar como un [secreto de red](#add-network-secrets) en su lugar.

327 335 

328<h4 id="add-personal-preferences-without-committing-to-the-repo">336<h4 id="add-personal-preferences-without-committing-to-the-repo">

329 Agregar preferencias personales sin hacer commit en el repositorio337 Agregar preferencias personales sin hacer commit en el repositorio

code-review.md +0 −2

Details

155* Debe tener permiso de escritura, mantenimiento o administrador en el repositorio155* Debe tener permiso de escritura, mantenimiento o administrador en el repositorio

156* El PR debe estar abierto156* El PR debe estar abierto

157 157 

158Si el repositorio pertenece a una organización y su membresía en esa organización es privada, que es el valor predeterminado de GitHub, GitHub no lo identifica ante Claude como miembro. Claude aún puede reaccionar a su comentario con 👀, pero no inicia una revisión a menos que haya sido agregado al repositorio directamente como colaborador, incluso cuando un equipo o los permisos base de la organización le otorguen acceso de escritura. Para solucionar esto, [haga pública su membresía en la organización](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership) o pida a un administrador del repositorio que lo agregue al repositorio como colaborador.

159 

160A diferencia de los disparadores automáticos, los disparadores manuales se ejecutan en PR de borrador, ya que una solicitud explícita señala que desea la revisión ahora independientemente del estado de borrador.158A diferencia de los disparadores automáticos, los disparadores manuales se ejecutan en PR de borrador, ya que una solicitud explícita señala que desea la revisión ahora independientemente del estado de borrador.

161 159 

162Si una revisión ya se está ejecutando en ese PR, la solicitud se pone en cola hasta que se complete la revisión en progreso. Puede monitorear el progreso a través de la ejecución de verificación en el PR.160Si una revisión ya se está ejecutando en ese PR, la solicitud se pone en cola hasta que se complete la revisión en progreso. Puede monitorear el progreso a través de la ejecución de verificación en el PR.

commands.md +6 −6

Details

67| `/branch [name]` | Crea una rama de la conversación actual en este punto, para que puedas probar una dirección diferente sin perder la conversación tal como está. Te cambia a la rama y conserva la original, a la que puedes volver con `/resume`. Para ejecutar una copia como una [sesión en segundo plano](/docs/es/agent-view) separada en lugar de cambiarte a ella, usa `/fork`; para entregar una tarea secundaria a un [subagente](/docs/es/sub-agents) que informe de vuelta en esta conversación, usa `/subtask` |67| `/branch [name]` | Crea una rama de la conversación actual en este punto, para que puedas probar una dirección diferente sin perder la conversación tal como está. Te cambia a la rama y conserva la original, a la que puedes volver con `/resume`. Para ejecutar una copia como una [sesión en segundo plano](/docs/es/agent-view) separada en lugar de cambiarte a ella, usa `/fork`; para entregar una tarea secundaria a un [subagente](/docs/es/sub-agents) que informe de vuelta en esta conversación, usa `/subtask` |

68| `/btw [question]` | Haz una [pregunta secundaria](/docs/es/interactive-mode#side-questions-with-%2Fbtw) sobre la sesión actual sin agregarla a la conversación. Si ejecutas `/btw` sin una pregunta, Claude Code muestra tu pregunta secundaria más reciente para que puedas explorar respuestas anteriores; si aún no has hecho ninguna, Claude Code imprime una línea de uso. Antes de v2.1.212, `/btw` requería una pregunta |68| `/btw [question]` | Haz una [pregunta secundaria](/docs/es/interactive-mode#side-questions-with-%2Fbtw) sobre la sesión actual sin agregarla a la conversación. Si ejecutas `/btw` sin una pregunta, Claude Code muestra tu pregunta secundaria más reciente para que puedas explorar respuestas anteriores; si aún no has hecho ninguna, Claude Code imprime una línea de uso. Antes de v2.1.212, `/btw` requería una pregunta |

69| `/bug [report]` | Informa un error o comparte tu conversación. Eliges cuánto historial de la sesión incluir y confirmas en una pantalla de consentimiento antes de que se envíe nada. Cuando iniciaste sesión en Anthropic con una conexión de primera parte, el informe va a Anthropic; con un proveedor externo, o sin credenciales de Anthropic, Claude Code escribe el informe en un [archivo local en `~/.claude/feedback-bundles/`](/docs/es/data-usage#telemetry-services) que reenvías tú mismo. En la [extensión de VS Code](/docs/es/vs-code#use-the-prompt-box), `/bug` abre en su lugar el diálogo de comentarios propio de la extensión; requiere Claude Code v2.1.229 o posterior. Cuando lo ejecutas mientras Claude está respondiendo, Claude Code abre el diálogo de inmediato. Antes de v2.1.232, Claude Code ponía el comando en cola hasta que terminaba el turno. Alias: `/share`. Antes de v2.1.212, `/bug` y `/share` eran alias de `/feedback` |69| `/bug [report]` | Informa un error o comparte tu conversación. Eliges cuánto historial de la sesión incluir y confirmas en una pantalla de consentimiento antes de que se envíe nada. Cuando iniciaste sesión en Anthropic con una conexión de primera parte, el informe va a Anthropic; con un proveedor externo, o sin credenciales de Anthropic, Claude Code escribe el informe en un [archivo local en `~/.claude/feedback-bundles/`](/docs/es/data-usage#telemetry-services) que reenvías tú mismo. En la [extensión de VS Code](/docs/es/vs-code#use-the-prompt-box), `/bug` abre en su lugar el diálogo de comentarios propio de la extensión; requiere Claude Code v2.1.229 o posterior. Cuando lo ejecutas mientras Claude está respondiendo, Claude Code abre el diálogo de inmediato. Antes de v2.1.232, Claude Code ponía el comando en cola hasta que terminaba el turno. Alias: `/share`. Antes de v2.1.212, `/bug` y `/share` eran alias de `/feedback` |

70| `/cd <path>` | Mueve esta sesión a un nuevo directorio de trabajo, conservando la conversación. Escribe una ruta parcial para ver sugerencias de directorios coincidentes; presiona `Tab` para aceptar una. Las sugerencias requieren Claude Code v2.1.206 o posterior. Para saber qué aplica Claude Code desde el nuevo directorio en cuanto te mueves, y en qué se diferencia `/cd` de `/add-dir`, consulta [Mover la sesión a otro directorio](/docs/es/permissions#move-the-session-to-another-directory) |70| `/cd <path>` | Mueve esta sesión a un nuevo directorio de trabajo, conservando la conversación. Escribe una ruta parcial para ver sugerencias de directorios coincidentes; presiona `Tab` para aceptar una. Para saber qué aplica Claude Code desde el nuevo directorio en cuanto te mueves, y en qué se diferencia `/cd` de `/add-dir`, consulta [Mover la sesión a otro directorio](/docs/es/permissions#move-the-session-to-another-directory) |

71| `/chrome` | Ajusta la configuración de [Claude in Chrome](/docs/es/chrome) |71| `/chrome` | Ajusta la configuración de [Claude in Chrome](/docs/es/chrome) |

72| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[Skill](/docs/es/skills#bundled-skills).** Carga material de referencia de la [API de Claude](https://platform.claude.com/docs/en/api/overview) y de [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) para el lenguaje de tu proyecto. También se activa automáticamente cuando tu código importa `anthropic` o `@anthropic-ai/sdk`. Para saber qué hace cada subcomando y la versión que requiere, consulta [Trabajar en proyectos de la API de Claude](/docs/es/skills#work-on-claude-api-projects) |72| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[Skill](/docs/es/skills#bundled-skills).** Carga material de referencia de la [API de Claude](https://platform.claude.com/docs/en/api/overview) y de [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) para el lenguaje de tu proyecto. También se activa automáticamente cuando tu código importa `anthropic` o `@anthropic-ai/sdk`. Para saber qué hace cada subcomando y la versión que requiere, consulta [Trabajar en proyectos de la API de Claude](/docs/es/skills#work-on-claude-api-projects) |

73| `/claude-in-chrome [task]` | **[Skill](/docs/es/skills#bundled-skills).** Haz que Claude realice una tarea en tu navegador, como probar una página, completar un formulario o leer los registros de la consola, a través de [Claude in Chrome](/docs/es/chrome). Disponible cuando la integración con Chrome está habilitada para la sesión, por ejemplo con `claude --chrome`, o cuando Claude Code puede ofrecer [instalar la extensión](/docs/es/chrome#install-the-extension-when-claude-asks) |73| `/claude-in-chrome [task]` | **[Skill](/docs/es/skills#bundled-skills).** Haz que Claude realice una tarea en tu navegador, como probar una página, completar un formulario o leer los registros de la consola, a través de [Claude in Chrome](/docs/es/chrome). Disponible cuando la integración con Chrome está habilitada para la sesión, por ejemplo con `claude --chrome`, o cuando Claude Code puede ofrecer [instalar la extensión](/docs/es/chrome#install-the-extension-when-claude-asks) |

74| `/clear [name]` | Inicia una nueva conversación con el contexto vacío. Pasa un nombre para etiquetar la conversación anterior en el selector de `/resume`. Para liberar contexto sin dejar la misma conversación, usa `/compact` en su lugar. Reanuda la conversación anterior con `/resume` o, en el mismo proceso de Claude Code, restáurala desde [la entrada de sesión anterior del menú de rewind](/docs/es/checkpointing#rewind-past-a-cleared-conversation). Alias: `/reset`, `/new` |74| `/clear [name]` | Inicia una nueva conversación con el contexto vacío. Pasa un nombre para etiquetar la conversación anterior en el selector de `/resume`. Para liberar contexto sin dejar la misma conversación, usa `/compact` en su lugar. Reanuda la conversación anterior con `/resume` o, en el mismo proceso de Claude Code, restáurala desde [la entrada de sesión anterior del menú de rewind](/docs/es/checkpointing#rewind-past-a-cleared-conversation). Alias: `/reset`, `/new` |

75| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | **[Skill](/docs/es/skills#bundled-skills).** Revisa el diff actual, o un número de PR, una rama o una ruta que pases, en busca de errores de corrección. Según tu modelo y tu nivel de esfuerzo, la revisión también cubre oportunidades de limpieza. Pasa `--fix` para aplicar los hallazgos, `--comment` para publicarlos en el PR de GitHub o en el merge request de GitLab, o `ultra` para ejecutar una [revisión en la nube](/docs/es/ultrareview) profunda. Publicar en un merge request de GitLab requiere Claude Code v2.1.257 o posterior. Con `ultra` sobre un PR de `github.com` como destino, pasa `--post` para preseleccionar [publicar los hallazgos terminados en el PR](/docs/es/ultrareview#post-findings-to-the-pull-request) en el diálogo de inicio; `--post` requiere Claude Code v2.1.227 o posterior. Consulta [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para conocer los niveles de esfuerzo, cómo elegir el destino y cómo se relaciona con `/simplify`. Alias: `/review` |75| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | **[Skill](/docs/es/skills#bundled-skills).** Revisa el diff actual, o un número de PR, una rama o una ruta que pases, en busca de errores de corrección. Según tu modelo y tu nivel de esfuerzo, la revisión también cubre oportunidades de limpieza. Pasa `--fix` para aplicar los hallazgos, `--comment` para publicarlos en el PR de GitHub o en el merge request de GitLab, o `ultra` para ejecutar una [revisión en la nube](/docs/es/ultrareview) profunda. Publicar en un merge request de GitLab requiere Claude Code v2.1.257 o posterior. Con `ultra` sobre un PR de `github.com` como destino, pasa `--post` para preseleccionar [publicar los hallazgos terminados en el PR](/docs/es/ultrareview#post-findings-to-the-pull-request) en el diálogo de inicio; `--post` requiere Claude Code v2.1.227 o posterior. Consulta [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para conocer los niveles de esfuerzo, cómo elegir el destino y cómo se relaciona con `/simplify`. Alias: `/review` |

76| `/color [color\|default]` | Establece el color de la barra del prompt para la sesión actual. Colores disponibles: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Usa `default` para restablecerlo, o ejecútalo sin argumento para elegir un color aleatorio. Cuando [Remote Control](/docs/es/remote-control) está conectado, el color se sincroniza con claude.ai/code. También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior |76| `/color [color\|default]` | Establece el color de la barra del prompt para la sesión actual. Colores disponibles: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Usa `default` para restablecerlo, o ejecútalo sin argumento para elegir un color aleatorio. Cuando [Remote Control](/docs/es/remote-control) está conectado, el color se sincroniza con claude.ai/code. También disponible en modo no interactivo (`-p`) |

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 |


91| `/effort [level\|auto\|status\|ultracode [on\|off]]` | Establece el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level): de `low` a `xhigh`, `max` o `auto`; `status` lo imprime. `ultracode` o `ultracode on` activa [ultracode](/docs/es/workflows#let-claude-decide-with-ultracode) para la sesión en el nivel actual, y `ultracode off` lo desactiva; la clave [`ultracode`](/docs/es/settings-reference#ultracode) persiste. `max` es solo para la sesión. Los argumentos `on` y `off` y mantener el nivel actual requieren Claude Code v2.1.284 o posterior. Antes de v2.1.284, `/effort ultracode` establecía la sesión en `xhigh`, y `/effort ultracode off` fallaba con `Invalid argument`. Ejecútalo mientras Claude está respondiendo y, una vez que confirmes la [advertencia de caché](/docs/es/prompt-caching#changing-effort-level), si Claude Code muestra una, Claude Code aplica el nuevo nivel a la siguiente solicitud de ese turno. Antes de v2.1.242, Claude Code decidía, a partir de un feature flag que obtenía de Anthropic, si ejecutar el comando a mitad del turno o ponerlo en cola hasta que terminara el turno, y siempre lo ponía en cola en una sesión que no [obtiene feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching), como con un [proveedor externo](/docs/es/third-party-integrations). Funciona en `-p` |91| `/effort [level\|auto\|status\|ultracode [on\|off]]` | Establece el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level): de `low` a `xhigh`, `max` o `auto`; `status` lo imprime. `ultracode` o `ultracode on` activa [ultracode](/docs/es/workflows#let-claude-decide-with-ultracode) para la sesión en el nivel actual, y `ultracode off` lo desactiva; la clave [`ultracode`](/docs/es/settings-reference#ultracode) persiste. `max` es solo para la sesión. Los argumentos `on` y `off` y mantener el nivel actual requieren Claude Code v2.1.284 o posterior. Antes de v2.1.284, `/effort ultracode` establecía la sesión en `xhigh`, y `/effort ultracode off` fallaba con `Invalid argument`. Ejecútalo mientras Claude está respondiendo y, una vez que confirmes la [advertencia de caché](/docs/es/prompt-caching#changing-effort-level), si Claude Code muestra una, Claude Code aplica el nuevo nivel a la siguiente solicitud de ese turno. Antes de v2.1.242, Claude Code decidía, a partir de un feature flag que obtenía de Anthropic, si ejecutar el comando a mitad del turno o ponerlo en cola hasta que terminara el turno, y siempre lo ponía en cola en una sesión que no [obtiene feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching), como con un [proveedor externo](/docs/es/third-party-integrations). Funciona en `-p` |

92| `/exit` | Sale de la CLI. En una [sesión en segundo plano](/docs/es/agent-view#attach-to-a-session) adjunta, esto la separa y la sesión sigue ejecutándose. Alias: `/quit` |92| `/exit` | Sale de la CLI. En una [sesión en segundo plano](/docs/es/agent-view#attach-to-a-session) adjunta, esto la separa y la sesión sigue ejecutándose. Alias: `/quit` |

93| `/export [filename]` | Exporta la conversación actual como texto sin formato. Con un nombre de archivo, escribe directamente en ese archivo. Sin él, abre un diálogo para copiar al portapapeles o guardar en un archivo |93| `/export [filename]` | Exporta la conversación actual como texto sin formato. Con un nombre de archivo, escribe directamente en ese archivo. Sin él, abre un diálogo para copiar al portapapeles o guardar en un archivo |

94| `/fast [on\|off]` | Activa o desactiva el [modo rápido](/docs/es/fast-mode). Ejecútalo mientras Claude está respondiendo y Claude Code cambia el modo rápido sin esperar a que termine el turno, aunque el turno en curso termina a su velocidad original. Antes de v2.1.242, Claude Code decidía, a partir de un feature flag que obtenía de Anthropic, si ejecutar el comando a mitad del turno o ponerlo en cola hasta que terminara el turno, y siempre lo ponía en cola en una sesión que no [obtiene feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching). La disponibilidad en modo no interactivo con `-p` es limitada; consulta [Alternar el modo rápido](/docs/es/fast-mode#toggle-fast-mode). Requiere Claude Code v2.1.205 o posterior |94| `/fast [on\|off]` | Activa o desactiva el [modo rápido](/docs/es/fast-mode). Ejecútalo mientras Claude está respondiendo y Claude Code cambia el modo rápido sin esperar a que termine el turno, aunque el turno en curso termina a su velocidad original. Antes de v2.1.242, Claude Code decidía, a partir de un feature flag que obtenía de Anthropic, si ejecutar el comando a mitad del turno o ponerlo en cola hasta que terminara el turno, y siempre lo ponía en cola en una sesión que no [obtiene feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching). La disponibilidad en modo no interactivo con `-p` es limitada; consulta [Alternar el modo rápido](/docs/es/fast-mode#toggle-fast-mode) |

95| `/feedback [report]` | Envía comentarios sobre el producto Claude Code. Abre el mismo diálogo que [`/bug`](#all-commands), con el mismo paso de consentimiento, las mismas reglas de envío y el mismo comportamiento a mitad de turno. En sesiones con [comentarios redactados por Claude](/docs/es/tools-reference#sendfeedback-tool-behavior), `/feedback` sin argumento abre en su lugar la cola de borradores, donde revisas, editas, envías o descartas los borradores que Claude puso en cola; la cola incluye una opción para escribir un nuevo informe en el diálogo. Con un argumento, y siempre para `/bug`, el diálogo se abre directamente |95| `/feedback [report]` | Envía comentarios sobre el producto Claude Code. Abre el mismo diálogo que [`/bug`](#all-commands), con el mismo paso de consentimiento, las mismas reglas de envío y el mismo comportamiento a mitad de turno. En sesiones con [comentarios redactados por Claude](/docs/es/tools-reference#sendfeedback-tool-behavior), `/feedback` sin argumento abre en su lugar la cola de borradores, donde revisas, editas, envías o descartas los borradores que Claude puso en cola; la cola incluye una opción para escribir un nuevo informe en el diálogo. Con un argumento, y siempre para `/bug`, el diálogo se abre directamente |

96| `/fewer-permission-prompts` | **[Skill](/docs/es/skills#bundled-skills).** Analiza tus transcripciones en busca de llamadas comunes de solo lectura a Bash y a herramientas MCP, y luego agrega una lista de permitidos priorizada al `.claude/settings.json` del proyecto para reducir las solicitudes de permiso |96| `/fewer-permission-prompts` | **[Skill](/docs/es/skills#bundled-skills).** Analiza tus transcripciones en busca de llamadas comunes de solo lectura a Bash y a herramientas MCP, y luego agrega una lista de permitidos priorizada al `.claude/settings.json` del proyecto para reducir las solicitudes de permiso |

97| `/focus` | Activa o desactiva la vista de enfoque, que muestra solo tu último prompt, un resumen de una línea de las llamadas a herramientas con estadísticas de diff de las ediciones, y la respuesta final. El resumen de llamadas a herramientas también cuenta los subagentes lanzados en el turno y agrupa las notificaciones de tareas en segundo plano completadas en un solo recuento. La selección persiste entre sesiones; establece [`viewMode`](/docs/es/settings-reference#viewmode) en la configuración para sobrescribirla. Solo disponible en [renderizado de pantalla completa](/docs/es/fullscreen). Desde un cliente de [Remote Control](/docs/es/remote-control), ejecuta `/focus [on\|off]` para activar o desactivar la vista de enfoque solo para la sesión actual, sin cambiar tu selección guardada; esto requiere Claude Code v2.1.281 o posterior. La [extensión de VS Code](/docs/es/vs-code#use-the-prompt-box) ofrece su propia vista Focus como un interruptor en el menú de comandos, almacenado como un ajuste de la extensión, independiente de `viewMode` |97| `/focus` | Activa o desactiva la vista de enfoque, que muestra solo tu último prompt, un resumen de una línea de las llamadas a herramientas con estadísticas de diff de las ediciones, y la respuesta final. El resumen de llamadas a herramientas también cuenta los subagentes lanzados en el turno y agrupa las notificaciones de tareas en segundo plano completadas en un solo recuento. La selección persiste entre sesiones; establece [`viewMode`](/docs/es/settings-reference#viewmode) en la configuración para sobrescribirla. Solo disponible en [renderizado de pantalla completa](/docs/es/fullscreen). Desde un cliente de [Remote Control](/docs/es/remote-control), ejecuta `/focus [on\|off]` para activar o desactivar la vista de enfoque solo para la sesión actual, sin cambiar tu selección guardada; esto requiere Claude Code v2.1.281 o posterior. La [extensión de VS Code](/docs/es/vs-code#use-the-prompt-box) ofrece su propia vista Focus como un interruptor en el menú de comandos, almacenado como un ajuste de la extensión, independiente de `viewMode` |


111| `/login` | Inicia sesión en tu cuenta de Anthropic |111| `/login` | Inicia sesión en tu cuenta de Anthropic |

112| `/logout` | Cierra sesión en tu cuenta de Anthropic |112| `/logout` | Cierra sesión en tu cuenta de Anthropic |

113| `/loop [interval] [prompt]` | **[Skill](/docs/es/skills#bundled-skills).** Ejecuta un prompt repetidamente mientras la sesión permanece abierta. Omite el intervalo y Claude [marca su propio ritmo entre iteraciones](/docs/es/scheduled-tasks#let-claude-choose-the-interval). Omite el prompt y Claude ejecuta el [prompt de mantenimiento integrado](/docs/es/scheduled-tasks#run-the-built-in-maintenance-prompt) o tu [`loop.md`](/docs/es/scheduled-tasks#customize-the-default-prompt-with-loop-md). Ejemplo: `/loop 5m check if the deploy finished`. Consulta [Ejecutar prompts según una programación](/docs/es/scheduled-tasks). Alias: `/proactive` |113| `/loop [interval] [prompt]` | **[Skill](/docs/es/skills#bundled-skills).** Ejecuta un prompt repetidamente mientras la sesión permanece abierta. Omite el intervalo y Claude [marca su propio ritmo entre iteraciones](/docs/es/scheduled-tasks#let-claude-choose-the-interval). Omite el prompt y Claude ejecuta el [prompt de mantenimiento integrado](/docs/es/scheduled-tasks#run-the-built-in-maintenance-prompt) o tu [`loop.md`](/docs/es/scheduled-tasks#customize-the-default-prompt-with-loop-md). Ejemplo: `/loop 5m check if the deploy finished`. Consulta [Ejecutar prompts según una programación](/docs/es/scheduled-tasks). Alias: `/proactive` |

114| `/mcp [reconnect (<server>\|all)\|enable\|disable [<server>\|all]]` | Administra las conexiones de servidores MCP y la autenticación OAuth. Ejecútalo sin argumento para abrir la lista interactiva, o pasa `reconnect`, `enable` o `disable` con un nombre de servidor o `all` para cambiar el estado de conexión sin abrirla. `reconnect all` [reintenta cada servidor que falló o necesita autenticación](/docs/es/mcp#retry-failed-servers-yourself). En modo no interactivo (`-p`), ejecutarlo sin argumento imprime un resumen en texto del estado de los servidores en lugar de abrir la lista; requiere Claude Code v2.1.205 o posterior |114| `/mcp [reconnect (<server>\|all)\|enable\|disable [<server>\|all]]` | Administra las conexiones de servidores MCP y la autenticación OAuth. Ejecútalo sin argumento para abrir la lista interactiva, o pasa `reconnect`, `enable` o `disable` con un nombre de servidor o `all` para cambiar el estado de conexión sin abrirla. `reconnect all` [reintenta cada servidor que falló o necesita autenticación](/docs/es/mcp#retry-failed-servers-yourself). En modo no interactivo (`-p`), ejecutarlo sin argumento imprime un resumen en texto del estado de los servidores en lugar de abrir la lista |

115| `/memory` | Edita archivos `CLAUDE.md`, habilita o deshabilita la [memoria automática](/docs/es/memory#auto-memory) y consulta las entradas de memoria automática |115| `/memory` | Edita archivos `CLAUDE.md`, habilita o deshabilita la [memoria automática](/docs/es/memory#auto-memory) y consulta las entradas de memoria automática |

116| `/mobile` | Muestra un código QR para descargar la app móvil de Claude. Alias: `/ios`, `/android` |116| `/mobile` | Muestra un código QR para descargar la app móvil de Claude. Alias: `/ios`, `/android` |

117| `/model [model]` | Cambia el modelo de IA y guárdalo como predeterminado para nuevas sesiones. En los modelos que lo admiten, usa las flechas izquierda/derecha para [ajustar el nivel de esfuerzo](/docs/es/model-config#adjust-effort-level). Sin argumento, abre un selector; presiona `s` en una fila para cambiar solo para la sesión actual. Consulta [cuándo Claude Code te pide confirmar el cambio](/docs/es/prompt-caching#switching-models). Una vez que confirmas el cambio, si Claude Code lo pide, Claude Code aplica el cambio sin esperar a que termine la respuesta actual. Antes de v2.1.242, Claude Code decidía, a partir de un feature flag que obtenía de Anthropic, si ejecutar el comando a mitad del turno o ponerlo en cola hasta que terminara el turno, y siempre lo ponía en cola en una sesión que no [obtiene feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching), como con un [proveedor externo](/docs/es/third-party-integrations). También disponible en modo no interactivo (`-p`) con un argumento de modelo en lugar del selector, donde se aplica solo a la sesión actual y no se guarda como predeterminado; requiere Claude Code v2.1.205 o posterior |117| `/model [model]` | Cambia el modelo de IA y guárdalo como predeterminado para nuevas sesiones. En los modelos que lo admiten, usa las flechas izquierda/derecha para [ajustar el nivel de esfuerzo](/docs/es/model-config#adjust-effort-level). Sin argumento, abre un selector; presiona `s` en una fila para cambiar solo para la sesión actual. Consulta [cuándo Claude Code te pide confirmar el cambio](/docs/es/prompt-caching#switching-models). Una vez que confirmas el cambio, si Claude Code lo pide, Claude Code aplica el cambio sin esperar a que termine la respuesta actual. Antes de v2.1.242, Claude Code decidía, a partir de un feature flag que obtenía de Anthropic, si ejecutar el comando a mitad del turno o ponerlo en cola hasta que terminara el turno, y siempre lo ponía en cola en una sesión que no [obtiene feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching), como con un [proveedor externo](/docs/es/third-party-integrations). También disponible en modo no interactivo (`-p`) con un argumento de modelo en lugar del selector, donde se aplica solo a la sesión actual y no se guarda como predeterminado; requiere Claude Code v2.1.205 o posterior |


130| `/release-notes` | Consulta el registro de cambios en un selector de versiones interactivo. Selecciona una versión específica para ver sus notas de la versión, o elige mostrar todas las versiones. Las notas aparecen en tu transcripción sin entrar en la conversación que ve Claude |130| `/release-notes` | Consulta el registro de cambios en un selector de versiones interactivo. Selecciona una versión específica para ver sus notas de la versión, o elige mostrar todas las versiones. Las notas aparecen en tu transcripción sin entrar en la conversación que ve Claude |

131| `/reload-plugins [--force]` | Recarga todos los [plugins](/docs/es/plugins/overview) activos para aplicar los cambios pendientes sin reiniciar. Informa los recuentos de cada componente recargado y señala cualquier error de carga. Cuando la recarga cambiaría qué herramientas MCP están cargadas e invalidaría la caché de prompts, el comando advierte y omite la recarga a menos que pases `--force`. También disponible en modo no interactivo (`-p`), el Agent SDK y la app de escritorio, donde se ejecuta solo con entrada escrita directamente en la sesión y no aplica cambios en los servidores MCP de plugins; requiere Claude Code v2.1.260 o posterior. Consulta [Aplicar cambios de plugins sin reiniciar](/docs/es/plugins/cli-reference#reload-plugins) |131| `/reload-plugins [--force]` | Recarga todos los [plugins](/docs/es/plugins/overview) activos para aplicar los cambios pendientes sin reiniciar. Informa los recuentos de cada componente recargado y señala cualquier error de carga. Cuando la recarga cambiaría qué herramientas MCP están cargadas e invalidaría la caché de prompts, el comando advierte y omite la recarga a menos que pases `--force`. También disponible en modo no interactivo (`-p`), el Agent SDK y la app de escritorio, donde se ejecuta solo con entrada escrita directamente en la sesión y no aplica cambios en los servidores MCP de plugins; requiere Claude Code v2.1.260 o posterior. Consulta [Aplicar cambios de plugins sin reiniciar](/docs/es/plugins/cli-reference#reload-plugins) |

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. 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 |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`). 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

100 100 

101 <Step title="Comprenda el flujo de ejecución">101 <Step title="Comprenda el flujo de ejecución">

102 ```text wrap theme={null}102 ```text wrap theme={null}

103 rastrear el proceso de inicio de sesión de front-end a base de datos103 rastrea el proceso de inicio de sesión desde el front-end hasta la base de datos

104 ```104 ```

105 </Step>105 </Step>

106</Steps>106</Steps>


248 248 

249 <Step title="Genere una solicitud de extracción">249 <Step title="Genere una solicitud de extracción">

250 ```text wrap theme={null}250 ```text wrap theme={null}

251 crear una pr251 crea un pr

252 ```252 ```

253 </Step>253 </Step>

254 254 

255 <Step title="Revise y refine">255 <Step title="Revise y refine">

256 ```text wrap theme={null}256 ```text wrap theme={null}

257 mejora la descripción de la PR con más contexto sobre las mejoras de seguridad257 mejora la descripción del PR con más contexto sobre las mejoras de seguridad

258 ```258 ```

259 </Step>259 </Step>

260</Steps>260</Steps>


358 358 

359 <Step title="Obtenga sugerencias de código del contenido visual">359 <Step title="Obtenga sugerencias de código del contenido visual">

360 ```text wrap theme={null}360 ```text wrap theme={null}

361 Generar CSS para coincidir con este mockup de diseño361 Genera CSS que coincida con este mockup de diseño

362 ```362 ```

363 363 

364 ```text wrap theme={null}364 ```text wrap theme={null}


419 * Puede hacer referencia a múltiples archivos en un solo mensaje (por ejemplo, "@file1.js y @file2.js")419 * Puede hacer referencia a múltiples archivos en un solo mensaje (por ejemplo, "@file1.js y @file2.js")

420</Tip>420</Tip>

421 421 

422Para evitar que las referencias con `@` incluyan el contenido de los archivos y los listados de directorios en tu mensaje, establece [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/es/env-vars#variables) en tu shell o en tu configuración de usuario. Claude recibe entonces las rutas que referenciaste junto con una nota para leerlas usando sus herramientas de archivos. La variable requiere Claude Code v2.1.299 o posterior, y Claude Code la ignora en la configuración de proyecto y local.

423 

422***424***

423 425 

424<h3 id="run-claude-on-a-schedule">426<h3 id="run-claude-on-a-schedule">


453</h4>455</h4>

454 456 

455```text wrap theme={null}457```text wrap theme={null}

456¿puede Claude Code crear solicitudes de extracción?458¿puede Claude Code crear pull requests?

457```459```

458 460 

459```text wrap theme={null}461```text wrap theme={null}

Details

1602| Prompt del sistema y estilo de salida | Ambos siguen aplicándose |1602| Prompt del sistema y estilo de salida | Ambos siguen aplicándose |

1603| CLAUDE.md de raíz del proyecto y reglas sin alcance | Re-inyectadas desde el disco |1603| CLAUDE.md de raíz del proyecto y reglas sin alcance | Re-inyectadas desde el disco |

1604| Memoria automática | Re-inyectada desde el disco |1604| Memoria automática | Re-inyectada desde el disco |

1605| [Instantánea de estado de Git](/docs/es/settings-reference#includegitinstructions) | Claude Code lee una nueva desde tu repositorio |1605| [Instantánea de estado de Git](/docs/es/settings-reference#includegitinstructions) | Si la sesión comenzó con una, Claude Code lee una nueva desde tu repositorio |

1606| El plan que Claude escribió en [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode) | Re-inyectado desde el disco |1606| El plan que Claude escribió en [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode) | Re-inyectado desde el disco |

1607| Reglas con frontmatter `paths:` | Claude Code las recarga [bajo demanda](/docs/es/memory#path-specific-rules) |1607| Reglas con frontmatter `paths:` | Claude Code las recarga [bajo demanda](/docs/es/memory#path-specific-rules) |

1608| CLAUDE.md anidado en subdirectorios | Claude Code los recarga [bajo demanda](/docs/es/memory#how-claude-md-files-load) |1608| CLAUDE.md anidado en subdirectorios | Claude Code los recarga [bajo demanda](/docs/es/memory#how-claude-md-files-load) |


1622 Cuando su contexto se llena1622 Cuando su contexto se llena

1623</h2>1623</h2>

1624 1624 

1625Claude Code se compacta automáticamente a medida que se acerca al límite, por lo que una ventana de contexto llena no termina su sesión. El paso automático funciona de la misma manera que el paso `/compact` en la línea de tiempo. Vea [Cuando el contexto se llena](/docs/es/how-claude-code-works#when-context-fills-up) para saber qué preserva.1625Claude Code se compacta automáticamente a medida que te acercas al límite, por lo que una ventana de contexto llena no termina tu sesión. El paso automático funciona de la misma manera que el paso `/compact` en la línea de tiempo. Consulta [Cuando el contexto se llena](/docs/es/how-claude-code-works#when-context-fills-up) para saber qué preserva. Para saber cuándo Claude Code también compacta una conversación que dejas inactiva, consulta [compactación por inactividad](/docs/es/settings-reference#idlecompaction).

1626 1626 

1627También puede actuar antes de que se ejecute el paso automático:1627También puede actuar antes de que se ejecute el paso automático:

1628 1628 

Details

128* **Tolere ser invocado desde dentro de sí mismo.** Claude Code aplica el lanzador a cada auto-generado anidado, por lo que un lanzador que adquiere un recurso exclusivo debe detectar que ya lo posee.128* **Tolere ser invocado desde dentro de sí mismo.** Claude Code aplica el lanzador a cada auto-generado anidado, por lo que un lanzador que adquiere un recurso exclusivo debe detectar que ya lo posee.

129* **No escriba en la terminal antes de que Claude Code se inicie.** Cualquier cosa impresa antes del `exec` se reporta como la causa del bloqueo si la sesión muere antes de inicializarse.129* **No escriba en la terminal antes de que Claude Code se inicie.** Cualquier cosa impresa antes del `exec` se reporta como la causa del bloqueo si la sesión muere antes de inicializarse.

130* **No dependas de cómo se escriben los argumentos.** El valor de un flag puede llegar como su propio argumento, `--flag value`, o unido al flag, `--flag=value`. La forma que usa un flag puede cambiar entre versiones.130* **No dependas de cómo se escriben los argumentos.** El valor de un flag puede llegar como su propio argumento, `--flag value`, o unido al flag, `--flag=value`. La forma que usa un flag puede cambiar entre versiones.

131* **Ejecuta `exec` desde el directorio en el que se inició el lanzador.** Claude Code trabaja en el directorio en el que se inicia, por lo que un lanzador que cambia de directorio puede iniciar una sesión en el proyecto equivocado. Si el lanzador debe entrar en un espacio de nombres o sandbox que reinicia el directorio de trabajo, vuelve al directorio inicial dentro de él, antes del `exec`.

131 132 

132<h3 id="format-of-the-launcher-value">133<h3 id="format-of-the-launcher-value">

133 Formato del valor del lanzador134 Formato del valor del lanzador

Details

170| Skill no aparece en `/skills` | El archivo de skill está en `.claude/skills/name.md` en lugar de en una carpeta | Use una carpeta con `SKILL.md` dentro: `.claude/skills/name/SKILL.md`. |170| Skill no aparece en `/skills` | El archivo de skill está en `.claude/skills/name.md` en lugar de en una carpeta | Use una carpeta con `SKILL.md` dentro: `.claude/skills/name/SKILL.md`. |

171| Skill aparece en `/skills` pero Claude nunca lo invoca | Skill tiene `disable-model-invocation: true` en su frontmatter, o su descripción no coincide con cómo formula la solicitud | Verifique la insignia en `/skills`: una etiqueta "user-only" significa que Claude no lo activará por su cuenta. Consulte [invocación de skill](/docs/es/skills). |171| Skill aparece en `/skills` pero Claude nunca lo invoca | Skill tiene `disable-model-invocation: true` en su frontmatter, o su descripción no coincide con cómo formula la solicitud | Verifique la insignia en `/skills`: una etiqueta "user-only" significa que Claude no lo activará por su cuenta. Consulte [invocación de skill](/docs/es/skills). |

172| Las instrucciones de `CLAUDE.md` del subdirectorio parecen ignoradas | Los archivos del subdirectorio se cargan bajo demanda, no al inicio de la sesión | Para cargar el `CLAUDE.md` de un subdirectorio, pídele a Claude que lea otro archivo de ese subdirectorio. Consulta [cuándo se cargan los archivos del subdirectorio](/docs/es/memory#how-claude-md-files-load). |172| Las instrucciones de `CLAUDE.md` del subdirectorio parecen ignoradas | Los archivos del subdirectorio se cargan bajo demanda, no al inicio de la sesión | Para cargar el `CLAUDE.md` de un subdirectorio, pídele a Claude que lea otro archivo de ese subdirectorio. Consulta [cuándo se cargan los archivos del subdirectorio](/docs/es/memory#how-claude-md-files-load). |

173| El subagente ignora las instrucciones de `CLAUDE.md` | Los agentes Explore y Plan integrados omiten `CLAUDE.md`. Un subagente personalizado lo carga de la misma manera que la conversación principal, a menos que su definición establezca [`omitClaudeMd`](/docs/es/sub-agents#supported-frontmatter-fields) | Para Explore o Plan, restate la instrucción en su indicador delegado. Para un subagente que establece `omitClaudeMd`, elimine el campo. Para cualquier otro subagente personalizado, coloque las instrucciones críticas en el cuerpo del archivo del agente, que se convierte en el indicador del sistema del agente. Consulte [qué se carga al inicio](/docs/es/sub-agents#what-loads-at-startup). |173| El subagente ignora las instrucciones de `CLAUDE.md` | Los agentes Explore y Plan integrados omiten `CLAUDE.md` al inicio. Un subagente personalizado lo carga de la misma manera que la conversación principal, a menos que su definición establezca [`omitClaudeMd`](/docs/es/sub-agents#supported-frontmatter-fields) | Para Explore o Plan, reformula la instrucción en tu prompt de delegación. Para un subagente que establece `omitClaudeMd`, elimina el campo. Para cualquier otro subagente personalizado, coloca las instrucciones críticas en el cuerpo del archivo del agente, que se convierte en el prompt del sistema del agente. Consulta [qué se carga al inicio](/docs/es/sub-agents#what-loads-at-startup). |

174| La lógica de limpieza nunca se ejecuta al final de la sesión | No hay hook `SessionEnd` configurado | Agregue un hook `SessionEnd` en `settings.json`. Consulte la [lista de eventos de hook](/docs/es/hooks#hook-events). |174| La lógica de limpieza nunca se ejecuta al final de la sesión | No hay hook `SessionEnd` configurado | Agregue un hook `SessionEnd` en `settings.json`. Consulte la [lista de eventos de hook](/docs/es/hooks#hook-events). |

175| Los servidores MCP en `.mcp.json` nunca se cargan | El archivo está bajo `.claude/`, o sus servidores se encuentran bajo una clave `servers` de nivel superior, como en el `mcp.json` de VS Code, en lugar de `mcpServers` | La configuración de MCP del proyecto va en la raíz del repositorio como `.mcp.json`, no dentro de `.claude/`, con servidores bajo la clave `mcpServers`. Consulte [configuración de MCP](/docs/es/mcp). |175| Los servidores MCP en `.mcp.json` nunca se cargan | El archivo está bajo `.claude/`, o sus servidores se encuentran bajo una clave `servers` de nivel superior, como en el `mcp.json` de VS Code, en lugar de `mcpServers` | La configuración de MCP del proyecto va en la raíz del repositorio como `.mcp.json`, no dentro de `.claude/`, con servidores bajo la clave `mcpServers`. Consulte [configuración de MCP](/docs/es/mcp). |

176| Los servidores MCP agregados bajo `mcpServers` en `settings.json` nunca aparecen | `settings.json` no lee una clave `mcpServers` | Defina servidores de proyecto en `.mcp.json` en la raíz del repositorio, o ejecute `claude mcp add --scope user` para servidores con ámbito de usuario. Consulte [configuración de MCP](/docs/es/mcp). |176| Los servidores MCP agregados bajo `mcpServers` en `settings.json` nunca aparecen | `settings.json` no lee una clave `mcpServers` | Defina servidores de proyecto en `.mcp.json` en la raíz del repositorio, o ejecute `claude mcp add --scope user` para servidores con ámbito de usuario. Consulte [configuración de MCP](/docs/es/mcp). |

desktop.md +134 −10

Details

101| **Accept edits** | `acceptEdits` | Claude acepta automáticamente ediciones de archivos y comandos comunes del sistema de archivos como `mkdir`, `touch` y `mv`, pero aún pregunta antes de ejecutar otros comandos de terminal. Usa esto cuando confíes en los cambios de archivos y quieras una iteración más rápida. |101| **Accept edits** | `acceptEdits` | Claude acepta automáticamente ediciones de archivos y comandos comunes del sistema de archivos como `mkdir`, `touch` y `mv`, pero aún pregunta antes de ejecutar otros comandos de terminal. Usa esto cuando confíes en los cambios de archivos y quieras una iteración más rápida. |

102| **Plan** | `plan` | Claude lee archivos y ejecuta comandos para explorar, luego propone un plan sin editar tu código fuente. Bueno para tareas complejas donde quieres revisar el enfoque primero. |102| **Plan** | `plan` | Claude lee archivos y ejecuta comandos para explorar, luego propone un plan sin editar tu código fuente. Bueno para tareas complejas donde quieres revisar el enfoque primero. |

103| **Auto** | `auto` | Claude se ejecuta sin solicitudes de confirmación 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. Aparece cuando [el modo automático está disponible](#auto-mode-availability); no hay un control de Configuración separado para esto. |103| **Auto** | `auto` | Claude se ejecuta sin solicitudes de confirmación 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. Aparece cuando [el modo automático está disponible](#auto-mode-availability); no hay un control de Configuración separado para esto. |

104| **Bypass permissions** | `bypassPermissions` | Claude se ejecuta sin solicitudes de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves), los clasificadores de seguridad cuando Claude [actúa en sitios externos](#browse-external-sites), o acciones de escritorio donde Claude siempre pregunta primero, como [archivar una sesión](#work-across-sessions). Equivalente a `--dangerously-skip-permissions` en la CLI. En los planes Pro y Max, habilítalo en tu Configuración → Claude Code en "Allow bypass permissions mode"; en los planes Team y Enterprise no hay un control de Configuración, y la política de la organización lo controla en su lugar. Úsalo solo en contenedores o máquinas virtuales en sandbox. |104| **Bypass permissions** | `bypassPermissions` | Claude se ejecuta sin solicitudes de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves), los clasificadores de seguridad cuando Claude [actúa en sitios externos](#browse-external-sites), o acciones de escritorio como eliminar una sesión, aunque no [archivarla](#work-across-sessions). Equivalente a `--dangerously-skip-permissions` en la CLI. En los planes Pro y Max, habilítalo en tu Configuración → Claude Code en "Allow bypass permissions mode"; en los planes Team y Enterprise no hay un control de Configuración, y la política de la organización lo controla en su lugar. Úsalo solo en contenedores o máquinas virtuales en sandbox. |

105 105 

106Las versiones anteriores de la pestaña Code etiquetaban estos modos como Ask permissions, Auto accept edits y Plan mode.106Las versiones anteriores de la pestaña Code etiquetaban estos modos como Ask permissions, Auto accept edits y Plan mode.

107 107 


131 131 

132El panel del navegador también puede abrir archivos HTML estáticos, PDF, imágenes y videos de tu proyecto. Haz clic en una ruta HTML, PDF, de imagen o de video en el chat para abrirla allí.132El panel del navegador también puede abrir archivos HTML estáticos, PDF, imágenes y videos de tu proyecto. Haz clic en una ruta HTML, PDF, de imagen o de video en el chat para abrirla allí.

133 133 

134<Note>

135 En una [sesión SSH](#ssh-sessions), Claude no puede abrir tu aplicación en el panel del navegador, porque allí no tiene las herramientas del panel. Para ver la aplicación tú mismo, [reenvía su puerto a tu computadora](#reach-a-port-on-the-remote-machine).

136</Note>

137 

134Desde el panel del navegador, puedes:138Desde el panel del navegador, puedes:

135 139 

136* Interactuar con tu aplicación en ejecución directamente en el panel del navegador140* Interactuar con tu aplicación en ejecución directamente en el panel del navegador


218 222 

219<Note>223<Note>

220 El monitoreo de PR requiere que la [CLI de GitHub (`gh`)](https://cli.github.com/) esté instalada y autenticada en tu máquina. Si `gh` no está instalado, Desktop te pide que lo instales la primera vez que intentes crear un PR.224 El monitoreo de PR requiere que la [CLI de GitHub (`gh`)](https://cli.github.com/) esté instalada y autenticada en tu máquina. Si `gh` no está instalado, Desktop te pide que lo instales la primera vez que intentes crear un PR.

225 

226 En una [sesión SSH](#ssh-sessions), configura `git` y `gh` en la máquina remota antes de hacer clic en **Create PR**, porque Claude envía la rama y ejecuta `gh pr create` allí. Instala `gh` allí tú mismo, porque Desktop no te pide que lo instales en una sesión SSH. Luego verifica allí que `git push` funcione y que `gh auth status` indique que iniciaste sesión.

221</Note>227</Note>

222 228 

223<h2 id="arrange-your-workspace">229<h2 id="arrange-your-workspace">


453 459 

454Claude Code aplica cuatro comportamientos de seguridad entre sesiones:460Claude Code aplica cuatro comportamientos de seguridad entre sesiones:

455 461 

456* Antes de archivar cualquier sesión, Claude te pregunta primero. Ves la tarjeta de aprobación en cada modo de permisos, incluidos Auto y Bypass permissions.462* Recibes una tarjeta de aprobación antes de que Claude archive una sesión, excepto en el modo automático y el modo Bypass permissions, donde Claude puede archivar una sesión sin ella. Para que se te pregunte, cambia a Manual.

457* A través de esta superficie, Claude no puede enviar mensajes entre sesiones desde una sesión que nadie está viendo, como una ejecución de tarea programada, ni puede entregar mensajes en una.463* A través de esta superficie, Claude no puede enviar mensajes entre sesiones desde una sesión que nadie está viendo, como una ejecución de tarea programada, ni puede entregar mensajes en una.

458* Claude Code verifica cada mensaje de esta superficie contra los [controles de entrada](/docs/es/cross-session-messaging#control-inbound-messages) de la sesión receptora, incluso cuando la sesión receptora no tiene [mensajería entre sesiones](/docs/es/cross-session-messaging#availability) en sí misma. Si estableces [`crossSessionInbound`](/docs/es/settings-reference#crosssessioninbound) en `refuse` en la sesión receptora, Claude Code descarta los mensajes de esta superficie. Claude Code reporta el rechazo a la aplicación de escritorio de Claude. Antes de v2.1.234, Claude Code descartaba cada mensaje de esta superficie dirigido a una sesión receptora sin mensajería entre sesiones.464* Claude Code verifica cada mensaje de esta superficie contra los [controles de entrada](/docs/es/cross-session-messaging#control-inbound-messages) de la sesión receptora, incluso cuando la sesión receptora no tiene [mensajería entre sesiones](/docs/es/cross-session-messaging#availability) en sí misma. Si estableces [`crossSessionInbound`](/docs/es/settings-reference#crosssessioninbound) en `refuse` en la sesión receptora, Claude Code descarta los mensajes de esta superficie. Claude Code reporta el rechazo a la aplicación de escritorio de Claude. Antes de v2.1.234, Claude Code descartaba cada mensaje de esta superficie dirigido a una sesión receptora sin mensajería entre sesiones.

459* Claude Code cita cada mensaje entrante y lo atribuye a la sesión que lo envió, y Claude sigue respetando la configuración de permisos propia de la sesión receptora al actuar sobre uno.465* Claude Code cita cada mensaje entrante y lo atribuye a la sesión que lo envió, y Claude sigue respetando la configuración de permisos propia de la sesión receptora al actuar sobre uno.


546 552 

547[Skills](/docs/es/skills) extienden lo que Claude puede hacer. Claude los carga automáticamente cuando son relevantes, o puede invocar uno directamente: escriba `/` en el cuadro de solicitud o haga clic en el botón **+** y seleccione **Slash commands** para ver lo que está disponible. Esto incluye [comandos integrados](/docs/es/commands), sus [skills personalizados](/docs/es/skills#create-your-first-skill), skills del proyecto desde su base de código y skills de cualquier [plugin instalado](/docs/es/plugins/install). Seleccione uno y aparecerá resaltado en el campo de entrada. Escriba su tarea después de él y envíe como de costumbre.553[Skills](/docs/es/skills) extienden lo que Claude puede hacer. Claude los carga automáticamente cuando son relevantes, o puede invocar uno directamente: escriba `/` en el cuadro de solicitud o haga clic en el botón **+** y seleccione **Slash commands** para ver lo que está disponible. Esto incluye [comandos integrados](/docs/es/commands), sus [skills personalizados](/docs/es/skills#create-your-first-skill), skills del proyecto desde su base de código y skills de cualquier [plugin instalado](/docs/es/plugins/install). Seleccione uno y aparecerá resaltado en el campo de entrada. Escriba su tarea después de él y envíe como de costumbre.

548 554 

549Puede enviar un comando mientras Claude está trabajando, igual que cualquier otro mensaje, y la sesión vuelve a estar inactiva una vez que se completa el turno. Antes de v2.1.206, un comando enviado a mitad de turno podría dejar la sesión mostrándose como en ejecución y los mensajes que envió después no se entregaban.555Puedes enviar un comando mientras Claude está trabajando, igual que cualquier otro mensaje, y la sesión vuelve a estar inactiva una vez que termina el turno.

550 556 

551Las sesiones locales cargan sus skills personales desde `~/.claude/skills/`. Una sesión [SSH](#ssh-sessions) lee `~/.claude/skills/` desde el directorio de inicio del host remoto, no desde su máquina.557Las sesiones locales cargan sus skills personales desde `~/.claude/skills/`. Una sesión [SSH](#ssh-sessions) lee `~/.claude/skills/` desde el directorio de inicio del host remoto, no desde su máquina.

552 558 


693 699 

694* **`true`**: Claude encuentra y usa un puerto libre automáticamente. Adecuado para la mayoría de servidores de desarrollo.700* **`true`**: Claude encuentra y usa un puerto libre automáticamente. Adecuado para la mayoría de servidores de desarrollo.

695* **`false`**: Claude falla con un error. Use esto cuando su servidor debe usar un puerto específico, como para devoluciones de llamada OAuth o listas de permitidos CORS.701* **`false`**: Claude falla con un error. Use esto cuando su servidor debe usar un puerto específico, como para devoluciones de llamada OAuth o listas de permitidos CORS.

696* **No establecido (predeterminado)**: Claude pregunta si el servidor necesita ese puerto exacto, luego guarda su respuesta.702* **No establecido (predeterminado)**: tu servidor obtiene el siguiente puerto libre, como con `true`, excepto en el único caso que se describe a continuación. Antes de Claude Desktop v2.37337.0, Claude pregunta en su lugar si el servidor necesita ese puerto exacto y luego guarda tu respuesta en `launch.json`.

697 703 

698Cuando Claude elige un puerto diferente, pasa el puerto asignado a su servidor a través de la variable de entorno `PORT`.704Si tu puerto preferido está en uso y `autoPort` no está establecido, tu servidor permanece detenido cuando se cumplen todas estas condiciones:

705 

706* Inicias el servidor a través de un script de `npm`, `yarn`, `pnpm` o `bun`.

707* Tu puerto preferido está codificado de forma fija en ese script, o Claude no puede inspeccionar el script.

708* No pasas el puerto en `runtimeArgs`.

709 

710En ese caso, libera el puerto, elimina el valor codificado de forma fija o cambia `port` para que coincida con el script. Establecer `"autoPort": true` en su lugar solo funciona para un script que lee `PORT`.

711 

712Haz que tu servidor lea su puerto de la variable de entorno `PORT`, que contiene el puerto asignado. Cuando Claude mueve tu servidor a un puerto diferente, también reescribe un valor de `--port` o `-p` en `runtimeArgs` para que coincida.

699 713 

700<h4 id="examples">714<h4 id="examples">

701 Ejemplos715 Ejemplos


785 Sesiones locales799 Sesiones locales

786</h3>800</h3>

787 801 

788La aplicación de escritorio no siempre hereda su entorno de shell completo. En macOS, cuando inicia la aplicación desde el Dock o Finder, lee su perfil de shell, como `~/.zshrc` o `~/.bashrc`, para extraer `PATH` y un conjunto fijo de variables de Claude Code, pero otras variables que exporta allí no se recogen. En Windows, la aplicación hereda variables de entorno de usuario y sistema pero no lee perfiles de PowerShell.802La aplicación de escritorio no siempre hereda tu entorno de shell completo. En macOS, cuando inicias la aplicación desde el Dock o Finder, lee tu perfil de shell, como `~/.zshrc` o `~/.bashrc`, para darle a Claude Code `PATH` y un conjunto fijo de variables de Claude Code, pero no otras variables que exportes allí. En Windows, la aplicación hereda variables de entorno de usuario y sistema pero no lee perfiles de PowerShell.

789 803 

790Para establecer variables de entorno para sesiones locales y servidores de desarrollo en cualquier plataforma, abra el menú desplegable de entorno en el cuadro de solicitud, pase el cursor sobre **Local** y haga clic en el icono de engranaje para abrir el editor de entorno local. Las variables que guarda aquí se almacenan cifradas en su máquina y se aplican a cada sesión local y servidor de vista previa que inicia. También puede agregar variables a la clave `env` en su archivo `~/.claude/settings.json`, aunque estas llegan solo a sesiones de Claude y no a servidores de desarrollo. Consulte [variables de entorno](/docs/es/env-vars) para la lista completa de variables compatibles.804Para establecer variables de entorno para sesiones locales y servidores de desarrollo en cualquier plataforma, abra el menú desplegable de entorno en el cuadro de solicitud, pase el cursor sobre **Local** y haga clic en el icono de engranaje para abrir el editor de entorno local. Las variables que guarda aquí se almacenan cifradas en su máquina y se aplican a cada sesión local y servidor de vista previa que inicia. También puede agregar variables a la clave `env` en su archivo `~/.claude/settings.json`, aunque estas llegan solo a sesiones de Claude y no a servidores de desarrollo. Consulte [variables de entorno](/docs/es/env-vars) para la lista completa de variables compatibles.

791 805 


840 854 

841Una máquina remota Linux o macOS necesita un procesador compatible, un servidor SSH con SFTP, una carpeta de instalación que no esté montada con `noexec`, un shell funcional y acceso a la red. Revisa cada requisito antes de conectarte, o cuando una conexión falle después de iniciar sesión:855Una máquina remota Linux o macOS necesita un procesador compatible, un servidor SSH con SFTP, una carpeta de instalación que no esté montada con `noexec`, un shell funcional y acceso a la red. Revisa cada requisito antes de conectarte, o cuando una conexión falle después de iniciar sesión:

842 856 

843* **Sistema**: un procesador x86\_64 o arm64. La máquina también tiene que cumplir los [requisitos del sistema](/docs/es/setup#system-requirements) de Claude Code.857* **Sistema**: un procesador x86\_64 o arm64. La máquina también tiene que cumplir los [requisitos del sistema](/docs/es/setup#system-requirements) de Claude Code. En Linux, Claude Code necesita glibc 2.17 o posterior, o musl. Para ver cuál tiene la máquina, ejecuta `ldd --version` allí. En una distribución basada en musl como Alpine Linux, instala también los [paquetes que necesita Claude Code](/docs/es/setup#alpine-linux-and-musl-based-distributions).

844* **SFTP**: el servidor SSH tiene que ofrecer el subsistema SFTP, que se activa con una línea `Subsystem sftp` en su `sshd_config`. Para comprobarlo, conéctate al mismo host y puerto con `sftp` en una terminal de tu computadora. Un servidor que funciona muestra el prompt `sftp>`.858* **SFTP**: el servidor SSH tiene que ofrecer el subsistema SFTP, que se activa con una línea `Subsystem sftp` en su `sshd_config`. Para comprobarlo, conéctate al mismo host y puerto con `sftp` en una terminal de tu computadora. Un servidor que funciona muestra el prompt `sftp>`.

845* **Sesiones por conexión**: Desktop en macOS y Linux abre varias sesiones en una sola conexión SSH. Si el `sshd_config` del servidor establece `MaxSessions 1`, auméntalo, por ejemplo al valor predeterminado de OpenSSH, 10.859* **Sesiones por conexión**: Desktop en macOS y Linux abre varias sesiones en una sola conexión SSH. Si el `sshd_config` del servidor establece `MaxSessions 1`, auméntalo, por ejemplo al valor predeterminado de OpenSSH, 10.

846* **Carpeta de instalación**: Desktop instala un programa auxiliar y Claude Code en `~/.claude/remote/` dentro de tu directorio home. Los ejecuta desde allí, por lo que esa carpeta no puede estar en un sistema de archivos montado con `noexec`. Reserva aproximadamente 1 GB de espacio en disco en el directorio home de cada usuario que se conecte.860* **Carpeta de instalación**: Desktop instala un programa auxiliar y Claude Code en `~/.claude/remote/` dentro de tu directorio home. Los ejecuta desde allí, por lo que esa carpeta no puede estar en un sistema de archivos montado con `noexec`. Reserva aproximadamente 1 GB de espacio en disco en el directorio home de cada usuario que se conecte. Para saber qué contiene esa carpeta, consulta [Archivos y procesos en la máquina remota](#files-and-processes-on-the-remote-machine).

847* **Shell**: el shell establecido para tu cuenta en la máquina remota tiene que ejecutar los comandos enviados a través de SSH, como lo hacen Bash, Zsh y `sh`861* **Shell**: el shell establecido para tu cuenta en la máquina remota tiene que ejecutar los comandos enviados a través de SSH, como lo hacen Bash, Zsh y `sh`

848* **Red**: Claude Code se ejecuta en la máquina remota y realiza sus solicitudes de red desde allí, por lo que la máquina necesita el [acceso a la red que requiere Claude Code](/docs/es/network-config#network-access-requirements). Si la máquina no puede descargar Claude Code, Desktop lo descarga en tu computadora y lo sube. Las demás solicitudes de Claude Code siguen saliendo desde la máquina remota.862* **Red**: Claude Code se ejecuta en la máquina remota y realiza sus solicitudes de red desde allí, por lo que la máquina necesita el [acceso a la red que requiere Claude Code](/docs/es/network-config#network-access-requirements). Si la máquina no puede descargar Claude Code, Desktop lo descarga en tu computadora y lo sube. Las demás solicitudes de Claude Code siguen saliendo desde la máquina remota.

849 863 


878 892 

879Ingresa `devbox` en el campo **SSH host**.893Ingresa `devbox` en el campo **SSH host**.

880 894 

895<h5 id="use-variables-from-your-shell-in-a-proxycommand">

896 Usar variables de tu shell en un `ProxyCommand`

897</h5>

898 

899Para usar una variable de entorno propia en un comando `ProxyCommand` o `Match exec`, expórtala en un archivo de inicio del shell, como `~/.zshrc`, y luego cierra y vuelve a abrir Desktop. Cuando Desktop se inicia, lee lo que exporta tu shell de inicio de sesión, y conserva esos valores hasta que lo cierres.

900 

901Esto requiere Claude Desktop v2.37337.0 o posterior y un comando `env` que acepte `-0`, lo que puedes comprobar ejecutando `env -0` en una terminal de tu computadora.

902 

881<h5 id="raise-the-ssh-connection-timeout">903<h5 id="raise-the-ssh-connection-timeout">

882 Aumentar el tiempo de espera de la conexión SSH904 Aumentar el tiempo de espera de la conexión SSH

883</h5>905</h5>


894 916 

895`ssh` usa el primer valor que encuentra para un host, así que mantén la entrada por encima de cualquier entrada `Host *` que establezca `ConnectTimeout`. Para confirmarlo, ejecuta `ssh -G devbox` en una terminal de tu computadora. Su salida incluye `connecttimeout 120`. Después de cambiar el valor, cierra y vuelve a abrir Desktop.917`ssh` usa el primer valor que encuentra para un host, así que mantén la entrada por encima de cualquier entrada `Host *` que establezca `ConnectTimeout`. Para confirmarlo, ejecuta `ssh -G devbox` en una terminal de tu computadora. Su salida incluye `connecttimeout 120`. Después de cambiar el valor, cierra y vuelve a abrir Desktop.

896 918 

919<h5 id="forwarding-settings-that-desktop-leaves-off">

920 Ajustes de reenvío que Desktop deja desactivados

921</h5>

922 

923En su conexión con la máquina remota, Desktop deja desactivados `ForwardAgent`, `ForwardX11`, `LocalForward`, `RemoteForward`, `DynamicForward` y `Tunnel`, incluso donde tu configuración SSH los activa. En la [terminal](#run-commands-in-the-terminal) o en un comando `!`, espera que tus ajustes de reenvío se apliquen [solo a veces](#limits-while-desktop-is-disconnected), porque Desktop puede iniciar allí un `ssh` aparte que sí los sigue.

924 

925* **Para llegar a un puerto en la máquina remota**: [reenvíalo tú mismo](#reach-a-port-on-the-remote-machine)

926* **Para usar tus propias claves desde la máquina remota**: configura una credencial en la propia máquina remota, por ejemplo para `git push`

927 

928Para evitar que Desktop reenvíe tu agente SSH o un puerto, ejecuta `ssh -G devbox` en una terminal de tu computadora. Luego vuelve a ejecutarlo como Desktop puede ejecutarlo, con los valores `hostname` y `user` que imprime, como en `ssh -G -o HostName=devbox.internal.example.com -l alice devbox`. La segunda salida puede mostrar ajustes de un bloque `Match` que la primera omite.

929 

930Busca en ambas salidas una línea `forwardagent` que diga cualquier cosa distinta de `no`, y líneas que comiencen con `localforward`, `remoteforward` o `dynamicforward`. Si encuentras alguna, elimina ese ajuste de tu configuración SSH. Haz lo mismo para un host al que tu `ProxyCommand` llegue con `ssh`.

931 

932<h4 id="reach-a-port-on-the-remote-machine">

933 Llegar a un puerto en la máquina remota

934</h4>

935 

936Para abrir un servidor que se ejecuta en la máquina remota, como un servidor de desarrollo en el puerto 3000, reenvía el puerto tú mismo. En una terminal de tu computadora, ejecuta `ssh` con `-L` y el host al que te conectas, como `devbox`:

937 

938```bash theme={null}

939ssh -N -L 3000:localhost:3000 devbox

940```

941 

942Si completaste **SSH port** o **SSH key (optional)** en la conexión, agrega `-p` o `-i` con el mismo valor. Deja ese comando en ejecución y abre `http://localhost:3000` en un navegador de tu computadora para llegar al puerto 3000 de la máquina remota. Si `ssh` imprime `open failed: administratively prohibited`, pide al administrador de la máquina que permita el reenvío TCP, que se controla con `AllowTcpForwarding` en el `sshd_config` del servidor SSH.

943 

897<h4 id="windows-remote-machines">944<h4 id="windows-remote-machines">

898 Máquinas remotas Windows945 Máquinas remotas Windows

899</h4>946</h4>


925Claude Code se ejecuta como un proceso en la máquina remota, bajo un programa auxiliar en segundo plano que Desktop instala allí, por lo que no necesita tu conexión SSH para seguir ejecutándose. El comportamiento de esta sección requiere Claude Desktop v2.31226.0 o posterior.972Claude Code se ejecuta como un proceso en la máquina remota, bajo un programa auxiliar en segundo plano que Desktop instala allí, por lo que no necesita tu conexión SSH para seguir ejecutándose. El comportamiento de esta sección requiere Claude Desktop v2.31226.0 o posterior.

926 973 

927<Warning>974<Warning>

928 Si inicias sesión en Desktop con una cuenta de Claude, no cuentes con que una tarea se ejecute durante toda la noche. Desktop renueva ese inicio de sesión para la tarea solo mientras Desktop está en ejecución y conectado, por lo que el inicio de sesión de la tarea puede expirar después de que te desconectes, y entonces la tarea se detiene. El tiempo que queda cuando te desconectas varía.975 Si inicias sesión en Desktop con una cuenta de Claude, no cuentes con que una tarea se ejecute durante toda la noche. Desktop renueva ese inicio de sesión para la tarea solo mientras Desktop está en ejecución y conectado, por lo que el inicio de sesión de la tarea puede expirar después de que te desconectes, y entonces la tarea se detiene. El tiempo que queda cuando te desconectas varía, y puede ser de solo unos minutos.

929 976 

930 El trabajo hecho hasta ese momento permanece en la máquina remota, y puedes continuar con un mensaje cuando vuelvas.977 El trabajo hecho hasta ese momento permanece en la máquina remota, y puedes continuar con un mensaje cuando vuelvas.

931 978 


1076 1123 

1077El 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.1124El 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.

1078 1125 

1126<h4 id="files-and-processes-on-the-remote-machine">

1127 Archivos y procesos en la máquina remota

1128</h4>

1129 

1130Desktop instala un programa auxiliar y Claude Code en `~/.claude/remote/` en el directorio home de cada usuario que se conecta a una máquina remota Linux o macOS. El programa auxiliar no escucha en ningún puerto de red, pero Claude Code y los programas que inicia, como servidores MCP y servidores de desarrollo, sí pueden hacerlo.

1131 

1132| Carpeta | Contenido |

1133| - | - |

1134| `~/.claude/remote/srv/` | El programa auxiliar, en una carpeta por versión |

1135| `~/.claude/remote/ccd-cli/` | Claude Code, en un archivo por versión |

1136| `~/.claude/remote/run/` | Los archivos de tiempo de ejecución del programa auxiliar, como su socket y su registro, en una carpeta por cada computadora que se conecta |

1137| `~/.claude/remote/plugins/` | Plugins que Desktop copia desde la computadora del usuario |

1138| [`~/.claude/uploads/`](/docs/es/claude-directory#clear-local-data) | Archivos que el usuario adjunta a los mensajes, en una carpeta por sesión |

1139 

1140Para listar los procesos de un usuario, ejecuta `pgrep -fl "$HOME/.claude/remote/"` en la máquina remota como ese usuario, o con el directorio home del usuario en lugar de `$HOME`:

1141 

1142* **Programa auxiliar**: uno o más procesos `server` por cada computadora que se conecta

1143* **Claude Code**: los procesos que el programa auxiliar inicia para las sesiones del usuario, cada uno desde un archivo con el nombre de su versión, como `2.1.295-…`

1144 

1145Desktop llega al programa auxiliar a través de la conexión SSH del usuario, mediante el socket Unix `rpc.sock` en la carpeta del programa auxiliar dentro de `~/.claude/remote/run/`. Aparte de root, los demás usuarios de la máquina no pueden conectarse a ese socket, porque tiene el modo 600 y su carpeta tiene el modo 700.

1146 

1147Para saber cuándo se detiene el programa auxiliar por sí solo, consulta [Límites mientras Desktop está desconectado](#limits-while-desktop-is-disconnected).

1148 

1149Para eliminar el programa auxiliar y Claude Code de un usuario:

1150 

1151<Steps>

1152 <Step title="Cierra Desktop">

1153 Cierra Desktop en cada computadora desde la que se conecta el usuario. Desktop vuelve a instalar ambos programas la próxima vez que se conecta, y puede volver a conectarse por sí solo.

1154 </Step>

1155 

1156 <Step title="Termina los procesos">

1157 Con la sesión iniciada como ese usuario en la máquina remota, ejecuta `kill` con cada ID de proceso que lista [`pgrep`](#files-and-processes-on-the-remote-machine).

1158 </Step>

1159 

1160 <Step title="Elimina la carpeta">

1161 Elimina `~/.claude/remote/`. Para eliminar los propios archivos de Claude Code en `~/.claude/` y `~/.claude.json`, consulta [Eliminar archivos de configuración](/docs/es/setup#remove-configuration-files).

1162 </Step>

1163</Steps>

1164 

1165<h5 id="end-one-session’s-process">

1166 Terminar el proceso de una sesión

1167</h5>

1168 

1169Para terminar el proceso de Claude Code de una sesión, [archiva la sesión](#work-in-parallel-with-sessions) en Desktop mientras Desktop está conectado a la máquina remota. El proceso sigue ejecutándose después de que su tarea termina y después de que cierras Desktop.

1170 

1171Antes de archivar una sesión que tiene un worktree, consulta [Trabajar en paralelo con sesiones](#work-in-parallel-with-sessions).

1172 

1173<h5 id="see-who-connected-to-the-remote-machine">

1174 Ver quién se conectó a la máquina remota

1175</h5>

1176 

1177Para saber quién se conectó a una máquina remota, lee el registro del servidor SSH en esa máquina, donde un inicio de sesión desde Desktop se ve como uno desde una terminal. Con Desktop en macOS o Linux, espera una entrada cada vez que Desktop se conecta, no una por cada sesión.

1178 

1179<h4 id="use-mcp-servers-set-up-on-the-remote-machine">

1180 Usar servidores MCP configurados en la máquina remota

1181</h4>

1182 

1183Para usar un [servidor MCP](/docs/es/mcp) de `~/.claude.json` o del `.mcp.json` de un proyecto en una sesión SSH, configúralo en esos archivos en la máquina remota. Claude Code inicia allí sus servidores stdio, así que instala en la máquina remota los comandos que ejecutan esos servidores. Para los servidores de `claude_desktop_config.json`, consulta [Límites mientras Desktop está desconectado](#limits-while-desktop-is-disconnected).

1184 

1079<h4 id="open-an-ssh-session-from-a-link">1185<h4 id="open-an-ssh-session-from-a-link">

1080 Abrir una sesión SSH desde un enlace1186 Abrir una sesión SSH desde un enlace

1081</h4>1187</h4>


1207* **Cowork**: ninguna de las claves se aplica a las sesiones de [Cowork](https://claude.com/docs/cowork/overview) ni a las tareas programadas de Cowork1313* **Cowork**: ninguna de las claves se aplica a las sesiones de [Cowork](https://claude.com/docs/cowork/overview) ni a las tareas programadas de Cowork

1208* **Sesiones en la nube**: ninguna de las claves cambia si las [sesiones en la nube](#cloud-sessions) están disponibles. Para desactivarlas, usa el ajuste **Cloud sessions** en [Admin console controls](#admin-console-controls).1314* **Sesiones en la nube**: ninguna de las claves cambia si las [sesiones en la nube](#cloud-sessions) están disponibles. Para desactivarlas, usa el ajuste **Cloud sessions** en [Admin console controls](#admin-console-controls).

1209 1315 

1210Cuando adaptes el ejemplo, revisa los nombres de host y la versión de Desktop:1316Cuando adaptes el ejemplo, revisa los nombres de host, la versión de Desktop y los permisos del archivo:

1211 1317 

1212* **Nombres de host**: asegúrate de que un patrón en `sshHostAllowlist` coincida con el nombre de host de cada entrada de `sshConfigs`, sin `user@`, o los desarrolladores no podrán conectarse a ella. Para saber cómo Desktop compara un nombre de host, consulta [Restringir a qué hosts SSH pueden conectarse los usuarios](#restrict-which-ssh-hosts-users-can-connect-to).1318* **Nombres de host**: asegúrate de que un patrón en `sshHostAllowlist` coincida con el nombre de host de cada entrada de `sshConfigs`, sin `user@`, o los desarrolladores no podrán conectarse a ella. Para saber cómo Desktop compara un nombre de host, consulta [Restringir a qué hosts SSH pueden conectarse los usuarios](#restrict-which-ssh-hosts-users-can-connect-to).

1213* **Versión**: `disableDesktopLocalSessions` requiere Claude Desktop v1.37937.0 o posterior1319* **Versión**: `disableDesktopLocalSessions` requiere Claude Desktop v1.37937.0 o posterior

1320* **Permisos del archivo**: asegúrate de que la cuenta de cada desarrollador en la computadora pueda leer el archivo de configuración administrada. Desktop no aplica las claves de un archivo que la cuenta no puede leer, y Claude Code también [se inicia sin ellas](/docs/es/managed-settings#find-entries-claude-code-dropped).

1214 1321 

1215Coloca las tres claves en una [fuente administrada](/docs/es/managed-settings#how-claude-code-combines-managed-sources), la de mayor prioridad que distribuyas. Si distribuyes [configuración administrada por servidor](/docs/es/server-managed-settings), mantén también una copia de las tres claves en la política MDM o el archivo de configuración administrada de mayor prioridad en cada computadora. Desktop obtiene la configuración administrada por servidor al iniciarse, y la copia en la computadora se aplica hasta que una obtención tenga éxito.1322Coloca las tres claves en una [fuente administrada](/docs/es/managed-settings#how-claude-code-combines-managed-sources), la de mayor prioridad que distribuyas. Si distribuyes [configuración administrada por servidor](/docs/es/server-managed-settings), mantén también una copia de las tres claves en la política MDM o el archivo de configuración administrada de mayor prioridad en cada computadora. Desktop obtiene la configuración administrada por servidor al iniciarse, y la copia en la computadora se aplica hasta que una obtención tenga éxito.

1216 1323 


1558 1665 

1559Si los controles deslizantes de MCP server no responden o los servidores no se conectan en Windows, verifique que el servidor esté configurado correctamente en su configuración, reinicie la aplicación, verifique que el proceso del servidor se esté ejecutando en Task Manager y revise los registros del servidor para errores de conexión.1666Si los controles deslizantes de MCP server no responden o los servidores no se conectan en Windows, verifique que el servidor esté configurado correctamente en su configuración, reinicie la aplicación, verifique que el proceso del servidor se esté ejecutando en Task Manager y revise los registros del servidor para errores de conexión.

1560 1667 

1668<h3 id="ssh-connection-fails-after-you-log-in">

1669 La conexión SSH falla después de iniciar sesión

1670</h3>

1671 

1672Busca en esta tabla el título de la tarjeta, o el código con el que termina el mensaje de error, y luego haz lo que indica la última columna. Para ver el mensaje, selecciona **View details** en la tarjeta del fallo.

1673 

1674| Título en la tarjeta | Código | Qué hacer |

1675| - | - | - |

1676| `<host>'s SSH server has SFTP turned off` | `[SFTP_UNAVAILABLE]` | Activa SFTP en el `sshd_config` del servidor, como se describe en [requisitos de la máquina remota](#remote-machine-requirements-for-ssh-sessions) |

1677| `SFTP doesn't start on <host>` | `[SFTP_NOT_STARTED]` | Conéctate al mismo host con `sftp` en una terminal de tu computadora para ver qué lo impide y luego revisa los ajustes y archivos que menciona el mensaje de Desktop |

1678| `<host> allows too few SSH sessions per connection` | `[SESSION_LIMIT]` | Aumenta `MaxSessions` en el `sshd_config` del servidor, por ejemplo al valor predeterminado de OpenSSH, que es 10 |

1679| `<host> is out of disk space` | `[ENOSPC]` o `[EDQUOT]` | Libera espacio o cuota en la máquina remota, en tu directorio home o en `/tmp` |

1680| `This computer is out of disk space` | `[ENOSPC]` o `[EDQUOT]`, en un mensaje que comienza con `Couldn't prepare the deploy locally` | Libera espacio en tu computadora |

1681| `Claude Code won't start on <host>` | `[CLI_UNRESPONSIVE]` | Espera un minuto y vuelve a intentarlo. Si sigue fallando, ejecuta en la máquina remota el comando que menciona el mensaje para ver si Claude Code responde allí. |

1682 

1683Para cualquier otro mensaje, revisa los [requisitos de la máquina remota](#remote-machine-requirements-for-ssh-sessions).

1684 

1561<h3 id="app-won’t-quit">1685<h3 id="app-won’t-quit">

1562 La aplicación no se cierra1686 La aplicación no se cierra

1563</h3>1687</h3>

env-vars.md +10 −4

Details

268| `CLAUDE_CODE_DISABLE_FAST_MODE` | Establécela en `1` para desactivar el [modo rápido](/docs/es/fast-mode) |268| `CLAUDE_CODE_DISABLE_FAST_MODE` | Establécela en `1` para desactivar el [modo rápido](/docs/es/fast-mode) |

269| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Establécela en `1` para desactivar las encuestas de calidad de sesión "How is Claude doing?". Las encuestas también se desactivan cuando se establece `DISABLE_TELEMETRY`, `DO_NOT_TRACK` o `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, a menos que `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` las vuelva a activar. Para establecer una frecuencia de muestreo en lugar de desactivarlas por completo, usa el ajuste [`feedbackSurveyRate`](/docs/es/settings-reference#feedbacksurveyrate). Consulta [Encuestas de calidad de sesión](/docs/es/data-usage#session-quality-surveys) |269| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Establécela en `1` para desactivar las encuestas de calidad de sesión "How is Claude doing?". Las encuestas también se desactivan cuando se establece `DISABLE_TELEMETRY`, `DO_NOT_TRACK` o `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, a menos que `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` las vuelva a activar. Para establecer una frecuencia de muestreo en lugar de desactivarlas por completo, usa el ajuste [`feedbackSurveyRate`](/docs/es/settings-reference#feedbacksurveyrate). Consulta [Encuestas de calidad de sesión](/docs/es/data-usage#session-quality-surveys) |

270| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Establécela en `1` para desactivar el [checkpointing](/docs/es/checkpointing) de archivos. El comando `/rewind` no podrá restaurar los cambios de código. Sobrescribe el ajuste [`fileCheckpointingEnabled`](/docs/es/settings-reference#filecheckpointingenabled) |270| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Establécela en `1` para desactivar el [checkpointing](/docs/es/checkpointing) de archivos. El comando `/rewind` no podrá restaurar los cambios de código. Sobrescribe el ajuste [`fileCheckpointingEnabled`](/docs/es/settings-reference#filecheckpointingenabled) |

271| `CLAUDE_CODE_DISABLE_FILE_MENTIONS` | Establécela en `1` para que Claude Code deje de expandir las [menciones con `@`](/docs/es/common-workflows#reference-files-and-directories) de archivos y directorios. En su lugar, Claude recibe las rutas mencionadas con una nota para leerlas usando sus herramientas de archivos. Se ignora en la [configuración del proyecto y local](/docs/es/settings-reference#variables-claude-code-ignores-in-env). Requiere Claude Code v2.1.299 o posterior |

271| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Establécela en `1` para eliminar del contexto de Claude las instrucciones integradas del flujo de trabajo de commits y PR, y la instantánea del estado de git. Útil cuando usas tus propios skills de flujo de trabajo de git. Cuando está establecida, tiene precedencia sobre el ajuste [`includeGitInstructions`](/docs/es/settings-reference#includegitinstructions) |272| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Establécela en `1` para eliminar del contexto de Claude las instrucciones integradas del flujo de trabajo de commits y PR, y la instantánea del estado de git. Útil cuando usas tus propios skills de flujo de trabajo de git. Cuando está establecida, tiene precedencia sobre el ajuste [`includeGitInstructions`](/docs/es/settings-reference#includegitinstructions) |

272| `CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` | Establécela en `1` para que Claude Code deje de leer los scripts que se pasan a un shell con `-c`, como `bash -c 'rm -rf ~'`, en busca de eliminaciones de [rutas críticas](/docs/es/permission-modes#removals-inside-nested-commands-and-inline-scripts). Claude Code sigue comprobando los destinos de variables de shell y parámetros posicionales en esos scripts, y 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.288 o posterior |273| `CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` | Establécela en `1` para que Claude Code deje de leer los scripts que se pasan a un shell con `-c`, como `bash -c 'rm -rf ~'`, en busca de eliminaciones de [rutas críticas](/docs/es/permission-modes#removals-inside-nested-commands-and-inline-scripts). Claude Code sigue comprobando los destinos de variables de shell y parámetros posicionales en esos scripts, y 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.288 o posterior |

273| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Establécela en `1` para impedir la reasignación automática de Opus 4 y Opus 4.1 a la versión actual de Opus en la API de Anthropic. Úsala cuando quieras fijar intencionalmente un modelo anterior. La reasignación no se ejecuta en Amazon Bedrock, Google Cloud's Agent Platform ni Microsoft Foundry |274| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Establécela en `1` para impedir la reasignación automática de Opus 4 y Opus 4.1 a la versión actual de Opus en la API de Anthropic. Úsala cuando quieras fijar intencionalmente un modelo anterior. La reasignación no se ejecuta en Amazon Bedrock, Google Cloud's Agent Platform ni Microsoft Foundry |


328| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | Sobrescribe la dirección del host que se usa para conectarse a la extensión del IDE. De forma predeterminada, Claude Code detecta automáticamente la dirección correcta, incluido el enrutamiento de WSL a Windows |329| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | Sobrescribe la dirección del host que se usa para conectarse a la extensión del IDE. De forma predeterminada, Claude Code detecta automáticamente la dirección correcta, incluido el enrutamiento de WSL a Windows |

329| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | Establécela en `1` para omitir la instalación automática de las extensiones del IDE. Equivale a establecer [`autoInstallIdeExtension`](/docs/es/settings-reference#autoinstallideextension) en `false` |330| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | Establécela en `1` para omitir la instalación automática de las extensiones del IDE. Equivale a establecer [`autoInstallIdeExtension`](/docs/es/settings-reference#autoinstallideextension) en `false` |

330| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | Establécela en `1` para omitir la validación de las entradas del archivo de bloqueo del IDE durante la conexión. Úsala cuando la conexión automática no encuentre tu IDE aunque esté en ejecución |331| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | Establécela en `1` para omitir la validación de las entradas del archivo de bloqueo del IDE durante la conexión. Úsala cuando la conexión automática no encuentre tu IDE aunque esté en ejecución |

332| `CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS` | Tamaño del contexto, en tokens, a partir del cual la [compactación por inactividad](/docs/es/settings-reference#idlecompaction) se aplica a una conversación (valor predeterminado: `200000`). Acepta un número entero positivo, y cualquier otro valor se ignora. Los valores inferiores a `100000` se elevan a `100000`, el umbral más bajo. La compactación por inactividad está activada de forma predeterminada para las conversaciones que cumplen sus condiciones. Para desactivarla, establece `idleCompaction` en `false`. Requiere Claude Code v2.1.290 o posterior |

331| `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS` | Cuántos [subagentes](/docs/es/sub-agents#concurrent-subagent-limit) pueden estar en ejecución en una sesión antes de que la herramienta Agent se niegue a generar otro (predeterminado: 20). Acepta un número entero positivo con dígitos simples; cualquier otro valor se ignora, por lo que la variable puede ajustar el límite pero no desactivarlo. Requiere Claude Code v2.1.217 o posterior |333| `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS` | Cuántos [subagentes](/docs/es/sub-agents#concurrent-subagent-limit) pueden estar en ejecución en una sesión antes de que la herramienta Agent se niegue a generar otro (predeterminado: 20). Acepta un número entero positivo con dígitos simples; cualquier otro valor se ignora, por lo que la variable puede ajustar el límite pero no desactivarlo. Requiere Claude Code v2.1.217 o posterior |

332| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | Sobrescribe el tamaño de la ventana de contexto que Claude Code supone para el modelo activo. A partir de la v2.1.193, cómo se aplica depende de cómo resuelve Claude Code el ID del modelo; 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). Úsala cuando enrutes a un modelo a través de `ANTHROPIC_BASE_URL` cuya ventana de contexto no coincida con el tamaño integrado para su nombre |334| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | Sobrescribe el tamaño de la ventana de contexto que Claude Code supone para el modelo activo. A partir de la v2.1.193, cómo se aplica depende de cómo resuelve Claude Code el ID del modelo; 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). Úsala cuando enrutes a un modelo a través de `ANTHROPIC_BASE_URL` cuya ventana de contexto no coincida con el tamaño integrado para su nombre |

333| `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` | Longitud máxima en caracteres de cada descripción de herramienta MCP y de las instrucciones de cada servidor MCP que Claude Code envía al modelo (predeterminado: 2048). Claude Code [trunca el texto más largo](/docs/es/mcp#for-mcp-server-authors). Acepta un número entero positivo con dígitos simples. Cualquier otro valor se ignora y se aplica el predeterminado. Requiere Claude Code v2.1.280 o posterior |335| `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` | Longitud máxima en caracteres de cada descripción de herramienta MCP y de las instrucciones de cada servidor MCP que Claude Code envía al modelo. El valor que establezcas reemplaza ambos [límites predeterminados](/docs/es/mcp#for-mcp-server-authors): 4096, y 16384 para la descripción de una herramienta que Claude carga mediante la búsqueda de herramientas. Claude Code trunca el texto más largo. Acepta un número entero positivo en dígitos simples. Cualquier otro valor se ignora y se aplican los valores predeterminados. Requiere Claude Code v2.1.280 o posterior |

334| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | Establece el número máximo de tokens de salida para la mayoría de las solicitudes. Los valores predeterminados y los límites varían según el modelo; consulta [tokens de salida máximos](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison). Claude Code reduce al límite un valor que supere el límite de un modelo. Para un ID de modelo que Claude Code no puede resolver a un modelo que conozca, el valor predeterminado es 32000 y el límite es 128000. Aumentar este valor reduce la ventana de contexto efectiva disponible antes de que se active la [compactación automática](/docs/es/costs#reduce-token-usage) |336| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | Establece el número máximo de tokens de salida para la mayoría de las solicitudes. Los valores predeterminados y los límites varían según el modelo; consulta [tokens de salida máximos](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison). Claude Code reduce al límite un valor que supere el límite de un modelo. Para un ID de modelo que Claude Code no puede resolver a un modelo que conozca, el valor predeterminado es 32000 y el límite es 128000. Aumentar este valor reduce la ventana de contexto efectiva disponible antes de que se active la [compactación automática](/docs/es/costs#reduce-token-usage) |

335| `CLAUDE_CODE_MAX_RETRIES` | Sobrescribe el número de veces que se reintentan las solicitudes a la API fallidas (predeterminado: 10). Limitado a 15 a partir de la v2.1.186; a partir de la v2.1.199, `CLAUDE_CODE_RETRY_WATCHDOG` aumenta el valor predeterminado y elimina el límite. Para sesiones desatendidas que necesitan esperar durante interrupciones más largas, establece en su lugar `CLAUDE_CODE_RETRY_WATCHDOG` |337| `CLAUDE_CODE_MAX_RETRIES` | Sobrescribe el número de veces que se reintentan las solicitudes a la API fallidas (predeterminado: 10). Limitado a 15 a partir de la v2.1.186; a partir de la v2.1.199, `CLAUDE_CODE_RETRY_WATCHDOG` aumenta el valor predeterminado y elimina el límite. Para sesiones desatendidas que necesitan esperar durante interrupciones más largas, establece en su lugar `CLAUDE_CODE_RETRY_WATCHDOG` |

336| `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` | Eliminada en la v2.1.224 y ahora no tiene efecto. Antes limitaba el número total de [subagentes](/docs/es/sub-agents) que Claude podía generar con la herramienta Agent en una sesión (predeterminado: 200); generar más allá del límite fallaba con `Subagent spawn limit reached`. El [límite de subagentes concurrentes](/docs/es/sub-agents#concurrent-subagent-limit) y el [límite de profundidad](/docs/es/sub-agents#let-subagents-spawn-their-own-subagents) siguen aplicándose |338| `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` | Eliminada en la v2.1.224 y ahora no tiene efecto. Antes limitaba el número total de [subagentes](/docs/es/sub-agents) que Claude podía generar con la herramienta Agent en una sesión (predeterminado: 200); generar más allá del límite fallaba con `Subagent spawn limit reached`. El [límite de subagentes concurrentes](/docs/es/sub-agents#concurrent-subagent-limit) y el [límite de profundidad](/docs/es/sub-agents#let-subagents-spawn-their-own-subagents) siguen aplicándose |


359| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Intervalo para actualizar los encabezados dinámicos de OpenTelemetry en milisegundos (predeterminado: 1740000 / 29 minutos). Consulta [Encabezados dinámicos](/docs/es/monitoring-usage#dynamic-headers) |361| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Intervalo para actualizar los encabezados dinámicos de OpenTelemetry en milisegundos (predeterminado: 1740000 / 29 minutos). Consulta [Encabezados dinámicos](/docs/es/monitoring-usage#dynamic-headers) |

360| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | Tiempo de espera en milisegundos para que el exportador de OpenTelemetry termine al apagarse (predeterminado: 2000). Auméntalo si se pierden métricas al salir. Consulta [Monitoreo](/docs/es/monitoring-usage) |362| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | Tiempo de espera en milisegundos para que el exportador de OpenTelemetry termine al apagarse (predeterminado: 2000). Auméntalo si se pierden métricas al salir. Consulta [Monitoreo](/docs/es/monitoring-usage) |

361| `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS` | Retraso inicial en milisegundos, en lugar del predeterminado de 500, del backoff exponencial entre los [reintentos automáticos](/docs/es/errors#tune-retry-behavior) de una solicitud que la API rechaza con un error `529` de sobrecarga. Auméntalo para repartir los reintentos en un intervalo más largo cuando la API está al límite de su capacidad. Indica milisegundos enteros de 500 a 32000 con dígitos simples; Claude Code trata cualquier otro valor como no establecido. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida 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 |363| `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS` | Retraso inicial en milisegundos, en lugar del predeterminado de 500, del backoff exponencial entre los [reintentos automáticos](/docs/es/errors#tune-retry-behavior) de una solicitud que la API rechaza con un error `529` de sobrecarga. Auméntalo para repartir los reintentos en un intervalo más largo cuando la API está al límite de su capacidad. Indica milisegundos enteros de 500 a 32000 con dígitos simples; Claude Code trata cualquier otro valor como no establecido. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida 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 |

364| `CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS` | Techo en milisegundos, en lugar del valor predeterminado de 32000, del backoff exponencial entre los [reintentos automáticos](/docs/es/errors#tune-retry-behavior) de una solicitud que la API rechaza con un error `529` de sobrecarga. Auméntalo para que los reintentos posteriores se sigan espaciando cuando la API está al límite de su capacidad. Indica milisegundos enteros de 32000 a 64000 en dígitos simples; Claude Code trata cualquier otro valor como no establecido. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida 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.296 o posterior |

362| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | Establécela en `1` para permitir que Claude Code ejecute en segundo plano el comando de actualización de tu gestor de paquetes cuando haya una nueva versión disponible. Se aplica a las instalaciones con Homebrew y WinGet. Los demás gestores de paquetes siguen mostrando el comando de actualización sin ejecutarlo. Consulta [Actualizaciones automáticas](/docs/es/setup#auto-updates) |365| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | Establécela en `1` para permitir que Claude Code ejecute en segundo plano el comando de actualización de tu gestor de paquetes cuando haya una nueva versión disponible. Se aplica a las instalaciones con Homebrew y WinGet. Los demás gestores de paquetes siguen mostrando el comando de actualización sin ejecutarlo. Consulta [Actualizaciones automáticas](/docs/es/setup#auto-updates) |

363| `CLAUDE_CODE_PERFORCE_MODE` | Establécela en `1` para habilitar la protección contra escritura compatible con Perforce. Cuando se establece, Edit, Write y NotebookEdit fallan con una indicación de `p4 edit <file>` si el archivo de destino no tiene el bit de escritura del propietario, que Perforce borra en los archivos sincronizados hasta que `p4 edit` los abre. Esto impide que Claude Code eluda el seguimiento de cambios de Perforce |366| `CLAUDE_CODE_PERFORCE_MODE` | Establécela en `1` para habilitar la protección contra escritura compatible con Perforce. Cuando se establece, Edit, Write y NotebookEdit fallan con una indicación de `p4 edit <file>` si el archivo de destino no tiene el bit de escritura del propietario, que Perforce borra en los archivos sincronizados hasta que `p4 edit` los abre. Esto impide que Claude Code eluda el seguimiento de cambios de Perforce |

364| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sobrescribe el directorio raíz de los plugins. A pesar del nombre, establece el directorio padre, no la caché en sí: los marketplaces y la caché de plugins se encuentran en subdirectorios de esta ruta. El valor predeterminado es `~/.claude/plugins` |367| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sobrescribe el directorio raíz de los plugins. A pesar del nombre, establece el directorio padre, no la caché en sí: los marketplaces y la caché de plugins se encuentran en subdirectorios de esta ruta. El valor predeterminado es `~/.claude/plugins` |


380| `CLAUDE_CODE_REMOTE_SESSION_ID` | Se establece automáticamente en las [sesiones en la nube](/docs/es/claude-code-on-the-web) con el ID de la sesión actual. Léela para construir un enlace de vuelta a la transcripción de la sesión. Consulta [Enlazar la salida de vuelta a la sesión](/docs/es/cloud-environments#link-output-back-to-the-session) |383| `CLAUDE_CODE_REMOTE_SESSION_ID` | Se establece automáticamente en las [sesiones en la nube](/docs/es/claude-code-on-the-web) con el ID de la sesión actual. Léela para construir un enlace de vuelta a la transcripción de la sesión. Consulta [Enlazar la salida de vuelta a la sesión](/docs/es/cloud-environments#link-output-back-to-the-session) |

381| `CLAUDE_CODE_RESTRICTED` | Establécela en `1` para iniciar la sesión en modo restringido, lo mismo que pasar [`--restricted`](/docs/es/cli-reference#cli-flags). Claude Code ignora esta variable en el bloque `env` de un archivo de configuración. Requiere Claude Code v2.1.248 o posterior |384| `CLAUDE_CODE_RESTRICTED` | Establécela en `1` para iniciar la sesión en modo restringido, lo mismo que pasar [`--restricted`](/docs/es/cli-reference#cli-flags). Claude Code ignora esta variable en el bloque `env` de un archivo de configuración. Requiere Claude Code v2.1.248 o posterior |

382| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | Establécela en `1` para reanudar automáticamente si la sesión anterior terminó a mitad de un turno. Se usa en el modo SDK para que el modelo continúe sin que el SDK tenga que volver a enviar el prompt. Para desactivarla, elimina la variable o establécela en `0`. Para el panel de chat de VS Code, consulta [Continuar conversaciones después de recargar](/docs/es/vs-code#continue-conversations-after-a-reload) |385| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | Establécela en `1` para reanudar automáticamente si la sesión anterior terminó a mitad de un turno. Se usa en el modo SDK para que el modelo continúe sin que el SDK tenga que volver a enviar el prompt. Para desactivarla, elimina la variable o establécela en `0`. Para el panel de chat de VS Code, consulta [Continuar conversaciones después de recargar](/docs/es/vs-code#continue-conversations-after-a-reload) |

383| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Antigüedad máxima en milisegundos del último mensaje de la transcripción para que una sesión que terminó a mitad de un turno continúe automáticamente al reanudarse. Cuando el último mensaje es más antiguo que este límite, Claude Code omite la reanudación automática de `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` y su mensaje de continuación `CLAUDE_CODE_RESUME_PROMPT`, y la sesión se inicia inactiva para que continúes de forma explícita. Sin establecer o `0` significa sin límite, salvo que un turno cuya última solicitud falló con un error de la API solo se reanuda mientras ese error tenga menos de seis horas de antigüedad. Un valor positivo limita todos los turnos, incluidos esos; un valor negativo o no numérico aplica un límite de una hora. Los scripts de inicio para agentes de larga duración pueden establecerla para que un reinicio sobre una transcripción antigua no vuelva a ejecutar un prompt obsoleto. Claude Code establece por sí mismo un límite de una hora cuando reinicia una sesión de [agent view](/docs/es/agent-view) que falló y que heredó su conversación de una sesión interactiva. Requiere Claude Code v2.1.211 o posterior |386| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Antigüedad máxima en milisegundos del último mensaje de la transcripción para que una sesión que terminó a mitad de un turno continúe automáticamente al reanudarse. Cuando el último mensaje es más antiguo que este límite, Claude Code omite la reanudación automática de `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` y su mensaje de continuación `CLAUDE_CODE_RESUME_PROMPT`, y la sesión se inicia inactiva para que continúes de forma explícita. Sin establecer o con `0` no hay límite, salvo que algunos turnos solo se reanudan dentro de las seis horas posteriores a su último mensaje, como uno que terminó con un error de la API. Un valor positivo limita todos los turnos, incluidos esos; un valor negativo o no numérico aplica un límite de una hora. Los scripts que inician agentes de larga duración pueden establecerla para que un reinicio sobre una transcripción antigua no vuelva a ejecutar un prompt obsoleto. Claude Code establece por sí mismo un límite de una hora cuando reinicia una sesión de la [vista de agentes](/docs/es/agent-view) que falló y que heredó su conversación de una sesión interactiva. Requiere Claude Code v2.1.211 o posterior |

384| `CLAUDE_CODE_RESUME_PROMPT` | Sobrescribe el mensaje de continuación que Claude Code envía a Claude cuando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continúa un turno interrumpido en lugar de volver a enviar su prompt, o cuando reanudas una [llamada a herramienta diferida](/docs/es/hooks#defer-a-tool-call-for-later) con `-p`. El valor predeterminado es `Continue from where you left off.`. Una cadena vacía usa el valor predeterminado |387| `CLAUDE_CODE_RESUME_PROMPT` | Sobrescribe el mensaje de continuación que Claude Code envía a Claude cuando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continúa un turno interrumpido en lugar de volver a enviar su prompt, o cuando reanudas una [llamada a herramienta diferida](/docs/es/hooks#defer-a-tool-call-for-later) con `-p`. El valor predeterminado es `Continue from where you left off.`. Una cadena vacía usa el valor predeterminado |

385| `CLAUDE_CODE_RETRY_WATCHDOG` | Establécela en `1` para sesiones desatendidas, como harnesses de evaluación, trabajos de CI o workers remotos. Reintenta indefinidamente los errores de capacidad `429` y `529` 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 informa de un límite de gasto o de créditos de uso agotados, incluso uno de un [límite de gasto del gateway](/docs/es/errors#spend-limit-reached) que se restablece según un calendario. Antes de la v2.1.239, el watchdog reintentaba estos errores indefinidamente. Para las solicitudes en modo rápido, consulta [Manejar los rate limits](/docs/es/fast-mode#handle-rate-limits). El watchdog espera hasta 5 minutos entre intentos, o hasta que se restablezca el límite cuando la respuesta incluye una hora de restablecimiento del rate limit, de modo que una sesión que alcanza un límite de uso espera a que transcurra la ventana restante. En la v2.1.199 o posterior, también aumenta a 300 el número predeterminado de reintentos para otros errores transitorios, como errores del servidor, tiempos de espera agotados y conexiones interrumpidas, lo que equivale aproximadamente a tres horas de backoff, y elimina el límite de 15 en `CLAUDE_CODE_MAX_RETRIES` si estableces esa variable de forma explícita. Requiere Claude Code v2.1.186 o posterior |388| `CLAUDE_CODE_RETRY_WATCHDOG` | Establécela en `1` para sesiones desatendidas, como harnesses de evaluación, trabajos de CI o workers remotos. Reintenta indefinidamente los errores de capacidad `429` y `529` 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 informa de un límite de gasto o de créditos de uso agotados, incluso uno de un [límite de gasto del gateway](/docs/es/errors#spend-limit-reached) que se restablece según un calendario. Antes de la v2.1.239, el watchdog reintentaba estos errores indefinidamente. Para las solicitudes en modo rápido, consulta [Manejar los rate limits](/docs/es/fast-mode#handle-rate-limits). El watchdog espera hasta 5 minutos entre intentos, o hasta que se restablezca el límite cuando la respuesta incluye una hora de restablecimiento del rate limit, de modo que una sesión que alcanza un límite de uso espera a que transcurra la ventana restante. En la v2.1.199 o posterior, también aumenta a 300 el número predeterminado de reintentos para otros errores transitorios, como errores del servidor, tiempos de espera agotados y conexiones interrumpidas, lo que equivale aproximadamente a tres horas de backoff, y elimina el límite de 15 en `CLAUDE_CODE_MAX_RETRIES` si estableces esa variable de forma explícita. Requiere Claude Code v2.1.186 o posterior |

386| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Tiempo máximo en milisegundos que cada solicitud a la API dedica a esperar a que pasen los errores `429` y `529` cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida. Una vez agotado ese tiempo, el siguiente error de ese tipo termina la solicitud. Indica un número entero positivo con dígitos simples, como `1800000` para 30 minutos. Cuando no está establecida, la espera no tiene límite. Requiere Claude Code v2.1.295 o posterior |389| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Tiempo máximo en milisegundos que cada solicitud a la API dedica a esperar a que pasen los errores `429` y `529` cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida. Una vez agotado ese tiempo, el siguiente error de ese tipo termina la solicitud. Indica un número entero positivo con dígitos simples, como `1800000` para 30 minutos. Cuando no está establecida, la espera no tiene límite. Requiere Claude Code v2.1.295 o posterior |


437| `CLAUDE_CODE_WORKER_CHECKIN_SCHEDULE` | Cuando `CLAUDE_AUTO_BACKGROUND_TASKS` está establecida en `1`, cuánto tiempo espera Claude Code antes de cada recordatorio a Claude para que revise los [subagentes en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) que siguen ejecutándose. Acepta una o más esperas separadas por comas en segundos enteros de `1` a `86400`, como `600` o `600,1800,3600`. Cada valor es la espera antes del siguiente recordatorio, y el último valor se repite. Solo acepta dígitos simples; cualquier otro valor o escritura se interpreta como no establecida. Cuando no está establecida, no hay recordatorios. Requiere Claude Code v2.1.283 o posterior |440| `CLAUDE_CODE_WORKER_CHECKIN_SCHEDULE` | Cuando `CLAUDE_AUTO_BACKGROUND_TASKS` está establecida en `1`, cuánto tiempo espera Claude Code antes de cada recordatorio a Claude para que revise los [subagentes en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) que siguen ejecutándose. Acepta una o más esperas separadas por comas en segundos enteros de `1` a `86400`, como `600` o `600,1800,3600`. Cada valor es la espera antes del siguiente recordatorio, y el último valor se repite. Solo acepta dígitos simples; cualquier otro valor o escritura se interpreta como no establecida. Cuando no está establecida, no hay recordatorios. Requiere Claude Code v2.1.283 o posterior |

438| `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS` | Cuántos agentes ejecuta a la vez una sola ejecución de [flujo de trabajo](/docs/es/workflows), de `1` a `256`. De forma predeterminada, una ejecución ejecuta hasta 16 agentes a la vez, menos cuando Claude Code tiene menos CPU disponibles; las llamadas `agent()` en cola esperan a que haya un espacio libre. La transcripción de cada agente en ejecución permanece en la memoria de Claude Code, por lo que los valores más altos aumentan el uso de memoria. Solo acepta dígitos simples; los valores fuera de rango y otras escrituras mantienen el valor predeterminado. Requiere Claude Code v2.1.269 o posterior |441| `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS` | Cuántos agentes ejecuta a la vez una sola ejecución de [flujo de trabajo](/docs/es/workflows), de `1` a `256`. De forma predeterminada, una ejecución ejecuta hasta 16 agentes a la vez, menos cuando Claude Code tiene menos CPU disponibles; las llamadas `agent()` en cola esperan a que haya un espacio libre. La transcripción de cada agente en ejecución permanece en la memoria de Claude Code, por lo que los valores más altos aumentan el uso de memoria. Solo acepta dígitos simples; los valores fuera de rango y otras escrituras mantienen el valor predeterminado. Requiere Claude Code v2.1.269 o posterior |

439| `CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS` | Límite superior en milisegundos de cuánto tiempo espera un agente de [flujo de trabajo](/docs/es/workflows) a que comience la primera respuesta de un agente hermano con el mismo prefijo antes de enviar su propia primera solicitud. Cuando una distribución en abanico (fan-out) inicia varios agentes que comparten un [prefijo de caché de prompts](/docs/es/workflows#prompt-caching-in-a-fan-out), Claude Code retiene a todos los agentes excepto al primero hasta este tiempo para que el resto lea el prefijo en caché en lugar de que cada uno lo procese sin caché. Valor predeterminado: `5000`. Establécelo en `0` para desactivar la espera. Cuando `DISABLE_PROMPT_CACHING` está establecida, los agentes nunca esperan. Requiere Claude Code v2.1.229 o posterior |442| `CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS` | Límite superior en milisegundos de cuánto tiempo espera un agente de [flujo de trabajo](/docs/es/workflows) a que comience la primera respuesta de un agente hermano con el mismo prefijo antes de enviar su propia primera solicitud. Cuando una distribución en abanico (fan-out) inicia varios agentes que comparten un [prefijo de caché de prompts](/docs/es/workflows#prompt-caching-in-a-fan-out), Claude Code retiene a todos los agentes excepto al primero hasta este tiempo para que el resto lea el prefijo en caché en lugar de que cada uno lo procese sin caché. Valor predeterminado: `5000`. Establécelo en `0` para desactivar la espera. Cuando `DISABLE_PROMPT_CACHING` está establecida, los agentes nunca esperan. Requiere Claude Code v2.1.229 o posterior |

443| `CLAUDE_CODE_YOU_SHOULD_KNOW_DEBUG` | Establécela en `1` para mostrar, encima del prompt, una línea por cada una de las últimas tres comprobaciones que hizo el [mod You should know](/docs/es/interactive-mode#you-should-know-suggestions) en esta sesión. Úsala para confirmar que el mod está haciendo comprobaciones cuando no aparece ninguna nota. Requiere Claude Code v2.1.287 o posterior |

440| `CLAUDE_CONFIG_DIR` | Sobrescribe el directorio de configuración (predeterminado: `~/.claude`). Toda la configuración, el historial de sesiones y los plugins se almacenan en esta ruta. Para las credenciales, consulta [dónde almacena Claude Code las credenciales](/docs/es/authentication#credential-management). Útil para ejecutar varias cuentas en paralelo: por ejemplo, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'`. Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. En un archivo de configuración, escribe la [ruta absoluta](#in-settings-files). Se ignora en [la configuración de proyecto y local](/docs/es/settings-reference#variables-claude-code-ignores-in-env) |444| `CLAUDE_CONFIG_DIR` | Sobrescribe el directorio de configuración (predeterminado: `~/.claude`). Toda la configuración, el historial de sesiones y los plugins se almacenan en esta ruta. Para las credenciales, consulta [dónde almacena Claude Code las credenciales](/docs/es/authentication#credential-management). Útil para ejecutar varias cuentas en paralelo: por ejemplo, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'`. Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. En un archivo de configuración, escribe la [ruta absoluta](#in-settings-files). Se ignora en [la configuración de proyecto y local](/docs/es/settings-reference#variables-claude-code-ignores-in-env) |

441| `CLAUDE_DISABLE_ADOPT` | Establécelo en `1` para detener el trabajo en segundo plano en curso en lugar de trasladarlo cuando envías una sesión a segundo plano presionando `←` o con [`/background`](/docs/es/agent-view#from-inside-a-session). Claude Code te pide que confirmes antes de enviarla a segundo plano y luego detiene las tareas que de otro modo se trasladarían. Requiere Claude Code v2.1.195 o posterior |445| `CLAUDE_DISABLE_ADOPT` | Establécelo en `1` para detener el trabajo en segundo plano en curso en lugar de trasladarlo cuando envías una sesión a segundo plano presionando `←` o con [`/background`](/docs/es/agent-view#from-inside-a-session). Claude Code te pide que confirmes antes de enviarla a segundo plano y luego detiene las tareas que de otro modo se trasladarían. Requiere Claude Code v2.1.195 o posterior |

442| `CLAUDE_EFFORT` | Se establece automáticamente en los subprocesos de la herramienta Bash y en los comandos de hooks con el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) vigente cuando se inicia el subproceso: `low`, `medium`, `high`, `xhigh` o `max`. Coincide con el campo `effort.level` que se pasa a los [hooks](/docs/es/hooks). Solo se establece cuando el modelo actual admite el parámetro effort |446| `CLAUDE_EFFORT` | Se establece automáticamente en los subprocesos de la herramienta Bash y en los comandos de hooks con el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) vigente cuando se inicia el subproceso: `low`, `medium`, `high`, `xhigh` o `max`. Coincide con el campo `effort.level` que se pasa a los [hooks](/docs/es/hooks). Solo se establece cuando el modelo actual admite el parámetro effort |


452| `CLAUDE_SUBAGENT_BG_SHELL_MAX_MS` | Eliminada en v2.1.260 y ahora no tiene efecto. Anteriormente limitaba cuánto tiempo podía ejecutarse un [comando de shell en segundo plano](/docs/es/interactive-mode#background-bash-commands) iniciado por un [subagente](/docs/es/sub-agents), en milisegundos, con un valor predeterminado de 60 minutos. Consulta [las reglas de duración de los comandos en segundo plano](/docs/es/tools-reference#background-commands) |456| `CLAUDE_SUBAGENT_BG_SHELL_MAX_MS` | Eliminada en v2.1.260 y ahora no tiene efecto. Anteriormente limitaba cuánto tiempo podía ejecutarse un [comando de shell en segundo plano](/docs/es/interactive-mode#background-bash-commands) iniciado por un [subagente](/docs/es/sub-agents), en milisegundos, con un valor predeterminado de 60 minutos. Consulta [las reglas de duración de los comandos en segundo plano](/docs/es/tools-reference#background-commands) |

453| `DEBUG` | Establécelo en `1` para habilitar el modo de depuración, equivalente a iniciar con [`--debug`](/docs/es/cli-reference#cli-flags). Los registros de depuración se escriben en `~/.claude/debug/<session-id>.txt`, o en la ruta establecida por `CLAUDE_CODE_DEBUG_LOGS_DIR`. Solo los valores verdaderos `1`, `true`, `yes` y `on` habilitan el modo de depuración, por lo que los patrones de espacio de nombres como `DEBUG=express:*` establecidos para otras herramientas no lo activan |457| `DEBUG` | Establécelo en `1` para habilitar el modo de depuración, equivalente a iniciar con [`--debug`](/docs/es/cli-reference#cli-flags). Los registros de depuración se escriben en `~/.claude/debug/<session-id>.txt`, o en la ruta establecida por `CLAUDE_CODE_DEBUG_LOGS_DIR`. Solo los valores verdaderos `1`, `true`, `yes` y `on` habilitan el modo de depuración, por lo que los patrones de espacio de nombres como `DEBUG=express:*` establecidos para otras herramientas no lo activan |

454| `DISABLE_AUTOUPDATER` | Establécelo en `1` para deshabilitar las actualizaciones automáticas en segundo plano. El comando manual `claude update` sigue funcionando. Usa `DISABLE_UPDATES` para bloquear ambos |458| `DISABLE_AUTOUPDATER` | Establécelo en `1` para deshabilitar las actualizaciones automáticas en segundo plano. El comando manual `claude update` sigue funcionando. Usa `DISABLE_UPDATES` para bloquear ambos |

455| `DISABLE_AUTO_COMPACT` | Establécelo en `1` para deshabilitar la compactación automática al acercarse al límite de contexto. El comando manual `/compact` sigue disponible. Úsalo cuando quieras controlar explícitamente cuándo ocurre la compactación. Sobrescribe el ajuste [`autoCompactEnabled`](/docs/es/settings-reference#autocompactenabled) |459| `DISABLE_AUTO_COMPACT` | Establécela en `1` para deshabilitar la compactación automática al acercarse al límite de contexto, junto con la [compactación por inactividad](/docs/es/settings-reference#idlecompaction). El comando manual `/compact` sigue disponible. Úsala cuando quieras un control explícito sobre cuándo se produce la compactación. Sobrescribe el ajuste [`autoCompactEnabled`](/docs/es/settings-reference#autocompactenabled) |

456| `DISABLE_COMPACT` | Establécelo en `1` para deshabilitar toda la compactación: tanto la compactación automática como el comando manual `/compact` |460| `DISABLE_COMPACT` | Establécelo en `1` para deshabilitar toda la compactación: tanto la compactación automática como el comando manual `/compact` |

457| `DISABLE_COST_WARNINGS` | Establécelo en `1` para deshabilitar los mensajes de advertencia de costos |461| `DISABLE_COST_WARNINGS` | Establécelo en `1` para deshabilitar los mensajes de advertencia de costos |

458| `DISABLE_DOCTOR_COMMAND` | Establécelo en `1` para ocultar el skill de revisión de la configuración inicial [`/doctor`](/docs/es/commands#all-commands) y su alias `/checkup`. Útil para despliegues administrados en los que los usuarios no deberían ejecutar diagnósticos de configuración desde una sesión. No afecta al comando de terminal `claude doctor`. Antes de v2.1.205, esta variable ocultaba el comando de pantalla de diagnóstico `/doctor` |462| `DISABLE_DOCTOR_COMMAND` | Establécelo en `1` para ocultar el skill de revisión de la configuración inicial [`/doctor`](/docs/es/commands#all-commands) y su alias `/checkup`. Útil para despliegues administrados en los que los usuarios no deberían ejecutar diagnósticos de configuración desde una sesión. No afecta al comando de terminal `claude doctor`. Antes de v2.1.205, esta variable ocultaba el comando de pantalla de diagnóstico `/doctor` |


478| `ENABLE_CLAUDEAI_MCP_SERVERS` | Establécelo en `false` para impedir que Claude Code obtenga los [servidores MCP de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai). Habilitado de forma predeterminada para los usuarios que han iniciado sesión. Para deshabilitarlo por proyecto o por organización, establece [`disableClaudeAiConnectors`](/docs/es/settings-reference#disableclaudeaiconnectors) en la configuración en su lugar |482| `ENABLE_CLAUDEAI_MCP_SERVERS` | Establécelo en `false` para impedir que Claude Code obtenga los [servidores MCP de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai). Habilitado de forma predeterminada para los usuarios que han iniciado sesión. Para deshabilitarlo por proyecto o por organización, establece [`disableClaudeAiConnectors`](/docs/es/settings-reference#disableclaudeaiconnectors) en la configuración en su lugar |

479| `ENABLE_PROMPT_CACHING_1H` | Establécelo en `1` para solicitar un [TTL de caché de prompts](/docs/es/prompt-caching#cache-lifetime) de 1 hora en lugar de los 5 minutos predeterminados. Pensado para usuarios de clave de API, [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), [Microsoft Foundry](/docs/es/microsoft-foundry) y [Claude Platform on AWS](/docs/es/claude-platform-on-aws). Los usuarios de suscripción dentro del uso incluido reciben automáticamente el TTL de 1 hora en la [conversación principal](/docs/es/prompt-caching#which-ttl-each-request-gets). Los usuarios de suscripción que consumen [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) pueden establecerla para mantener el TTL de 1 hora. Las escrituras en caché de 1 hora se facturan a una tarifa más alta. Para elegir el TTL por grupo de solicitudes en su lugar, usa `CLAUDE_CODE_PROMPT_CACHE_TTL` y `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`, que tienen precedencia sobre esta variable |483| `ENABLE_PROMPT_CACHING_1H` | Establécelo en `1` para solicitar un [TTL de caché de prompts](/docs/es/prompt-caching#cache-lifetime) de 1 hora en lugar de los 5 minutos predeterminados. Pensado para usuarios de clave de API, [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), [Microsoft Foundry](/docs/es/microsoft-foundry) y [Claude Platform on AWS](/docs/es/claude-platform-on-aws). Los usuarios de suscripción dentro del uso incluido reciben automáticamente el TTL de 1 hora en la [conversación principal](/docs/es/prompt-caching#which-ttl-each-request-gets). Los usuarios de suscripción que consumen [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) pueden establecerla para mantener el TTL de 1 hora. Las escrituras en caché de 1 hora se facturan a una tarifa más alta. Para elegir el TTL por grupo de solicitudes en su lugar, usa `CLAUDE_CODE_PROMPT_CACHE_TTL` y `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`, que tienen precedencia sobre esta variable |

480| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Obsoleta. Usa `ENABLE_PROMPT_CACHING_1H` en su lugar |484| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Obsoleta. Usa `ENABLE_PROMPT_CACHING_1H` en su lugar |

481| `ENABLE_TOOL_SEARCH` | Controla la [búsqueda de herramientas MCP](/docs/es/mcp#scale-with-mcp-tool-search). Sin establecer, Claude Code difiere todas las herramientas MCP de forma predeterminada. Aun así, las carga por adelantado en los modelos de Google Cloud's Agent Platform anteriores a la generación Claude 4.5, en un despliegue de Microsoft Foundry alojado en Azure y cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte. `true` siempre difiere y envía el encabezado beta, excepto en esos mismos modelos de Agent Platform y despliegues de Microsoft Foundry; las solicitudes fallan en los proxies que no admiten `tool_reference`. `auto` carga por adelantado cuando las definiciones de herramientas caben dentro del 10% del contexto. `auto:N` establece un umbral personalizado, como `auto:5` para el 5%. `false` carga todas las herramientas por adelantado. Un valor que establezcas tú mismo se ignora cuando `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` está establecida. Antes de v2.1.221, Claude Code deshabilitaba la búsqueda de herramientas para todos los modelos en Google Cloud's Agent Platform a menos que establecieras esta variable en `true` |485| `ENABLE_TOOL_SEARCH` | Controla la [búsqueda de herramientas MCP](/docs/es/mcp#scale-with-mcp-tool-search). Sin establecer, Claude Code difiere todas las herramientas MCP de forma predeterminada, y en su lugar las carga de antemano cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte. `true` las mantiene diferidas también en ese host. `auto` las carga de antemano cuando las definiciones de herramientas caben en el 10 % del contexto. `auto:N` establece un umbral personalizado, como `auto:5` para el 5 %. `false` carga todas las herramientas de antemano. Para los modelos y despliegues que cargan todas las herramientas de antemano sea cual sea este valor, consulta [Configurar la búsqueda de herramientas](/docs/es/mcp#configure-tool-search) |

482| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Establécelo en cualquier valor no vacío, como `1`, para que Claude Code deje de reintentar ante errores de sobrecarga repetidos con todos los modelos cuando no hay ningún modelo de respaldo configurado. **Establecerlo en `0` o `false` también lo habilita**, a diferencia de la mayoría de las variables de activación/desactivación; elimina la variable para restaurar el comportamiento de reintento predeterminado. Sin ella, Claude Code deja de reintentar de esta forma en los modelos que reconoce como modelos Opus, Fable o Mythos cuando te autenticas con una clave de API o un [proveedor externo](/docs/es/third-party-integrations) en lugar de una suscripción a Claude. En Claude Code v2.1.160 o posterior, Claude Code cambia a tu [cadena de modelos de respaldo](/docs/es/model-config#fallback-model-chains) configurada ante errores de sobrecarga repetidos con cualquier modelo principal, por lo que esta variable no afecta al cambio a un modelo de respaldo |486| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Establécelo en cualquier valor no vacío, como `1`, para que Claude Code deje de reintentar ante errores de sobrecarga repetidos con todos los modelos cuando no hay ningún modelo de respaldo configurado. **Establecerlo en `0` o `false` también lo habilita**, a diferencia de la mayoría de las variables de activación/desactivación; elimina la variable para restaurar el comportamiento de reintento predeterminado. Sin ella, Claude Code deja de reintentar de esta forma en los modelos que reconoce como modelos Opus, Fable o Mythos cuando te autenticas con una clave de API o un [proveedor externo](/docs/es/third-party-integrations) en lugar de una suscripción a Claude. En Claude Code v2.1.160 o posterior, Claude Code cambia a tu [cadena de modelos de respaldo](/docs/es/model-config#fallback-model-chains) configurada ante errores de sobrecarga repetidos con cualquier modelo principal, por lo que esta variable no afecta al cambio a un modelo de respaldo |

483| `FORCE_AUTOUPDATE_PLUGINS` | Establécelo en `1` para forzar las actualizaciones automáticas de plugins incluso cuando el actualizador automático principal está deshabilitado mediante `DISABLE_AUTOUPDATER` |487| `FORCE_AUTOUPDATE_PLUGINS` | Establécelo en `1` para forzar las actualizaciones automáticas de plugins incluso cuando el actualizador automático principal está deshabilitado mediante `DISABLE_AUTOUPDATER` |

484| `FORCE_HYPERLINK` | Establécelo en `1` para habilitar los hipervínculos OSC 8 en los que se puede hacer clic cuando tu terminal los admite pero no se detecta automáticamente, o en `0` para deshabilitarlos. Cuando no está establecida, Claude Code habilita los hipervínculos solo cuando detecta que la terminal los admite. Claude Code interpreta este valor como un número, no como un booleano, por lo que un valor como `false`, `no` u `off` habilita los hipervínculos en lugar de deshabilitarlos. La [insignia de PR o merge request](/docs/es/interactive-mode#pr-review-status) del pie de página se muestra como hipervínculo incluso cuando Claude Code no puede detectar que la terminal los admite, como a través de SSH. Establécelo en `0` para mostrar la insignia como texto sin formato |488| `FORCE_HYPERLINK` | Establécelo en `1` para habilitar los hipervínculos OSC 8 en los que se puede hacer clic cuando tu terminal los admite pero no se detecta automáticamente, o en `0` para deshabilitarlos. Cuando no está establecida, Claude Code habilita los hipervínculos solo cuando detecta que la terminal los admite. Claude Code interpreta este valor como un número, no como un booleano, por lo que un valor como `false`, `no` u `off` habilita los hipervínculos en lugar de deshabilitarlos. La [insignia de PR o merge request](/docs/es/interactive-mode#pr-review-status) del pie de página se muestra como hipervínculo incluso cuando Claude Code no puede detectar que la terminal los admite, como a través de SSH. Establécelo en `0` para mostrar la insignia como texto sin formato |


593* Ejecutar [`claude import` o el comando `/import`](/docs/es/cli-reference#cli-commands)597* Ejecutar [`claude import` o el comando `/import`](/docs/es/cli-reference#cli-commands)

594* Ejecutar [`/skill-doctor`](/docs/es/skills#find-unused-skills) ni abrir su informe en la pestaña **Stats** de `/plugin`598* Ejecutar [`/skill-doctor`](/docs/es/skills#find-unused-skills) ni abrir su informe en la pestaña **Stats** de `/plugin`

595* Sincronizar los [skills](/docs/es/skills#where-synced-skills-load) y [plugins](/docs/es/plugins/loading#synced-plugins) habilitados para tu cuenta de claude.ai en tus sesiones de terminal599* Sincronizar los [skills](/docs/es/skills#where-synced-skills-load) y [plugins](/docs/es/plugins/loading#synced-plugins) habilitados para tu cuenta de claude.ai en tus sesiones de terminal

600* Activar el [mod You should know](/docs/es/interactive-mode#you-should-know-suggestions)

596* Usar [la herramienta advisor](/docs/es/advisor#requirements)601* Usar [la herramienta advisor](/docs/es/advisor#requirements)

597* Leer o responder [comentarios en un artefacto](/docs/es/artifacts#collect-comments-on-an-artifact)602* Leer o responder [comentarios en un artefacto](/docs/es/artifacts#collect-comments-on-an-artifact)

598* Hacer que Claude lea [el artefacto público de otra organización](/docs/es/artifacts#read-an-artifact-shared-with-you)603* Hacer que Claude lea [el artefacto público de otra organización](/docs/es/artifacts#read-an-artifact-shared-with-you)


600* Obtener [comentarios redactados por Claude](/docs/es/tools-reference#sendfeedback-tool-behavior), que Claude Code activa mediante un flag obtenido605* Obtener [comentarios redactados por Claude](/docs/es/tools-reference#sendfeedback-tool-behavior), que Claude Code activa mediante un flag obtenido

601* Hacer que Claude [trate los pegados grandes como texto pegado en lugar de texto escrito](/docs/es/terminal-config#how-claude-treats-pasted-text); el contenido detrás de un marcador de posición `[Pasted text #N]` llega a Claude sin marcar606* Hacer que Claude [trate los pegados grandes como texto pegado en lugar de texto escrito](/docs/es/terminal-config#how-claude-treats-pasted-text); el contenido detrás de un marcador de posición `[Pasted text #N]` llega a Claude sin marcar

602* Hacer que Claude Code [excluya las herramientas MCP cuyo esquema de entrada rechazaría la API](/docs/es/mcp#tools-with-invalid-input-schemas); envía el esquema de todos modos, y una solicitud que lo incluya falla con [un error 400 que nombra la herramienta por su posición](/docs/es/errors#tool-input-schema-is-invalid)607* Hacer que Claude Code [excluya las herramientas MCP cuyo esquema de entrada rechazaría la API](/docs/es/mcp#tools-with-invalid-input-schemas); envía el esquema de todos modos, y una solicitud que lo incluya falla con [un error 400 que nombra la herramienta por su posición](/docs/es/errors#tool-input-schema-is-invalid)

608* Hacer que Claude Code [compacte una conversación larga mientras tu sesión de terminal está inactiva](/docs/es/settings-reference#idlecompaction), poco antes de que caduque una caché de prompts de una hora

603 609 

604<h3 id="first-session-after-an-install-or-upgrade">610<h3 id="first-session-after-an-install-or-upgrade">

605 Primera sesión después de una instalación o actualización611 Primera sesión después de una instalación o actualización

errors.md +161 −10

Details

134| `proxy refused the connection` | [Red](#the-proxy-refused-the-connection) |134| `proxy refused the connection` | [Red](#the-proxy-refused-the-connection) |

135| `403` con `GitHub GraphQL is not available from Claude Code sessions` en una sesión en la nube | [Proxy de GitHub](/docs/es/cloud-environments#github-proxy) |135| `403` con `GitHub GraphQL is not available from Claude Code sessions` en una sesión en la nube | [Proxy de GitHub](/docs/es/cloud-environments#github-proxy) |

136| `The cloud environments service returned an empty response` / `The cloud environments service returned a response in an unexpected format` | [Red](#the-cloud-environments-service-returned-an-empty-or-unexpected-response) |136| `The cloud environments service returned an empty response` / `The cloud environments service returned a response in an unexpected format` | [Red](#the-cloud-environments-service-returned-an-empty-or-unexpected-response) |

137| `Failed to fetch session from Sessions API: Failed to fetch session logs` | [Red](#failed-to-fetch-session-from-sessions-api) |

137| `Couldn't reconnect to your Remote Control session` | [Red](#couldnt-reconnect-to-your-remote-control-session) |138| `Couldn't reconnect to your Remote Control session` | [Red](#couldnt-reconnect-to-your-remote-control-session) |

138| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [Red](#sessions-ended-while-this-machine-was-offline) |139| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [Red](#sessions-ended-while-this-machine-was-offline) |

139| `Couldn't share the transcript.` | [Red](#couldnt-share-the-transcript) |140| `Couldn't share the transcript.` | [Red](#couldnt-share-the-transcript) |


153| `Request too large for the API's 32MB request limit` | [Errores de solicitud](#request-too-large) |154| `Request too large for the API's 32MB request limit` | [Errores de solicitud](#request-too-large) |

154| `Image was too large` | [Errores de solicitud](#image-was-too-large) |155| `Image was too large` | [Errores de solicitud](#image-was-too-large) |

155| `Unable to resize image` | [Errores de solicitud](#unable-to-resize-image) |156| `Unable to resize image` | [Errores de solicitud](#unable-to-resize-image) |

157| `Request rejected as unprocessable by the model` | [Errores de solicitud](#request-rejected-as-unprocessable-by-the-model) |

156| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [Errores de solicitud](#pdf-errors) |158| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [Errores de solicitud](#pdf-errors) |

157| `Extra inputs are not permitted` | [Errores de solicitud](#extra-inputs-are-not-permitted) |159| `Extra inputs are not permitted` | [Errores de solicitud](#extra-inputs-are-not-permitted) |

158| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [Errores de solicitud](#tool-input-schema-is-invalid) |160| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [Errores de solicitud](#tool-input-schema-is-invalid) |

161| `Tool "mcp__<server>__<tool>" is not sent to Claude: its name has <N> characters and the API accepts at most 128` | [Errores de solicitud](#mcp-tool-name-over-128-characters) |

162| `tools.N.custom.name: String should have at most 128 characters` | [Errores de solicitud](#mcp-tool-name-over-128-characters) |

159| `tool_use.name: String should have at most 200 characters` | [Errores de solicitud](#tool-use-name-over-200-characters) |163| `tool_use.name: String should have at most 200 characters` | [Errores de solicitud](#tool-use-name-over-200-characters) |

160| `There's an issue with the selected model` | [Errores de solicitud](#theres-an-issue-with-the-selected-model) |164| `There's an issue with the selected model` | [Errores de solicitud](#theres-an-issue-with-the-selected-model) |

161| `Model ... is not a recognized model id` | [Errores de solicitud](#model-is-not-a-recognized-model-id) |165| `Model ... is not a recognized model id` | [Errores de solicitud](#model-is-not-a-recognized-model-id) |


198| `Error: Cannot use both --append-subagent-system-prompt and --append-subagent-system-prompt-file. Please use only one.` | [Errores de línea de comandos](#conflict-between-a-system-prompt-flag-and-its-file-form) |202| `Error: Cannot use both --append-subagent-system-prompt and --append-subagent-system-prompt-file. Please use only one.` | [Errores de línea de comandos](#conflict-between-a-system-prompt-flag-and-its-file-form) |

199| `Cloud sessions cannot be created from a --restricted session` | [Errores de línea de comandos](#cloud-sessions-cannot-be-created-from-a-restricted-session) |203| `Cloud sessions cannot be created from a --restricted session` | [Errores de línea de comandos](#cloud-sessions-cannot-be-created-from-a-restricted-session) |

200| `Cloud sessions are disabled by your organization's policy` | [Errores de línea de comandos](#cloud-sessions-are-disabled-by-your-organizations-policy) |204| `Cloud sessions are disabled by your organization's policy` | [Errores de línea de comandos](#cloud-sessions-are-disabled-by-your-organizations-policy) |

201| `Couldn't verify your organization's policy for cloud sessions` | [Errores de línea de comandos](#cloud-sessions-are-disabled-by-your-organizations-policy) |205| `Cloud sessions use your claude.ai login`, al final de una denegación de política que nombra una credencial | [Errores de línea de comandos](#cloud-sessions-use-your-claude-ai-login) |

206| `Couldn't verify your organization's policy for cloud sessions` | [Errores de línea de comandos](#couldnt-verify-your-organizations-policy-for-cloud-sessions) |

207| `Cloud sessions aren't available:` seguido del motivo por el que no se pudo cargar la política de tu organización | [Errores de línea de comandos](#couldnt-verify-your-organizations-policy-for-cloud-sessions) |

202| `Cloud sessions need a claude.ai sign-in` | [No se puede obtener el UUID de la organización](/docs/es/claude-code-on-the-web#unable-to-get-organization-uuid) |208| `Cloud sessions need a claude.ai sign-in` | [No se puede obtener el UUID de la organización](/docs/es/claude-code-on-the-web#unable-to-get-organization-uuid) |

209| `Nothing was stashed: "<path>" is now a folder in place of a tracked file or link` / `are now folders in place of tracked files or links` | [Errores de línea de comandos](#nothing-was-stashed-because-a-folder-replaced-a-tracked-file) |

203| `Error: --json-schema is not a valid JSON Schema` | [Errores de línea de comandos](#the-json-schema-value-is-not-a-valid-json-schema) |210| `Error: --json-schema is not a valid JSON Schema` | [Errores de línea de comandos](#the-json-schema-value-is-not-a-valid-json-schema) |

204| `Error: Invalid --agents configuration:` | [Errores de línea de comandos](#invalid-agents-configuration) |211| `Error: Invalid --agents configuration:` | [Errores de línea de comandos](#invalid-agents-configuration) |

205| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Errores de línea de comandos](#invalid-agents-configuration) |212| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Errores de línea de comandos](#invalid-agents-configuration) |


259| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [Errores de línea de comandos](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |266| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [Errores de línea de comandos](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |

260| `/recap only runs when you ask for it yourself in this session` | [Errores de línea de comandos](#recap-only-runs-when-you-ask-for-it-yourself) |267| `/recap only runs when you ask for it yourself in this session` | [Errores de línea de comandos](#recap-only-runs-when-you-ask-for-it-yourself) |

261| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Errores de plugins](#plugin-eval-is-currently-in-early-access) |268| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Errores de plugins](#plugin-eval-is-currently-in-early-access) |

269| `cannot be evaluated where sessions load it` | [Probar plugins con evals](/docs/es/plugin-evals#cannot-be-evaluated-where-sessions-load-it) |

262| `Marketplace "<name>" is registered from an untrusted source` | [Errores de plugins](#marketplace-is-registered-from-an-untrusted-source) |270| `Marketplace "<name>" is registered from an untrusted source` | [Errores de plugins](#marketplace-is-registered-from-an-untrusted-source) |

263| `Claude Code refuses the marketplace name "<name>"` | [Errores de plugins](#claude-code-refuses-the-marketplace-name) |271| `Claude Code refuses the marketplace name "<name>"` | [Errores de plugins](#claude-code-refuses-the-marketplace-name) |

264| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Errores de plugins](#claude-code-refuses-the-marketplace-name) |272| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Errores de plugins](#claude-code-refuses-the-marketplace-name) |


358| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Representación en pantalla completa](/docs/es/fullscreen#fullscreen-renderer-didnt-finish-starting) |366| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Representación en pantalla completa](/docs/es/fullscreen#fullscreen-renderer-didnt-finish-starting) |

359| `Claude Code exited after an unrecoverable interface error (...)` | [Advertencias de configuración](#exited-after-an-unrecoverable-interface-error) |367| `Claude Code exited after an unrecoverable interface error (...)` | [Advertencias de configuración](#exited-after-an-unrecoverable-interface-error) |

360| `Agent descriptions are over the 15.0k-token limit` | [Advertencias de configuración](#agent-descriptions-are-over-the-15000-token-limit) |368| `Agent descriptions are over the 15.0k-token limit` | [Advertencias de configuración](#agent-descriptions-are-over-the-15000-token-limit) |

369| `hook needs quotes around a path with a space` | [Advertencias de configuración](#hook-needs-quotes-around-a-path-with-a-space) |

361| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Advertencias de configuración](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |370| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Advertencias de configuración](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |

371| `N skill or command names refused: run with --debug to see which ([names]), rename, then restart` | [Advertencias de configuración](#skill-or-command-name-refused) |

362| `Ignoring N permissions.allow entries from ... this workspace has not been trusted` | [Advertencias de configuración](#workspace-has-not-been-trusted) |372| `Ignoring N permissions.allow entries from ... this workspace has not been trusted` | [Advertencias de configuración](#workspace-has-not-been-trusted) |

363| `is a network path, which cannot be added as a working directory` | [Advertencias de configuración](#working-directory-is-a-network-path) |373| `is a network path, which cannot be added as a working directory` | [Advertencias de configuración](#working-directory-is-a-network-path) |

364| `Remote managed settings failed to load (<cause>)` | [Advertencias de configuración](#remote-managed-settings-failed-to-load) |374| `Remote managed settings failed to load (<cause>)` | [Advertencias de configuración](#remote-managed-settings-failed-to-load) |


447| [`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. |457| [`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. |

448| [`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. |458| [`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. |

449| [`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. |459| [`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. |

460| [`CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS`](/docs/es/env-vars) | 32000 | Límite máximo en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 64000, para que los reintentos posteriores sigan espaciándose 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.296 o posterior. |

450| [`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). |461| [`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). |

451| [`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. |462| [`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. |

452| [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/es/env-vars) | sin establecer | Plazo en milisegundos para el primer byte de respuesta de una solicitud en streaming. Requiere Claude Code v2.1.242 o posterior. Para saber cómo elige Claude Code el plazo cuando esta variable no está establecida, consulta [No response from API](#no-response-from-api). |463| [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/es/env-vars) | sin establecer | Plazo en milisegundos para el primer byte de respuesta de una solicitud en streaming. Requiere Claude Code v2.1.242 o posterior. Para saber cómo elige Claude Code el plazo cuando esta variable no está establecida, consulta [No response from API](#no-response-from-api). |


2045Estos pasos cambian uno de tus propios entornos. Un [entorno compartido por la organización](/docs/es/cloud-environments#organization-shared-environments) se abre como de solo lectura en el selector, así que pide a un Owner que cambie su acceso a la red desde la página **Cloud environments** en la [configuración de administración](https://claude.ai/admin-settings).2056Estos pasos cambian uno de tus propios entornos. Un [entorno compartido por la organización](/docs/es/cloud-environments#organization-shared-environments) se abre como de solo lectura en el selector, así que pide a un Owner que cambie su acceso a la red desde la página **Cloud environments** en la [configuración de administración](https://claude.ai/admin-settings).

2046 2057 

2047* Abre tu entorno para editarlo, ya sea desde el [formulario de la rutina](/docs/es/routines#environments-and-network-access) o desde el [selector de entornos](/docs/es/cloud-environments#configure-your-environment) donde inicias sesiones en la nube.2058* Abre tu entorno para editarlo, ya sea desde el [formulario de la rutina](/docs/es/routines#environments-and-network-access) o desde el [selector de entornos](/docs/es/cloud-environments#configure-your-environment) donde inicias sesiones en la nube.

2048* En el diálogo **Edit environment**, cambia **Network access** de **Trusted** a **Custom** y luego agrega el dominio bloqueado a **Allowed domains**. Ingresa un dominio por línea. Marca **Also include default list of common package managers** para conservar la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) junto con tus dominios personalizados. Selecciona **Full** en su lugar si quieres acceso sin restricciones.2059* En el diálogo **Edit cloud environment**, cambia **Network access** de **Trusted** a **Custom** y luego agrega el dominio bloqueado a **Allowed domains**. Ingresa un dominio por línea. Marca **Also include default list of common package managers** para conservar la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) junto con tus dominios personalizados. Selecciona **Full** en su lugar si quieres acceso sin restricciones.

2049* Haz clic en **Save changes**. La siguiente ejecución usa la lista de permitidos actualizada. Para una sesión en la nube que ya está abierta, consulta [cuándo llega un cambio de acceso a la red a las sesiones existentes](/docs/es/cloud-environments#network-access).2060* Haz clic en **Save changes**. La siguiente ejecución usa la lista de permitidos actualizada. Para una sesión en la nube que ya está abierta, consulta [cuándo llega un cambio de acceso a la red a las sesiones existentes](/docs/es/cloud-environments#network-access).

2050 2061 

2051Consulta [Acceso a la red](/docs/es/cloud-environments#network-access) para conocer los niveles de acceso y la lista de permitidos predeterminada. Las sesiones locales de la CLI no se ven afectadas por esta política.2062Consulta [Acceso a la red](/docs/es/cloud-environments#network-access) para conocer los niveles de acceso y la lista de permitidos predeterminada. Las sesiones locales de la CLI no se ven afectadas por esta política.


2097 2108 

2098Antes de v2.1.236, Claude Code mostraba un TypeError de JavaScript sin procesar en lugar de estos mensajes.2109Antes de v2.1.236, Claude Code mostraba un TypeError de JavaScript sin procesar en lugar de estos mensajes.

2099 2110 

2111<h3 id="failed-to-fetch-session-from-sessions-api">

2112 Failed to fetch session from Sessions API

2113</h3>

2114 

2115Este mensaje significa que Claude Code encontró la [sesión en la nube que pediste traer a tu terminal](/docs/es/claude-code-on-the-web#from-cloud-to-terminal), pero no pudo leer su historial de conversación desde los servidores de Anthropic, por lo que no la abrió:

2116 

2117```text theme={null}

2118Failed to fetch session from Sessions API: Failed to fetch session logs

2119```

2120 

2121Lo ves después de `claude --teleport`, `/teleport` o al elegir la sesión en la lista de [`/tasks`](/docs/es/commands). `claude --teleport <session-id>` lo imprime y sale con el código 1.

2122 

2123**Qué hacer:**

2124 

2125* Ejecuta el mismo teleport de nuevo. Si falla de la misma manera, [reporta el problema](#report-an-error)

2126 

2127Antes de v2.1.296, Claude Code no reintentaba una lectura fallida y, después de una, podía abrir la sesión con una conversación vacía e informar éxito en lugar de imprimir este mensaje.

2128 

2100<h3 id="couldnt-reconnect-to-your-remote-control-session">2129<h3 id="couldnt-reconnect-to-your-remote-control-session">

2101 Couldn't reconnect to your Remote Control session2130 Couldn't reconnect to your Remote Control session

2102</h3>2131</h3>


2344* Si el mensaje reporta un límite de dimensiones o de tamaño, redimensiona o vuelve a comprimir la imagen por debajo de ese límite antes de adjuntarla.2373* Si el mensaje reporta un límite de dimensiones o de tamaño, redimensiona o vuelve a comprimir la imagen por debajo de ese límite antes de adjuntarla.

2345* Si el mensaje nombra una causa, como un JPEG CMYK, un WebP animado o un archivo posiblemente dañado, vuelve a guardar la imagen en el formato que sugiere el mensaje y adjúntala de nuevo.2374* Si el mensaje nombra una causa, como un JPEG CMYK, un WebP animado o un archivo posiblemente dañado, vuelve a guardar la imagen en el formato que sugiere el mensaje y adjúntala de nuevo.

2346 2375 

2376<h3 id="request-rejected-as-unprocessable-by-the-model">

2377 Request rejected as unprocessable by the model

2378</h3>

2379 

2380La API rechazó la solicitud como una que el modelo no puede procesar. El mensaje es el propio de la API.

2381 

2382```text theme={null}

2383API Error: 400 Request rejected as unprocessable by the model (too many or oversized images, or unsupported parameters)

2384```

2385 

2386Claude Code puede quitar las imágenes y los documentos más antiguos de una solicitud rechazada y enviarla de nuevo. Antes de v2.1.290, Claude Code no quitaba imágenes ante este rechazo, por lo que una sesión larga que acumulaba cientos de ellas podía fallar con este error en cada turno.

2387 

2388**Qué hacer:**

2389 

2390* Si el mensaje sigue apareciendo en una conversación con imágenes o documentos, quítalos tú mismo. Presiona Esc dos veces para retroceder antes de los turnos que los agregaron, o ejecuta `/clear` para empezar de cero.

2391 

2347<h3 id="pdf-errors">2392<h3 id="pdf-errors">

2348 Errores de PDF2393 Errores de PDF

2349</h3>2394</h3>


2413* Elimina o [desactiva](/docs/es/mcp#disable-a-server-without-removing-it) el servidor MCP que declara el esquema no válido. El error identifica la herramienta solo por su posición. En v2.1.216 o posterior, revisa el registro de cada servidor en busca de una línea que nombre una herramienta cuyo esquema de entrada sería rechazado. Si ningún registro nombra una, desactiva los servidores de uno en uno.2458* Elimina o [desactiva](/docs/es/mcp#disable-a-server-without-removing-it) el servidor MCP que declara el esquema no válido. El error identifica la herramienta solo por su posición. En v2.1.216 o posterior, revisa el registro de cada servidor en busca de una línea que nombre una herramienta cuyo esquema de entrada sería rechazado. Si ningún registro nombra una, desactiva los servidores de uno en uno.

2414* Si mantienes el servidor, corrige el `input_schema` de la herramienta. El esquema debe ser JSON Schema válido, y los nombres de propiedad de nivel superior deben tener entre 1 y 64 caracteres y usar solo letras y dígitos ASCII, `_`, `.` y `-`. Consulta [Herramientas con esquemas de entrada no válidos](/docs/es/mcp#tools-with-invalid-input-schemas).2459* Si mantienes el servidor, corrige el `input_schema` de la herramienta. El esquema debe ser JSON Schema válido, y los nombres de propiedad de nivel superior deben tener entre 1 y 64 caracteres y usar solo letras y dígitos ASCII, `_`, `.` y `-`. Consulta [Herramientas con esquemas de entrada no válidos](/docs/es/mcp#tools-with-invalid-input-schemas).

2415 2460 

2461<h3 id="mcp-tool-name-over-128-characters">

2462 Nombre de herramienta MCP de más de 128 caracteres

2463</h3>

2464 

2465Un servidor MCP enumera una herramienta cuyo nombre completo, como `mcp__<server>__<tool>`, supera los 128 caracteres que acepta la API. Claude Code [deja esa herramienta fuera de las herramientas que envía a Claude](/docs/es/mcp#tools-with-names-longer-than-128-characters), y las demás herramientas del servidor siguen funcionando. En una sesión que inicias con `claude --debug` desde tu shell, Claude Code escribe este mensaje en el registro de depuración en `~/.claude/debug/<session-id>.txt`:

2466 

2467```text theme={null}

2468Tool "mcp__<server>__<tool>" is not sent to Claude: its name has <N> characters and the API accepts at most 128

2469```

2470 

2471**Qué hacer:**

2472 

2473* Si mantienes el servidor, acorta el nombre de la herramienta.

2474* Si el servidor está en tu [configuración de MCP](/docs/es/mcp#mcp-installation-scopes), dale ahí un nombre más corto, como `db` en lugar de `analytics-database`. Luego actualiza lo que hace referencia al servidor o a sus herramientas con el nombre anterior, como las [reglas de permisos](/docs/es/permissions#mcp) y los [matchers de hooks](/docs/es/hooks#match-mcp-tools).

2475* Si un [plugin incluye el servidor](/docs/es/mcp#plugin-provided-mcp-servers), el nombre completo de la herramienta también incluye el nombre del plugin. Pídele al mantenedor del plugin que acorte el nombre del servidor o de la herramienta.

2476 

2477Antes de v2.1.292, Claude Code enviaba la herramienta de todos modos, y la API rechazaba cada solicitud que la incluía con `API Error: 400 ... tools.N.custom.name: String should have at most 128 characters`.

2478 

2416<h3 id="tool-use-name-over-200-characters">2479<h3 id="tool-use-name-over-200-characters">

2417 tool\_use.name de más de 200 caracteres2480 tool\_use.name de más de 200 caracteres

2418</h3>2481</h3>


3022 3085 

3023El mensaje aparece cuando [creas una sesión en la nube desde la terminal](/docs/es/claude-code-on-the-web#from-terminal-to-cloud) y cuando envías un comando que necesita sesiones en la nube, como `/teleport`, `/remote-env` o `/web-setup`. Antes de v2.1.268, enviar uno de esos comandos devolvía [`Unknown command`](#unknown-command) en su lugar.3086El mensaje aparece cuando [creas una sesión en la nube desde la terminal](/docs/es/claude-code-on-the-web#from-terminal-to-cloud) y cuando envías un comando que necesita sesiones en la nube, como `/teleport`, `/remote-env` o `/web-setup`. Antes de v2.1.268, enviar uno de esos comandos devolvía [`Unknown command`](#unknown-command) en su lugar.

3024 3087 

3025Se trata de una política de organización del lado del servidor, así que no se puede sobrescribir desde la configuración local, las variables de entorno ni los flags de la CLI.3088Si el mensaje, en cambio, nombra una credencial que usa esta sesión y termina con `Cloud sessions use your claude.ai login.`, consulta [Cloud sessions use your claude.ai login](#cloud-sessions-use-your-claude-ai-login). Si Claude Code no pudo cargar la política de tu organización en absoluto, verás [un mensaje diferente](#couldnt-verify-your-organizations-policy-for-cloud-sessions).

3026 

3027Si Claude Code todavía no ha cargado la política de tu organización o no puede obtenerla, esos comandos responden `Couldn't verify your organization's policy for cloud sessions. Check your network connection, then restart Claude Code and try again.` en su lugar.

3028 3089 

3029**Qué hacer:**3090**Qué hacer:**

3030 3091 

3031* Pide a un [Owner](/docs/es/server-managed-settings#access-control) de tu organización que habilite las sesiones en la nube en la configuración de administración de Claude Code en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)3092* Pide a un [Owner](/docs/es/server-managed-settings#access-control) de tu organización que habilite las sesiones en la nube en la configuración de administración de Claude Code en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)

3032* Si el mensaje dice que no pudo verificar la política, revisa tu conexión de red, luego reinicia Claude Code e inténtalo de nuevo3093 

3094<h3 id="cloud-sessions-use-your-claude-ai-login">

3095 Cloud sessions use your claude.ai login

3096</h3>

3097 

3098Cuando el [rechazo por política](#cloud-sessions-are-disabled-by-your-organizations-policy) nombra una credencial que usa esta sesión y termina con esta oración, Claude Code verificó la política de sesiones en la nube de la organización que emitió esa credencial. Esa organización puede ser distinta de aquella a la que pertenece tu inicio de sesión de claude.ai:

3099 

3100```text theme={null}

3101Cloud sessions are disabled by your organization's policy. This session is using ANTHROPIC_API_KEY, so Claude Code checked the policy for the organization that key belongs to. Cloud sessions use your claude.ai login.

3102```

3103 

3104La última oración significa que las sesiones en la nube se ejecutan con tu inicio de sesión de claude.ai y no con esa credencial. Esta forma aparece cuando inicias, reanudas o envías un mensaje a una sesión en la nube desde tu shell, por ejemplo con `--cloud` o `--teleport`. Antes de v2.1.296, Claude Code también imprimía en este caso la forma que te indica contactar al administrador de tu organización.

3105 

3106<h3 id="couldnt-verify-your-organizations-policy-for-cloud-sessions">

3107 Couldn't verify your organization's policy for cloud sessions

3108</h3>

3109 

3110Estos mensajes significan que Claude Code no pudo cargar la política de tu organización, que verifica antes de crear, reanudar o enviar un mensaje a una [sesión en la nube](/docs/es/claude-code-on-the-web). Mientras la solicitud de la política no ha terminado, el mensaje es:

3111 

3112```text theme={null}

3113Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.

3114```

3115 

3116Dentro de una sesión, un comando que necesita sesiones en la nube, como `/teleport` o `/web-setup`, también muestra este mensaje. Lo hace incluso cuando tu shell imprimiría una forma `Cloud sessions aren't available:`, y su segunda oración dice `Check your network connection, then restart Claude Code and try again.`

3117 

3118Una vez que la solicitud de la política ha fallado, el mensaje indica qué falló. Esto aplica cuando inicias, reanudas o envías un mensaje a una sesión en la nube desde tu shell con un flag como `--cloud` o `--teleport`. Sin ruta hacia la API, dice:

3119 

3120```text theme={null}

3121Cloud sessions aren't available: couldn't reach api.anthropic.com to load your organization's policy. Check your network or proxy.

3122```

3123 

3124Otros fallos siguen con el mismo comienzo y su propia causa, como un proxy que rechazó la solicitud con HTTP 403, un error del servidor o credenciales que la API no aceptó. Cuando la API no aceptó una credencial que esta sesión usa en lugar de tu inicio de sesión de claude.ai, como una variable de entorno `ANTHROPIC_API_KEY`, el mensaje también puede nombrarla e indicar que la elimines:

3125 

3126```text theme={null}

3127Cloud sessions aren't available: api.anthropic.com didn't accept this session's credentials when Claude Code asked for your organization's policy. Cloud sessions use your claude.ai login. ANTHROPIC_API_KEY is set, so this session is using API-key auth — unset it (or run in a shell without it) to use cloud sessions.

3128```

3129 

3130Antes de v2.1.296, estos fallos también imprimían el mensaje `Couldn't verify`.

3131 

3132**Qué hacer:**

3133 

3134* Para el mensaje `Couldn't verify`, revisa tu conexión de red e inténtalo de nuevo. Dentro de una sesión, reinicia Claude Code primero

3135* Para un mensaje `Cloud sessions aren't available:`, haz lo que requiera su causa, como revisar tu proxy o eliminar la credencial que nombra, y luego vuelve a ejecutar el comando

3136 

3137<h3 id="nothing-was-stashed-because-a-folder-replaced-a-tracked-file">

3138 No se guardó nada en el stash porque una carpeta reemplazó un archivo con seguimiento

3139</h3>

3140 

3141Este mensaje significa que ahora hay una carpeta en tu checkout donde antes había un archivo o enlace con seguimiento en git. Aparece después de que eliges la opción de stash al traer una [sesión en la nube](/docs/es/claude-code-on-the-web#from-cloud-to-terminal) a tu terminal, por ejemplo con `claude --teleport` o `/teleport`. Guardar ese estado en el stash podría eliminar los archivos dentro de la carpeta, así que Claude Code rechaza el stash y deja tu checkout y tu índice sin cambios:

3142 

3143```text wrap theme={null}

3144Error: Nothing was stashed: "f" is now a folder in place of a tracked file or link, and stashing could delete what's in it for good. Commit the change or move the folder somewhere else, then try again.

3145```

3146 

3147**Qué hacer:**

3148 

3149* Haz commit del cambio o mueve la carpeta a otro lugar, como indica el mensaje, y luego vuelve a ejecutar el teleport

3033 3150 

3034<h3 id="the-json-schema-value-is-not-a-valid-json-schema">3151<h3 id="the-json-schema-value-is-not-a-valid-json-schema">

3035 El valor de `--json-schema` no es un JSON Schema válido3152 El valor de `--json-schema` no es un JSON Schema válido


3427 3544 

3428Claude 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:3545Claude 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:

3429 3546 

3430* `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`3547* `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 cancelan en cada modo de permisos y cómo aprobar previamente un comando con `allowed-tools`

3431* ``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)3548* ``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)

3432 3549 

3433**Qué hacer:**3550**Qué hacer:**


3577 3694 

3578* **No pasaste una rama base**: Claude Code comparó contra la rama predeterminada del repositorio y sugiere pasar tu base explícitamente, como en el ejemplo anterior3695* **No pasaste una rama base**: Claude Code comparó contra la rama predeterminada del repositorio y sugiere pasar tu base explícitamente, como en el ejemplo anterior

3579* **Pasaste una rama base que ya estaba en tu clon**: la sugerencia dice ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3696* **Pasaste una rama base que ya estaba en tu clon**: la sugerencia dice ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3580* **Pasaste una rama base que no estaba en tu clon**: Claude Code la obtuvo de origin antes de comparar. La sugerencia dice ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; cuando Claude Code no puede saber si tu clon es superficial, sugiere `git fetch --unshallow origin` en su lugar. Antes de v2.1.221, la sugerencia proponía `git fetch --unshallow origin` para cada rama base obtenida, y en un clon completo ese comando falla con `fatal: --unshallow on a complete repository does not make sense`.3697* **Pasaste una rama base que no estaba en tu clon**: Claude Code la obtuvo de origin antes de comparar. La sugerencia dice ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; cuando Claude Code no puede determinar si tu clon es superficial, sugiere `git fetch --unshallow origin` en su lugar. Antes de v2.1.221, la sugerencia proponía `git fetch --unshallow origin` para toda rama base obtenida, y en un clon completo ese comando falla con `fatal: --unshallow on a complete repository does not make sense`.

3581 3698 

3582**Qué hacer:**3699**Qué hacer:**

3583 3700 


3835 Claude Code couldn't restart3952 Claude Code couldn't restart

3836</h3>3953</h3>

3837 3954 

3838Claude 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:3955Cuando este mensaje dice que tu conversación está guardada, la conversación está en el disco y puedes retomarla donde se detuvo. Claude Code se estaba reiniciando a sí mismo, por ejemplo para activar o desactivar el renderizado de pantalla completa después de que ejecutaste [`/tui`](/docs/es/fullscreen#enable-fullscreen-rendering), y no pudo iniciar el nuevo proceso, así que salió con el estado 1:

3839 3956 

3840```text theme={null}3957```text theme={null}

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


3845 3962 

3846**Qué hacer:**3963**Qué hacer:**

3847 3964 

3848* 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ónala3965* Vuelve a ejecutar `claude` en tu shell. Si el mensaje decía que tu conversación está guardada, ejecuta [`/resume`](/docs/es/sessions#resume-a-session) en la nueva sesión y selecciona la conversación. Si no está en la lista, [amplía el selector de sesiones](/docs/es/sessions#where-the-session-picker-looks)

3849* 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)3966* 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)

3850 3967 

3851<h3 id="couldnt-open-claude-desktop">3968<h3 id="couldnt-open-claude-desktop">


5366* Acorte el frontmatter `description` de sus archivos de agente, o pida a Claude que los recorte por usted.5483* Acorte el frontmatter `description` de sus archivos de agente, o pida a Claude que los recorte por usted.

5367* Elimine los archivos de agente que ya no utiliza.5484* Elimine los archivos de agente que ya no utiliza.

5368 5485 

5486<h3 id="hook-needs-quotes-around-a-path-with-a-space">

5487 Hook needs quotes around a path with a space

5488</h3>

5489 

5490Esta notificación en la vista de conversación significa que el script de un hook no se ejecutó porque su ruta tiene un espacio y no está entre comillas. Ese hook es un hook [`asyncRewake`](/docs/es/hooks#run-hooks-in-the-background) en forma de shell. En su `command`, un intérprete como `python3` va seguido de un marcador de posición de ruta sin comillas, y la ruta resuelta contiene un espacio.

5491 

5492La notificación comienza con el nombre del evento del hook y nombra el script:

5493 

5494```text theme={null}

5495Stop hook needs quotes around a path with a space (check.py)

5496```

5497 

5498**Qué hacer:**

5499 

5500* En el `command` del hook que ejecuta el script que nombra la notificación, encierra la ruta entre comillas dobles. En un archivo JSON, escríbelo como `"command": "python3 \"${CLAUDE_PLUGIN_ROOT}/hooks/check.py\""`.

5501 

5369<h3 id="a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved">5502<h3 id="a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved">

5370 Una skill, comando o flujo de trabajo no se cargó porque su nombre está reservado5503 Una skill, comando o flujo de trabajo no se cargó porque su nombre está reservado

5371</h3>5504</h3>


5386 5519 

5387Antes de v2.1.282, Claude Code cargaba skills y comandos con estos nombres.5520Antes de v2.1.282, Claude Code cargaba skills y comandos con estos nombres.

5388 5521 

5522<h3 id="skill-or-command-name-refused">

5523 Skill or command name refused

5524</h3>

5525 

5526Este aviso de inicio significa que Claude Code rechazó el nombre de al menos un [skill o comando personalizado](/docs/es/skills), por lo que no se cargó o se cargó sin su campo `name`:

5527 

5528```text theme={null}

55291 skill or command name refused: run with --debug to see which ([names]), rename, then restart — a name may not hold hidden, direction-changing or blank-like characters, < or >, or be over 256 characters

5530```

5531 

5532* **No cargado**: Claude Code rechazó el nombre con el que se conoce un skill o comando, como el nombre de su directorio o el nombre o subcarpeta de un archivo de comando. No aparece en el menú `/` y Claude no puede invocarlo. Su línea en el registro de depuración dice `<name> is not offered`.

5533* **Campo `name` ignorado**: Claude Code rechazó el `name` del frontmatter de un skill. El skill se sigue cargando, pero el menú `/` no muestra el valor de `name` y escribirlo no invoca el skill. Su línea en el registro de depuración dice `<name value> is not shown for <skill>`.

5534 

5535**Qué hacer:**

5536 

5537* Inicia Claude Code con `claude --debug` desde tu shell y busca `[names]` en el [registro de depuración](/docs/es/debug-your-config). Cada nombre que cuenta el aviso tiene una línea ahí. La línea representa algunos caracteres ocultos como códigos, como `\u{200B}` para un espacio de ancho cero, para que puedas ver dónde están.

5538* Elimina los [caracteres que un nombre de skill no puede contener](/docs/es/skills#characters-a-skill-name-cant-hold) renombrando la carpeta o el archivo o editando la línea `name:`, o acorta un nombre que supere los 256 caracteres. Luego reinicia la sesión, a menos que el archivo esté en un directorio en el que Claude Code [detecta cambios](/docs/es/skills#live-change-detection). Para un skill de un plugin que no escribiste, pide al autor del plugin que lo renombre.

5539 

5389<h3 id="workspace-has-not-been-trusted">5540<h3 id="workspace-has-not-been-trusted">

5390 El espacio de trabajo no ha sido confiable5541 El espacio de trabajo no ha sido confiable

5391</h3>5542</h3>

Details

220</table>220</table>

221 221 

222<span id="fn1" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>1</sup> En Google Cloud's Agent Platform, la búsqueda web está disponible para Opus 4, Sonnet 4, Haiku 4.5 y modelos posteriores.<br />222<span id="fn1" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>1</sup> En Google Cloud's Agent Platform, la búsqueda web está disponible para Opus 4, Sonnet 4, Haiku 4.5 y modelos posteriores.<br />

223<span id="fn2" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>2</sup> En estos proveedores, el modo automático admite solo Claude Sonnet 5 o posterior, Opus 4.7 o posterior, Haiku 5.5 y los modelos Fable. Consulta [Configuración del modo automático](/docs/es/auto-mode-config). Para el modo de permisos en el que comienza una sesión en estos proveedores, consulta [En qué modo comienza una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in). De v2.1.158 a v2.1.206, el modo automático en estos proveedores también requería establecer `CLAUDE_CODE_ENABLE_AUTO_MODE=1`; v2.1.207 eliminó el requisito.<br />223<span id="fn2" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>2</sup> En estos proveedores, el modo automático admite solo Claude Sonnet 5 o posterior, Opus 4.7 o posterior, Haiku 5.5 y los modelos Fable. Consulta [Configuración del modo automático](/docs/es/auto-mode-config). Para el modo de permisos en el que comienza una sesión en estos proveedores, consulta [En qué modo comienza una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in).<br />

224<span id="fn3" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>3</sup> Sujeto a tu acuerdo con el proveedor de nube.<br />224<span id="fn3" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>3</sup> Sujeto a tu acuerdo con el proveedor de nube.<br />

225<span id="fn4" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>4</sup> Solo panel y API. Las [métricas de contribución](/docs/es/analytics#enable-contribution-metrics) requieren una organización Team o Enterprise de claude.ai.<br />225<span id="fn4" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>4</sup> Solo panel y API. Las [métricas de contribución](/docs/es/analytics#enable-contribution-metrics) requieren una organización Team o Enterprise de claude.ai.<br />

226<span id="fn5" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>5</sup> Requiere Claude Code v2.1.224 o posterior en macOS y Linux, incluido Linux dentro de WSL 2. En Windows nativo, requiere Claude Code v2.1.234 o posterior. Con autenticación por clave de API, la mensajería es solo en la misma máquina. En Amazon Bedrock, Claude Platform en AWS, Google Cloud's Agent Platform y Microsoft Foundry, la mensajería es solo en la misma máquina y requiere Claude Code v2.1.248 o posterior. Claude puede encontrar tus [sesiones en la nube](/docs/es/claude-code-on-the-web) y tus sesiones en otras máquinas solo desde una sesión que esté conectada a [Remote Control](/docs/es/remote-control). Para conectarte, necesitas iniciar sesión con claude.ai y cumplir los demás [requisitos de Remote Control](/docs/es/remote-control#requirements). Consulta [Enviar mensajes a sesiones en otras máquinas](/docs/es/cross-session-messaging#message-sessions-on-other-machines).226<span id="fn5" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>5</sup> Requiere Claude Code v2.1.224 o posterior en macOS y Linux, incluido Linux dentro de WSL 2. En Windows nativo, requiere Claude Code v2.1.234 o posterior. Con autenticación por clave de API, la mensajería es solo en la misma máquina. En Amazon Bedrock, Claude Platform en AWS, Google Cloud's Agent Platform y Microsoft Foundry, la mensajería es solo en la misma máquina y requiere Claude Code v2.1.248 o posterior. Claude puede encontrar tus [sesiones en la nube](/docs/es/claude-code-on-the-web) y tus sesiones en otras máquinas solo desde una sesión que esté conectada a [Remote Control](/docs/es/remote-control). Para conectarte, necesitas iniciar sesión con claude.ai y cumplir los demás [requisitos de Remote Control](/docs/es/remote-control#requirements). Consulta [Enviar mensajes a sesiones en otras máquinas](/docs/es/cross-session-messaging#message-sessions-on-other-machines).

Details

227| **Hook + MCP** | Un hook desencadena acciones externas a través de MCP | El hook post-edición envía una notificación de Slack cuando Claude modifica archivos críticos |227| **Hook + MCP** | Un hook desencadena acciones externas a través de MCP | El hook post-edición envía una notificación de Slack cuando Claude modifica archivos críticos |

228 228 

229<h2 id="understand-context-costs">229<h2 id="understand-context-costs">

230 Entender costos de contexto230 Comprende los costos de contexto

231</h2>231</h2>

232 232 

233Cada característica que agrega consume algo del contexto de Claude. Demasiado puede llenar su ventana de contexto, pero también puede agregar ruido que hace que Claude sea menos efectivo; las skills pueden no desencadenarse correctamente, o Claude puede perder de vista sus convenciones. Entender estos compromisos lo ayuda a construir una configuración efectiva. Para una vista interactiva de cómo estas características se combinan en una sesión en ejecución, consulte [Explorar la ventana de contexto](/docs/es/context-window).233Cada función que agregas consume parte del contexto de Claude. Demasiado puede llenar tu ventana de contexto, pero también puede agregar ruido que hace que Claude sea menos efectivo; es posible que los skills no se activen correctamente o que Claude pierda de vista tus convenciones. Comprender estas compensaciones te ayuda a crear una configuración efectiva. Para ver de forma interactiva cómo se combinan estas funciones en una sesión en ejecución, consulta [Explora la ventana de contexto](/docs/es/context-window).

234 234 

235<h3 id="context-cost-by-feature">235<h3 id="context-cost-by-feature">

236 Costo de contexto por característica236 Costo de contexto por función

237</h3>237</h3>

238 238 

239Cada característica tiene una estrategia de carga y costo de contexto diferentes:239Cada función tiene una estrategia de carga y un costo de contexto diferentes:

240 240 

241| Característica | Cuándo se carga | Qué se carga | Costo de contexto |241| Función | Cuándo se carga | Qué se carga | Costo de contexto |

242| - | - | - | - |242| - | - | - | - |

243| **CLAUDE.md** | Inicio de sesión | Contenido completo | Cada solicitud |243| **CLAUDE.md** | Inicio de sesión | Contenido completo | Cada solicitud |

244| **Estilos de salida** | Inicio de sesión, y nuevamente cuando cambia de estilos | Las instrucciones completas del estilo activo; nada para el estilo Predeterminado | Cada solicitud |244| **Estilos de salida** | Inicio de sesión, y de nuevo cuando cambias de estilo | Las instrucciones completas del estilo activo; nada para el estilo Default | Cada solicitud |

245| **Skills** | Inicio de sesión + cuando se usa | Descripciones al inicio, contenido completo cuando se usa | Bajo (descripciones cada solicitud)\* |245| **Skills** | Inicio de sesión + cuando se usan | Descripciones al inicio, contenido completo cuando se usan | Bajo (descripciones en cada solicitud)\* |

246| **Servidores MCP** | Inicio de sesión | Nombres de herramientas; esquemas completos bajo demanda | Bajo hasta que se usa una herramienta |246| **Servidores MCP** | Inicio de sesión | Nombres de herramientas; esquemas completos bajo demanda | Bajo hasta que se usa una herramienta |

247| **Inteligencia de código** | Después de ediciones de archivo y bajo demanda | Diagnósticos después de ediciones; ubicaciones de símbolos en búsqueda | Bajo; reduce lecturas de archivo en otros lugares |247| **Inteligencia de código** | Después de editar archivos y bajo demanda | Diagnósticos después de las ediciones; ubicaciones de símbolos al buscarlos | Bajo; reduce las lecturas de archivos en otros lugares |

248| **Subagents** | Cuando se generan | Contexto fresco con skills especificadas, o la conversación principal para un [fork](/docs/es/sub-agents#fork-the-current-conversation) | Aislado de la sesión principal |248| **Subagentes** | Cuando se generan | Contexto nuevo con los skills especificados, o la conversación principal en el caso de un [fork](/docs/es/sub-agents#fork-the-current-conversation) | Aislado de la sesión principal |

249| **Hooks** | Al desencadenar | Nada (se ejecuta externamente) | Cero, a menos que el hook devuelva contexto adicional |249| **Hooks** | Al activarse | Nada (se ejecutan externamente) | Cero, a menos que el hook devuelva contexto adicional |

250 250 

251\*Establece [`disable-model-invocation: true`](/docs/es/skills#control-who-invokes-a-skill) en el frontmatter de un skill para mantener su descripción fuera del contexto de Claude. Para un skill que no escribiste, establece [`skillOverrides`](/docs/es/skills#override-skill-visibility-from-settings) en la configuración para hacer lo mismo sin editar su archivo.251\*Establece [`disable-model-invocation: true`](/docs/es/skills#control-who-invokes-a-skill) en el frontmatter de un skill para mantener su descripción fuera del contexto de Claude. Para un skill que no escribiste, establece [`skillOverrides`](/docs/es/skills#override-skill-visibility-from-settings) en la configuración para hacer lo mismo sin editar su archivo.

252 252 

253<h3 id="understand-how-features-load">253<h3 id="understand-how-features-load">

254 Entender cómo se cargan las características254 Comprende cómo se cargan las funciones

255</h3>255</h3>

256 256 

257Cada característica se carga en diferentes puntos de su sesión. Las pestañas a continuación explican cuándo se carga cada una y qué entra en contexto.257Cada función se carga en diferentes momentos de tu sesión. Las pestañas a continuación explican cuándo se carga cada una y qué entra en el contexto.

258 258 

259<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/context-loading.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=aab139e750494a237ae2e0c8f9139b0a" className="dark:hidden" alt="Carga de contexto: CLAUDE.md se carga al inicio de sesión y permanece en cada solicitud. Los nombres de herramientas MCP se cargan al inicio con esquemas completos diferidos hasta el uso. Las skills cargan descripciones al inicio, contenido completo al invocar. Los subagents obtienen contexto aislado. Los hooks se ejecutan externamente." width="720" height="382" data-path="images/context-loading.svg" />259<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/context-loading.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=aab139e750494a237ae2e0c8f9139b0a" className="dark:hidden" alt="Carga de contexto: CLAUDE.md se carga al inicio de la sesión y permanece en cada solicitud. Los nombres de herramientas MCP se cargan al inicio y los esquemas completos se difieren hasta su uso. Los skills cargan las descripciones al inicio y el contenido completo al invocarse. Los subagentes obtienen un contexto aislado. Los hooks se ejecutan externamente." width="720" height="382" data-path="images/context-loading.svg" />

260 260 

261<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/context-loading-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=b274089ef9612d9c760bca9838557626" className="hidden dark:block" alt="Carga de contexto: CLAUDE.md se carga al inicio de sesión y permanece en cada solicitud. Los nombres de herramientas MCP se cargan al inicio con esquemas completos diferidos hasta el uso. Las skills cargan descripciones al inicio, contenido completo al invocar. Los subagents obtienen contexto aislado. Los hooks se ejecutan externamente." width="720" height="382" data-path="images/context-loading-dark.svg" />261<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/context-loading-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=b274089ef9612d9c760bca9838557626" className="hidden dark:block" alt="Carga de contexto: CLAUDE.md se carga al inicio de la sesión y permanece en cada solicitud. Los nombres de herramientas MCP se cargan al inicio y los esquemas completos se difieren hasta su uso. Los skills cargan las descripciones al inicio y el contenido completo al invocarse. Los subagentes obtienen un contexto aislado. Los hooks se ejecutan externamente." width="720" height="382" data-path="images/context-loading-dark.svg" />

262 262 

263<Tabs>263<Tabs>

264 <Tab title="CLAUDE.md">264 <Tab title="CLAUDE.md">

265 **Cuándo:** Inicio de sesión265 **Cuándo:** Inicio de sesión

266 266 

267 **Qué se carga:** Contenido completo de todos los archivos CLAUDE.md (niveles administrado, usuario y proyecto).267 **Qué se carga:** El contenido completo de todos los archivos CLAUDE.md (niveles administrado, de usuario y de proyecto).

268 268 

269 **Herencia:** Claude lee archivos CLAUDE.md de su directorio de trabajo hasta la raíz, y descubre los anidados en subdirectorios mientras accede a esos archivos. Consulte [Cómo se cargan los archivos CLAUDE.md](/docs/es/memory#how-claude-md-files-load) para obtener detalles.269 **Herencia:** Claude lee los archivos CLAUDE.md desde tu directorio de trabajo hasta la raíz, y descubre los anidados en subdirectorios a medida que accede a esos archivos. Consulta [Cómo se cargan los archivos CLAUDE.md](/docs/es/memory#how-claude-md-files-load) para más detalles.

270 270 

271 <Tip>Mantenga CLAUDE.md bajo 200 líneas. Mueva material de referencia a skills, que se cargan bajo demanda. Para obtener [propuestas de recorte para un CLAUDE.md registrado](/docs/es/memory#my-claude-md-is-too-large), ejecute `/doctor`.</Tip>271 <Tip>Mantén CLAUDE.md por debajo de 200 líneas. Mueve el material de referencia a skills, que se cargan bajo demanda. Para obtener [propuestas de recorte para un CLAUDE.md incluido en el repositorio](/docs/es/memory#my-claude-md-is-too-large), ejecuta `/doctor`.</Tip>

272 </Tab>272 </Tab>

273 273 

274 <Tab title="Skills">274 <Tab title="Skills">

275 Las skills son capacidades adicionales en el kit de herramientas de Claude. Pueden ser material de referencia (como una guía de estilo de API) o flujos de trabajo invocables que desencadena con `/<name>` (como `/deploy`). Claude Code incluye [skills incluidas](/docs/es/commands) como `/code-review`, `/batch` y `/debug` que funcionan de inmediato. También puede crear las suyas propias.275 Los skills son capacidades adicionales en el kit de herramientas de Claude. Pueden ser material de referencia (como una guía de estilo de API) o flujos de trabajo invocables que activas con `/<name>` (como `/deploy`). Claude Code incluye [skills incluidos](/docs/es/commands) como `/code-review`, `/batch` y `/debug` que funcionan sin configuración. También puedes crear los tuyos.

276 276 

277 **Cuándo:** Depende de la configuración de la skill. Por defecto, las descripciones se cargan al inicio de sesión y el contenido completo se carga cuando se usa. Para skills solo de usuario (`disable-model-invocation: true`), nada se carga hasta que las invoque.277 **Cuándo:** Depende de la configuración del skill. De forma predeterminada, las descripciones se cargan al inicio de la sesión y el contenido completo se carga cuando se usa. Para los skills exclusivos del usuario (`disable-model-invocation: true`), no se carga nada hasta que los invocas.

278 278 

279 **Qué se carga:** Para skills invocables por modelo, Claude ve nombres y descripciones en cada solicitud. Cuando invoca una skill con `/<name>` o Claude la carga automáticamente, el contenido completo se carga en su conversación.279 **Qué se carga:** Para los skills que el modelo puede invocar, Claude ve los nombres y las descripciones en cada solicitud. Cuando invocas un skill con `/<name>` o Claude lo carga automáticamente, el contenido completo se carga en tu conversación.

280 280 

281 **Cómo Claude elige skills:** Claude compara tu tarea con las descripciones de los skills para decidir cuáles son relevantes. Si las descripciones son vagas o se superponen, Claude puede cargar el skill incorrecto o pasar por alto uno que ayudaría. Para decirle a Claude que use un skill específico, invócalo con `/<name>`.281 **Cómo elige Claude los skills:** Claude compara tu tarea con las descripciones de los skills para decidir cuáles son relevantes. Si las descripciones son vagas o se superponen, Claude puede cargar el skill equivocado u omitir uno que ayudaría. Para indicarle a Claude que use un skill específico, invócalo con `/<name>`.

282 282 

283 **Costo de contexto:** Bajo hasta que se use. Las skills solo de usuario tienen costo cero hasta que se invoquen.283 **Costo de contexto:** Bajo hasta que se usa. Los skills exclusivos del usuario tienen costo cero hasta que se invocan.

284 284 

285 **En subagents:** Las skills funcionan de manera diferente en subagents. En lugar de carga bajo demanda, las skills listadas en el campo `skills` del subagent se precarga completamente en su contexto al iniciar. Los subagents aún pueden descubrir e invocar skills de proyecto, usuario y plugin no listadas a través de la herramienta Skill.285 **En subagentes:** Los skills funcionan de manera diferente en los subagentes. En lugar de cargarse bajo demanda, los skills listados en el campo `skills` del subagente se precargan por completo en su contexto al iniciarse. Los subagentes aún pueden descubrir e invocar skills de proyecto, de usuario y de plugins no listados mediante la herramienta Skill.

286 286 

287 <Tip>Usa `disable-model-invocation: true` para skills con efectos secundarios. Esto ahorra contexto y asegura que solo se ejecuten cuando los nombres.</Tip>287 <Tip>Usa `disable-model-invocation: true` para skills con efectos secundarios. Esto ahorra contexto y garantiza que solo se ejecuten cuando los invocas por su nombre.</Tip>

288 </Tab>288 </Tab>

289 289 

290 <Tab title="Servidores MCP">290 <Tab title="MCP servers">

291 **Cuándo:** Inicio de sesión.291 **Cuándo:** Inicio de sesión.

292 292 

293 **Qué se carga:** Nombres de herramientas e instrucciones del servidor desde servidores conectados. Los esquemas JSON completos permanecen diferidos hasta que Claude necesita una herramienta específica.293 **Qué se carga:** Los nombres de herramientas y las instrucciones de los servidores conectados. Los esquemas JSON completos permanecen diferidos hasta que Claude necesita una herramienta específica.

294 294 

295 **Costo de contexto:** [Búsqueda de herramientas](/docs/es/mcp#scale-with-mcp-tool-search) está habilitada por defecto, por lo que las herramientas MCP inactivas consumen contexto mínimo.295 **Costo de contexto:** La [búsqueda de herramientas](/docs/es/mcp#scale-with-mcp-tool-search) está activada de forma predeterminada, por lo que las herramientas MCP inactivas consumen un contexto mínimo.

296 296 

297 <Tip>Ejecute `/mcp` para ver estado de conexión de cada servidor. Ejecute `/context all` para ver cuántos tokens usa cada herramienta MCP cargada. Claude Code [se reconecta automáticamente a servidores remotos](/docs/es/mcp#automatic-reconnection) si se desconectan, y puede desconectar servidores que no esté usando activamente.</Tip>297 <Tip>Ejecuta `/mcp` para ver el estado de conexión de cada servidor. Ejecuta `/context all` para ver cuántos tokens usa cada herramienta MCP cargada. Claude Code [se reconecta automáticamente a los servidores remotos](/docs/es/mcp#automatic-reconnection) si se desconectan, y puedes desconectar los servidores que no estés usando activamente.</Tip>

298 </Tab>298 </Tab>

299 299 

300 <Tab title="Inteligencia de código">300 <Tab title="Code intelligence">

301 **Cuándo:** Después de ediciones de archivo, y bajo demanda cuando Claude navega código.301 **Cuándo:** Después de editar archivos, y bajo demanda cuando Claude navega por el código.

302 302 

303 **Qué se carga:** Errores de tipo y advertencias después de cada edición de archivo. Información de definición, referencia y tipo cuando Claude busca un símbolo.303 **Qué se carga:** Errores de tipo y advertencias después de cada edición de archivo. Información de definiciones, referencias y tipos cuando Claude busca un símbolo.

304 304 

305 **Costo de contexto:** Bajo. Las búsquedas de símbolos a menudo reemplazan lecturas amplias de archivos, por lo que el uso neto de contexto puede disminuir.305 **Costo de contexto:** Bajo. Las búsquedas de símbolos a menudo reemplazan lecturas amplias de archivos, por lo que el uso neto de contexto puede disminuir.

306 306 

307 <Tip>La herramienta LSP está inactiva hasta que instale un [plugin de inteligencia de código](/docs/es/plugins/code-intelligence) para su lenguaje.</Tip>307 <Tip>La herramienta LSP está inactiva hasta que instalas un [plugin de inteligencia de código](/docs/es/plugins/code-intelligence) para tu lenguaje.</Tip>

308 </Tab>308 </Tab>

309 309 

310 <Tab title="Subagents">310 <Tab title="Subagents">

311 **Cuándo:** Bajo demanda, cuando usted o Claude genera uno para una tarea.311 **Cuándo:** Bajo demanda, cuando tú o Claude generan uno para una tarea.

312 312 

313 **Qué se carga:** Contexto fresco y aislado que contiene:313 **Qué se carga:** Un contexto nuevo y aislado que contiene:

314 314 

315 * El prompt del sistema del agente, no el prompt del sistema de Claude Code315 * El propio prompt del sistema del agente, no el prompt del sistema de Claude Code

316 * Contenido completo de skills listadas en el campo `skills:` del agente316 * El contenido completo de los skills listados en el campo `skills:` del agente

317 * CLAUDE.md y estado de git, excepto los agentes Explore y Plan integrados [omiten ambos](/docs/es/sub-agents#what-loads-at-startup), y un agente cuya definición establece [`omitClaudeMd`](/docs/es/sub-agents#supported-frontmatter-fields) omite los archivos CLAUDE.md de usuario, proyecto y local317 * CLAUDE.md y el estado de git. Los agentes integrados Explore y Plan [no comienzan con ninguno de los dos](/docs/es/sub-agents#what-loads-at-startup), y un agente cuya definición establece [`omitClaudeMd`](/docs/es/sub-agents#supported-frontmatter-fields) comienza sin los archivos CLAUDE.md de usuario, de proyecto y locales.

318 * Cualquier contexto que el agente principal pase en el prompt318 * Cualquier contexto que el agente principal pase en el prompt

319 319 

320 Para un [fork](/docs/es/sub-agents#fork-the-current-conversation), Claude Code carga la conversación del principal hasta ahora, el prompt del sistema y las herramientas en su lugar.320 En el caso de un [fork](/docs/es/sub-agents#fork-the-current-conversation), Claude Code carga en su lugar la conversación principal hasta ese momento, el prompt del sistema y las herramientas.

321 321 

322 **Costo de contexto:** Aislado de la sesión principal.322 **Costo de contexto:** Aislado de la sesión principal.

323 323 

324 <Tip>Use subagents para trabajo que no necesita su contexto de conversación completo. Su aislamiento previene inflar su sesión principal.</Tip>324 <Tip>Usa subagentes para trabajo que no necesita todo el contexto de tu conversación. Su aislamiento evita que tu sesión principal se sobrecargue.</Tip>

325 </Tab>325 </Tab>

326 326 

327 <Tab title="Hooks">327 <Tab title="Hooks">

328 **Cuándo:** Al desencadenar. Claude Code ejecuta hooks en eventos de ciclo de vida específicos como ejecución de herramientas, límites de sesión, envío de prompt, solicitudes de permiso y compactación. Consulte [Hooks](/docs/es/hooks) para la lista completa.328 **Cuándo:** Al activarse. Claude Code ejecuta hooks en eventos específicos del ciclo de vida, como la ejecución de herramientas, los límites de sesión, el envío de prompts, las solicitudes de permiso y la compactación. Consulta [Hooks](/docs/es/hooks) para ver la lista completa.

329 329 

330 **Qué se carga:** Nada por defecto. Los hooks se ejecutan fuera de la conversación principal.330 **Qué se carga:** Nada de forma predeterminada. Los hooks se ejecutan fuera de la conversación principal.

331 331 

332 **Costo de contexto:** Cero, a menos que el hook devuelva salida que se agregue como mensajes a su conversación.332 **Costo de contexto:** Cero, a menos que el hook devuelva una salida que se agregue como mensajes a tu conversación.

333 333 

334 <Tip>Los hooks son ideales para efectos secundarios (linting, logging) que no necesitan afectar el contexto de Claude.</Tip>334 <Tip>Los hooks son ideales para efectos secundarios (linting, registro) que no necesitan afectar el contexto de Claude.</Tip>

335 </Tab>335 </Tab>

336</Tabs>336</Tabs>

337 337 

Details

22 22 

23| Característica | Compatibilidad con GHES | Notas |23| Característica | Compatibilidad con GHES | Notas |

24| :- | :- | :- |24| :- | :- | :- |

25| Sesiones en la nube | ✅ Compatible | Un propietario conecta la instancia de GHES una vez; los desarrolladores usan `claude --cloud` o [claude.ai/code](https://claude.ai/code) como de costumbre |25| Sesiones en la nube | ✅ Compatible | Un propietario conecta la instancia de GHES una vez; los desarrolladores usan `claude --cloud` o [claude.ai/code](https://claude.ai/code) |

26| Revisión de código | ✅ Compatible | Las mismas revisiones automatizadas de PR que en github.com |26| Revisión de código | ✅ Compatible | Las mismas revisiones automatizadas de PR que en github.com |

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` |


35 Configuración del administrador35 Configuración del administrador

36</h2>36</h2>

37 37 

38Un propietario conecta tu instancia de GHES a Claude Code una sola vez. Después de eso, los desarrolladores de tu organización pueden usar repositorios de GHES sin ninguna configuración adicional. Necesitas el rol de Propietario o Propietario Principal en tu organización de Claude y permiso para crear GitHub Apps en tu instancia de GHES.38Un propietario conecta tu instancia de GHES a Claude Code una sola vez. Necesitas el rol de Propietario o Propietario Principal en tu organización de Claude y permiso para crear GitHub Apps en tu instancia de GHES.

39 39 

40La configuración guiada genera un manifiesto de GitHub App y te redirige a tu instancia de GHES para crear la aplicación en un clic. Si tu entorno bloquea el flujo de redirección, hay una [configuración manual alternativa](#manual-setup) disponible.40La configuración guiada genera un manifiesto de GitHub App y te redirige a tu instancia de GHES para crear la aplicación en un clic. Si tu entorno bloquea el flujo de redirección, hay una [configuración manual alternativa](#manual-setup) disponible.

41 41 


103 Flujo de trabajo del desarrollador103 Flujo de trabajo del desarrollador

104</h2>104</h2>

105 105 

106Una vez que su administrador ha conectado la instancia de GHES, no se necesita ninguna configuración del lado del desarrollador. Claude Code detecta automáticamente el nombre de host de su GHES desde el remoto de git en su directorio de trabajo.106Claude Code detecta automáticamente el nombre de host de tu GHES desde el remoto de git en tu directorio de trabajo.

107 107 

108Clone un repositorio de su instancia de GHES como lo haría normalmente, reemplazando `github.example.com` y la ruta del repositorio con su nombre de host de GHES y repositorio:108Clone un repositorio de su instancia de GHES como lo haría normalmente, reemplazando `github.example.com` y la ruta del repositorio con su nombre de host de GHES y repositorio:

109 109 


228 228 

229Si `claude --cloud` falla con un error de clonación, verifique que un Propietario haya completado la configuración para su instancia de GHES y que la GitHub App esté instalada en el repositorio en el que está trabajando. Pida al Propietario que conectó la instancia que confirme que el nombre de host registrado en la configuración de Claude coincida con el nombre de host en su remoto de git.229Si `claude --cloud` falla con un error de clonación, verifique que un Propietario haya completado la configuración para su instancia de GHES y que la GitHub App esté instalada en el repositorio en el que está trabajando. Pida al Propietario que conectó la instancia que confirme que el nombre de host registrado en la configuración de Claude coincida con el nombre de host en su remoto de git.

230 230 

231Si la sesión se detiene con "Authentication failed while accessing the repository", es posible que no hayas conectado tu propia cuenta de GitHub Enterprise. Conéctala desde el selector de repositorio en [claude.ai/code](https://claude.ai/code) y luego inicia una nueva sesión.

232 

231<h3 id="marketplace-add-fails-with-a-policy-error">233<h3 id="marketplace-add-fails-with-a-policy-error">

232 Agregar mercado falla con un error de política234 Agregar mercado falla con un error de política

233</h3>235</h3>

Details

261* Para usar Haiku para tareas en segundo plano, establezca `ANTHROPIC_DEFAULT_HAIKU_MODEL` en un ID de modelo que esté disponible en su proyecto.261* Para usar Haiku para tareas en segundo plano, establezca `ANTHROPIC_DEFAULT_HAIKU_MODEL` en un ID de modelo que esté disponible en su proyecto.

262 262 

263<Warning>263<Warning>

264 Los modelos Opus tienen un precio por token más alto que los modelos Sonnet, por lo que una implementación que no fija un modelo principal se factura a la tarifa de Opus una vez que se actualiza a v2.1.207 o posterior. Para mantener Sonnet 4.5 como el modelo principal, establezca `ANTHROPIC_MODEL` en su ID de modelo completo. Una implementación que dirige el valor predeterminado con `ANTHROPIC_DEFAULT_SONNET_MODEL` y no establece `ANTHROPIC_DEFAULT_OPUS_MODEL` mantiene su modelo Sonnet dirigido como el valor predeterminado.264 Los modelos Opus tienen un precio por token más alto que los modelos Sonnet, por lo que si no fijas un modelo principal, se te factura a la tarifa de Opus. Para usar Sonnet 4.5 como el modelo principal, establece `ANTHROPIC_MODEL` en su ID de modelo completo. Un despliegue que dirige el valor predeterminado con `ANTHROPIC_DEFAULT_SONNET_MODEL` y no establece `ANTHROPIC_DEFAULT_OPUS_MODEL` mantiene su modelo Sonnet dirigido como el valor predeterminado.

265</Warning>265</Warning>

266 266 

267Antes de v2.1.280, el modelo principal en Google Cloud's Agent Platform se establecía de forma predeterminada en Opus 5 y el alias `opus` se resolvía a Opus 5 desde v2.1.219. En v2.1.207 a v2.1.218, el modelo principal en Google Cloud's Agent Platform se establecía de forma predeterminada en Opus 4.8 y el alias `opus` se resolvía a Opus 4.8. Antes de v2.1.207, el modelo principal se establecía de forma predeterminada en Sonnet 4.5, el alias `opus` se resolvía a Opus 4.6, y las tareas en segundo plano siempre utilizaban el modelo principal.267Antes de v2.1.280, el modelo principal en Google Cloud's Agent Platform se establecía de forma predeterminada en Opus 5 y el alias `opus` se resolvía a Opus 5 desde v2.1.219. En v2.1.207 a v2.1.218, el modelo principal en Google Cloud's Agent Platform se establecía de forma predeterminada en Opus 4.8 y el alias `opus` se resolvía a Opus 4.8.

268 268 

269Para personalizar aún más los modelos:269Para personalizar aún más los modelos:

270 270 

headless.md +6 −6

Details

38 Comienza más rápido con modo bare38 Comienza más rápido con modo bare

39</h3>39</h3>

40 40 

41Agrega `--bare` para reducir el tiempo de inicio omitiendo el descubrimiento automático de hooks, skills, comandos personalizados, [subagentes](/docs/es/sub-agents), plugins instalados, servidores MCP, memoria automática y CLAUDE.md. Sin él, `claude -p` carga el mismo [contexto](/docs/es/how-claude-code-works#the-context-window) que cargaría una sesión interactiva, incluido cualquier elemento configurado en el directorio de trabajo o `~/.claude`.41Agrega `--bare` para reducir el tiempo de inicio omitiendo el descubrimiento automático de hooks, skills, comandos personalizados, [subagentes](/docs/es/sub-agents), plugins instalados, servidores MCP, memoria automática y CLAUDE.md. Sin él, `claude -p` los descubre y los carga como lo haría una sesión interactiva, incluido cualquier elemento configurado en el directorio de trabajo o `~/.claude`.

42 42 

43El modo bare es útil para CI y scripts donde necesitas el mismo resultado en cada máquina. Un hook en `~/.claude` de un compañero de equipo o un servidor MCP en `.mcp.json` del proyecto no se ejecutará, porque el modo bare nunca los lee. Un directorio que nombres con `--add-dir` es una excepción parcial: el modo bare carga skills de su carpeta `.claude/skills/`, pero aún omite sus carpetas `.claude/commands/` y `.claude/agents/`. [Skills de directorios adicionales](/docs/es/skills#skills-from-additional-directories) cubre lo que sí y no se carga.43El modo bare es útil para CI y scripts donde necesitas el mismo resultado en cada máquina. Un hook en `~/.claude` de un compañero de equipo o un servidor MCP en `.mcp.json` del proyecto no se ejecutará, porque el modo bare nunca los lee. Un directorio que nombres con `--add-dir` es una excepción parcial: el modo bare carga skills de su carpeta `.claude/skills/`, pero aún omite sus carpetas `.claude/commands/` y `.claude/agents/`. [Skills de directorios adicionales](/docs/es/skills#skills-from-additional-directories) cubre lo que sí y no se carga.

44 44 


184 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'184 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

185```185```

186 186 

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.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.

188 188 

189<Tip>189<Tip>

190 Usa 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:


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: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:

282 282 

283* 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.

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.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.

285 285 

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.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. Consulta [`SDKSystemMessage`](/docs/es/agent-sdk/typescript#sdksystemmessage) para la lista de capacidades.

287 287 

288<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">

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


388 388 

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.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.

390 * Los comandos integrados que solo se ejecutan en la interfaz de la 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.

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.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 siguen las [notas de disponibilidad](/docs/es/commands#all-commands) de cada comando.

392 * Para cambiar un ajuste, pasa `key=value` a `/config`, por ejemplo `/config thinking=false`.392 * Para cambiar un ajuste, pasa `key=value` a `/config`, por ejemplo `/config thinking=false`.

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.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.

394</Note>394</Note>


407 407 

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`.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`.

409 409 

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.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. Si lo reemplazas, la ejecución también comienza sin la [instantánea del estado de git](/docs/es/settings-reference#includegitinstructions).

411 411 

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

413 Continuar conversaciones413 Continuar conversaciones

hipaa-setup.md +1 −0

Details

228| `--cloud`, `/teleport` y [Remote Control](/docs/es/remote-control) se rechazan | Las [sesiones en la nube](/docs/es/claude-code-on-the-web) y Remote Control están desactivados |228| `--cloud`, `/teleport` y [Remote Control](/docs/es/remote-control) se rechazan | Las [sesiones en la nube](/docs/es/claude-code-on-the-web) y Remote Control están desactivados |

229| `/feedback` y `/bug` no están disponibles | El envío de comentarios está desactivado |229| `/feedback` y `/bug` no están disponibles | El envío de comentarios está desactivado |

230| Claude no puede publicar un [artefacto](/docs/es/artifacts) | La publicación de artefactos está desactivada |230| Claude no puede publicar un [artefacto](/docs/es/artifacts) | La publicación de artefactos está desactivada |

231| Las herramientas MCP se cargan en el contexto desde el inicio | [MCP Tool Search](/docs/es/mcp#configure-tool-search) está desactivado. Ni `ENABLE_TOOL_SEARCH` ni la configuración administrada lo vuelven a activar |

231| Un servidor MCP o un hook que lee `ANTHROPIC_API_KEY` deja de autenticarse | Claude Code [elimina las credenciales de Anthropic](#anthropic-credentials-in-commands-hooks-and-mcp-servers) de los procesos que inicia |232| Un servidor MCP o un hook que lee `ANTHROPIC_API_KEY` deja de autenticarse | Claude Code [elimina las credenciales de Anthropic](#anthropic-credentials-in-commands-hooks-and-mcp-servers) de los procesos que inicia |

232| Las restricciones se mantienen después de ejecutar `/login` con otra organización | El estado de HIPAA dura hasta que Claude Code se reinicia |233| Las restricciones se mantienen después de ejecutar `/login` con otra organización | El estado de HIPAA dura hasta que Claude Code se reinicia |

233 234 

hooks.md +373 −347

Details

827 827 

828El código de salida de tu hook le dice a Claude Code si debe continuar con la acción que activó el hook, como una llamada a herramienta o un prompt. Una ejecución que termina tiene uno de tres resultados:828El código de salida de tu hook le dice a Claude Code si debe continuar con la acción que activó el hook, como una llamada a herramienta o un prompt. Una ejecución que termina tiene uno de tres resultados:

829 829 

830* **Éxito**: tu hook sale con 0. Claude Code aplica cualquier campo de [salida JSON](#json-output) que tu hook haya impreso, y la acción continúa a menos que esos campos la bloqueen o la denieguen.830* **Éxito**: tu hook sale con 0. Claude Code aplica cualquier campo de [salida JSON](#json-output) que tu hook haya impreso, y la acción continúa a menos que esos campos la bloqueen o la denieguen. [Hooks que inician un proceso en segundo plano](#hooks-that-start-a-background-process) cubre la excepción.

831* **Error de bloqueo**: tu hook sale con 2. En los [eventos que pueden bloquear](#exit-code-2-behavior-per-event), Claude Code detiene la acción.831* **Error de bloqueo**: tu hook sale con 2. En los [eventos que pueden bloquear](#exit-code-2-behavior-per-event), Claude Code detiene la acción.

832* **Error sin bloqueo**: tu hook sale con cualquier otro código, o falla de alguna otra manera, como no iniciarse o imprimir JSON no válido. La acción continúa, y en eventos como `PreToolUse` ves un aviso `<hook name> hook error` en la transcripción. Si quieres que un hook fallido bloquee la acción, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).832* **Error sin bloqueo**: tu hook sale con cualquier otro código, o falla de alguna otra manera, como no iniciarse o imprimir JSON no válido. La acción continúa, y en eventos como `PreToolUse` ves un aviso `<hook name> hook error` en la transcripción. Si quieres que un hook fallido bloquee la acción, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

833 833 


932* Un hook `command`, `http` o `mcp_tool` cuyo tiempo de espera se agota no bloquea la llamada a herramienta. La llamada continúa a través del [flujo de permisos](/docs/es/permissions) normal, así que no cuentes con que un hook bloqueado actúe como control. Para bloquear la llamada cuando se agota el tiempo de espera de un hook `command` o `http`, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).932* Un hook `command`, `http` o `mcp_tool` cuyo tiempo de espera se agota no bloquea la llamada a herramienta. La llamada continúa a través del [flujo de permisos](/docs/es/permissions) normal, así que no cuentes con que un hook bloqueado actúe como control. Para bloquear la llamada cuando se agota el tiempo de espera de un hook `command` o `http`, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

933* Un [hook de callback del Agent SDK](/docs/es/agent-sdk/hooks) que excede su tiempo de espera [bloquea la llamada a herramienta](#pretooluse).933* Un [hook de callback del Agent SDK](/docs/es/agent-sdk/hooks) que excede su tiempo de espera [bloquea la llamada a herramienta](#pretooluse).

934 934 

935<h4 id="hooks-that-start-a-background-process">

936 Hooks que inician un proceso en segundo plano

937</h4>

938 

939Si tu hook de comando toma su decisión en un proceso en segundo plano y sale, una denegación que ese proceso imprima después de que Claude Code haya dejado de leer no bloquea la llamada a herramienta. Para un hook que no es [async](#run-hooks-in-the-background), Claude Code termina de leer la salida del hook poco después de que sale el propio proceso del hook.

940 

941Imprime la decisión antes de iniciar un proceso en segundo plano, y redirige el stdout y el stderr de ese proceso. Si tu script imprime un allow y luego inicia un proceso en segundo plano sin redirigir el stdout y el stderr de ese proceso, Claude Code bloquea la llamada a herramienta. El error del hook incluye `refusing to honor the suspect capture`.

942 

943Este script de hook `PreToolUse` imprime la decisión con `policy-check.sh` y luego sube métricas en segundo plano:

944 

945```bash theme={null}

946#!/bin/bash

947"$CLAUDE_PROJECT_DIR"/.claude/hooks/policy-check.sh || exit $?

948"$CLAUDE_PROJECT_DIR"/.claude/hooks/upload-metrics.sh >/dev/null 2>&1 &

949```

950 

951El resto del script hace lo siguiente:

952 

953* **`|| exit $?`**: hace que el código de salida de la verificación sea el del propio hook, de modo que una verificación que sale con 2 para denegar siga bloqueando. De lo contrario, el hook sale con el código de la última línea, que es 0.

954* **`>/dev/null 2>&1 &`**: ejecuta `upload-metrics.sh` en segundo plano con su salida redirigida, para que no mantenga abierta la salida del hook.

955 

956Para probar el script, haz que `policy-check.sh` salga con 2 y luego activa una llamada a herramienta que coincida con el hook. La llamada a herramienta se bloquea.

957 

935<h4 id="block-the-action-when-a-hook-fails">958<h4 id="block-the-action-when-a-hook-fails">

936 Bloquear la acción cuando un hook falla959 Bloquear la acción cuando un hook falla

937</h4>960</h4>


1245 Eventos de hooks1268 Eventos de hooks

1246</h2>1269</h2>

1247 1270 

1248Cada evento corresponde a un punto del ciclo de vida de Claude Code en el que pueden ejecutarse hooks. Las secciones siguientes están ordenadas según el ciclo de vida: desde la configuración de la sesión, pasando por el bucle agéntico, hasta el final de la sesión. Cada sección describe cuándo se activa el evento, qué matchers admite, la entrada JSON que recibe y cómo controlar el comportamiento mediante la salida.1271Cada evento corresponde a un punto del ciclo de vida de Claude Code en el que pueden ejecutarse hooks. Las secciones siguientes están ordenadas según el ciclo de vida: desde la preparación de la sesión, pasando por el bucle agéntico, hasta el final de la sesión. Cada sección describe cuándo se dispara el evento, qué matchers admite, la entrada JSON que recibe y cómo controlar el comportamiento mediante la salida.

1249 1272 

1250<h3 id="sessionstart">1273<h3 id="sessionstart">

1251 SessionStart1274 SessionStart


1253 1276 

1254Se ejecuta cuando Claude Code inicia una sesión nueva o reanuda una sesión existente. Es útil para cargar contexto de desarrollo, como issues existentes o cambios recientes en tu base de código, o para configurar variables de entorno. Para contexto estático que no requiere un script, usa [CLAUDE.md](/docs/es/memory) en su lugar.1277Se ejecuta cuando Claude Code inicia una sesión nueva o reanuda una sesión existente. Es útil para cargar contexto de desarrollo, como issues existentes o cambios recientes en tu base de código, o para configurar variables de entorno. Para contexto estático que no requiere un script, usa [CLAUDE.md](/docs/es/memory) en su lugar.

1255 1278 

1256SessionStart se ejecuta en cada sesión, así que mantén estos hooks rápidos. Solo se admiten hooks `type: "command"` y `type: "mcp_tool"`. Consulta [campos de hooks de herramientas MCP](#mcp-tool-hook-fields) para saber cuándo se ejecutan los hooks `mcp_tool`.1279SessionStart se ejecuta en cada sesión, así que mantén estos hooks rápidos. Solo se admiten hooks `type: "command"` y `type: "mcp_tool"`. Consulta [Campos de hooks de herramientas MCP](#mcp-tool-hook-fields) para saber cuándo se ejecutan los hooks `mcp_tool`.

1257 1280 

1258El valor del matcher corresponde a cómo se inició la sesión:1281El valor del matcher corresponde a cómo se inició la sesión:

1259 1282 

1260| Matcher | Cuándo se activa |1283| Matcher | Cuándo se dispara |

1261| :- | :- |1284| :- | :- |

1262| `startup` | Sesión nueva |1285| `startup` | Sesión nueva |

1263| `resume` | `--resume`, `--continue` o `/resume` |1286| `resume` | `--resume`, `--continue` o `/resume` |

1264| `clear` | `/clear` |1287| `clear` | `/clear` |

1265| `compact` | Compactación automática o manual |1288| `compact` | Compactación automática o manual |

1266| `fork` | Una sesión nueva bifurcada de una existente: `--fork-session` con `--resume` o `--continue`, la copia en segundo plano de `/fork`, `/branch`, o una conversación que [mueves a segundo plano](/docs/es/agent-view#from-inside-a-session) |1289| `fork` | Una sesión nueva bifurcada de una existente: `--fork-session` con `--resume` o `--continue`, la copia en segundo plano de `/fork`, `/branch` o una conversación que [mueves al segundo plano](/docs/es/agent-view#from-inside-a-session) |

1267 1290 

1268Antes de la v2.1.214, las sesiones bifurcadas informaban el origen `"resume"`.1291Antes de la v2.1.214, las sesiones bifurcadas informaban el origen `"resume"`.

1269 1292 

1270Cuando inicias una sesión interactiva, reanudas una conversación al arrancar con `--continue` o `--resume`, o ejecutas `/clear`, los hooks SessionStart se ejecutan en segundo plano. Puedes escribir de inmediato, y una conversación que reanudaste aparece sin esperar a los hooks. La primera respuesta de Claude sigue esperando a que los hooks terminen, para que su contexto llegue a Claude.1293Cuando inicias una sesión interactiva, reanudas una conversación al iniciar con `--continue` o `--resume`, o ejecutas `/clear`, los hooks SessionStart se ejecutan en segundo plano. Puedes escribir de inmediato, y una conversación que reanudaste aparece sin esperar a los hooks. La primera respuesta de Claude sigue esperando a que terminen los hooks, para que su contexto llegue a Claude.

1271 1294 

1272Cuando cambias de conversación con `/resume` dentro de una sesión, el cambio espera a que los hooks terminen. Si ejecutas `/clear` o cambias a otra conversación mientras los hooks en segundo plano todavía se están ejecutando, nada de lo que devuelvan se aplica a la sesión.1295Cuando cambias de conversación con `/resume` dentro de una sesión, el cambio espera a que terminen los hooks. Si ejecutas `/clear` o cambias a otra conversación mientras los hooks en segundo plano siguen ejecutándose, nada de lo que devuelvan se aplica a la sesión.

1273 1296 

1274La misma espera se aplica al arrancar, incluida una sesión reanudada: un prompt que envías mientras los hooks SessionStart todavía se están ejecutando no llega a Claude hasta que terminan.1297La misma espera se aplica al iniciar, incluida una sesión reanudada: un prompt que envíes mientras los hooks SessionStart siguen ejecutándose no llega a Claude hasta que terminen.

1275 1298 

1276Durante cualquiera de las dos esperas, presiona `Esc` para devolver el prompt al campo de entrada sin enviarlo. Los hooks siguen ejecutándose.1299Durante cualquiera de las dos esperas, presiona `Esc` para recuperar el prompt en la entrada sin enviarlo. Los hooks siguen ejecutándose.

1277 1300 

1278<h4 id="sessionstart-input">1301<h4 id="sessionstart-input">

1279 Entrada de SessionStart1302 Entrada de SessionStart


1283 1306 

1284| Campo | Descripción |1307| Campo | Descripción |

1285| :- | :- |1308| :- | :- |

1286| `source` | Cómo se inició la sesión: `"startup"` para sesiones nuevas, `"resume"` para sesiones reanudadas, `"clear"` después de `/clear`, `"compact"` después de la compactación, o `"fork"` para una sesión nueva bifurcada de una existente |1309| `source` | Cómo se inició la sesión: `"startup"` para sesiones nuevas, `"resume"` para sesiones reanudadas, `"clear"` después de `/clear`, `"compact"` después de la compactación o `"fork"` para una sesión nueva bifurcada de una existente |

1287| `model` | El identificador del modelo activo. Puede omitirse, por ejemplo después de `/clear` o cuando una sesión se restaura mediante la recuperación de conversaciones, así que verifica que el campo exista antes de leerlo |1310| `model` | El identificador del modelo activo. Puede omitirse, por ejemplo después de `/clear` o cuando una sesión se restaura mediante la recuperación de conversaciones, así que comprueba que el campo exista antes de leerlo |

1288| `agent_type` | El nombre del agente, presente cuando inicias Claude Code con `claude --agent <name>` |1311| `agent_type` | El nombre del agente, presente cuando inicias Claude Code con `claude --agent <name>` |

1289| `session_title` | El título personalizado de la sesión, presente cuando hay uno establecido, por ejemplo con `--name`, `/rename`, la salida `sessionTitle` de un hook o `renameSession()` del Agent SDK. Un hook que emite `sessionTitle` puede revisar primero este campo para evitar sobrescribir un título personalizado existente |1312| `session_title` | El título personalizado de la sesión, presente cuando hay uno establecido, por ejemplo con `--name`, `/rename`, la salida `sessionTitle` de un hook o `renameSession()` del Agent SDK. Un hook que emite `sessionTitle` puede comprobar primero este campo para evitar sobrescribir un título personalizado existente |

1290 1313 

1291Una sesión a la que no le has puesto nombre puede tener igualmente un [título generado](/docs/es/sessions#name-your-sessions). Ese título no es un título personalizado y no aparece en `session_title`.1314Una sesión a la que no le has puesto nombre puede tener igualmente un [título generado](/docs/es/sessions#name-your-sessions). Ese título no es un título personalizado y no aparece en `session_title`.

1292 1315 


1296| :- | :- |1319| :- | :- |

1297| `seconds_since_last_response` | Segundos de tiempo real transcurridos desde la última respuesta en la transcripción reanudada |1320| `seconds_since_last_response` | Segundos de tiempo real transcurridos desde la última respuesta en la transcripción reanudada |

1298| `context_tokens` | Tokens que la primera solicitud de la sesión reanudada vuelve a enviar como su prompt |1321| `context_tokens` | Tokens que la primera solicitud de la sesión reanudada vuelve a enviar como su prompt |

1299| `prompt_cache_likely_expired` | `true` cuando la última respuesta es más antigua que la [duración de la caché de prompts](/docs/es/prompt-caching#cache-lifetime) de la sesión o cuando una compactación posterior reemplazó la conversación almacenada en caché |1322| `prompt_cache_likely_expired` | `true` cuando la última respuesta es más antigua que la [vida útil de la caché de prompts](/docs/es/prompt-caching#cache-lifetime) de la sesión o una compactación posterior reemplazó la conversación almacenada en caché |

1300| `estimated_cache_write_usd` | Costo estimado en dólares estadounidenses de escribir `context_tokens` en la caché de prompts con el modelo de la sesión, sin incluir la respuesta |1323| `estimated_cache_write_usd` | Costo estimado en dólares estadounidenses de escribir `context_tokens` en la caché de prompts con el modelo de la sesión, sin incluir la respuesta |

1301 1324 

1302Este ejemplo muestra la entrada de una sesión reanudada 90 minutos después de su última respuesta:1325Este ejemplo muestra la entrada de una sesión reanudada 90 minutos después de su última respuesta:


1324 1347 

1325| Campo | Descripción |1348| Campo | Descripción |

1326| :- | :- |1349| :- | :- |

1327| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulta [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué incluir en él |1350| `additionalContext` | Cadena que se agrega al contexto de Claude al comienzo de la conversación, antes del primer prompt. Consulta [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué incluir en él |

1328| `initialUserMessage` | Cadena que se usa como primer mensaje del usuario de la sesión, en [modo no interactivo](/docs/es/headless) con el flag `-p`. Se convierte en el primer turno aunque no pases ningún prompt. Un prompt que sí pases va a continuación como el siguiente turno |1351| `initialUserMessage` | Cadena que se usa como primer mensaje del usuario de la sesión, en [modo no interactivo](/docs/es/headless) con el flag `-p`. Se convierte en el primer turno aunque no pases ningún prompt. Un prompt que sí pases sigue como el siguiente turno |

1329| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Se aplica cuando `source` es `"startup"`, `"resume"` o `"fork"` |1352| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Se aplica cuando `source` es `"startup"`, `"resume"` o `"fork"` |

1330| `watchPaths` | Array de rutas absolutas que se vigilarán para eventos [FileChanged](#filechanged) durante esta sesión |1353| `watchPaths` | Array de rutas absolutas que se vigilan para eventos [FileChanged](#filechanged) durante esta sesión |

1331| `reloadSkills` | Booleano. Cuando es `true`, Claude Code vuelve a examinar los directorios de [skills](/docs/es/skills) y comandos después de que terminan los hooks SessionStart. Consulta [Recargar los skills que instala un hook](#reload-skills-that-a-hook-installs) |1354| `reloadSkills` | Booleano. Cuando es `true`, Claude Code vuelve a escanear los directorios de [skills](/docs/es/skills) y comandos después de que terminen los hooks SessionStart. Consulta [Recargar los skills que instala un hook](#reload-skills-that-a-hook-installs) |

1332 1355 

1333Esta salida agrega contexto y le pone nombre a la sesión:1356Esta salida agrega contexto y le pone nombre a la sesión:

1334 1357 


1342}1365}

1343```1366```

1344 1367 

1345Un hook que solo agrega contexto puede imprimirlo sin construir JSON, porque Claude Code agrega al contexto de Claude la [stdout en texto plano](#exit-code-0) de un hook SessionStart.1368Un hook que solo agrega contexto puede imprimirlo sin construir JSON, porque Claude Code agrega la [salida stdout en texto plano](#exit-code-0) de un hook SessionStart al contexto de Claude.

1346 1369 

1347Si el hook SessionStart de tu plugin proporciona `initialUserMessage` o `sessionTitle`, instala el plugin antes de que se inicie la sesión. Claude Code ignora ambos campos de un plugin que termina de instalarse después de que se hayan ejecutado los hooks SessionStart.1370Si el hook SessionStart de tu plugin proporciona `initialUserMessage` o `sessionTitle`, instala el plugin antes de que comience la sesión. Claude Code ignora ambos campos de un plugin que termina de instalarse después de que se hayan ejecutado los hooks SessionStart.

1348 1371 

1349<h4 id="reload-skills-that-a-hook-installs">1372<h4 id="reload-skills-that-a-hook-installs">

1350 Recargar los skills que instala un hook1373 Recargar los skills que instala un hook

1351</h4>1374</h4>

1352 1375 

1353Para que los skills que instala un hook SessionStart estén disponibles en la misma sesión, devuelve `reloadSkills`. La detección de skills normalmente se ejecuta antes de que terminen los hooks SessionStart, así que, sin él, los archivos que un hook escribe en `~/.claude/skills/` o `.claude/skills/` pueden faltar cuando se ejecuta el primer prompt.1376Para que los skills que instala un hook SessionStart estén disponibles en la misma sesión, devuelve `reloadSkills`. El descubrimiento de skills normalmente se ejecuta antes de que terminen los hooks SessionStart, así que sin él, los archivos que un hook escribe en `~/.claude/skills/` o `.claude/skills/` pueden faltar cuando se ejecuta el primer prompt.

1354 1377 

1355Este ejemplo sincroniza un repositorio compartido de skills y solicita el nuevo examen:1378Este ejemplo sincroniza un repositorio compartido de skills y solicita el nuevo escaneo:

1356 1379 

1357```bash theme={null}1380```bash theme={null}

1358#!/bin/bash1381#!/bin/bash


1366La URL del repositorio es un marcador de posición. Reemplázala por tu propio repositorio de skills.1389La URL del repositorio es un marcador de posición. Reemplázala por tu propio repositorio de skills.

1367 1390 

1368<h4 id="persist-environment-variables">1391<h4 id="persist-environment-variables">

1369 Persistir variables de entorno1392 Conservar variables de entorno

1370</h4>1393</h4>

1371 1394 

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.1395Los 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 ejecute más adelante en la sesión.

1373 1396 

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:1397Para establecer variables de entorno individuales, escribe sentencias `export` en `CLAUDE_ENV_FILE`. Usa la adición (`>>`) para conservar las variables establecidas por otros hooks:

1375 1398 


1385exit 01408exit 0

1386```1409```

1387 1410 

1388Para capturar todos los cambios de entorno de los comandos de configuración, compara las variables exportadas antes y después:1411Para capturar todos los cambios de entorno de los comandos de preparación, compara las variables exportadas antes y después:

1389 1412 

1390```bash theme={null}1413```bash theme={null}

1391#!/bin/bash1414#!/bin/bash


1404exit 01427exit 0

1405```1428```

1406 1429 

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"`.1430Cada comando de Bash ejecuta el contenido del archivo como código de shell antes del propio comando, así que una línea allí puede usar cualquier cosa que Bash evalúe, como la referencia a `$PATH` en `export PATH="$PATH:./node_modules/.bin"`.

1408 1431 

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

1410 1433 


1412 Variables conservadas en comandos de PowerShell1435 Variables conservadas en comandos de PowerShell

1413</h5>1436</h5>

1414 1437 

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:1438Los 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 de alguno de los siguientes tipos, considerando todo lo que escribió cada hook en esta sesión y cualquier script al que [hayas establecido `CLAUDE_ENV_FILE`](/docs/es/env-vars) antes de iniciar:

1416 1439 

1417* Una línea en blanco o un comentario `#`1440* 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 invertida1441* Una asignación al comienzo 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 use solo letras, dígitos y los caracteres `_ @ % + = : , . / -`, texto entre comillas simples y texto entre comillas dobles en el que cualquier `$`, acento grave o `"` interno esté escapado con una barra invertida

1419 1442 

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.1443Si 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 contenga `/` o `\`, porque Git Bash y Windows escriben las rutas de forma diferente. Un comando de PowerShell [en el sandbox](/docs/es/sandboxing) no recibe ninguna de las variables.

1421 1444 

1422<Note>1445<Note>

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.1446 `CLAUDE_ENV_FILE` está disponible para los hooks SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged) y [FileChanged](#filechanged). Otros eventos de hooks no tienen acceso a esta variable, y 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.

1424</Note>1447</Note>

1425 1448 

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

1427 Setup1450 Setup

1428</h3>1451</h3>

1429 1452 

1430Se activa solo cuando inicias Claude Code con `--init-only`, o con `--init` o `--maintenance` en el [modo no interactivo](/docs/es/headless) con el flag `-p`. No se activa en el inicio normal. Úsalo para la instalación de dependencias de una sola vez o para una limpieza programada que activas explícitamente desde CI o scripts, separada del inicio normal de la sesión. Para la inicialización por sesión, usa [SessionStart](#sessionstart) en su lugar.1453Se dispara solo cuando inicias Claude Code con `--init-only`, o con `--init` o `--maintenance` en [modo no interactivo](/docs/es/headless) con el flag `-p`. No se dispara en el inicio normal. Úsalo para la instalación única de dependencias o para la limpieza programada que activas explícitamente desde CI o scripts, de forma separada del inicio normal de la sesión. Para la inicialización por sesión, usa [SessionStart](#sessionstart) en su lugar.

1431 1454 

1432El valor del matcher corresponde al flag de la CLI que activó el hook:1455El valor del matcher corresponde al flag de la CLI que activó el hook:

1433 1456 

1434| Matcher | Cuándo se activa |1457| Matcher | Cuándo se dispara |

1435| :- | :- |1458| :- | :- |

1436| `init` | `claude --init-only` o `claude -p --init` |1459| `init` | `claude --init-only` o `claude -p --init` |

1437| `maintenance` | `claude -p --maintenance` |1460| `maintenance` | `claude -p --maintenance` |


1442 1465 

1443Si tiene éxito, `--init-only` no imprime nada en la terminal. Para confirmar que los hooks se ejecutaron, inicia con `claude --debug-file <path> --init-only`, reemplazando `<path>` por la ubicación de un archivo de log, y revisa el registro en busca de las entradas de los hooks Setup y SessionStart.1466Si tiene éxito, `--init-only` no imprime nada en la terminal. Para confirmar que los hooks se ejecutaron, inicia con `claude --debug-file <path> --init-only`, reemplazando `<path>` por la ubicación de un archivo de log, y revisa el registro en busca de las entradas de los hooks Setup y SessionStart.

1444 1467 

1445Como Setup no se activa en cada inicio, un plugin que necesita instalar una dependencia no puede depender solo de Setup. El patrón práctico es verificar la dependencia en el primer uso e instalarla si falta, por ejemplo con un hook o skill que compruebe `${CLAUDE_PLUGIN_DATA}/node_modules` y ejecute `npm install` si no existe. Consulta el [directorio de datos persistentes](/docs/es/plugins/components#path-variables-and-persistent-data) para saber dónde almacenar las dependencias instaladas. Si distribuyes tu plugin a través de un marketplace, es posible que no necesites este patrón: Claude Code [instala automáticamente las dependencias de paquetes de Node.js elegibles](/docs/es/plugins/loading#node-js-package-dependencies) cuando almacena el plugin en caché.1468Como Setup no se dispara en cada inicio, un plugin que necesita instalar una dependencia no puede depender solo de Setup. El patrón práctico es comprobar la dependencia en el primer uso e instalarla si falta; por ejemplo, un hook o skill que comprueba si existe `${CLAUDE_PLUGIN_DATA}/node_modules` y ejecuta `npm install` si no está. Consulta el [directorio de datos persistentes](/docs/es/plugins/components#path-variables-and-persistent-data) para saber dónde almacenar las dependencias instaladas. Si distribuyes tu plugin a través de un marketplace, es posible que no necesites este patrón: Claude Code [instala automáticamente las dependencias de paquetes de Node.js que cumplan los requisitos](/docs/es/plugins/loading#node-js-package-dependencies) cuando almacena el plugin en caché.

1446 1469 

1447<h4 id="setup-input">1470<h4 id="setup-input">

1448 Entrada de Setup1471 Entrada de Setup


1464 Control de decisiones de Setup1487 Control de decisiones de Setup

1465</h4>1488</h4>

1466 1489 

1467Los hooks Setup no pueden bloquear; la ejecución continúa con cualquier código de salida. Con cualquier código de salida, Claude Code descarta los [campos de salida JSON](#json-output) de un hook Setup, como `systemMessage`, `continue` y `hookSpecificOutput.additionalContext`. Con `-p`, la stdout, la stderr y el código de salida de un hook Setup aparecen en la salida de la ejecución solo como [eventos `hook_response`](/docs/es/headless#read-session-metadata) cuando inicias con `--output-format stream-json --verbose`.1490Los hooks Setup no pueden bloquear; la ejecución continúa con cualquier código de salida. Con cualquier código de salida, Claude Code descarta los [campos de salida JSON](#json-output) de un hook Setup, como `systemMessage`, `continue` y `hookSpecificOutput.additionalContext`. Con `-p`, el stdout, el stderr y el código de salida de un hook Setup aparecen en la salida de la ejecución solo como [eventos `hook_response`](/docs/es/headless#read-session-metadata) cuando inicias con `--output-format stream-json --verbose`.

1468 1491 

1469Los hooks Setup tienen acceso a `CLAUDE_ENV_FILE`. Las variables escritas en ese archivo persisten en los comandos Bash posteriores de la sesión, como en los [hooks SessionStart](#persist-environment-variables). Solo los hooks `type: "command"` se ejecutan en `Setup`. Un hook `type: "mcp_tool"` en `Setup` siempre se omite, como se describe en [campos de hooks de herramientas MCP](#mcp-tool-hook-fields).1492Los hooks Setup tienen acceso a `CLAUDE_ENV_FILE`. Las variables escritas en ese archivo se conservan en los comandos de Bash posteriores de la sesión, como en los [hooks SessionStart](#persist-environment-variables). Solo los hooks `type: "command"` se ejecutan en `Setup`. Un hook `type: "mcp_tool"` en `Setup` siempre se omite, como se describe en [Campos de hooks de herramientas MCP](#mcp-tool-hook-fields).

1470 1493 

1471<h3 id="instructionsloaded">1494<h3 id="instructionsloaded">

1472 InstructionsLoaded1495 InstructionsLoaded

1473</h3>1496</h3>

1474 1497 

1475Se activa cuando un archivo `CLAUDE.md` o `.claude/rules/*.md` se carga en el contexto. Este evento se activa al inicio de la sesión para los archivos que se cargan de forma anticipada y otra vez más adelante cuando los archivos se cargan de forma diferida, por ejemplo cuando Claude accede a un subdirectorio que contiene un `CLAUDE.md` anidado o cuando coinciden reglas condicionales con frontmatter `paths:`. El hook no admite bloqueo ni control de decisiones. Se ejecuta de forma asíncrona con fines de observabilidad.1498Se dispara cuando se carga un archivo `CLAUDE.md` o `.claude/rules/*.md` en el contexto. Este evento se dispara al inicio de la sesión para los archivos cargados de forma anticipada y de nuevo más tarde cuando los archivos se cargan de forma diferida, por ejemplo cuando Claude accede a un subdirectorio que contiene un `CLAUDE.md` anidado o cuando coinciden reglas condicionales con frontmatter `paths:`. El hook no admite bloqueo ni control de decisiones. Se ejecuta de forma asíncrona con fines de observabilidad.

1476 1499 

1477Este evento no se activa cuando Claude [lee `AGENTS.md` directamente](/docs/es/memory#agents-md) mediante el ajuste **Project instructions**. Sí se activa cuando un `CLAUDE.md` importa tu `AGENTS.md`, con `load_reason` establecido en `include` como para cualquier otro archivo importado, y cuando `CLAUDE.md` es un enlace simbólico a él, como una carga normal de `CLAUDE.md`.1500Este evento no se dispara cuando Claude [lee `AGENTS.md` directamente](/docs/es/memory#agents-md) mediante el ajuste **Project instructions**. Sí se dispara cuando un `CLAUDE.md` importa tu `AGENTS.md`, con `load_reason` establecido en `include` como para cualquier otro archivo importado, y cuando `CLAUDE.md` es un enlace simbólico a él, como una carga normal de `CLAUDE.md`.

1478 1501 

1479El matcher se evalúa contra `load_reason`. Por ejemplo, usa `"matcher": "session_start"` para que se active solo con los archivos cargados al inicio de la sesión, o `"matcher": "path_glob_match|nested_traversal"` para que se active solo con cargas diferidas.1502El matcher se evalúa contra `load_reason`. Por ejemplo, usa `"matcher": "session_start"` para que se dispare solo con los archivos cargados al inicio de la sesión, o `"matcher": "path_glob_match|nested_traversal"` para que se dispare solo con las cargas diferidas.

1480 1503 

1481<h4 id="instructionsloaded-input">1504<h4 id="instructionsloaded-input">

1482 Entrada de InstructionsLoaded1505 Entrada de InstructionsLoaded


1488| :- | :- |1511| :- | :- |

1489| `file_path` | Ruta absoluta al archivo de instrucciones que se cargó |1512| `file_path` | Ruta absoluta al archivo de instrucciones que se cargó |

1490| `memory_type` | Alcance del archivo: `"User"`, `"Project"`, `"Local"` o `"Managed"` |1513| `memory_type` | Alcance del archivo: `"User"`, `"Project"`, `"Local"` o `"Managed"` |

1491| `load_reason` | Por qué se cargó el archivo: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` o `"compact"`. El valor `"compact"` se activa cuando los archivos de instrucciones se vuelven a cargar después de un evento de compactación |1514| `load_reason` | Por qué se cargó el archivo: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` o `"compact"`. El valor `"compact"` se produce cuando los archivos de instrucciones se vuelven a cargar después de un evento de compactación |

1492| `globs` | Patrones glob de ruta del frontmatter `paths:` del archivo, si los hay. Presente solo en cargas `path_glob_match` |1515| `globs` | Patrones glob de ruta del frontmatter `paths:` del archivo, si los hay. Presente solo en las cargas `path_glob_match` |

1493| `trigger_file_path` | Ruta al archivo cuyo acceso desencadenó esta carga, en cargas diferidas |1516| `trigger_file_path` | Ruta al archivo cuyo acceso activó esta carga, en las cargas diferidas |

1494| `parent_file_path` | Ruta al archivo de instrucciones padre que incluyó este, en cargas `include` |1517| `parent_file_path` | Ruta al archivo de instrucciones padre que incluyó este, en las cargas `include` |

1495 1518 

1496```json theme={null}1519```json theme={null}

1497{1520{


1516</h3>1539</h3>

1517 1540 

1518Se ejecuta cuando se envía un prompt, antes de que Claude lo procese. Esto te permite1541Se ejecuta cuando se envía un prompt, antes de que Claude lo procese. Esto te permite

1519agregar contexto adicional según el prompt o la conversación, validar prompts o1542agregar contexto adicional basado en el prompt o la conversación, validar prompts o

1520bloquear ciertos tipos de prompts.1543bloquear ciertos tipos de prompts.

1521 1544 

1522Los hooks `UserPromptSubmit` no se activan solo con los prompts que escribes. Claude Code también los ejecuta cuando:1545Los hooks `UserPromptSubmit` no se disparan solo con los prompts que escribes. Claude Code también los ejecuta cuando:

1523 1546 

1524* Se activa una [tarea programada](/docs/es/scheduled-tasks), incluida una iteración de `/loop`1547* Se dispara una [tarea programada](/docs/es/scheduled-tasks), incluida una iteración de `/loop`

1525* Un [subagente en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) informa a la sesión que lo inició1548* Un [subagente en segundo plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) informa a la sesión que lo inició

1526* Llega a tu conversación principal un [mensaje que envía otra sesión](/docs/es/cross-session-messaging)1549* [Otra sesión envía un mensaje](/docs/es/cross-session-messaging) a tu conversación principal

1527 1550 

1528Los hooks `UserPromptSubmit` tienen un tiempo de espera predeterminado de 30 segundos para los tipos `command`, `http` y `mcp_tool`, más corto que el valor predeterminado de 600 segundos para esos tipos en la mayoría de los demás eventos. Como este hook se ejecuta antes de cada prompt y bloquea el procesamiento del modelo hasta que termina, un hook atascado detiene la sesión. Si tu hook necesita más tiempo, establece el campo `timeout` en la entrada del hook.1551Los hooks `UserPromptSubmit` tienen un tiempo de espera predeterminado de 30 segundos para los tipos `command`, `http` y `mcp_tool`, más corto que el valor predeterminado de 600 segundos para esos tipos en la mayoría de los demás eventos. Como este hook se ejecuta antes de cada prompt y bloquea el procesamiento del modelo hasta que termina, un hook atascado detiene la sesión. Si tu hook necesita más tiempo, establece el campo `timeout` en la entrada del hook.

1529 1552 

1530Salvo un hook de comando que ejecutes con [`async: true`](#run-hooks-in-the-background), cuando se agota el tiempo de espera de un hook de comando, HTTP o de herramienta MCP de `UserPromptSubmit`, se cancela y se descarta su salida, incluido cualquier `additionalContext`. El prompt sigue llegando a Claude sin ese contexto. Para bloquear el prompt en su lugar, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails) en un hook de comando o HTTP. La transcripción muestra un aviso que indica el hook, el tiempo de espera que se agotó y que se descartó la salida.1553Salvo un hook de comando que ejecutes con [`async: true`](#run-hooks-in-the-background), un hook `UserPromptSubmit` de comando, HTTP o herramienta MCP que alcanza su tiempo de espera se cancela y su salida, incluido cualquier `additionalContext`, se descarta. El prompt sigue llegando a Claude sin ese contexto. Para bloquear el prompt en su lugar, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails) en un hook de comando o HTTP. La transcripción muestra un aviso que nombra el hook, el tiempo de espera que se agotó e indica que la salida se descartó.

1531 1554 

1532Cuando a un [hook de callback del Agent SDK](/docs/es/agent-sdk/hooks) en `UserPromptSubmit` se le agota el tiempo de espera, bloquea el prompt con un mensaje que nombra el hook y el tiempo de espera, porque un callback ahí puede estar actuando como una barrera de políticas que no debe fallar de forma abierta. La sesión continúa. Antes de la v2.1.208, agotar el tiempo de espera de un callback en ese evento terminaba el turno con un error de ejecución.1555Un [hook de callback del Agent SDK](/docs/es/agent-sdk/hooks) en `UserPromptSubmit` que alcanza su tiempo de espera bloquea el prompt con un mensaje que nombra el hook y el tiempo de espera, porque un callback en ese punto puede estar actuando como una barrera de políticas que no debe fallar de forma abierta. La sesión continúa. Antes de la v2.1.208, agotar el tiempo de espera de un callback en ese evento terminaba el turno con un error de ejecución.

1533 1556 

1534<h4 id="userpromptsubmit-input">1557<h4 id="userpromptsubmit-input">

1535 Entrada de UserPromptSubmit1558 Entrada de UserPromptSubmit

1536</h4>1559</h4>

1537 1560 

1538Además de los [campos de entrada comunes](#common-input-fields), los hooks UserPromptSubmit reciben el campo `prompt` que contiene el texto enviado. El contenido pegado que se contrajo en un marcador `[Pasted text #N]` llega expandido en su lugar. En las sesiones en las que Claude Code [marca el texto pegado para Claude](/docs/es/terminal-config#how-claude-treats-pasted-text), ese contenido expandido se ubica entre una línea `<pasted_content id="…">` y una línea `</pasted_content id="…">`, así que tenlas en cuenta si tu hook analiza el prompt.1561Además de los [campos de entrada comunes](#common-input-fields), los hooks UserPromptSubmit reciben el campo `prompt` que contiene el texto enviado. El contenido pegado que se contrajo en un marcador `[Pasted text #N]` llega expandido en su lugar. En las sesiones donde Claude Code [marca el texto pegado para Claude](/docs/es/terminal-config#how-claude-treats-pasted-text), ese contenido expandido se encuentra entre una línea `<pasted_content id="…">` y una línea `</pasted_content id="…">`, así que ten en cuenta esas líneas si tu hook analiza el prompt.

1539 1562 

1540Los hooks UserPromptSubmit también reciben `session_title` cuando la sesión tiene un título personalizado, con el mismo significado que el [campo `session_title` de SessionStart](#sessionstart-input).1563Los hooks UserPromptSubmit también reciben `session_title` cuando la sesión tiene un título personalizado, con el mismo significado que el [campo `session_title` de SessionStart](#sessionstart-input).

1541 1564 


1558 1581 

1559Hay dos formas de agregar contexto a la conversación con el código de salida 0:1582Hay dos formas de agregar contexto a la conversación con el código de salida 0:

1560 1583 

1561* **Stdout en texto plano**: Claude Code agrega al contexto de Claude la stdout que [trata como texto plano](#exit-code-0)1584* **Stdout en texto plano**: Claude Code agrega al contexto de Claude el stdout que [trata como texto plano](#exit-code-0)

1562* **JSON con `additionalContext`**: usa el formato JSON a continuación para tener más control. El campo `additionalContext` se agrega como contexto1585* **JSON con `additionalContext`**: usa el formato JSON siguiente para tener más control. El campo `additionalContext` se agrega como contexto

1563 1586 

1564Ninguno de los dos canales produce una entrada visible en la transcripción. La stdout en texto plano y el valor de `additionalContext` se inyectan cada uno como un recordatorio del sistema que comienza con el nombre del hook; Claude lee ambos. Para confirmar la entrega, revisa el [registro de depuración](#debug-hooks).1587Ninguno de los dos canales produce una entrada visible en la transcripción. El stdout plano y el valor de `additionalContext` se inyectan cada uno como un recordatorio del sistema que comienza con el nombre del hook; Claude lee ambos. Para confirmar la entrega, revisa el [registro de depuración](#debug-hooks).

1565 1588 

1566Para bloquear un prompt, devuelve un objeto JSON con `decision` establecido en `"block"`:1589Para bloquear un prompt, devuelve un objeto JSON con `decision` establecido en `"block"`:

1567 1590 


1569| :- | :- |1592| :- | :- |

1570| `decision` | `"block"` detiene el prompt antes de que llegue a Claude. Omítelo para permitir que el prompt continúe |1593| `decision` | `"block"` detiene el prompt antes de que llegue a Claude. Omítelo para permitir que el prompt continúe |

1571| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto |1594| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto |

1572| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt enviado. Consulta [Agregar contexto para Claude](#add-context-for-claude) |1595| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el prompt enviado. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

1573| `sessionTitle` | Establece el título de la sesión. Úsalo para nombrar sesiones automáticamente según el contenido del prompt |1596| `sessionTitle` | Establece el título de la sesión. Úsalo para nombrar sesiones automáticamente según el contenido del prompt |

1574| `suppressOriginalPrompt` | Si es `true` cuando el hook bloquea el prompt, deja el texto del prompt fuera del mensaje de bloqueo. Consulta [Qué deja atrás un prompt bloqueado](#what-a-blocked-prompt-leaves-behind) |1597| `suppressOriginalPrompt` | Si es `true` cuando el hook bloquea el prompt, deja el texto del prompt fuera del mensaje de bloqueo. Consulta [Lo que deja un prompt bloqueado](#what-a-blocked-prompt-leaves-behind) |

1575 1598 

1576Un hook que bloquea terminando con 2 se enruta igual que `reason`: el mensaje de bloqueo muestra al usuario el texto de stderr, y no se agrega al contexto.1599Un hook que bloquea saliendo con 2 se enruta igual que `reason`: el mensaje de bloqueo muestra el texto de stderr al usuario, y no se agrega al contexto.

1577 1600 

1578```json theme={null}1601```json theme={null}

1579{1602{


1589```1612```

1590 1613 

1591<h4 id="what-a-blocked-prompt-leaves-behind">1614<h4 id="what-a-blocked-prompt-leaves-behind">

1592 Qué deja atrás un prompt bloqueado1615 Lo que deja un prompt bloqueado

1593</h4>1616</h4>

1594 1617 

1595Un prompt bloqueado nunca llega a Claude, pero su texto no se elimina en todas partes. De forma predeterminada, el mensaje de bloqueo que se muestra al usuario termina con `Original prompt:` seguido del texto enviado, y Claude Code escribe ese mensaje en el archivo de transcripción de la sesión en el disco. Para dejar el texto fuera del mensaje, imprime JSON con `"suppressOriginalPrompt": true` dentro de `hookSpecificOutput`. Esto funciona tanto si el hook bloquea con `decision: "block"` como si lo hace terminando con 2.1618Un prompt bloqueado nunca llega a Claude, pero su texto no se elimina de todas partes. De forma predeterminada, el mensaje de bloqueo que se muestra al usuario termina con `Original prompt:` seguido del texto enviado, y Claude Code escribe ese mensaje en el archivo de transcripción de la sesión en el disco. Para dejar el texto fuera del mensaje, imprime JSON con `"suppressOriginalPrompt": true` dentro de `hookSpecificOutput`. Esto funciona tanto si el hook bloquea con `decision: "block"` como si lo hace saliendo con 2.

1596 1619 

1597`suppressOriginalPrompt` solo cambia el mensaje de bloqueo. El texto enviado puede seguir apareciendo en archivos locales, como la transcripción de la sesión y tu historial de prompts, así que un hook de bloqueo no es una forma de mantener un secreto fuera del disco. Para limitar o eliminar esos archivos, consulta [Almacenamiento en texto plano](/docs/es/claude-directory#plaintext-storage) y [Borrar datos locales](/docs/es/claude-directory#clear-local-data).1620`suppressOriginalPrompt` solo cambia el mensaje de bloqueo. El texto enviado puede seguir apareciendo en archivos locales, como la transcripción de la sesión y tu historial de prompts, así que un hook de bloqueo no es una forma de mantener un secreto fuera del disco. Para limitar o eliminar esos archivos, consulta [Almacenamiento en texto plano](/docs/es/claude-directory#plaintext-storage) y [Borrar datos locales](/docs/es/claude-directory#clear-local-data).

1598 1621 


1600 UserPromptExpansion1623 UserPromptExpansion

1601</h3>1624</h3>

1602 1625 

1603Se ejecuta cuando un comando escrito por el usuario se expande en un prompt antes de llegar a Claude. Úsalo para bloquear la invocación directa de comandos específicos, inyectar contexto para un skill en particular o registrar qué comandos invocan los usuarios. Por ejemplo, un hook que coincide con `deploy` puede bloquear `/deploy` a menos que exista un archivo de aprobación, o un hook que coincide con un skill de revisión puede agregar la lista de verificación de revisión del equipo como `additionalContext`.1626Se ejecuta cuando un comando escrito por el usuario se expande en un prompt antes de llegar a Claude. Úsalo para impedir que ciertos comandos se invoquen directamente, inyectar contexto para un skill concreto o registrar qué comandos invocan los usuarios. Por ejemplo, un hook que coincide con `deploy` puede bloquear `/deploy` a menos que exista un archivo de aprobación, o un hook que coincide con un skill de revisión puede anexar la lista de verificación de revisión del equipo como `additionalContext`.

1604 1627 

1605Este evento cubre el camino que `PreToolUse` no cubre: un hook `PreToolUse` que coincide con la herramienta `Skill` se activa solo cuando Claude llama a la herramienta, pero escribir `/skillname` directamente omite `PreToolUse`. `UserPromptExpansion` se activa en ese camino directo.1628Este evento cubre la ruta que `PreToolUse` no cubre: un hook `PreToolUse` que coincide con la herramienta `Skill` solo se dispara cuando Claude llama a la herramienta, pero escribir `/skillname` directamente omite `PreToolUse`. `UserPromptExpansion` se dispara en esa ruta directa.

1606 1629 

1607Coincide con `command_name`. Deja el matcher vacío para que se active con cada comando de tipo prompt.1630Coincide con `command_name`. Deja el matcher vacío para que se dispare con cada comando de tipo prompt.

1608 1631 

1609<h4 id="userpromptexpansion-input">1632<h4 id="userpromptexpansion-input">

1610 Entrada de UserPromptExpansion1633 Entrada de UserPromptExpansion

1611</h4>1634</h4>

1612 1635 

1613Además de los [campos de entrada comunes](#common-input-fields), los hooks UserPromptExpansion reciben `expansion_type`, `command_name`, `command_args`, `command_source` y la cadena `prompt` original. El campo `expansion_type` es `slash_command` para skills y comandos personalizados, o `mcp_prompt` para los prompts de servidores MCP.1636Además de los [campos de entrada comunes](#common-input-fields), los hooks UserPromptExpansion reciben `expansion_type`, `command_name`, `command_args`, `command_source` y la cadena `prompt` original. El campo `expansion_type` es `slash_command` para skills y comandos personalizados, o `mcp_prompt` para prompts de servidores MCP.

1614 1637 

1615```json theme={null}1638```json theme={null}

1616{1639{


1637| :- | :- |1660| :- | :- |

1638| `decision` | `"block"` impide que el comando se expanda. Omítelo para permitir que continúe |1661| `decision` | `"block"` impide que el comando se expanda. Omítelo para permitir que continúe |

1639| `reason` | Se muestra al usuario cuando `decision` es `"block"` |1662| `reason` | Se muestra al usuario cuando `decision` es `"block"` |

1640| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt expandido. Consulta [Agregar contexto para Claude](#add-context-for-claude) |1663| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el prompt expandido. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

1641 1664 

1642Un hook que bloquea terminando con 2 se enruta igual que `reason`: el mensaje de bloqueo muestra al usuario el texto de stderr.1665Un hook que bloquea saliendo con 2 se enruta igual que `reason`: el mensaje de bloqueo muestra el texto de stderr al usuario.

1643 1666 

1644```json theme={null}1667```json theme={null}

1645{1668{


1656 MessageDisplay1679 MessageDisplay

1657</h3>1680</h3>

1658 1681 

1659Se ejecuta mientras un mensaje del asistente se transmite a la pantalla. Claude Code muestra el mensaje por incrementos: cada vez que un lote de líneas recién completadas está listo para renderizarse, el hook se ejecuta una vez con esas líneas y Claude Code renderiza el texto de reemplazo del hook en su lugar. Un mensaje largo produce varias llamadas; un mensaje corto puede producir solo una.1682Se ejecuta mientras un mensaje del asistente se transmite a la pantalla. Claude Code muestra el mensaje por incrementos: cada vez que un lote de líneas recién completadas está listo para renderizarse, el hook se ejecuta una vez con esas líneas y Claude Code renderiza en su lugar el texto de reemplazo del hook. Un mensaje largo produce varias llamadas; un mensaje corto puede producir solo una.

1660 1683 

1661Usa MessageDisplay para:1684Usa MessageDisplay para:

1662 1685 

1663* quitar el markdown para una visualización mínima1686* quitar el markdown para una visualización minimalista

1664* transformar el texto que una aplicación del Agent SDK muestra a sus usuarios1687* transformar el texto que una aplicación del Agent SDK muestra a sus usuarios

1665* ocultar claves de API o nombres de host internos de las respuestas de Claude1688* ocultar claves de API o nombres de host internos de las respuestas de Claude

1666 1689 

1667Claude Code retiene cada lote hasta que tu hook responde, así que mantén el hook rápido. Si el hook falla o se agota su tiempo de espera, Claude Code muestra el texto original. El tiempo de espera predeterminado para este evento es de 10 segundos; si tu hook necesita más tiempo, establece el campo `timeout` en la entrada del hook.1690Claude Code retiene cada lote hasta que tu hook devuelve un resultado, así que mantén el hook rápido. Si el hook falla o se agota su tiempo de espera, Claude Code muestra el texto original. El tiempo de espera predeterminado para este evento es de 10 segundos; si tu hook necesita más tiempo, establece el campo `timeout` en la entrada del hook.

1668 1691 

1669MessageDisplay es solo de visualización: el texto de reemplazo cambia únicamente lo que se renderiza en la pantalla. La transcripción y lo que ve Claude conservan el texto original, así que Claude nunca ve el reemplazo, y el modo detallado muestra el original. El hook recibe solo el texto de los mensajes del asistente, así que los resultados de herramientas y el texto que escribes se renderizan sin cambios.1692MessageDisplay es solo de visualización: el texto de reemplazo cambia únicamente lo que se renderiza en pantalla. La transcripción y lo que ve Claude conservan el texto original, así que Claude nunca ve el reemplazo, y el modo detallado muestra el original. El hook recibe solo el texto de los mensajes del asistente, así que los resultados de herramientas y el texto que escribes se renderizan sin cambios.

1670 1693 

1671MessageDisplay no admite matchers y se activa con cada mensaje del asistente que transmite texto; los mensajes sin texto, como las respuestas que solo contienen llamadas a herramientas, no lo activan.1694MessageDisplay no admite matchers y se dispara con cada mensaje del asistente que transmite texto; los mensajes sin texto, como las respuestas que solo contienen llamadas a herramientas, no lo activan.

1672 1695 

1673En las ejecuciones no interactivas, incluidas las consultas del Agent SDK y `claude -p`, MessageDisplay se ejecuta una vez por mensaje del asistente en lugar de una vez por lote de líneas. La única llamada llega después de que el mensaje termina y contiene el texto completo del mensaje: `index` es `0`, `final` es `true` y `delta` contiene el mensaje entero. Un hook que recopila el texto `delta` de cada mensaje recibe el mismo texto total en ambos modos.1696En las ejecuciones no interactivas, incluidas las consultas del Agent SDK y `claude -p`, MessageDisplay se ejecuta una vez por mensaje del asistente en lugar de una vez por lote de líneas. La única llamada llega después de que el mensaje se completa y contiene el texto completo del mensaje: `index` es `0`, `final` es `true` y `delta` contiene el mensaje entero. Un hook que recopila el texto de `delta` de cada mensaje recibe el mismo texto total en ambos modos.

1674 1697 

1675<h4 id="messagedisplay-input">1698<h4 id="messagedisplay-input">

1676 Entrada de MessageDisplay1699 Entrada de MessageDisplay

1677</h4>1700</h4>

1678 1701 

1679Además de los [campos de entrada comunes](#common-input-fields), los hooks MessageDisplay reciben identificadores del turno y del mensaje, la posición de esta llamada dentro del mensaje y el texto nuevo en `delta`. Los límites de los lotes dependen de cómo se transmite el texto, así que usa `index` y `final` para seguir el avance a través de un mensaje en lugar de esperar que las líneas se agrupen de una manera determinada.1702Además de los [campos de entrada comunes](#common-input-fields), los hooks MessageDisplay reciben identificadores del turno y del mensaje, la posición de esta llamada dentro del mensaje y el texto nuevo en `delta`. Los límites de los lotes dependen de cómo se transmite el texto, así que usa `index` y `final` para seguir el avance a lo largo de un mensaje en lugar de esperar que las líneas se agrupen de una manera concreta.

1680 1703 

1681| Campo | Descripción |1704| Campo | Descripción |

1682| :- | :- |1705| :- | :- |

1683| `turn_id` | UUID del turno actual |1706| `turn_id` | UUID del turno actual |

1684| `message_id` | UUID del mensaje del asistente que se está mostrando. Se mantiene estable en todos los lotes del mismo mensaje. No es el id `msg_…` de la API, así que no se puede correlacionar con los ids de mensajes de la transcripción |1707| `message_id` | UUID del mensaje del asistente que se está mostrando. Es estable en todos los lotes del mismo mensaje. No es el id `msg_…` de la API, así que no puede correlacionarse con los ids de mensajes de la transcripción |

1685| `index` | Índice, empezando en cero, de este lote dentro del mensaje |1708| `index` | Índice, empezando en cero, de este lote dentro del mensaje |

1686| `final` | `true` en el último lote del mensaje. Cada mensaje tiene exactamente un lote final |1709| `final` | `true` en el último lote del mensaje. Cada mensaje tiene exactamente un lote final |

1687| `delta` | Las líneas recién completadas desde el lote anterior, incluidos los saltos de línea finales. Siempre son líneas completas, excepto el lote final, que puede terminar a mitad de línea. En las ejecuciones interactivas, el delta del lote final está vacío cuando el mensaje termina en un salto de línea, así que trata `final`, y no un delta no vacío, como la señal de fin de mensaje. En las ejecuciones del Agent SDK y de `claude -p`, la única llamada contiene el mensaje entero |1710| `delta` | Las líneas recién completadas desde el lote anterior, incluidos los saltos de línea finales. Siempre son líneas completas, excepto el lote final, que puede terminar a mitad de línea. En las ejecuciones interactivas, el delta del lote final está vacío cuando el mensaje termina con un salto de línea, así que trata `final`, y no un delta no vacío, como la señal de fin de mensaje. En las ejecuciones del Agent SDK y `claude -p`, la única llamada contiene el mensaje completo |

1688 1711 

1689```json theme={null}1712```json theme={null}

1690{1713{


1704 Salida de MessageDisplay1727 Salida de MessageDisplay

1705</h4>1728</h4>

1706 1729 

1707Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks MessageDisplay pueden devolver `displayContent` para reemplazar el delta en la pantalla:1730Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks MessageDisplay pueden devolver `displayContent` para reemplazar el delta en pantalla:

1708 1731 

1709| Campo | Descripción |1732| Campo | Descripción |

1710| :- | :- |1733| :- | :- |

1711| `displayContent` | Texto que se muestra en lugar del delta. Omítelo para mostrar el original |1734| `displayContent` | Texto que se muestra en lugar del delta. Omítelo para mostrar el original |

1712 1735 

1713Los hooks MessageDisplay no tienen control de decisiones. No pueden bloquear el mensaje ni cambiar lo que se almacena en la transcripción o se envía a Claude. Claude Code actúa sobre `displayContent` de su salida JSON y descarta `systemMessage` y `continue`.1736Los hooks MessageDisplay no tienen control de decisiones. No pueden bloquear el mensaje ni cambiar lo que se almacena en la transcripción o se envía a Claude. Claude Code actúa sobre el `displayContent` de su salida JSON y descarta `systemMessage` y `continue`.

1714 1737 

1715Este ejemplo quita el formato markdown de las respuestas de Claude para una visualización en texto plano. El script lee cada lote desde stdin, elimina los marcadores de negrita y las comillas invertidas de código en línea de `delta`, y devuelve el resultado como `displayContent`.1738Este ejemplo quita el formato markdown de las respuestas de Claude para una visualización en texto plano. El script lee cada lote desde stdin, elimina los marcadores de negrita y los acentos graves del código en línea de `delta` y devuelve el resultado como `displayContent`.

1716 1739 

1717<Tabs>1740<Tabs>

1718 <Tab title="macOS/Linux">1741 <Tab title="macOS/Linux">


1771 }1794 }

1772 ```1795 ```

1773 1796 

1774 El flag `-NoProfile` omite la carga de tu perfil de PowerShell para que el hook inicie rápido, y `-ExecutionPolicy Bypass` permite que PowerShell ejecute el archivo de script local.1797 El flag `-NoProfile` omite la carga de tu perfil de PowerShell para que el hook se inicie rápido, y `-ExecutionPolicy Bypass` permite que PowerShell ejecute el archivo de script local.

1775 1798 

1776 Guarda este script en `.claude/hooks/plain-display.ps1` en tu proyecto:1799 Guarda este script en `.claude/hooks/plain-display.ps1` en tu proyecto:

1777 1800 


1788 </Tab>1811 </Tab>

1789</Tabs>1812</Tabs>

1790 1813 

1791Los lotes sin markdown pasan sin cambios. Si el script falla, por ejemplo porque falta `jq`, Claude Code muestra el texto original y registra el fallo solo en la [salida de depuración](#debug-hooks), no en la sesión.1814Los lotes sin markdown pasan sin cambios. Si el script falla, por ejemplo porque falta `jq`, Claude Code muestra el texto original e indica el fallo solo en la [salida de depuración](#debug-hooks), no en la sesión.

1792 1815 

1793<h3 id="pretooluse">1816<h3 id="pretooluse">

1794 PreToolUse1817 PreToolUse


1796 1819 

1797Se ejecuta después de que Claude crea los parámetros de la herramienta y antes de procesar la llamada a herramienta. Coincide con cualquier nombre de herramienta excepto `EndConversation`: herramientas integradas como `Bash`, `PowerShell`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `Workflow`, `WebFetch`, `WebSearch`, `AskUserQuestion` y `ExitPlanMode`, y cualquier [nombre de herramienta MCP](#match-mcp-tools).1820Se ejecuta después de que Claude crea los parámetros de la herramienta y antes de procesar la llamada a herramienta. Coincide con cualquier nombre de herramienta excepto `EndConversation`: herramientas integradas como `Bash`, `PowerShell`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `Workflow`, `WebFetch`, `WebSearch`, `AskUserQuestion` y `ExitPlanMode`, y cualquier [nombre de herramienta MCP](#match-mcp-tools).

1798 1821 

1799Para ejecutar un hook cuando un archivo específico cambia en el disco, sin importar qué lo escribió, usa [FileChanged](#filechanged) en lugar de hacer coincidir por nombre las herramientas de edición de archivos. A diferencia de PreToolUse, Claude Code ejecuta los hooks FileChanged después del cambio, y no tienen control de decisiones, así que no pueden bloquear la escritura.1822Para ejecutar un hook cuando un archivo concreto cambia en el disco, sin importar qué lo haya escrito, usa [FileChanged](#filechanged) en lugar de hacer coincidir por nombre las herramientas de edición de archivos. A diferencia de PreToolUse, Claude Code ejecuta los hooks FileChanged después del cambio, y no tienen control de decisiones, así que no pueden bloquear la escritura.

1800 1823 

1801<Warning>1824<Warning>

1802 PreToolUse solo se ejecuta cuando Claude llama a una herramienta. Los archivos que [referencias con `@` en tu prompt](/docs/es/common-workflows#reference-files-and-directories) se agregan sin ninguna llamada a herramienta: Claude Code inserta su contenido mientras construye el prompt, así que no se activa ningún hook PreToolUse para ellos, incluidos los hooks que coinciden con `Read`. Para bloquear rutas específicas en las referencias con `@`, usa una [regla de denegación de `Read`](/docs/es/permissions#read-and-edit) en su lugar.1825 PreToolUse solo se ejecuta cuando Claude llama a una herramienta. De forma predeterminada, los archivos que [referencias con `@` en tu prompt](/docs/es/common-workflows#reference-files-and-directories) se agregan sin ninguna llamada a herramienta. Claude Code inserta su contenido al construir el prompt, así que no se dispara ningún hook PreToolUse para ellos, incluidos los hooks que coinciden con `Read`. PreToolUse tampoco se dispara para [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior).

1826 

1827 Puedes bloquear rutas concretas de las referencias `@` o desactivar la inserción:

1803 1828 

1804 PreToolUse tampoco se activa para [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior).1829 * **Bloquear rutas concretas**: agrega una [regla de denegación de `Read`](/docs/es/permissions#read-and-edit) para ellas

1830 * **Desactivar la inserción**: establece [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/es/env-vars#variables) en tu shell, en la configuración de usuario o en la configuración administrada. Claude recibe entonces las rutas mencionadas con una nota para leerlas con sus herramientas de archivos. Si lo hace, se ejecutan tus hooks PreToolUse que coincidan. La variable requiere Claude Code v2.1.299 o posterior, y Claude Code la ignora en la configuración de proyecto y local.

1805</Warning>1831</Warning>

1806 1832 

1807Usa el [control de decisiones de PreToolUse](#pretooluse-decision-control) para permitir, denegar, preguntar o diferir la llamada a herramienta.1833Usa el [control de decisiones de PreToolUse](#pretooluse-decision-control) para permitir, denegar, preguntar o diferir la llamada a herramienta.


1816 1842 

1817Para una [herramienta MCP](#match-mcp-tools), la entrada también incluye `mcp_server`, un objeto con el `name` del servidor y un `source` que indica de dónde proviene la definición del servidor. Los valores de `source` incluyen `plugin`, `sdk` y alcances de configuración como `user` y `project`. [`McpServerProvenance`](/docs/es/agent-sdk/typescript#mcpserverprovenance) en la referencia del Agent SDK los enumera todos e indica cómo tratar uno que no reconozcas. Basa las decisiones de confianza en `source` en lugar de en `name` o en el prefijo de nombre de herramienta `mcp__<server>__`. El campo `mcp_server` requiere Claude Code v2.1.274 o posterior.1843Para una [herramienta MCP](#match-mcp-tools), la entrada también incluye `mcp_server`, un objeto con el `name` del servidor y un `source` que indica de dónde proviene la definición del servidor. Los valores de `source` incluyen `plugin`, `sdk` y alcances de configuración como `user` y `project`. [`McpServerProvenance`](/docs/es/agent-sdk/typescript#mcpserverprovenance) en la referencia del Agent SDK los enumera todos e indica cómo tratar uno que no reconozcas. Basa las decisiones de confianza en `source` en lugar de en `name` o en el prefijo de nombre de herramienta `mcp__<server>__`. El campo `mcp_server` requiere Claude Code v2.1.274 o posterior.

1818 1844 

1819Para las herramientas de archivos `Write`, `Edit` y `Read`, `tool_input.file_path` siempre es absoluta:1845Para las herramientas de archivos `Write`, `Edit` y `Read`, `tool_input.file_path` siempre es absoluto:

1820 1846 

1821* Claude Code expande `~` y las rutas relativas antes de que se ejecuten los hooks, así que un hook que hace coincidir rutas no se puede eludir mediante `~` o una forma relativa de escribir la misma ruta1847* Claude Code expande `~` y las rutas relativas antes de que se ejecuten los hooks, así que un hook que hace coincidir rutas no puede eludirse mediante `~` o una forma relativa de escribir la misma ruta

1822* En Windows, la ruta llega con separadores de barra invertida, incluso cuando tu hook se ejecuta en Git Bash, donde `$PWD` se ve como `/c/project`1848* En Windows, la ruta llega con barras invertidas como separadores, incluso cuando tu hook se ejecuta en Git Bash, donde `$PWD` tiene el aspecto de `/c/project`

1823* Una comparación escrita con barras normales, como una comprobación de `/src/`, nunca coincide con una ruta con barras invertidas, y la llamada a herramienta continúa como si el hook no tuviera nada que bloquear1849* Una comparación escrita con barras normales, como una comprobación de `/src/`, nunca coincide con una ruta con barras invertidas, y la llamada a herramienta continúa como si el hook no tuviera nada que bloquear

1824* Normaliza los separadores antes de comparar: `FILE_PATH="${FILE_PATH//\\//}"` en Bash, o `file_path.replace("\\", "/")` en Python, y luego haz coincidir un segmento de ruta como `/src/` en lugar de anclar con `^`, ya que la ruta es absoluta1850* Normaliza los separadores antes de comparar: `FILE_PATH="${FILE_PATH//\\//}"` en Bash, o `file_path.replace("\\", "/")` en Python, y luego haz coincidir un segmento de ruta como `/src/` en lugar de anclar con `^`, ya que la ruta es absoluta

1825 1851 


1854| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos. Los valores por encima del [máximo](/docs/es/tools-reference#bash-tool-behavior) se reducen al máximo en lugar de rechazarse |1880| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos. Los valores por encima del [máximo](/docs/es/tools-reference#bash-tool-behavior) se reducen al máximo en lugar de rechazarse |

1855| `run_in_background` | boolean | `false` | Si se ejecuta el comando en segundo plano |1881| `run_in_background` | boolean | `false` | Si se ejecuta el comando en segundo plano |

1856 1882 

1857Cuando un comando Bash cambia archivos en un repositorio de Git, Claude Code puede registrar lo que cambió. Registra los cambios en todos los modos de permisos cuando el ajuste [`bashEditDiffEnabled`](/docs/es/settings-reference#basheditdiffenabled) activa el registro; la entrada de ese ajuste indica qué archivos pueden establecerlo. De lo contrario, solo los registra en el modo automático y en el modo `bypassPermissions`, y solo cuando Claude Code indica a Claude que edite archivos mediante Bash. Establece `bashEditDiffEnabled` en `false` para desactivar el registro. Los comandos en segundo plano y los comandos de solo lectura no incluyen diff.1883Cuando un comando de Bash cambia archivos en un repositorio de Git, Claude Code puede registrar qué cambió. Registra los cambios en todos los modos de permisos cuando el ajuste [`bashEditDiffEnabled`](/docs/es/settings-reference#basheditdiffenabled) activa el registro; la entrada de ese ajuste indica qué archivos pueden establecerlo. De lo contrario, solo los registra en el modo automático y en el modo `bypassPermissions`, y solo cuando Claude Code indica a Claude que edite archivos mediante Bash. Establece `bashEditDiffEnabled` en `false` para desactivar el registro. Los comandos en segundo plano y los comandos de solo lectura no incluyen diff.

1858 1884 

1859Luego, tu [hook PostToolUse](#posttooluse) recibe los archivos cambiados en `tool_response.bashEditDiff`. La lista cubre lo que cambió dentro del repositorio mientras se ejecutaba el comando. Los archivos que Git ignora y los archivos en submódulos no se incluyen. Requiere Claude Code v2.1.269 o posterior.1885Tu [hook PostToolUse](#posttooluse) recibe entonces los archivos cambiados en `tool_response.bashEditDiff`. La lista abarca lo que cambió dentro del repositorio mientras se ejecutaba el comando. Los archivos que Git ignora y los archivos de submódulos no se incluyen. Requiere Claude Code v2.1.269 o posterior.

1860 1886 

1861<Note>1887<Note>

1862 La lista se genera en la medida de lo posible y está en beta pública. Claude Code puede pasar por alto un cambio, incluir un archivo que otro proceso cambió al mismo tiempo o detenerse al alcanzar sus límites de tamaño. La forma del campo puede cambiar. Usa la lista para encontrar qué revisar, no para hacer cumplir una política.1888 La lista se genera en la medida de lo posible y está en beta pública. Claude Code puede pasar por alto un cambio, incluir un archivo que otro proceso cambió al mismo tiempo o detenerse en sus límites de tamaño. La forma del campo puede cambiar. Usa la lista para encontrar qué revisar, no para aplicar una política.

1863</Note>1889</Note>

1864 1890 

1865`changedFiles` y `files` enumeran lo que cambió el comando; los demás campos indican qué tan completa y qué tan confiable es esa lista.1891`changedFiles` y `files` enumeran lo que cambió el comando; los campos restantes indican qué tan completa y qué tan fiable es esa lista.

1866 1892 

1867| Campo | Tipo | Ejemplo | Descripción |1893| Campo | Tipo | Ejemplo | Descripción |

1868| :- | :- | :- | :- |1894| :- | :- | :- | :- |

1869| `changedFiles` | array | `["/path/to/src/app.ts"]` | Rutas absolutas de los archivos que cambió el comando, como máximo 200. Presente siempre que `files` contenga un diff o `moreFiles` sea mayor que cero |1895| `changedFiles` | array | `["/path/to/src/app.ts"]` | Rutas absolutas de los archivos que cambió el comando, 200 como máximo. Presente siempre que `files` contenga un diff o `moreFiles` sea mayor que cero |

1870| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs de hasta 5 archivos cambiados, para mostrar. `created` o `deleted` es `true` para un archivo que el comando agregó o eliminó |1896| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs de hasta 5 archivos cambiados, para visualización. `created` o `deleted` es `true` para un archivo que el comando agregó o eliminó |

1871| `moreFiles` | number | `2` | Cantidad de archivos cambiados sin diff en `files` |1897| `moreFiles` | number | `2` | Cantidad de archivos cambiados sin diff en `files` |

1872| `unavailable` | boolean | `true` | Se establece cuando el diff está incompleto o no se pudo obtener |1898| `unavailable` | boolean | `true` | Se establece cuando el diff está incompleto o no se pudo obtener |

1873| `skipped` | boolean | `true` | Se establece para un comando de Git que mueve el árbol de trabajo, como `git checkout` o `git stash`, de modo que Claude Code no obtiene ningún diff |1899| `skipped` | boolean | `true` | Se establece para un comando de Git que mueve el árbol de trabajo, como `git checkout` o `git stash`, por lo que Claude Code no obtiene ningún diff |

1874| `shared` | boolean | `true` | Se establece cuando otra llamada a la herramienta Bash, como la de un subagente, se ejecutó en el mismo repositorio al mismo tiempo, de modo que algunos cambios enumerados pueden ser de ese comando |1900| `shared` | boolean | `true` | Se establece cuando otra llamada a la herramienta Bash, como la de un subagente, se ejecutó en el mismo repositorio al mismo tiempo, por lo que algunos cambios enumerados pueden ser de ese comando |

1875 1901 

1876<a id="powershell" />1902<a id="powershell" />

1877 1903 


1892 1918 

1893Usa `Bash|PowerShell` como matcher en los hooks que inspeccionan comandos de shell, para que cubran ambas herramientas:1919Usa `Bash|PowerShell` como matcher en los hooks que inspeccionan comandos de shell, para que cubran ambas herramientas:

1894 1920 

1895* En Windows, dondequiera que la herramienta PowerShell esté habilitada, Claude trata PowerShell como el shell principal y enruta los comandos de shell a través de él.1921* En Windows, siempre que la herramienta PowerShell esté habilitada, Claude trata PowerShell como el shell principal y dirige los comandos de shell a través de él.

1896* En Windows sin Git Bash, la herramienta se habilita automáticamente y Claude Code no registra la herramienta Bash en absoluto.1922* En Windows sin Git Bash, la herramienta se habilita automáticamente y Claude Code no registra la herramienta Bash en absoluto.

1897* Un hook que coincide solo con `Bash` nunca se activa ahí.1923* Un hook que coincide solo con `Bash` nunca se dispara allí.

1898 1924 

1899<h5 id="write">1925<h5 id="write">

1900 Write1926 Write


1924 Read1950 Read

1925</h5>1951</h5>

1926 1952 

1927Lee el contenido de archivos.1953Lee el contenido de un archivo.

1928 1954 

1929| Campo | Tipo | Ejemplo | Descripción |1955| Campo | Tipo | Ejemplo | Descripción |

1930| :- | :- | :- | :- |1956| :- | :- | :- | :- |

1931| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo que se leerá |1957| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo que se leerá |

1932| `offset` | number | `10` | Número de línea opcional desde el que se empieza a leer |1958| `offset` | number | `10` | Número de línea opcional desde el cual empezar a leer |

1933| `limit` | number | `50` | Número opcional de líneas que se leerán |1959| `limit` | number | `50` | Número opcional de líneas que se leerán |

1934 1960 

1935<h5 id="glob">1961<h5 id="glob">

1936 Glob1962 Glob

1937</h5>1963</h5>

1938 1964 

1939Encuentra archivos que coinciden con un patrón glob.1965Busca archivos que coincidan con un patrón glob.

1940 1966 

1941| Campo | Tipo | Ejemplo | Descripción |1967| Campo | Tipo | Ejemplo | Descripción |

1942| :- | :- | :- | :- |1968| :- | :- | :- | :- |

1943| `pattern` | string | `"**/*.ts"` | Patrón glob con el que se compararán los archivos |1969| `pattern` | string | `"**/*.ts"` | Patrón glob con el que se comparan los archivos |

1944| `path` | string | `"/path/to/dir"` | Directorio opcional en el que buscar. De forma predeterminada es el directorio de trabajo actual |1970| `path` | string | `"/path/to/dir"` | Directorio opcional donde buscar. De forma predeterminada, el directorio de trabajo actual |

1945 1971 

1946<h5 id="grep">1972<h5 id="grep">

1947 Grep1973 Grep

1948</h5>1974</h5>

1949 1975 

1950Busca en el contenido de archivos con expresiones regulares.1976Busca en el contenido de los archivos con expresiones regulares.

1951 1977 

1952| Campo | Tipo | Ejemplo | Descripción |1978| Campo | Tipo | Ejemplo | Descripción |

1953| :- | :- | :- | :- |1979| :- | :- | :- | :- |

1954| `pattern` | string | `"TODO.*fix"` | Patrón de expresión regular que se buscará |1980| `pattern` | string | `"TODO.*fix"` | Patrón de expresión regular que se buscará |

1955| `path` | string | `"/path/to/dir"` | Archivo o directorio opcional en el que buscar |1981| `path` | string | `"/path/to/dir"` | Archivo o directorio opcional donde buscar |

1956| `glob` | string | `"*.ts"` | Patrón glob opcional para filtrar archivos |1982| `glob` | string | `"*.ts"` | Patrón glob opcional para filtrar archivos |

1957| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"` o `"count"`. De forma predeterminada es `"files_with_matches"` |1983| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"` o `"count"`. De forma predeterminada, `"files_with_matches"` |

1958| `-i` | boolean | `true` | Búsqueda sin distinguir mayúsculas de minúsculas |1984| `-i` | boolean | `true` | Búsqueda sin distinguir mayúsculas de minúsculas |

1959| `multiline` | boolean | `false` | Habilita la coincidencia multilínea |1985| `multiline` | boolean | `false` | Habilita la coincidencia multilínea |

1960 1986 


1986 Agent2012 Agent

1987</h5>2013</h5>

1988 2014 

1989Inicia un [subagente](/docs/es/sub-agents).2015Genera un [subagente](/docs/es/sub-agents).

1990 2016 

1991| Campo | Tipo | Ejemplo | Descripción |2017| Campo | Tipo | Ejemplo | Descripción |

1992| :- | :- | :- | :- |2018| :- | :- | :- | :- |


1995| `subagent_type` | string | `"Explore"` | Tipo de agente especializado que se usará |2021| `subagent_type` | string | `"Explore"` | Tipo de agente especializado que se usará |

1996| `model` | string | `"sonnet"` | Alias de modelo opcional para sobrescribir el predeterminado |2022| `model` | string | `"sonnet"` | Alias de modelo opcional para sobrescribir el predeterminado |

1997 2023 

1998Cuando una llamada a Agent en primer plano termina, tu [hook PostToolUse](#posttooluse) recibe el resultado del subagente y la telemetría de la ejecución en `tool_response`. Lee estos campos para inspeccionar la ejecución; para los totales de tokens y costos de todos los subagentes, usa los [contadores de tokens y costos](/docs/es/monitoring-usage#token-counter) filtrados por `query_source` `"subagent"`, ya que `totalTokens` y `usage` cubren solo la solicitud final:2024Cuando se completa una llamada a Agent en primer plano, tu [hook PostToolUse](#posttooluse) recibe el resultado del subagente y la telemetría de la ejecución en `tool_response`. Lee estos campos para inspeccionar la ejecución; para los totales de tokens y costos entre subagentes, usa los [contadores de tokens y costos](/docs/es/monitoring-usage#token-counter) filtrados por `query_source` `"subagent"`, ya que `totalTokens` y `usage` solo cubren la solicitud final:

1999 2025 

2000| Campo | Tipo | Ejemplo | Descripción |2026| Campo | Tipo | Ejemplo | Descripción |

2001| :- | :- | :- | :- |2027| :- | :- | :- | :- |

2002| `status` | string | `"completed"` | `"completed"` para subagentes en primer plano, `"async_launched"` para subagentes en segundo plano. Los subagentes se ejecutan en segundo plano de forma predeterminada, así que una llamada a Agent que omite `run_in_background` también produce `"async_launched"` |2028| `status` | string | `"completed"` | `"completed"` para subagentes en primer plano, `"async_launched"` para subagentes en segundo plano. Los subagentes se ejecutan en segundo plano de forma predeterminada, así que una llamada a Agent que omite `run_in_background` también produce `"async_launched"` |

2003| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identificador de la ejecución del subagente |2029| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identificador de la ejecución del subagente |

2004| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Los bloques de texto finales del subagente o, en el caso de un subagente cuyo informe pasa por `SubagentHandback`, una nota breve sobre esa entrega en su lugar |2030| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Los bloques de texto finales del subagente o, en el caso de un subagente cuyo informe pasa por `SubagentHandback`, una nota breve sobre esa entrega en su lugar |

2005| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modelo con el que empezó el subagente, que puede ser distinto del modelo solicitado |2031| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modelo con el que comenzó el subagente, que puede diferir del modelo solicitado |

2006| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | Modelos usados en orden, con las repeticiones consecutivas contraídas; se establece solo cuando el modelo se cambió a mitad de la ejecución. Requiere Claude Code v2.1.212 o posterior |2032| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | Modelos usados en orden, con las repeticiones consecutivas contraídas; se establece solo cuando el modelo se cambió a mitad de la ejecución. Requiere Claude Code v2.1.212 o posterior |

2007| `totalTokens` | number | `12450` | Cantidad de tokens de la solicitud final a la API del subagente: tokens de entrada, de salida y de caché combinados. No es un total de toda la ejecución |2033| `totalTokens` | number | `12450` | Cantidad de tokens de la solicitud final a la API del subagente: tokens de entrada, de salida y de caché combinados. No es un total de toda la ejecución |

2008| `totalDurationMs` | number | `48211` | Duración en tiempo real de la ejecución del subagente |2034| `totalDurationMs` | number | `48211` | Duración en tiempo real de la ejecución del subagente |

2009| `totalToolUseCount` | number | `7` | Cantidad de llamadas a herramientas que hizo el subagente |2035| `totalToolUseCount` | number | `7` | Cantidad de llamadas a herramientas que hizo el subagente |

2010| `usage` | object | `{"input_tokens": 8320, ...}` | Desglose de tokens por tipo de la solicitud final a la API: `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens` |2036| `usage` | object | `{"input_tokens": 8320, ...}` | Desglose de tokens por tipo de la solicitud final a la API: `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens` |

2011 2037 

2012En Claude Code v2.1.271 o posterior, un subagente que se ejecuta con la herramienta [`SubagentHandback`](/docs/es/tools-reference), que Claude Code proporciona en el [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), entrega su informe mediante esa herramienta en lugar de devolverlo como texto. El campo `content` de su resultado `completed` contiene entonces una nota breve sobre esa entrega en lugar del informe mismo. Para leer el informe, haz coincidir un hook `PreToolUse` o `PostToolUse` con `SubagentHandback` y lee `tool_input.message`.2038En Claude Code v2.1.271 o posterior, un subagente que se ejecuta con la herramienta [`SubagentHandback`](/docs/es/tools-reference), que Claude Code proporciona en el [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), entrega su informe mediante esa herramienta en lugar de devolverlo como texto. El campo `content` de su resultado `completed` contiene entonces una nota breve sobre esa entrega en lugar del informe en sí. Para leer el informe, haz que un hook `PreToolUse` o `PostToolUse` coincida con `SubagentHandback` y lee `tool_input.message`.

2013 2039 

2014Para los subagentes en segundo plano, la herramienta responde cuando la tarea pasa a segundo plano, así que `tool_response` no incluye campos de uso: un inicio en segundo plano responde de inmediato, y una tarea en primer plano que Claude Code pasa a segundo plano a mitad de la ejecución responde en esa transición. Contiene `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile` y `resolvedModel`.2040Para los subagentes en segundo plano, la herramienta devuelve un resultado cuando la tarea pasa al segundo plano, así que `tool_response` no incluye campos de uso: un lanzamiento en segundo plano devuelve el resultado de inmediato, y una tarea en primer plano que Claude Code pasa al segundo plano a mitad de la ejecución lo devuelve en esa transición. Tiene `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile` y `resolvedModel`.

2015 2041 

2016En una respuesta `completed`, `resolvedModel` nombra el modelo con el que empezó el subagente, que puede ser distinto del valor `model` en `tool_input`, por ejemplo cuando se aplica `availableModels` u otra sobrescritura. En una respuesta `async_launched`, `resolvedModel` nombra el modelo en uso cuando el agente pasó a segundo plano, así que un cambio que ocurrió antes de pasar a segundo plano se refleja ahí. `modelsUsed` y el comportamiento de `resolvedModel` en el momento de pasar a segundo plano requieren Claude Code v2.1.212 o posterior.2042En una respuesta `completed`, `resolvedModel` nombra el modelo con el que comenzó el subagente, que puede diferir del valor `model` de `tool_input`, por ejemplo cuando se aplica `availableModels` u otra sobrescritura. En una respuesta `async_launched`, `resolvedModel` nombra el modelo en uso cuando el agente pasó al segundo plano, así que un cambio ocurrido antes de pasar al segundo plano se refleja allí. `modelsUsed` y el comportamiento de `resolvedModel` en el momento de pasar al segundo plano requieren Claude Code v2.1.212 o posterior.

2017 2043 

2018<a id="askuserquestion" />2044<a id="askuserquestion" />

2019 2045 


2021 AskUserQuestion2047 AskUserQuestion

2022</h5>2048</h5>

2023 2049 

2024Hace al usuario de una a cuatro preguntas de opción múltiple.2050Le hace al usuario de una a cuatro preguntas de opción múltiple.

2025 2051 

2026| Campo | Tipo | Ejemplo | Descripción |2052| Campo | Tipo | Ejemplo | Descripción |

2027| :- | :- | :- | :- |2053| :- | :- | :- | :- |

2028| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React", "description": "Component library"}, {"label": "Vue", "description": "Progressive framework"}], "multiSelect": false}]` | Preguntas que se presentarán, cada una con una cadena `question`, un `header` breve, un array `options` y un flag `multiSelect` opcional |2054| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React", "description": "Component library"}, {"label": "Vue", "description": "Progressive framework"}], "multiSelect": false}]` | Preguntas que se presentarán, cada una con una cadena `question`, un `header` breve, un array `options` y un flag `multiSelect` opcional |

2029| `answers` | object | `{"Which framework?": "React"}` | Opcional. Asigna el texto de la pregunta a la etiqueta de la opción seleccionada. Las respuestas de selección múltiple unen las etiquetas con comas. Claude no establece este campo; proporciónalo mediante `updatedInput` para responder mediante programación |2055| `answers` | object | `{"Which framework?": "React"}` | Opcional. Asigna el texto de cada pregunta a la etiqueta de la opción seleccionada. Las respuestas de selección múltiple unen las etiquetas con comas. Claude no establece este campo; proporciónalo mediante `updatedInput` para responder de forma programática |

2030 2056 

2031<h5 id="exitplanmode">2057<h5 id="exitplanmode">

2032 ExitPlanMode2058 ExitPlanMode

2033</h5>2059</h5>

2034 2060 

2035Presenta un plan y pide al usuario que lo apruebe antes de que Claude salga del [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude escribe el plan en un archivo en el disco antes de llamar a la herramienta, así que el `tool_input` literal del modelo suele estar vacío. Claude Code inyecta el contenido del plan y la ruta del archivo antes de pasar la entrada a los hooks.2061Presenta un plan y le pide al usuario que lo apruebe antes de que Claude salga del [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude escribe el plan en un archivo en el disco antes de llamar a la herramienta, así que el `tool_input` literal del modelo suele estar vacío. Claude Code inyecta el contenido del plan y la ruta del archivo antes de pasar la entrada a los hooks.

2036 2062 

2037| Campo | Tipo | Ejemplo | Descripción |2063| Campo | Tipo | Ejemplo | Descripción |

2038| :- | :- | :- | :- |2064| :- | :- | :- | :- |

2039| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenido del plan en Markdown. Se inyecta desde el archivo del plan en el disco |2065| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenido del plan en Markdown. Se inyecta desde el archivo del plan en el disco |

2040| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Ruta al archivo del plan. Se inyecta |2066| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Ruta al archivo del plan. Se inyecta |

2041| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Obsoleto. Claude Code acepta el campo pero lo ignora. Antes de la v2.1.205, contenía los permisos basados en prompts que Claude solicitaba para implementar el plan |2067| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Obsoleto. Claude Code acepta el campo pero lo ignora. Antes de la v2.1.205, contenía permisos basados en prompts que Claude solicitaba para implementar el plan |

2042 2068 

2043En `PostToolUse`, `tool_response` es un objeto con los campos `plan` y `filePath` que contienen el plan aprobado, además de flags de estado internos. Lee `tool_response.plan` para obtener el contenido del plan en lugar de volver a leer el archivo del disco.2069En `PostToolUse`, `tool_response` es un objeto con los campos `plan` y `filePath` que contienen el plan aprobado, además de flags de estado internos. Lee `tool_response.plan` para obtener el contenido del plan en lugar de volver a leer el archivo desde el disco.

2044 2070 

2045<h4 id="pretooluse-decision-control">2071<h4 id="pretooluse-decision-control">

2046 Control de decisiones de PreToolUse2072 Control de decisiones de PreToolUse

2047</h4>2073</h4>

2048 2074 

2049Los hooks `PreToolUse` pueden controlar si una llamada a herramienta continúa. A diferencia de otros hooks que usan un campo `decision` de nivel superior, PreToolUse devuelve su decisión dentro de un objeto `hookSpecificOutput`. Esto le da un control más completo: cuatro resultados (permitir, denegar, preguntar o diferir) más la capacidad de modificar la entrada de la herramienta antes de la ejecución.2075Los hooks `PreToolUse` pueden controlar si una llamada a herramienta continúa. A diferencia de otros hooks que usan un campo `decision` de nivel superior, PreToolUse devuelve su decisión dentro de un objeto `hookSpecificOutput`. Esto le da un control más completo: cuatro resultados (permitir, denegar, preguntar o diferir) y la capacidad de modificar la entrada de la herramienta antes de la ejecución.

2050 2076 

2051| Campo | Descripción |2077| Campo | Descripción |

2052| :- | :- |2078| :- | :- |

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 |2079| `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 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 independientemente de lo que devuelva el hook |

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) |2080| `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 `-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) |

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 |2081| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, 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 de Bash con la entrada que devuelve tu hook, no con la entrada que envió Claude. Combínalo con `"allow"` para aprobar automáticamente o con `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |

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) |2082| `additionalContext` | Cadena que se agrega 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) |

2057 2083 

2058Cuando varios hooks PreToolUse devuelven decisiones diferentes, la precedencia es `deny` > `defer` > `ask` > `allow`.2084Cuando varios hooks PreToolUse devuelven decisiones diferentes, la precedencia es `deny` > `defer` > `ask` > `allow`.

2059 2085 

2060Un hook que bloquea terminando con 2 se enruta igual que `"deny"`: Claude ve el mensaje de stderr como el motivo de la denegación.2086Un hook que bloquea saliendo con 2 se enruta igual que `"deny"`: Claude ve el mensaje de stderr como el motivo de la denegación.

2061 2087 

2062Cuando un hook devuelve `"ask"`, la solicitud de permiso que se muestra al usuario incluye una etiqueta que identifica de dónde proviene el hook: `[settings]` para un hook de cualquier archivo de configuración o del frontmatter de un agente, `[plugin:<name>]` para el hook de un plugin, o `[skill]` para un hook del frontmatter de un skill. Esto ayuda a los usuarios a entender qué fuente de configuración está pidiendo confirmación.2088Cuando un hook devuelve `"ask"`, la solicitud de permiso que se muestra al usuario incluye una etiqueta que identifica de dónde proviene el hook: `[settings]` para un hook de cualquier archivo de configuración o del frontmatter de un agente, `[plugin:<name>]` para el hook de un plugin o `[skill]` para un hook del frontmatter de un skill. Esto ayuda a los usuarios a entender qué fuente de configuración solicita la confirmación.

2063 2089 

2064Un `"ask"` de un hook también fuerza una solicitud de permiso en el [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode): el clasificador puede seguir denegando la llamada a herramienta, pero no puede aprobarla de forma silenciosa. Antes de la v2.1.211, el clasificador podía aprobar un comando Bash que se ejecutaba fuera del [sandbox](/docs/es/sandboxing) sin mostrar la solicitud que pedía el hook; el clasificador seguía aplicando sus propias reglas de seguridad a ese comando, y un `"deny"` de un hook siempre se respetaba.2090El `"ask"` de un hook también fuerza una solicitud de permiso en el [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode): el clasificador aún puede denegar la llamada a herramienta, pero no puede aprobarla en silencio. Antes de la v2.1.211, el clasificador podía aprobar un comando de Bash que se ejecutaba fuera del [sandbox](/docs/es/sandboxing) sin mostrar la solicitud que pedía el hook; el clasificador seguía aplicando sus propias reglas de seguridad a ese comando, y un `"deny"` de un hook siempre se respetaba.

2065 2091 

2066```json theme={null}2092```json theme={null}

2067{2093{


2078```2104```

2079 2105 

2080<Note>2106<Note>

2081 PreToolUse usaba anteriormente los campos `decision` y `reason` de nivel superior, pero están obsoletos para este evento. Usa `hookSpecificOutput.permissionDecision` y `hookSpecificOutput.permissionDecisionReason` en su lugar. Los valores obsoletos `"approve"` y `"block"` se asignan a `"allow"` y `"deny"` respectivamente. Otros eventos como PostToolUse y Stop siguen usando `decision` y `reason` de nivel superior como su formato actual.2107 PreToolUse usaba anteriormente los campos de nivel superior `decision` y `reason`, pero están obsoletos para este evento. Usa `hookSpecificOutput.permissionDecision` y `hookSpecificOutput.permissionDecisionReason` en su lugar. Los valores obsoletos `"approve"` y `"block"` se asignan a `"allow"` y `"deny"`, respectivamente. Otros eventos como PostToolUse y Stop siguen usando `decision` y `reason` de nivel superior como su formato actual.

2082</Note>2108</Note>

2083 2109 

2084<h4 id="allow-with-updatedinput">2110<h4 id="allow-with-updatedinput">


2090Un hook `PreToolUse` cumple ese requisito cuando hace lo siguiente:2116Un hook `PreToolUse` cumple ese requisito cuando hace lo siguiente:

2091 2117 

20921. Lee la entrada de la herramienta desde stdin21181. Lee la entrada de la herramienta desde stdin

20932. Recopila la respuesta mediante tu propia interfaz de usuario21192. Recopila la respuesta mediante tu propia interfaz

20943. Devuelve `permissionDecision: "allow"` junto con un `updatedInput` que contiene la respuesta, para que la herramienta se ejecute sin pedir confirmación21203. Devuelve `permissionDecision: "allow"` junto con un `updatedInput` que contiene la respuesta, para que la herramienta se ejecute sin pedir confirmación

2095 2121 

2096Devolver solo `"allow"` no es suficiente para estas herramientas.2122Devolver solo `"allow"` no es suficiente para estas herramientas.


2117}2143}

2118```2144```

2119 2145 

2120Una herramienta MCP cuyo servidor la marca con [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) es más estricta: un hook no puede omitir su solicitud de aprobación con `"allow"`, con o sin `updatedInput`, porque Claude Code no puede confirmar que el hook recopiló la interacción que necesita la herramienta.2146Una herramienta MCP cuyo servidor la marca con [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) es más estricta: un hook no puede omitir su solicitud de aprobación con `"allow"`, con o sin `updatedInput`, porque Claude Code no puede confirmar que el hook haya recopilado la interacción que necesita la herramienta.

2121 2147 

2122<h4 id="defer-a-tool-call-for-later">2148<h4 id="defer-a-tool-call-for-later">

2123 Diferir una llamada a herramienta para más tarde2149 Diferir una llamada a herramienta para más tarde

2124</h4>2150</h4>

2125 2151 

2126`"defer"` está pensado para integraciones que ejecutan `claude -p` como subproceso y leen su salida JSON, como una aplicación del Agent SDK o una interfaz de usuario personalizada construida sobre Claude Code. Permite que ese proceso que hace la llamada pause a Claude en una llamada a herramienta, recopile entrada mediante su propia interfaz y reanude donde se quedó. Claude Code respeta este valor solo en el [modo no interactivo](/docs/es/headless) con el flag `-p`. En las sesiones interactivas, registra una advertencia e ignora el resultado del hook.2152`"defer"` está pensado para integraciones que ejecutan `claude -p` como subproceso y leen su salida JSON, como una aplicación del Agent SDK o una interfaz personalizada construida sobre Claude Code. Permite que ese proceso llamador pause a Claude en una llamada a herramienta, recopile la entrada mediante su propia interfaz y reanude donde se quedó. Claude Code respeta este valor solo en el [modo no interactivo](/docs/es/headless) con el flag `-p`. En las sesiones interactivas, registra una advertencia e ignora el resultado del hook.

2127 2153 

2128La herramienta `AskUserQuestion` es el caso típico: Claude quiere preguntarle algo al usuario, pero no hay una terminal en la que responder. Una ejecución con `-p` ofrece `AskUserQuestion` solo cuando tiene un [host de permisos](/docs/es/headless#turn-off-permission-prompts-in-unattended-runs), como una herramienta MCP que pasas con `--permission-prompt-tool`, así que inicia la ejecución con uno. El ciclo completo funciona así:2154La herramienta `AskUserQuestion` es el caso típico: Claude quiere preguntarle algo al usuario, pero no hay una terminal donde responder. Una ejecución `-p` ofrece `AskUserQuestion` solo cuando tiene un [host de permisos](/docs/es/headless#turn-off-permission-prompts-in-unattended-runs), como una herramienta MCP que pasas con `--permission-prompt-tool`, así que inicia la ejecución con uno. El recorrido completo funciona así:

2129 2155 

21301. Claude llama a `AskUserQuestion`. Se activa el hook `PreToolUse`.21561. Claude llama a `AskUserQuestion`. Se dispara el hook `PreToolUse`.

21312. El hook devuelve `permissionDecision: "defer"`. La herramienta no se ejecuta. El proceso sale con `stop_reason: "tool_deferred"` y la llamada a herramienta pendiente se conserva en la transcripción.21572. El hook devuelve `permissionDecision: "defer"`. La herramienta no se ejecuta. El proceso sale con `stop_reason: "tool_deferred"` y la llamada a herramienta pendiente se conserva en la transcripción.

21323. El proceso que hace la llamada lee `deferred_tool_use` del resultado del SDK, muestra la pregunta en su propia interfaz de usuario y espera una respuesta.21583. El proceso llamador lee `deferred_tool_use` del resultado del SDK, muestra la pregunta en su propia interfaz y espera una respuesta.

21334. El proceso que hace la llamada ejecuta `claude -p --resume <session-id>` con el mismo host de permisos. La misma llamada a herramienta vuelve a activar `PreToolUse`.21594. El proceso llamador ejecuta `claude -p --resume <session-id>` con el mismo host de permisos. La misma llamada a herramienta vuelve a disparar `PreToolUse`.

21345. El hook devuelve `permissionDecision: "allow"` con la respuesta en `updatedInput`. La herramienta se ejecuta y Claude continúa.21605. El hook devuelve `permissionDecision: "allow"` con la respuesta en `updatedInput`. La herramienta se ejecuta y Claude continúa.

2135 2161 

2136El campo `deferred_tool_use` contiene el `id`, el `name` y el `input` de la herramienta. El `input` son los parámetros que Claude generó para la llamada a herramienta, capturados antes de la ejecución:2162El campo `deferred_tool_use` contiene el `id`, el `name` y el `input` de la herramienta. El `input` son los parámetros que Claude generó para la llamada a herramienta, capturados antes de la ejecución:


2149}2175}

2150```2176```

2151 2177 

2152No hay tiempo de espera ni límite de reintentos. La sesión permanece en el disco hasta que la reanudes, sujeta a la limpieza por retención de [`cleanupPeriodDays`](/docs/es/settings-reference#cleanupperioddays), que elimina los archivos de sesión después de 30 días de forma predeterminada, según las [reglas de limpieza por retención](/docs/es/claude-directory#cleaned-up-automatically). Si la respuesta no está lista cuando reanudas, el hook puede volver a devolver `"defer"` y el proceso sale de la misma manera. El proceso que hace la llamada controla cuándo romper el ciclo devolviendo finalmente `"allow"` o `"deny"` desde el hook.2178No hay tiempo de espera ni límite de reintentos. La sesión permanece en el disco hasta que la reanudes, sujeta a la limpieza de retención de [`cleanupPeriodDays`](/docs/es/settings-reference#cleanupperioddays), que elimina los archivos de sesión después de 30 días de forma predeterminada, según las [reglas de limpieza de retención](/docs/es/claude-directory#cleaned-up-automatically). Si la respuesta no está lista cuando reanudas, el hook puede devolver `"defer"` de nuevo y el proceso sale de la misma manera. El proceso llamador controla cuándo romper el ciclo devolviendo finalmente `"allow"` o `"deny"` desde el hook.

2153 2179 

2154`"defer"` solo funciona cuando Claude hace una sola llamada a herramienta en el turno. Si Claude hace varias llamadas a herramientas a la vez, `"defer"` se ignora con una advertencia y la herramienta continúa por el flujo de permisos normal. La restricción existe porque la reanudación solo puede volver a ejecutar una herramienta: no hay forma de diferir una llamada de un lote sin dejar las demás sin resolver.2180`"defer"` solo funciona cuando Claude hace una única llamada a herramienta en el turno. Si Claude hace varias llamadas a herramientas a la vez, `"defer"` se ignora con una advertencia y la herramienta continúa por el flujo de permisos normal. Esta restricción existe porque la reanudación solo puede volver a ejecutar una herramienta: no hay forma de diferir una llamada de un lote sin dejar las demás sin resolver.

2155 2181 

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.2182Si 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 dispare 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 sigue incluyendo para que puedas identificar qué herramienta falta.

2157 2183 

2158<Note>2184<Note>

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.2185 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.

2160 2186 

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).2187 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 se iniciaría una ejecución nueva 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 que se indican en [modo de permisos al reanudar](/docs/es/sessions#permission-mode-on-resume).

2162</Note>2188</Note>

2163 2189 

2164<h3 id="permissionrequest">2190<h3 id="permissionrequest">

2165 PermissionRequest2191 PermissionRequest

2166</h3>2192</h3>

2167 2193 

2168Se ejecuta cuando Claude Code está a punto de pedirte permiso para usar una herramienta. En las sesiones que no pueden mostrar una solicitud, como los subagentes en segundo plano en el [modo no interactivo](/docs/es/headless), Claude Code sigue ejecutando estos hooks y, si ningún hook devuelve una decisión, deniega la llamada a herramienta. En una llamada que llega a un `--permission-prompt-tool` o al [callback `canUseTool`](/docs/es/agent-sdk/permissions) del Agent SDK, los hooks se ejecutan junto con tu host, y se aplica el que decida primero.2194Se ejecuta cuando Claude Code está a punto de pedirte permiso para usar una herramienta. En las sesiones que no pueden mostrar una solicitud, como los subagentes en segundo plano en [modo no interactivo](/docs/es/headless), Claude Code sigue ejecutando estos hooks y, si ningún hook devuelve una decisión, deniega la llamada a herramienta. Para una llamada que llega a un `--permission-prompt-tool` o al [callback `canUseTool`](/docs/es/agent-sdk/permissions) del Agent SDK, los hooks se ejecutan junto con tu host, y se aplica lo que decida primero.

2169Usa el [control de decisiones de PermissionRequest](#permissionrequest-decision-control) para permitir o denegar en nombre del usuario.2195Usa el [control de decisiones de PermissionRequest](#permissionrequest-decision-control) para permitir o denegar en nombre del usuario.

2170 2196 

2171Usa este evento cuando necesites una señal en el momento en que Claude pide permiso para usar una herramienta. Claude Code ejecuta un hook [Notification](#notification) con el tipo `permission_prompt` solo después de que la solicitud lleva esperando unos seis segundos.2197Usa este evento cuando necesites una señal en el momento en que Claude pide permiso para usar una herramienta. Claude Code ejecuta un hook [Notification](#notification) con el tipo `permission_prompt` solo después de que la solicitud haya esperado unos seis segundos.

2172 2198 

2173Claude Code no ejecuta hooks PermissionRequest para la [solicitud de red](/docs/es/sandboxing#network-isolation) de un comando en el sandbox. Para obtener una señal de esa solicitud de permiso, usa el tipo de notificación `permission_prompt`.2199Claude Code no ejecuta hooks PermissionRequest para la [solicitud de red](/docs/es/sandboxing#network-isolation) de un comando en el sandbox. Para obtener una señal para esa solicitud, usa el tipo de notificación `permission_prompt`.

2174 2200 

2175Coincide con el nombre de la herramienta, con los mismos valores que PreToolUse.2201Coincide con el nombre de la herramienta, con los mismos valores que PreToolUse.

2176 2202 


2180 2206 

2181Los hooks PermissionRequest reciben los campos `tool_name` y `tool_input` como los hooks PreToolUse, pero sin `tool_use_id`. Para una herramienta MCP, también reciben el objeto [`mcp_server`](#pretooluse-input). Un array opcional `permission_suggestions` contiene las [actualizaciones de permisos](#permission-update-entries) que Claude Code sugiere para esta solicitud, como agregar una regla de permiso o cambiar el modo de permisos.2207Los hooks PermissionRequest reciben los campos `tool_name` y `tool_input` como los hooks PreToolUse, pero sin `tool_use_id`. Para una herramienta MCP, también reciben el objeto [`mcp_server`](#pretooluse-input). Un array opcional `permission_suggestions` contiene las [actualizaciones de permisos](#permission-update-entries) que Claude Code sugiere para esta solicitud, como agregar una regla de permiso o cambiar el modo de permisos.

2182 2208 

2183El array `permission_suggestions` no es una lista exacta de las opciones que ves, porque cada cuadro de diálogo de permisos construye sus propias opciones. Algunos cuadros de diálogo, como el de las ediciones de archivos, no leen el array en absoluto y derivan sus opciones de la propia solicitud. Un cuadro de diálogo que sí lo lee puede aun así ocultar una opción cuya sugerencia permanece en el array, por ejemplo cuando [`allowManagedPermissionRulesOnly`](/docs/es/settings-reference#allowmanagedpermissionrulesonly) oculta las opciones para guardar reglas. También puede ofrecer opciones que no tienen una entrada de sugerencia, como [**Yes, and switch to auto mode**](/docs/es/permission-modes#switch-permission-modes), que cambia el modo de permisos directamente en lugar de hacerlo mediante una actualización de permisos.2209El array `permission_suggestions` no es una lista exacta de las opciones que ves, porque cada diálogo de permisos construye sus propias opciones. Algunos diálogos, como el de ediciones de archivos, no leen el array en absoluto y derivan sus opciones de la propia solicitud. Un diálogo que sí lo lee puede aun así omitir una opción cuya sugerencia permanece en el array, por ejemplo cuando [`allowManagedPermissionRulesOnly`](/docs/es/settings-reference#allowmanagedpermissionrulesonly) oculta las opciones para guardar reglas. También puede ofrecer opciones que no tienen una entrada de sugerencia, como [**Yes, and switch to auto mode**](/docs/es/permission-modes#switch-permission-modes), que cambia el modo de permisos directamente en lugar de hacerlo mediante una actualización de permisos.

2184 2210 

2185Los hooks PreToolUse se ejecutan antes de cada llamada a herramienta, necesite permiso o no. Los hooks PermissionRequest se ejecutan solo cuando Claude Code está a punto de pedirte permiso, o cuando de otro modo denegaría automáticamente una llamada que no puede mostrar una solicitud. Ninguno de los dos eventos se activa para [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior).2211Los hooks PreToolUse se ejecutan antes de cada llamada a herramienta, necesite o no permiso. Los hooks PermissionRequest se ejecutan solo cuando Claude Code está a punto de pedirte permiso, o cuando de otro modo denegaría automáticamente una llamada que no puede mostrar una solicitud. Ninguno de los dos eventos se dispara para [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior).

2186 2212 

2187```json theme={null}2213```json theme={null}

2188{2214{


2215 2241 

2216| Campo | Descripción |2242| Campo | Descripción |

2217| :- | :- |2243| :- | :- |

2218| `behavior` | `"allow"` concede el permiso, `"deny"` lo deniega. Las [reglas de denegación y de pregunta](/docs/es/permissions#manage-permissions) se siguen evaluando, así que un hook que devuelve `"allow"` no sobrescribe una regla de denegación que coincida |2244| `behavior` | `"allow"` concede el permiso, `"deny"` lo deniega. Las [reglas deny y ask](/docs/es/permissions#manage-permissions) se siguen evaluando, por lo que un hook que devuelve `"allow"` no sobrescribe una regla deny coincidente |

2219| `updatedInput` | Solo para `"allow"`: 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. La entrada modificada se vuelve a evaluar contra las reglas de denegación y de pregunta |2245| `updatedInput` | Solo para `"allow"`: 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. La entrada modificada se vuelve a evaluar contra las reglas deny y ask |

2220| `updatedPermissions` | Solo para `"allow"`: array de [entradas de actualización de permisos](#permission-update-entries) que se aplicarán, como agregar una regla de permiso o cambiar el modo de permisos de la sesión |2246| `updatedPermissions` | Solo para `"allow"`: array de [entradas de actualización de permisos](#permission-update-entries) que se aplicarán, como agregar una regla de permiso o cambiar el modo de permisos de la sesión |

2221| `message` | Solo para `"deny"`: le indica a Claude por qué se denegó el permiso |2247| `message` | Solo para `"deny"`: le indica a Claude por qué se denegó el permiso |

2222| `interrupt` | Solo para `"deny"`: si es `true`, detiene a Claude |2248| `interrupt` | Solo para `"deny"`: si es `true`, detiene a Claude |

2223 2249 

2224Un hook que sale con 2 sin un objeto `decision` deja el flujo de permisos sin cambios, y su stderr se descarta. Para conceder o denegar la solicitud, devuelve el objeto `decision`.2250Un hook que sale con 2 sin un objeto `decision` deja sin cambios el flujo de permisos, y su stderr se descarta. Para conceder o denegar la solicitud, devuelve el objeto `decision`.

2225 2251 

2226```json theme={null}2252```json theme={null}

2227{2253{


2241 Entradas de actualización de permisos2267 Entradas de actualización de permisos

2242</h4>2268</h4>

2243 2269 

2244El campo de salida `updatedPermissions` y el [campo de entrada `permission_suggestions`](#permissionrequest-input) usan el mismo array de objetos de entrada. Cada entrada tiene un `type` que determina sus demás campos y un `destination` que controla dónde se escribe el cambio.2270El campo de salida `updatedPermissions` y el [campo de entrada `permission_suggestions`](#permissionrequest-input) usan el mismo array de objetos de entrada. Cada entrada tiene un `type` que determina sus demás campos, y un `destination` que controla dónde se escribe el cambio.

2245 2271 

2246| `type` | Campos | Efecto |2272| `type` | Campos | Efecto |

2247| :- | :- | :- |2273| :- | :- | :- |


2253| `removeDirectories` | `directories`, `destination` | Elimina directorios de trabajo |2279| `removeDirectories` | `directories`, `destination` | Elimina directorios de trabajo |

2254 2280 

2255<Note>2281<Note>

2256 `setMode` con `bypassPermissions` solo tiene efecto si iniciaste la sesión con el modo bypass ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` o `permissions.defaultMode: "bypassPermissions"` en [la configuración de usuario, `--settings` o la configuración administrada](/docs/es/settings-reference#permissions-defaultmode). De lo contrario, la actualización no tiene efecto. La actualización tampoco tiene efecto cuando [`permissions.disableBypassPermissionsMode`](/docs/es/permissions#managed-settings) desactiva el modo, o cuando la sesión se inicia en [modo restringido](/docs/es/cli-reference#cli-flags).2282 `setMode` con `bypassPermissions` solo tiene efecto si iniciaste la sesión con el modo bypass ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` o `permissions.defaultMode: "bypassPermissions"` en la [configuración de usuario, `--settings` o la configuración administrada](/docs/es/settings-reference#permissions-defaultmode). De lo contrario, la actualización no tiene efecto. La actualización tampoco tiene efecto cuando [`permissions.disableBypassPermissionsMode`](/docs/es/permissions#managed-settings) desactiva el modo, o cuando la sesión se inicia en [modo restringido](/docs/es/cli-reference#cli-flags).

2257 2283 

2258 `bypassPermissions` nunca se guarda como `defaultMode`, independientemente de `destination`.2284 `bypassPermissions` nunca se persiste como `defaultMode`, independientemente de `destination`.

2259</Note>2285</Note>

2260 2286 

2261El campo `destination` de cada entrada determina si el cambio se queda en memoria o se guarda en un archivo de configuración.2287El campo `destination` de cada entrada determina si el cambio permanece en memoria o se persiste en un archivo de configuración.

2262 2288 

2263| `destination` | Escribe en |2289| `destination` | Escribe en |

2264| :- | :- |2290| :- | :- |


2267| `projectSettings` | `.claude/settings.json` |2293| `projectSettings` | `.claude/settings.json` |

2268| `userSettings` | `~/.claude/settings.json` |2294| `userSettings` | `~/.claude/settings.json` |

2269 2295 

2270Un hook puede devolver una de las `permission_suggestions` que recibió como su propia salida `updatedPermissions`.2296Un hook puede repetir una de las `permission_suggestions` que recibió como su propia salida `updatedPermissions`.

2271 2297 

2272<h3 id="posttooluse">2298<h3 id="posttooluse">

2273 PostToolUse2299 PostToolUse


2275 2301 

2276Se ejecuta inmediatamente después de que una herramienta se completa correctamente.2302Se ejecuta inmediatamente después de que una herramienta se completa correctamente.

2277 2303 

2278Hace coincidencia por nombre de herramienta, con los mismos valores que PreToolUse.2304Coincide con el nombre de la herramienta, con los mismos valores que PreToolUse.

2279 2305 

2280Haz coincidencias más amplias cuando el nombre de la herramienta no sea el filtro adecuado:2306Usa una coincidencia más amplia cuando el nombre de la herramienta no sea el filtro adecuado:

2281 2307 

2282* Para ejecutar un hook después de que cualquier herramienta se complete correctamente, omite el `matcher` o establécelo en `"*"`. Así, tu hook puede descubrir por sí mismo qué cambió, por ejemplo ejecutando `git status --porcelain`, que también lista los archivos sin seguimiento que `git diff` pasa por alto. Para las llamadas a herramientas que fallan, agrega el mismo hook en [PostToolUseFailure](#posttoolusefailure).2308* Para ejecutar un hook después de que cualquier herramienta se complete correctamente, omite el `matcher` o establécelo en `"*"`. Así, tu hook puede descubrir por sí mismo qué cambió, por ejemplo ejecutando `git status --porcelain`, que también enumera los archivos sin seguimiento que `git diff` pasa por alto. Para las llamadas a herramientas que fallan, agrega el mismo hook en [PostToolUseFailure](#posttoolusefailure).

2283* Para ejecutar un hook cuando un archivo específico cambia en el disco, sin importar qué lo escribió, usa [FileChanged](#filechanged). Claude Code no ejecuta un hook `PostToolUse` que coincida con `Edit|Write` cuando un comando `Bash` o un proceso fuera de Claude Code reescribe el mismo archivo.2309* Para ejecutar un hook cuando un archivo específico cambia en el disco, sin importar qué lo escribió, usa [FileChanged](#filechanged). Claude Code no ejecuta un hook `PostToolUse` que coincida con `Edit|Write` cuando un comando `Bash` o un proceso externo a Claude Code reescribe el mismo archivo.

2284 2310 

2285<h4 id="posttooluse-input">2311<h4 id="posttooluse-input">

2286 Entrada de PostToolUse2312 Entrada de PostToolUse

2287</h4>2313</h4>

2288 2314 

2289Los hooks `PostToolUse` se activan después de que una herramienta ya se ejecutó correctamente. La entrada incluye tanto `tool_input`, los argumentos enviados a la herramienta, como `tool_response`, el resultado que devolvió. El esquema exacto de ambos depende de la herramienta. Las rutas de `tool_input` de las herramientas de archivos llegan en el mismo formato que para [PreToolUse](#pretooluse-input): siempre absolutas, con los separadores nativos de la plataforma, es decir, barras invertidas en Windows. Para una herramienta MCP, la entrada también incluye el objeto [`mcp_server`](#pretooluse-input).2315Los hooks `PostToolUse` se disparan después de que una herramienta ya se ejecutó correctamente. La entrada incluye tanto `tool_input`, los argumentos enviados a la herramienta, como `tool_response`, el resultado que devolvió. El esquema exacto de ambos depende de la herramienta. Las rutas de `tool_input` de las herramientas de archivos llegan en el mismo formato que para [PreToolUse](#pretooluse-input): siempre absolutas, con los separadores nativos de la plataforma, es decir, barras invertidas en Windows. Para una herramienta MCP, la entrada también incluye el objeto [`mcp_server`](#pretooluse-input).

2290 2316 

2291```json theme={null}2317```json theme={null}

2292{2318{


2311 2337 

2312| Campo | Descripción |2338| Campo | Descripción |

2313| :- | :- |2339| :- | :- |

2314| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a solicitudes de permiso y a hooks PreToolUse |2340| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a las solicitudes de permiso y a los hooks PreToolUse |

2315 2341 

2316<h4 id="posttooluse-decision-control">2342<h4 id="posttooluse-decision-control">

2317 Control de decisiones de PostToolUse2343 Control de decisiones de PostToolUse


2324| `decision` | `"block"` agrega el `reason` junto al resultado de la herramienta. Claude sigue viendo la salida original; para reemplazarla, usa `updatedToolOutput` |2350| `decision` | `"block"` agrega el `reason` junto al resultado de la herramienta. Claude sigue viendo la salida original; para reemplazarla, usa `updatedToolOutput` |

2325| `reason` | Explicación que se muestra a Claude cuando `decision` es `"block"` |2351| `reason` | Explicación que se muestra a Claude cuando `decision` es `"block"` |

2326| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el resultado de la herramienta. Consulta [Agregar contexto para Claude](#add-context-for-claude) |2352| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el resultado de la herramienta. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

2327| `classifierContext` | Nota breve sobre el resultado de esta llamada destinada al clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) y no a Claude. Consulta [Anotar un resultado para el clasificador del modo automático](#annotate-a-result-for-the-auto-mode-classifier). Requiere Claude Code v2.1.236 o posterior |2353| `classifierContext` | Nota breve sobre el resultado de esta llamada destinada al clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en lugar de a Claude. Consulta [Anotar un resultado para el clasificador del modo automático](#annotate-a-result-for-the-auto-mode-classifier). Requiere Claude Code v2.1.236 o posterior |

2328| `updatedToolOutput` | Reemplaza la salida de la herramienta con el valor proporcionado antes de enviarla a Claude. El valor debe coincidir con la forma de salida de la herramienta |2354| `updatedToolOutput` | Reemplaza la salida de la herramienta con el valor proporcionado antes de enviarla a Claude. El valor debe coincidir con la forma de la salida de la herramienta |

2329| `updatedMCPToolOutput` | Reemplaza la salida solo para [herramientas MCP](#match-mcp-tools). Es preferible usar `updatedToolOutput`, que funciona para todas las herramientas |2355| `updatedMCPToolOutput` | Reemplaza la salida solo para [herramientas MCP](#match-mcp-tools). Prefiere `updatedToolOutput`, que funciona para todas las herramientas |

2330 2356 

2331El siguiente ejemplo reemplaza la salida de una llamada a `Bash`. El valor de reemplazo coincide con la forma de salida de la herramienta `Bash`:2357El siguiente ejemplo reemplaza la salida de una llamada a `Bash`. El valor de reemplazo coincide con la forma de la salida de la herramienta `Bash`:

2332 2358 

2333```json theme={null}2359```json theme={null}

2334{2360{


2346```2372```

2347 2373 

2348<Warning>2374<Warning>

2349 `updatedToolOutput` solo cambia lo que Claude ve. La herramienta ya se ejecutó cuando se activa el hook, por lo que cualquier archivo escrito, comando ejecutado o solicitud de red enviada ya tuvo efecto. La telemetría, como los spans de herramientas de OpenTelemetry y los eventos de analítica, también captura la salida original antes de que se ejecute el hook. Para impedir o modificar una llamada a herramienta antes de que se ejecute, usa en su lugar un hook [PreToolUse](#pretooluse).2375 `updatedToolOutput` solo cambia lo que ve Claude. La herramienta ya se ejecutó cuando se dispara el hook, por lo que cualquier archivo escrito, comando ejecutado o solicitud de red enviada ya tuvo efecto. La telemetría, como los spans de herramientas de OpenTelemetry y los eventos de analítica, también captura la salida original antes de que se ejecute el hook. Para impedir o modificar una llamada a herramienta antes de que se ejecute, usa en su lugar un hook [PreToolUse](#pretooluse).

2350 2376 

2351 El valor de reemplazo debe coincidir con la forma de salida de la herramienta. Las herramientas integradas devuelven objetos estructurados en lugar de cadenas simples. Por ejemplo, `Bash` devuelve un objeto con los campos `stdout`, `stderr`, `interrupted` e `isImage`. Para las herramientas integradas, un valor que no coincide con el esquema de salida de la herramienta se ignora y se usa la salida original. La salida de las herramientas MCP se transmite sin validación de esquema. Eliminar detalles de error que Claude necesita puede hacer que continúe basándose en una suposición falsa.2377 El valor de reemplazo debe coincidir con la forma de la salida de la herramienta. Las herramientas integradas devuelven objetos estructurados en lugar de cadenas simples. Por ejemplo, `Bash` devuelve un objeto con los campos `stdout`, `stderr`, `interrupted` e `isImage`. Para las herramientas integradas, un valor que no coincide con el esquema de salida de la herramienta se ignora y se usa la salida original. La salida de las herramientas MCP se transmite sin validación de esquema. Eliminar detalles de error que Claude necesita puede hacer que proceda con una suposición falsa.

2352</Warning>2378</Warning>

2353 2379 

2354<h4 id="annotate-a-result-for-the-auto-mode-classifier">2380<h4 id="annotate-a-result-for-the-auto-mode-classifier">

2355 Anotar un resultado para el clasificador del modo automático2381 Anotar un resultado para el clasificador del modo automático

2356</h4>2382</h4>

2357 2383 

2358Devuelve `classifierContext` para enviar una nota breve sobre el resultado de la llamada a herramienta al clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en lugar de a Claude. El clasificador [nunca recibe los resultados de las herramientas en sí](/docs/es/permission-modes#how-the-classifier-evaluates-actions), así que este campo es la forma admitida de indicarle algo sobre lo que devolvió una llamada antes de que revise acciones posteriores. El campo requiere Claude Code v2.1.236 o posterior.2384Devuelve `classifierContext` para enviar una nota breve sobre el resultado de la llamada a herramienta al clasificador del [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en lugar de a Claude. El clasificador [nunca recibe los resultados de las herramientas en sí](/docs/es/permission-modes#how-the-classifier-evaluates-actions), por lo que este campo es la forma admitida de indicarle algo sobre lo que devolvió una llamada antes de que revise acciones posteriores. El campo requiere Claude Code v2.1.236 o posterior.

2359 2385 

2360El siguiente ejemplo le indica al clasificador de dónde provino la salida de una consulta:2386El siguiente ejemplo le indica al clasificador de dónde provino la salida de una consulta:

2361 2387 


2370 2396 

2371El peso que el clasificador le da a la nota depende de dónde configuraste el hook:2397El peso que el clasificador le da a la nota depende de dónde configuraste el hook:

2372 2398 

2373* **Hooks configurados en Claude Code**: para los hooks de archivos de configuración, plugins, skills y frontmatter de agentes, el clasificador trata la nota como contexto no verificado proporcionado por la aplicación. La nota nunca establece la intención del usuario, y si afirma que aprobaste o solicitaste algo, el clasificador verifica esa afirmación contra tus propios mensajes en la conversación2399* **Hooks configurados en Claude Code**: para los hooks de archivos de configuración, plugins, skills y frontmatter de agentes, el clasificador trata la nota como contexto no verificado proporcionado por la aplicación. La nota nunca establece la intención del usuario, y si afirma que aprobaste o solicitaste algo, el clasificador contrasta esa afirmación con tus propios mensajes en la conversación

2374* **Callbacks en proceso del Agent SDK**: cuando una aplicación que integra Claude Code registra el hook como un [callback del SDK de TypeScript](/docs/es/agent-sdk/hooks) y devuelve la nota durante la sesión activa, el clasificador puede considerar como intención del usuario una declaración del usuario transmitida en la nota. Dicha declaración puede satisfacer un requisito de consentimiento que el clasificador aceptaría de un mensaje que tú envías, pero nunca levanta un bloqueo que tu propio mensaje tampoco podría levantar. Después de que una sesión se reanuda, Claude Code trata las notas restauradas como contexto no verificado. Cuando hooks de ambos grupos anotan la misma llamada, el clasificador trata la nota combinada como no verificada2400* **Callbacks en proceso del Agent SDK**: cuando una aplicación que integra Claude Code registra el hook como un [callback del SDK de TypeScript](/docs/es/agent-sdk/hooks) y devuelve la nota durante la sesión en vivo, el clasificador puede considerar como intención del usuario una declaración del usuario transmitida en la nota. Dicha declaración puede satisfacer un requisito de consentimiento que el clasificador aceptaría de un mensaje que tú envías, pero nunca levanta un bloqueo que tu propio mensaje tampoco podría levantar. Después de que se reanuda una sesión, Claude Code trata las notas restauradas como contexto no verificado. Cuando hooks de ambos grupos anotan la misma llamada, el clasificador trata la nota combinada como no verificada

2375 2401 

2376Claude Code aplica estos límites al entregar la nota:2402Claude Code aplica estos límites al entregar la nota:

2377 2403 

2378* **Longitud**: Claude Code limita las notas de una llamada a herramienta a 2,000 caracteres y trunca el resto. El límite se comparte entre todos los hooks que responden a esa llamada2404* **Longitud**: Claude Code limita las notas de una llamada a herramienta a 2,000 caracteres y trunca el resto. El límite se comparte entre todos los hooks que responden a esa llamada

2379* **Solo respuestas síncronas**: Claude Code ignora el campo en la respuesta de un hook que [se ejecuta en segundo plano](#run-hooks-in-the-background), porque esa respuesta llega después de que Claude Code registra el resultado de la herramienta2405* **Solo respuestas síncronas**: Claude Code ignora el campo en la respuesta de un hook que [se ejecuta en segundo plano](#run-hooks-in-the-background), porque esa respuesta llega después de que Claude Code registra el resultado de la herramienta

2380* **Llamadas que el clasificador no registra**: la transcripción del clasificador omite las consultas de solo lectura, como lecturas de archivos y búsquedas. Claude Code descarta una nota adjunta a una de esas llamadas2406* **Llamadas que el clasificador no registra**: la transcripción del clasificador omite las consultas de solo lectura, como las lecturas de archivos y las búsquedas. Claude Code descarta una nota adjunta a una de esas llamadas

2381* **Interacción con reescrituras**: cuando la nota describe una salida que estás reemplazando con `updatedToolOutput`, devuelve ambos campos en la misma respuesta del hook. Claude Code descarta la nota si esa reescritura se rechaza o si la reescritura de otro hook la reemplaza. Claude Code entrega una nota que devuelves sin una reescritura incluso cuando otro hook reescribe la salida2407* **Interacción con reescrituras**: cuando la nota describe una salida que estás reemplazando con `updatedToolOutput`, devuelve ambos campos en la misma respuesta del hook. Claude Code descarta la nota si esa reescritura se rechaza o si la reescritura de otro hook la reemplaza. Claude Code entrega una nota que devuelves sin una reescritura incluso cuando otro hook reescribe la salida

2382 2408 

2383<Warning>2409<Warning>

2384 El clasificador lee el contenido que colocas en `classifierContext` como información de la aplicación que aloja la sesión, así que no copies en él salidas de herramientas no confiables ni texto de terceros. Limita la nota a una afirmación breve sobre esta única llamada, como un dato sobre su origen o una declaración del usuario al respecto; no uses el campo para entregar mensajes no relacionados ni un flujo de eventos.2410 El clasificador lee el contenido que colocas en `classifierContext` como información de la aplicación que aloja la sesión, así que no copies en él salida de herramientas no confiable ni texto de terceros. Limita la nota a una afirmación breve sobre esta única llamada, como un hecho sobre su origen o una declaración del usuario al respecto; no uses el campo para entregar mensajes no relacionados ni un flujo de eventos.

2385</Warning>2411</Warning>

2386 2412 

2387<h3 id="posttoolusefailure">2413<h3 id="posttoolusefailure">


2390 2416 

2391Se ejecuta cuando falla una herramienta que comenzó a ejecutarse: la herramienta lanzó un error o una herramienta MCP devolvió un resultado de error. Úsalo para registrar fallos, enviar alertas o proporcionar retroalimentación correctiva a Claude.2417Se ejecuta cuando falla una herramienta que comenzó a ejecutarse: la herramienta lanzó un error o una herramienta MCP devolvió un resultado de error. Úsalo para registrar fallos, enviar alertas o proporcionar retroalimentación correctiva a Claude.

2392 2418 

2393Hace coincidencia por nombre de herramienta, con los mismos valores que PreToolUse.2419Coincide con el nombre de la herramienta, con los mismos valores que PreToolUse.

2394 2420 

2395<Note>2421<Note>

2396 Este evento no se activa para las llamadas a herramientas rechazadas antes de la ejecución: un nombre de herramienta desconocido, una entrada que no supera la validación del esquema o la validación específica de la herramienta, o una denegación de permiso. Los rechazos por validación se devuelven como resultados `tool_use_error` y ocurren antes de que se ejecuten los hooks, por lo que no activan ni `PreToolUse` ni `PostToolUseFailure`. Las denegaciones de permiso activan `PreToolUse` pero no este evento; consulta [PermissionDenied](#permissiondenied).2422 Este evento no se dispara para llamadas a herramientas rechazadas antes de la ejecución: un nombre de herramienta desconocido, una entrada que no supera la validación del esquema o la validación específica de la herramienta, o una denegación de permiso. Los rechazos de validación se devuelven como resultados `tool_use_error` y ocurren antes de que se ejecuten los hooks, por lo que no disparan ni `PreToolUse` ni `PostToolUseFailure`. Las denegaciones de permiso disparan `PreToolUse` pero no este evento; consulta [PermissionDenied](#permissiondenied).

2397</Note>2423</Note>

2398 2424 

2399<h4 id="posttoolusefailure-input">2425<h4 id="posttoolusefailure-input">


2424| Campo | Descripción |2450| Campo | Descripción |

2425| :- | :- |2451| :- | :- |

2426| `error` | Cadena que describe qué salió mal. El formato depende de la herramienta que falló |2452| `error` | Cadena que describe qué salió mal. El formato depende de la herramienta que falló |

2427| `is_interrupt` | Booleano opcional. Es true cuando el fallo llegó a Claude Code como una cancelación y no como un error informado por la herramienta. Cancelar una herramienta en ejecución no activa este hook; en su lugar, el resultado de la herramienta incluye el mensaje de interrupción |2453| `is_interrupt` | Booleano opcional. Es true cuando el fallo llegó a Claude Code como una interrupción en lugar de como un error reportado por la herramienta. Cancelar una herramienta en ejecución no dispara este hook; en su lugar, el resultado de la herramienta contiene el mensaje de interrupción |

2428| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a solicitudes de permiso y a hooks PreToolUse |2454| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a las solicitudes de permiso y a los hooks PreToolUse |

2429 2455 

2430La cadena `error` suele ser el mismo texto que Claude recibe como resultado de la herramienta fallida. Su formato varía según la herramienta y el fallo. Basa tu hook en `tool_name`, `is_interrupt` y la primera línea `Exit code N`; trata el resto de la cadena como texto para mostrar, no como un formato estable.2456La cadena `error` suele ser el mismo texto que Claude recibe como resultado de la herramienta fallida. Su formato varía según la herramienta y el fallo. Basa tu hook en `tool_name`, `is_interrupt` y la primera línea `Exit code N`; trata el resto de la cadena como texto para mostrar, no como un formato estable.

2431 2457 

2432* Para Bash y PowerShell, un comando que se ejecutó y terminó produce una primera línea `Exit code N`, seguida de cualquier salida que haya producido el comando como un solo bloque con stdout y stderr intercalados2458* Para Bash y PowerShell, un comando que se ejecutó y terminó produce una primera línea `Exit code N`, seguida de cualquier salida que haya producido el comando como un único bloque con stdout y stderr intercalados

2433* Un payload también puede contener un mensaje de fallo simple sin línea de código de salida, cuando Claude Code no pudo iniciar el proceso del shell en sí2459* Un payload también puede contener un mensaje de fallo simple sin línea de código de salida, cuando Claude Code no pudo iniciar el proceso del shell en sí

2434* Claude Code trunca por la mitad las cadenas largas alrededor de un marcador `... [N characters truncated] ...` y puede insertar líneas propias, como `Command timed out after 2m 0s`2460* Claude Code trunca por la mitad las cadenas largas alrededor de un marcador `... [N characters truncated] ...`, y puede insertar líneas propias, como `Command timed out after 2m 0s`

2435 2461 

2436<h4 id="posttoolusefailure-decision-control">2462<h4 id="posttoolusefailure-decision-control">

2437 Control de decisiones de PostToolUseFailure2463 Control de decisiones de PostToolUseFailure

2438</h4>2464</h4>

2439 2465 

2440Los hooks `PostToolUseFailure` pueden proporcionar contexto a Claude después de un fallo de herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, tu script de hook puede devolver estos campos específicos del evento:2466Los hooks `PostToolUseFailure` pueden proporcionar contexto a Claude después de un fallo de una herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, tu script de hook puede devolver estos campos específicos del evento:

2441 2467 

2442| Campo | Descripción |2468| Campo | Descripción |

2443| :- | :- |2469| :- | :- |


2456 PostToolBatch2482 PostToolBatch

2457</h3>2483</h3>

2458 2484 

2459Se ejecuta una vez después de que se resuelven todas las llamadas a herramientas de un lote, antes de que Claude Code envíe la siguiente solicitud al modelo. `PostToolUse` se activa una vez por herramienta, lo que significa que se activa de forma concurrente cuando Claude hace llamadas a herramientas en paralelo. `PostToolBatch` se activa exactamente una vez con el lote completo, por lo que es el lugar adecuado para inyectar contexto que depende del conjunto de herramientas que se ejecutaron y no de una sola herramienta. No hay matcher para este evento.2485Se ejecuta una vez después de que se haya resuelto cada llamada a herramienta de un lote, antes de que Claude Code envíe la siguiente solicitud al modelo. `PostToolUse` se dispara una vez por herramienta, lo que significa que se dispara de forma concurrente cuando Claude hace llamadas a herramientas en paralelo. `PostToolBatch` se dispara exactamente una vez con el lote completo, por lo que es el lugar adecuado para inyectar contexto que depende del conjunto de herramientas que se ejecutaron y no de una sola herramienta. No hay matcher para este evento.

2460 2486 

2461<h4 id="posttoolbatch-input">2487<h4 id="posttoolbatch-input">

2462 Entrada de PostToolBatch2488 Entrada de PostToolBatch


2488}2514}

2489```2515```

2490 2516 

2491`tool_response` contiene el mismo contenido que el modelo recibe en el bloque `tool_result` correspondiente. El valor es una cadena serializada o un array de bloques de contenido, exactamente como lo emitió la herramienta. Para `Read`, eso significa texto con prefijo de número de línea en lugar del contenido sin procesar del archivo. Las respuestas pueden ser grandes, así que analiza solo los campos que necesites.2517`tool_response` contiene el mismo contenido que el modelo recibe en el bloque `tool_result` correspondiente. El valor es una cadena serializada o un array de bloques de contenido, exactamente como lo emitió la herramienta. Para `Read`, eso significa texto con números de línea como prefijo en lugar del contenido sin procesar del archivo. Las respuestas pueden ser grandes, así que analiza solo los campos que necesites.

2492 2518 

2493<Note>2519<Note>

2494 La forma de `tool_response` difiere de la de `PostToolUse`. `PostToolUse` pasa el objeto `Output` estructurado de la herramienta, como `{filePath: "...", type: "create"}` para `Write`; `PostToolBatch` pasa el contenido serializado de `tool_result` que ve el modelo.2520 La forma de `tool_response` es distinta de la de `PostToolUse`. `PostToolUse` pasa el objeto `Output` estructurado de la herramienta, como `{filePath: "...", type: "create"}` para `Write`; `PostToolBatch` pasa el contenido serializado de `tool_result` que ve el modelo.

2495</Note>2521</Note>

2496 2522 

2497<h4 id="posttoolbatch-decision-control">2523<h4 id="posttoolbatch-decision-control">


2502 2528 

2503| Campo | Descripción |2529| Campo | Descripción |

2504| :- | :- |2530| :- | :- |

2505| `additionalContext` | Cadena de contexto que se inyecta una vez antes de la siguiente llamada al modelo. Consulta [Agregar contexto para Claude](#add-context-for-claude) para ver detalles de entrega, qué incluir y cómo las sesiones reanudadas manejan los valores anteriores |2531| `additionalContext` | Cadena de contexto que se inyecta una vez antes de la siguiente llamada al modelo. Consulta [Agregar contexto para Claude](#add-context-for-claude) para conocer los detalles de entrega, qué incluir y cómo las sesiones reanudadas manejan los valores anteriores |

2506 2532 

2507```json theme={null}2533```json theme={null}

2508{2534{


2513}2539}

2514```2540```

2515 2541 

2516Devolver `decision: "block"` o `continue: false` detiene el bucle agéntico antes de la siguiente llamada al modelo. El mensaje de bloqueo proviene del `reason` o `stopReason` del JSON, o de stderr con el código de salida 2. Lo ves como una advertencia en la transcripción, y permanece en la conversación, por lo que Claude lo ve cuando la conversación continúa.2542Devolver `decision: "block"` o `continue: false` detiene el bucle agéntico antes de la siguiente llamada al modelo. El mensaje de bloqueo proviene del `reason` o `stopReason` del JSON, o de stderr al salir con 2. Lo ves como una advertencia en la transcripción, y permanece en la conversación, así que Claude lo ve cuando la conversación continúa.

2517 2543 

2518<h3 id="permissiondenied">2544<h3 id="permissiondenied">

2519 PermissionDenied2545 PermissionDenied

2520</h3>2546</h3>

2521 2547 

2522Se ejecuta cuando el [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) deniega una llamada a herramienta, incluso cuando la deniega sin un veredicto del clasificador porque [una verificación de seguridad independiente del modo automático rechazó la propia solicitud del clasificador](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action) o su respuesta no se pudo analizar. Este hook solo se activa en modo automático: no se ejecuta cuando deniegas manualmente un diálogo de permisos, cuando un hook `PreToolUse` bloquea una llamada ni cuando coincide una regla `deny`. Úsalo para registrar denegaciones, ajustar la configuración o indicarle al modelo que puede reintentar la llamada a herramienta.2548Se ejecuta cuando el [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) deniega una llamada a herramienta, incluso cuando la deniega sin un veredicto del clasificador porque [una verificación de seguridad independiente del modo automático rechazó la propia solicitud del clasificador](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action) o porque su respuesta no se pudo analizar. Este hook solo se dispara en el modo automático: no se ejecuta cuando deniegas manualmente un diálogo de permisos, cuando un hook `PreToolUse` bloquea una llamada o cuando coincide una regla `deny`. Úsalo para registrar denegaciones, ajustar la configuración o indicarle al modelo que puede reintentar la llamada a herramienta.

2523 2549 

2524Hace coincidencia por nombre de herramienta, con los mismos valores que PreToolUse.2550Coincide con el nombre de la herramienta, con los mismos valores que PreToolUse.

2525 2551 

2526<h4 id="permissiondenied-input">2552<h4 id="permissiondenied-input">

2527 Entrada de PermissionDenied2553 Entrada de PermissionDenied


2548 2574 

2549| Campo | Descripción |2575| Campo | Descripción |

2550| :- | :- |2576| :- | :- |

2551| `reason` | El motivo de la denegación. Para un veredicto del clasificador, en la mayoría de las sesiones nombra la regla coincidente entre corchetes, como `[Data Exfiltration]`; consulta [Revisar denegaciones](/docs/es/auto-mode-config#review-denials) para ver las demás formas. Para una [denegación sin veredicto](#permissiondenied-decision-control), comienza con `Auto mode could not evaluate this action and is blocking it for safety`. Para una denegación porque el modelo del clasificador no estaba disponible, es el texto fijo `Classifier unavailable` |2577| `reason` | El motivo de la denegación. Para un veredicto del clasificador, en la mayoría de las sesiones nombra la regla coincidente entre corchetes, como `[Data Exfiltration]`; consulta [Revisar denegaciones](/docs/es/auto-mode-config#review-denials) para conocer las otras formas. Para una [denegación sin veredicto](#permissiondenied-decision-control), comienza con `Auto mode could not evaluate this action and is blocking it for safety`. Para una denegación porque el modelo del clasificador no estaba disponible, es el texto fijo `Classifier unavailable` |

2552 2578 

2553<h4 id="permissiondenied-decision-control">2579<h4 id="permissiondenied-decision-control">

2554 Control de decisiones de PermissionDenied2580 Control de decisiones de PermissionDenied


2567 2593 

2568Cuando `retry` es `true`, Claude Code agrega un mensaje a la conversación que le indica al modelo que puede reintentar la llamada a herramienta. Claude Code no revierte la denegación en sí. Si tu hook no devuelve JSON, o devuelve `retry: false`, la denegación se mantiene y el modelo recibe el mensaje de rechazo original.2594Cuando `retry` es `true`, Claude Code agrega un mensaje a la conversación que le indica al modelo que puede reintentar la llamada a herramienta. Claude Code no revierte la denegación en sí. Si tu hook no devuelve JSON, o devuelve `retry: false`, la denegación se mantiene y el modelo recibe el mensaje de rechazo original.

2569 2595 

2570Claude Code ignora `retry: true` cuando el clasificador no produjo [ningún veredicto sobre la acción](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action): su respuesta no se pudo analizar, o una verificación de seguridad independiente del modo automático rechazó la propia solicitud del clasificador. Para esas denegaciones, Claude Code ya le indica al modelo en el mensaje de rechazo si debe reintentar más tarde o continuar con otra cosa.2596Claude Code ignora `retry: true` cuando el clasificador no produjo [ningún veredicto sobre la acción](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action): su respuesta no se pudo analizar, o una verificación de seguridad independiente del modo automático rechazó la propia solicitud del clasificador. Para esas denegaciones, Claude Code ya le indica al modelo en el mensaje de rechazo si debe reintentar más tarde o seguir adelante.

2571 2597 

2572<h3 id="notification">2598<h3 id="notification">

2573 Notification2599 Notification

2574</h3>2600</h3>

2575 2601 

2576Se ejecuta cuando Claude Code envía notificaciones. Hace coincidencia por tipo de notificación. Omite el matcher para ejecutar hooks para todos los tipos de notificación.2602Se ejecuta cuando Claude Code envía notificaciones. Coincide con el tipo de notificación. Omite el matcher para ejecutar hooks para todos los tipos de notificación.

2577 2603 

2578Recibes estos eventos de hook incluso con las notificaciones de escritorio desactivadas: el ajuste `preferredNotifChannel`, incluido `notifications_disabled`, solo cambia cómo se te avisa, no si tu hook se ejecuta.2604Recibes estos eventos de hook incluso con las notificaciones de escritorio desactivadas: el ajuste `preferredNotifChannel`, incluido `notifications_disabled`, solo cambia cómo se te alerta, no si tu hook se ejecuta.

2579 2605 

2580| Matcher | Cuándo se activa |2606| Matcher | Cuándo se dispara |

2581| :- | :- |2607| :- | :- |

2582| `permission_prompt` | Claude necesita que apruebes el uso de una herramienta o la [solicitud de red](/docs/es/sandboxing#network-isolation) de un comando en el sandbox, y la solicitud lleva unos seis segundos esperando |2608| `permission_prompt` | Claude necesita que apruebes el uso de una herramienta o la [solicitud de red](/docs/es/sandboxing#network-isolation) de un comando en el sandbox, y la solicitud lleva esperando unos seis segundos |

2583| `idle_prompt` | Claude terminó de responder hace unos 60 segundos y no has escrito nada desde entonces |2609| `idle_prompt` | Claude terminó de responder hace unos 60 segundos y no has escrito nada desde entonces |

2584| `auth_success` | Se completa la autenticación |2610| `auth_success` | Se completa la autenticación |

2585| `elicitation_dialog` | Un servidor MCP abre un formulario de elicitación y no has escrito durante unos seis segundos |2611| `elicitation_dialog` | Un servidor MCP abre un formulario de elicitación y no has escrito nada durante unos seis segundos |

2586| `elicitation_url_dialog` | Un servidor MCP te pide abrir una URL en el navegador y no has escrito durante unos seis segundos |2612| `elicitation_url_dialog` | Un servidor MCP te pide que abras una URL en el navegador y no has escrito nada durante unos seis segundos |

2587| `elicitation_complete` | Un servidor MCP informa que una [elicitación en modo URL](#elicitation-input) se completó |2613| `elicitation_complete` | Un servidor MCP informa que una [elicitación en modo URL](#elicitation-input) se completó |

2588| `elicitation_response` | Se envía una respuesta de elicitación MCP de vuelta al servidor |2614| `elicitation_response` | Se envía una respuesta de elicitación MCP de vuelta al servidor |

2589| `agent_needs_input` | Una sesión en segundo plano empieza a esperar tu entrada mientras la [vista de agentes](/docs/es/agent-view) está abierta en una terminal. También se activa cuando una sesión de terminal te muestra la [pregunta de configuración de terminal de un compañero de un equipo de agentes](/docs/es/agent-teams#choose-a-display-mode) o el aviso del modo automático sobre los [cargos por solicitudes del clasificador](/docs/es/auto-mode-classifier-billing) y no has escrito durante unos seis segundos |2615| `agent_needs_input` | Una sesión en segundo plano empieza a esperar tu entrada mientras la [vista de agentes](/docs/es/agent-view) está abierta en una terminal. También se dispara cuando una sesión de terminal te muestra la [pregunta de configuración de terminal de un compañero de un equipo de agentes](/docs/es/agent-teams#choose-a-display-mode) o el aviso del modo automático sobre los [cargos por solicitudes del clasificador](/docs/es/auto-mode-classifier-billing) y no has escrito nada durante unos seis segundos |

2590| `agent_completed` | Una sesión en segundo plano termina o falla. Solo se activa mientras la [vista de agentes](/docs/es/agent-view) está abierta en una terminal |2616| `agent_completed` | Una sesión en segundo plano termina o falla. Se dispara solo mientras la [vista de agentes](/docs/es/agent-view) está abierta en una terminal |

2591| `quota_auto_resume_fired` | Claude Code continúa tu tarea después de que un límite de uso de claude.ai la pausara: en el restablecimiento, o antes cuando algo que haces en Claude Code durante la espera, como agregar créditos de uso, mejorar tu plan o cambiar de modelo, vuelve a hacer disponible el uso, con la [excepción del ajuste de modelo](/docs/es/interactive-mode#wait-for-a-usage-limit-to-reset) |2617| `quota_auto_resume_fired` | Claude Code continúa tu tarea después de que un límite de uso de claude.ai la pausara: en el momento del restablecimiento, o antes cuando algo que haces en Claude Code durante la espera, como agregar créditos de uso, mejorar tu plan o cambiar de modelo, vuelve a hacer disponible el uso, con la [excepción del ajuste de modelo](/docs/es/interactive-mode#wait-for-a-usage-limit-to-reset) |

2592| `quota_auto_resume_stale` | Un límite de uso de claude.ai se restableció mientras tu computadora estuvo suspendida durante más de unos 30 minutos. Claude Code espera a que presiones `Enter` en lugar de continuar. Después de una suspensión más corta, continúa y activa `quota_auto_resume_fired` en su lugar |2618| `quota_auto_resume_stale` | Un límite de uso de claude.ai se restableció mientras tu computadora estuvo suspendida durante más de unos 30 minutos. Claude Code espera a que presiones `Enter` en lugar de continuar. Tras una suspensión más corta, continúa y dispara `quota_auto_resume_fired` en su lugar |

2593| `quota_auto_resume_disabled` | Claude Code termina su espera por un límite de uso de claude.ai sin continuar tu tarea: [`autoContinueAtUsageLimit`](/docs/es/settings-reference#autocontinueatusagelimit) se desactivó o el restablecimiento se movió a más de 24 horas durante una espera que Claude Code inició por su cuenta, la tarea continuada siguió alcanzando el límite, o la continuación se bloqueó antes de llegar al modelo. No se activa cuando presionas `Esc` o `Ctrl+C`, ni cuando eliges **Don't continue automatically** |2619| `quota_auto_resume_disabled` | Claude Code termina su espera por un límite de uso de claude.ai sin continuar tu tarea: [`autoContinueAtUsageLimit`](/docs/es/settings-reference#autocontinueatusagelimit) se desactivó o el restablecimiento se movió a más de 24 horas durante una espera que Claude Code inició por su cuenta, la tarea continuada siguió alcanzando el límite, o la continuación se bloqueó antes de llegar al modelo. No se dispara cuando presionas `Esc` o `Ctrl+C`, o eliges **Don't continue automatically** |

2594 2620 

2595Los tipos `quota_auto_resume_fired`, `quota_auto_resume_stale` y `quota_auto_resume_disabled` requieren Claude Code v2.1.234 o posterior.2621Los tipos `quota_auto_resume_fired`, `quota_auto_resume_stale` y `quota_auto_resume_disabled` requieren Claude Code v2.1.234 o posterior.

2596 2622 


2599`agent_needs_input` para la pregunta de configuración de terminal de un compañero requiere Claude Code v2.1.248 o posterior.2625`agent_needs_input` para la pregunta de configuración de terminal de un compañero requiere Claude Code v2.1.248 o posterior.

2600 2626 

2601<Note>2627<Note>

2602 Los tipos `permission_prompt`, `idle_prompt`, `elicitation_dialog` y `elicitation_url_dialog` comparten su temporización con las notificaciones de escritorio, por lo que en sesiones de terminal solo los ves cuando parece que estás lejos de la terminal:2628 Los tipos `permission_prompt`, `idle_prompt`, `elicitation_dialog` y `elicitation_url_dialog` comparten su temporización con las notificaciones de escritorio, por lo que en las sesiones de terminal solo los ves cuando parece que estás lejos de la terminal:

2603 2629 

2604 * Espera `permission_prompt` una vez que no hayas escrito durante unos seis segundos. El temporizador comienza cuando aparece la solicitud de permiso, y cada pulsación de tecla lo pospone. Para ejecutar un hook inmediatamente cuando Claude pide permiso para usar una herramienta, usa [PermissionRequest](#permissionrequest) en su lugar.2630 * Espera `permission_prompt` una vez que no hayas escrito nada durante unos seis segundos. El temporizador comienza cuando aparece la solicitud de permiso, y cada pulsación de tecla lo aplaza. Para ejecutar un hook inmediatamente cuando Claude pide permiso para usar una herramienta, usa [PermissionRequest](#permissionrequest) en su lugar.

2605 * Espera `idle_prompt` unos 60 segundos después de que Claude termine de responder, y solo si no has escrito desde entonces y ningún agente en segundo plano, como un [subagente](/docs/es/sub-agents) en segundo plano, sigue ejecutándose. Claude Code no envía `idle_prompt` mientras espera que se restablezca un límite de uso de claude.ai. Cuando la espera termina por sí sola, se activa en su lugar uno de los tipos `quota_auto_resume_*`.2631 * Espera `idle_prompt` unos 60 segundos después de que Claude termine de responder, y solo si no has escrito nada desde entonces y ningún agente en segundo plano, como un [subagente](/docs/es/sub-agents) en segundo plano, sigue ejecutándose. Claude Code no envía `idle_prompt` mientras espera a que se restablezca un límite de uso de claude.ai. Cuando la espera termina por sí sola, se dispara en su lugar uno de los tipos `quota_auto_resume_*`.

2606 * Espera `elicitation_dialog` para un formulario de elicitación, o `elicitation_url_dialog` para una solicitud de URL en el navegador, una vez que no hayas escrito durante unos seis segundos. Ambos comparten la misma espera de seis segundos que `permission_prompt`: el temporizador comienza cuando aparece el diálogo, y cada pulsación de tecla lo pospone.2632 * Espera `elicitation_dialog` para un formulario de elicitación, o `elicitation_url_dialog` para una solicitud de URL del navegador, una vez que no hayas escrito nada durante unos seis segundos. Ambos comparten el mismo umbral de seis segundos que `permission_prompt`: el temporizador comienza cuando aparece el diálogo, y cada pulsación de tecla lo aplaza.

2607 2633 

2608 Una solicitud de permiso o una elicitación que llega mientras otro diálogo está en pantalla mantiene la misma espera de seis segundos, contada desde que llega la solicitud. Su notificación puede llegarte mientras la solicitud sigue esperando detrás del diálogo abierto.2634 Una solicitud de permiso o elicitación que llega mientras otro diálogo está en pantalla mantiene el mismo umbral de seis segundos, contado desde que llega la solicitud. Su notificación puede llegarte mientras la solicitud sigue esperando detrás del diálogo abierto.

2609</Note>2635</Note>

2610 2636 

2611Claude Code temporiza `permission_prompt` de forma diferente en las sesiones donde envía las solicitudes de permiso al [callback `canUseTool`](/docs/es/agent-sdk/user-input) del Agent SDK, que es como Claude Desktop y la extensión de VS Code alojan Claude Code:2637Claude Code temporiza `permission_prompt` de forma diferente en las sesiones en las que envía las solicitudes de permiso al [callback `canUseTool`](/docs/es/agent-sdk/user-input) del Agent SDK, que es como Claude Desktop y la extensión de VS Code alojan Claude Code:

2612 2638 

2613* Espera `permission_prompt` unos seis segundos después de que Claude pida permiso. Claude Code no lo pospone mientras escribes.2639* Espera `permission_prompt` unos seis segundos después de que Claude pida permiso. Claude Code no lo aplaza mientras escribes.

2614* Si tú o un hook [PermissionRequest](#permissionrequest) responden antes, Claude Code no ejecuta `permission_prompt`.2640* Si tú o un hook [PermissionRequest](#permissionrequest) responden antes, Claude Code no ejecuta `permission_prompt`.

2615* Establece [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/es/env-vars) en `1` para desactivar `permission_prompt` en estas sesiones.2641* Establece [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/es/env-vars) en `1` para desactivar `permission_prompt` en estas sesiones.

2616 2642 

2617Antes de v2.1.233, `permission_prompt` no se activaba en estas sesiones.2643Antes de v2.1.233, `permission_prompt` no se disparaba en estas sesiones.

2618 2644 

2619Usa matchers separados para ejecutar distintos controladores según el tipo de notificación. Esta configuración activa un script de alerta específico de permisos cuando Claude necesita aprobación de permisos y una notificación diferente cuando Claude ha estado inactivo:2645Usa matchers separados para ejecutar distintos handlers según el tipo de notificación. Esta configuración activa un script de alerta específico de permisos cuando Claude necesita aprobación de permisos y una notificación diferente cuando Claude ha estado inactivo:

2620 2646 

2621```json theme={null}2647```json theme={null}

2622{2648{


2649 Entrada de Notification2675 Entrada de Notification

2650</h4>2676</h4>

2651 2677 

2652Además de los [campos de entrada comunes](#common-input-fields), los hooks Notification reciben `message` con el texto de la notificación, un `title` opcional y `notification_type`, que indica qué tipo se activó.2678Además de los [campos de entrada comunes](#common-input-fields), los hooks Notification reciben `message` con el texto de la notificación, un `title` opcional y `notification_type`, que indica qué tipo se disparó.

2653 2679 

2654```json theme={null}2680```json theme={null}

2655{2681{


2669 SubagentStart2695 SubagentStart

2670</h3>2696</h3>

2671 2697 

2672Se ejecuta cuando Claude genera un subagente con la herramienta Agent, cuando Claude [reanuda un subagente](/docs/es/sub-agents#resume-subagents) y cada vez que un compañero en proceso de un [equipo de agentes](/docs/es/agent-teams) gestiona un mensaje nuevo. Admite matchers para filtrar por nombre de tipo de agente. Para los agentes integrados, es el nombre del agente, como `general-purpose`, `Explore` o `Plan`. Para los [subagentes personalizados](/docs/es/sub-agents), es el campo `name` del frontmatter del agente, no el nombre del archivo.2698Se ejecuta cuando Claude genera un subagente con la herramienta Agent, cuando Claude [reanuda un subagente](/docs/es/sub-agents#resume-subagents) y cada vez que un compañero en proceso de un [equipo de agentes](/docs/es/agent-teams) maneja un mensaje nuevo. Admite matchers para filtrar por nombre de tipo de agente. Para los agentes integrados, es el nombre del agente, como `general-purpose`, `Explore` o `Plan`. Para los [subagentes personalizados](/docs/es/sub-agents), es el campo `name` del frontmatter del agente, no el nombre del archivo.

2673 2699 

2674Para los subagentes incluidos en un [plugin](/docs/es/plugins/overview), el tipo de agente es el identificador con ámbito de plugin, como `my-plugin:reviewer`, no el nombre simple del frontmatter. Los dos puntos hacen que un nombre con ámbito de plugin se evalúe como expresión regular, así que ancla el matcher con `^` y `$` para una coincidencia exacta: `^my-plugin:reviewer$`.2700Para los subagentes incluidos en un [plugin](/docs/es/plugins/overview), el tipo de agente es el identificador con alcance del plugin, como `my-plugin:reviewer`, no el nombre simple del frontmatter. Los dos puntos hacen que un nombre con alcance de plugin se evalúe como expresión regular, así que ancla el matcher con `^` y `$` para obtener una coincidencia exacta: `^my-plugin:reviewer$`.

2675 2701 

2676<h4 id="subagentstart-input">2702<h4 id="subagentstart-input">

2677 Entrada de SubagentStart2703 Entrada de SubagentStart

2678</h4>2704</h4>

2679 2705 

2680Además de los [campos de entrada comunes](#common-input-fields), los hooks SubagentStart reciben `agent_id` con el identificador único del subagente y `agent_type` con el nombre del agente sobre el que filtra el matcher.2706Además de los [campos de entrada comunes](#common-input-fields), los hooks SubagentStart reciben `agent_id` con el identificador único del subagente y `agent_type` con el nombre del agente por el que filtra el matcher.

2681 2707 

2682```json theme={null}2708```json theme={null}

2683{2709{


2705}2731}

2706```2732```

2707 2733 

2708Cuando el hook se vuelve a ejecutar para el mismo subagente, Claude Code inyecta el contexto devuelto solo cuando el contexto del subagente aún no contiene la copia de una ejecución anterior. La copia inyectada al inicio permanece en su lugar, lo que mantiene intacta la [caché de prompts](/docs/es/prompt-caching#subagents-and-the-cache) del subagente. Después de que la [compactación automática](/docs/es/sub-agents#auto-compaction) descarta esa copia, Claude Code vuelve a inyectar el contexto de la siguiente ejecución.2734Cuando el hook se ejecuta de nuevo para el mismo subagente, Claude Code inyecta el contexto devuelto solo cuando el contexto del subagente aún no contiene la copia de una ejecución anterior. La copia inyectada al inicio permanece en su lugar, lo que deja intacta la [caché de prompts](/docs/es/prompt-caching#subagents-and-the-cache) del subagente. Después de que la [compactación automática](/docs/es/sub-agents#auto-compaction) descarta esa copia, Claude Code vuelve a inyectar el contexto de la siguiente ejecución.

2709 2735 

2710<h3 id="subagentstop">2736<h3 id="subagentstop">

2711 SubagentStop2737 SubagentStop

2712</h3>2738</h3>

2713 2739 

2714Se ejecuta cuando un subagente de Claude Code terminó de responder. Hace coincidencia por tipo de agente, con los mismos valores que SubagentStart.2740Se ejecuta cuando un subagente de Claude Code terminó de responder. Coincide con el tipo de agente, con los mismos valores que SubagentStart.

2715 2741 

2716<h4 id="subagentstop-input">2742<h4 id="subagentstop-input">

2717 Entrada de SubagentStop2743 Entrada de SubagentStop

2718</h4>2744</h4>

2719 2745 

2720Además de los [campos de entrada comunes](#common-input-fields), los hooks SubagentStop reciben `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path` y `last_assistant_message`. El campo `agent_type` es el valor que se usa para el filtrado del matcher. `transcript_path` es la transcripción de la sesión principal, mientras que `agent_transcript_path` es la transcripción propia del subagente, almacenada en una carpeta anidada `subagents/`. El campo `last_assistant_message` contiene el contenido de texto de la respuesta final del subagente, para que los hooks puedan acceder a él sin analizar el archivo de transcripción.2746Además de los [campos de entrada comunes](#common-input-fields), los hooks SubagentStop reciben `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path` y `last_assistant_message`. El campo `agent_type` es el valor que se usa para el filtrado del matcher. `transcript_path` es la transcripción de la sesión principal, mientras que `agent_transcript_path` es la transcripción propia del subagente, almacenada en una carpeta anidada `subagents/`. El campo `last_assistant_message` contiene el contenido de texto de la respuesta final del subagente, de modo que los hooks pueden acceder a él sin analizar el archivo de transcripción.

2721 2747 

2722No todos los eventos SubagentStop provienen de un subagente que Claude generó. Claude Code también ejecuta agentes internos para algunas de sus propias funciones, como las [sugerencias de prompts](/docs/es/interactive-mode#prompt-suggestions) y las [preguntas laterales con `/btw`](/docs/es/interactive-mode#side-questions-with-%2Fbtw), y SubagentStop también se activa cuando uno de ellos termina. Para esos eventos, `agent_type` es el nombre del agente con el que se ejecuta la propia sesión, como uno establecido con [`--agent`](/docs/es/cli-reference#cli-flags) o con el [ajuste `agent`](/docs/es/settings-reference#agent), y una cadena vacía cuando la sesión se ejecuta sin uno.2748No todos los eventos SubagentStop provienen de un subagente que Claude generó. Claude Code también ejecuta agentes internos para algunas de sus propias funciones, como las [sugerencias de prompts](/docs/es/interactive-mode#prompt-suggestions) y las [preguntas laterales con `/btw`](/docs/es/interactive-mode#side-questions-with-%2Fbtw), y SubagentStop también se dispara cuando uno de ellos termina. Para esos eventos, `agent_type` es el nombre del agente con el que se ejecuta la propia sesión, como uno establecido con [`--agent`](/docs/es/cli-reference#cli-flags) o con el [ajuste `agent`](/docs/es/settings-reference#agent), y una cadena vacía cuando la sesión se ejecuta sin ninguno.

2723 2749 

2724Un `matcher` que nombra tipos de agente no coincide con un `agent_type` vacío. Un hook cuyo matcher se omite, es `""` o `"*"`, o es una expresión regular que coincide con una cadena vacía, también se ejecuta para eventos con un `agent_type` vacío.2750Un `matcher` que nombra tipos de agente no coincide con un `agent_type` vacío. Un hook cuyo matcher se omite, es `""` o `"*"`, o es una expresión regular que coincide con una cadena vacía, también se ejecuta para eventos con un `agent_type` vacío.

2725 2751 

2726En Claude Code v2.1.271 o posterior, un subagente que se ejecuta con la herramienta [`SubagentHandback`](/docs/es/tools-reference) entrega su informe a través de esa herramienta antes de detenerse. En ese caso, el campo `last_assistant_message` contiene el texto de cierre del subagente, si lo hay, que no es el informe entregado. El informe es la entrada `message` de esa llamada, que un hook `PreToolUse` o `PostToolUse` con coincidencia en `SubagentHandback` recibe como `tool_input.message`.2752En Claude Code v2.1.271 o posterior, un subagente que se ejecuta con la herramienta [`SubagentHandback`](/docs/es/tools-reference) entrega su informe mediante esa herramienta antes de detenerse. En ese caso, el campo `last_assistant_message` contiene el texto de cierre del subagente, si lo hay, que no es el informe entregado. El informe es la entrada `message` de esa llamada, que un hook `PreToolUse` o `PostToolUse` con matcher en `SubagentHandback` recibe como `tool_input.message`.

2727 2753 

2728Los hooks SubagentStop también reciben los arrays `background_tasks` y `session_crons` descritos en [Entrada de Stop](#stop-input). Ambos arrays tienen como ámbito la sesión principal, no el subagente.2754Los hooks SubagentStop también reciben los arrays `background_tasks` y `session_crons` descritos en [Entrada de Stop](#stop-input). Ambos arrays tienen como alcance la sesión principal, no el subagente.

2729 2755 

2730```json theme={null}2756```json theme={null}

2731{2757{


2744}2770}

2745```2771```

2746 2772 

2747Los hooks SubagentStop usan el mismo formato de control de decisiones que los [hooks Stop](#stop-decision-control), incluido `hookSpecificOutput.additionalContext` con `hookEventName` establecido en `"SubagentStop"`, para retroalimentación que no es de error y que mantiene al subagente en ejecución. Devolver `decision: "block"` con un `reason` mantiene al subagente en ejecución y le entrega `reason` al subagente como su siguiente instrucción. Un hook que bloquea saliendo con código 2 entrega su mensaje de stderr de la misma forma. Para inyectar contexto en la sesión principal después de que un subagente regrese, usa en su lugar un hook [`PostToolUse`](#posttooluse) sobre la herramienta `Agent`.2773Los hooks SubagentStop usan el mismo formato de control de decisiones que los [hooks Stop](#stop-decision-control), incluido `hookSpecificOutput.additionalContext` con `hookEventName` establecido en `"SubagentStop"`, para retroalimentación que no es de error y que mantiene el subagente en ejecución. Devolver `decision: "block"` con un `reason` mantiene el subagente en ejecución y le entrega `reason` como su siguiente instrucción. Un hook que bloquea al salir con 2 entrega su mensaje de stderr de la misma forma. Para inyectar contexto en la sesión principal después de que un subagente regresa, usa en su lugar un hook [`PostToolUse`](#posttooluse) sobre la herramienta `Agent`.

2748 2774 

2749<h3 id="taskcreated">2775<h3 id="taskcreated">

2750 TaskCreated2776 TaskCreated

2751</h3>2777</h3>

2752 2778 

2753Se ejecuta cuando se está creando una tarea mediante la herramienta `TaskCreate`. Úsalo para aplicar convenciones de nombres, exigir descripciones de tareas o impedir que se creen ciertas tareas. En una [sesión sin las herramientas Task](/docs/es/tools-reference#task-tool-availability), este evento no se activa.2779Se ejecuta cuando se está creando una tarea mediante la herramienta `TaskCreate`. Úsalo para aplicar convenciones de nomenclatura, exigir descripciones de tareas o impedir que se creen determinadas tareas. En una [sesión sin las herramientas Task](/docs/es/tools-reference#task-tool-availability), este evento no se dispara.

2754 2780 

2755Los hooks TaskCreated no admiten matchers y se activan en cada ocurrencia.2781Los hooks TaskCreated no admiten matchers y se disparan en cada ocurrencia.

2756 2782 

2757<h4 id="taskcreated-input">2783<h4 id="taskcreated-input">

2758 Entrada de TaskCreated2784 Entrada de TaskCreated


2787 Control de decisiones de TaskCreated2813 Control de decisiones de TaskCreated

2788</h4>2814</h4>

2789 2815 

2790Un hook TaskCreated puede bloquear la creación con el código de salida 2 o con una decisión JSON. En cualquier caso, Claude Code elimina la tarea y devuelve tu mensaje a Claude como error de la herramienta. Claude Code ignora `continue: false` en este evento y Claude sigue trabajando.2816Un hook TaskCreated puede bloquear la creación con el código de salida 2 o con una decisión JSON. En cualquier caso, Claude Code elimina la tarea y devuelve tu mensaje a Claude como el error de la herramienta. Claude Code ignora `continue: false` de este evento y Claude sigue trabajando.

2791 2817 

2792* **Código de salida 2**: Claude Code devuelve el texto de stderr como mensaje.2818* **Código de salida 2**: Claude Code devuelve el texto de stderr como mensaje.

2793* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code devuelve `reason` como mensaje.2819* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code devuelve `reason` como mensaje.


2811 TaskCompleted2837 TaskCompleted

2812</h3>2838</h3>

2813 2839 

2814Se ejecuta cuando una tarea se está marcando como completada. Se activa en dos situaciones: cuando cualquier agente marca explícitamente una tarea como completada mediante la herramienta TaskUpdate, o cuando un compañero de un [equipo de agentes](/docs/es/agent-teams) termina su turno con tareas en curso. Úsalo para aplicar criterios de finalización, como que pasen las pruebas o las verificaciones de lint, antes de que una tarea pueda cerrarse.2840Se ejecuta cuando una tarea se está marcando como completada. Se dispara en dos situaciones: cuando cualquier agente marca explícitamente una tarea como completada mediante la herramienta TaskUpdate, o cuando un compañero de un [equipo de agentes](/docs/es/agent-teams) termina su turno con tareas en curso. Úsalo para aplicar criterios de finalización, como que las pruebas o las comprobaciones de lint pasen antes de que una tarea pueda cerrarse.

2815 2841 

2816Los hooks TaskCompleted no admiten matchers y se activan en cada ocurrencia.2842Los hooks TaskCompleted no admiten matchers y se disparan en cada ocurrencia.

2817 2843 

2818<h4 id="taskcompleted-input">2844<h4 id="taskcompleted-input">

2819 Entrada de TaskCompleted2845 Entrada de TaskCompleted


2852Los hooks TaskCompleted admiten dos formas de controlar la finalización de tareas:2878Los hooks TaskCompleted admiten dos formas de controlar la finalización de tareas:

2853 2879 

2854* **Código de salida 2**: la tarea no se marca como completada y el mensaje de stderr se devuelve al modelo como retroalimentación.2880* **Código de salida 2**: la tarea no se marca como completada y el mensaje de stderr se devuelve al modelo como retroalimentación.

2855* **JSON `{"continue": false, "stopReason": "..."}`**: cuando el evento lo activó un compañero que terminaba su turno, detiene por completo al compañero, igual que el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario. Cuando el evento lo activó la herramienta `TaskUpdate`, Claude Code ignora `continue: false`; el código de salida 2 sigue bloqueando la finalización.2881* **JSON `{"continue": false, "stopReason": "..."}`**: cuando el evento lo desencadenó un compañero que terminó su turno, detiene al compañero por completo, igual que el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario. Cuando el evento lo desencadenó la herramienta `TaskUpdate`, Claude Code ignora `continue: false`; el código de salida 2 sigue bloqueando la finalización.

2856 2882 

2857Este ejemplo ejecuta pruebas y bloquea la finalización de la tarea si fallan:2883Este ejemplo ejecuta pruebas y bloquea la finalización de la tarea si fallan:

2858 2884 


2874 Stop2900 Stop

2875</h3>2901</h3>

2876 2902 

2877Se ejecuta cuando el agente principal de Claude Code terminó de responder. No se ejecuta si2903Se ejecuta cuando el agente principal de Claude Code terminó de responder. No se

2878la detención se produjo por una interrupción del usuario. Los errores de API activan2904ejecuta si la detención se produjo por una interrupción del usuario. Los errores de la API disparan

2879[StopFailure](#stopfailure) en su lugar.2905[StopFailure](#stopfailure) en su lugar.

2880 2906 

2881<Tip>2907<Tip>

2882 El comando [`/goal`](/docs/es/goal) es un atajo integrado para un hook Stop basado en prompts con ámbito de sesión. Úsalo cuando quieras que Claude siga trabajando hacia una condición sin escribir configuración de hooks.2908 El comando [`/goal`](/docs/es/goal) es un atajo integrado para un hook Stop basado en prompts con alcance de sesión. Úsalo cuando quieras que Claude siga trabajando hacia una condición sin escribir configuración de hooks.

2883</Tip>2909</Tip>

2884 2910 

2885<h4 id="stop-input">2911<h4 id="stop-input">

2886 Entrada de Stop2912 Entrada de Stop

2887</h4>2913</h4>

2888 2914 

2889Además de los [campos de entrada comunes](#common-input-fields), los hooks Stop reciben `stop_hook_active`, `last_assistant_message`, `background_tasks` y `session_crons`. El campo `stop_hook_active` es `true` cuando Claude Code ya está continuando como resultado de un hook Stop. Comprueba este valor o procesa la transcripción para evitar bloquear en una condición que nunca se resolverá.2915Además de los [campos de entrada comunes](#common-input-fields), los hooks Stop reciben `stop_hook_active`, `last_assistant_message`, `background_tasks` y `session_crons`. El campo `stop_hook_active` es `true` cuando Claude Code ya está continuando como resultado de un hook de detención. Comprueba este valor o procesa la transcripción para evitar bloquear por una condición que nunca se resolverá.

2890 2916 

2891Claude Code aplica un límite de 8 continuaciones consecutivas: después de que los hooks Stop hayan continuado el turno ocho veces seguidas, Claude Code sobrescribe el siguiente bloqueo y termina el turno. El conteo de continuaciones consecutivas se reinicia cada vez que Claude llama a una herramienta. Para aumentar el límite, establece [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/es/env-vars).2917Claude Code aplica un límite de 8 continuaciones consecutivas: después de que los hooks de detención hayan continuado el turno ocho veces seguidas, Claude Code sobrescribe el siguiente bloqueo y termina el turno. El recuento de continuaciones consecutivas se reinicia cada vez que Claude llama a una herramienta. Para aumentar el límite, establece [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/es/env-vars).

2892 2918 

2893El campo `last_assistant_message` contiene el contenido de texto de la respuesta final de Claude, para que los hooks puedan acceder a él sin analizar el archivo de transcripción. Para los hooks que actúan sobre el turno recién completado, como los hooks de lectura en voz alta o de notificación, usa este campo en lugar de leer `transcript_path`: no se garantiza que el archivo de transcripción incluya el mensaje final en el momento de Stop en todas las versiones.2919El campo `last_assistant_message` contiene el contenido de texto de la respuesta final de Claude, de modo que los hooks pueden acceder a él sin analizar el archivo de transcripción. Para los hooks que actúan sobre el turno recién completado, como los hooks de lectura en voz alta o de notificación, usa este campo en lugar de leer `transcript_path`: no se garantiza que el archivo de transcripción incluya el mensaje final en el momento de Stop en todas las versiones.

2894 2920 

2895Los arrays `background_tasks` y `session_crons` permiten a los hooks distinguir entre "la sesión terminó" y "la sesión está en pausa esperando a que un trabajo en segundo plano la reactive". Ambos arrays están presentes cuando el registro de tareas es accesible y están vacíos cuando no hay nada en curso ni programado.2921Los arrays `background_tasks` y `session_crons` permiten a los hooks distinguir entre "la sesión terminó" y "la sesión está en pausa esperando que un trabajo en segundo plano la reactive". Ambos arrays están presentes cuando se puede acceder al registro de tareas y están vacíos cuando no hay nada en curso ni programado.

2896 2922 

2897Cada entrada de `background_tasks` describe una tarea en curso y usa estos campos:2923Cada entrada de `background_tasks` describe una tarea en curso y usa estos campos:

2898 2924 

2899| Campo | Descripción |2925| Campo | Descripción |

2900| :- | :- |2926| :- | :- |

2901| `id` | Identificador de la tarea |2927| `id` | Identificador de la tarea |

2902| `type` | Etiqueta legible del tipo de tarea, como `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` o `MCP task`. Cada etiqueta identifica qué función de Claude Code creó la tarea. Recurre al discriminante sin procesar para los tipos no reconocidos |2928| `type` | Etiqueta descriptiva del tipo de tarea, como `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` o `MCP task`. Cada etiqueta identifica qué función de Claude Code creó la tarea. Recurre al discriminante sin procesar para los tipos no reconocidos |

2903| `status` | Estado actual de la tarea |2929| `status` | Estado actual de la tarea |

2904| `description` | Descripción en texto libre, limitada a 1000 caracteres con un marcador `… [+N chars]` dentro de la cadena cuando se recorta |2930| `description` | Descripción en texto libre, limitada a 1000 caracteres con un marcador `… [+N chars]` dentro de la cadena cuando se recorta |

2905| `command` | Línea de comando del shell, limitada a 1000 caracteres. Solo está presente para tareas `shell` |2931| `command` | Línea de comandos del shell, limitada a 1000 caracteres. Presente solo para tareas `shell` |

2906| `agent_type` | Nombre del tipo de subagente. Solo está presente para tareas `subagent` |2932| `agent_type` | Nombre del tipo de subagente. Presente solo para tareas `subagent` |

2907| `server` | Nombre del servidor MCP. Solo está presente para tareas `monitor` y `MCP task` |2933| `server` | Nombre del servidor MCP. Presente solo para tareas `monitor` y `MCP task` |

2908| `tool` | Nombre de la herramienta MCP. Solo está presente para tareas `monitor` y `MCP task` |2934| `tool` | Nombre de la herramienta MCP. Presente solo para tareas `monitor` y `MCP task` |

2909| `name` | Nombre del workflow. Solo está presente para tareas `workflow` |2935| `name` | Nombre del workflow. Presente solo para tareas `workflow` |

2910 2936 

2911Cada entrada de `session_crons` describe una reactivación programada con ámbito de sesión, proveniente de `CronCreate`, `ScheduleWakeup` y `/loop`:2937Cada entrada de `session_crons` describe una reactivación programada con alcance de sesión, proveniente de `CronCreate`, `ScheduleWakeup` y `/loop`:

2912 2938 

2913| Campo | Descripción |2939| Campo | Descripción |

2914| :- | :- |2940| :- | :- |

2915| `id` | Identificador de la tarea cron |2941| `id` | Identificador de la tarea cron |

2916| `schedule` | Expresión cron, por ejemplo `0 9 * * 1-5` |2942| `schedule` | Expresión cron, por ejemplo `0 9 * * 1-5` |

2917| `recurring` | `false` para reactivaciones únicas cuya programación codifica una sola hora de activación, `true` para tareas que se vuelven a activar en cada coincidencia |2943| `recurring` | `false` para reactivaciones únicas cuyo programa codifica un único momento de disparo, `true` para tareas que se vuelven a disparar en cada coincidencia |

2918| `prompt` | Prompt que se envía cuando se activa el cron, limitado a 1000 caracteres con el mismo marcador `… [+N chars]` |2944| `prompt` | Prompt que se envía cuando se dispara el cron, limitado a 1000 caracteres con el mismo marcador `… [+N chars]` |

2919 2945 

2920Este ejemplo muestra una entrada de Stop con una tarea de shell en curso y un cron recurrente:2946Este ejemplo muestra una entrada de Stop con una tarea de shell en curso y un cron recurrente:

2921 2947 


2958| :- | :- |2984| :- | :- |

2959| `decision` | `"block"` impide que Claude se detenga. Omítelo para permitir que Claude se detenga |2985| `decision` | `"block"` impide que Claude se detenga. Omítelo para permitir que Claude se detenga |

2960| `reason` | Obligatorio cuando `decision` es `"block"`. Le indica a Claude por qué debe continuar |2986| `reason` | Obligatorio cuando `decision` es `"block"`. Le indica a Claude por qué debe continuar |

2961| `hookSpecificOutput.additionalContext` | Retroalimentación para Claude que no es de error. La conversación continúa para que Claude pueda actuar en consecuencia, pero, a diferencia de `decision: "block"`, se muestra en la transcripción como retroalimentación del hook y no como un error del hook |2987| `hookSpecificOutput.additionalContext` | Retroalimentación para Claude que no es de error. La conversación continúa para que Claude pueda actuar en consecuencia, pero, a diferencia de `decision: "block"`, se muestra en la transcripción como retroalimentación del hook en lugar de como un error del hook |

2962 2988 

2963Un hook que bloquea saliendo con código 2 se enruta de la misma forma que `reason`: Claude recibe el mensaje de stderr como la explicación de por qué debe continuar.2989Un hook que bloquea al salir con 2 se enruta igual que `reason`: Claude recibe el mensaje de stderr como la explicación de por qué debe continuar.

2964 2990 

2965```json theme={null}2991```json theme={null}

2966{2992{


2969}2995}

2970```2996```

2971 2997 

2972Usa `additionalContext` cuando el hook funciona según lo diseñado y le da orientación a Claude, como "ejecuta el conjunto de pruebas antes de terminar". Mantiene la conversación en marcha a través de las mismas protecciones contra bucles que `decision: "block"`, es decir, la entrada `stop_hook_active` y el límite de 8 continuaciones consecutivas, pero la transcripción lo etiqueta como `Stop hook feedback` y no se muestra ninguna notificación de error del hook:2998Usa `additionalContext` cuando el hook funciona según lo previsto y le da orientación a Claude, como "ejecuta el conjunto de pruebas antes de terminar". Mantiene la conversación en marcha con las mismas protecciones contra bucles que `decision: "block"`, es decir, la entrada `stop_hook_active` y el límite de 8 continuaciones consecutivas, pero la transcripción lo etiqueta como `Stop hook feedback` y no se muestra ninguna notificación de error del hook:

2973 2999 

2974```json theme={null}3000```json theme={null}

2975{3001{


2984 StopFailure3010 StopFailure

2985</h3>3011</h3>

2986 3012 

2987Se ejecuta en lugar de [Stop](#stop) cuando el turno termina debido a un error de API. Claude Code ignora la salida y el código de salida del hook, salvo [`terminalSequence`](#emit-terminal-notifications). Úsalo para registrar fallos, enviar alertas o tomar acciones de recuperación cuando Claude no puede completar una respuesta debido a rate limits, problemas de autenticación u otros errores de API.3013Se ejecuta en lugar de [Stop](#stop) cuando el turno termina debido a un error de la API. Claude Code ignora la salida y el código de salida del hook, excepto [`terminalSequence`](#emit-terminal-notifications). Úsalo para registrar fallos, enviar alertas o tomar medidas de recuperación cuando Claude no puede completar una respuesta debido a rate limits, problemas de autenticación u otros errores de la API.

2988 3014 

2989<h4 id="stopfailure-input">3015<h4 id="stopfailure-input">

2990 Entrada de StopFailure3016 Entrada de StopFailure


2996| :- | :- |3022| :- | :- |

2997| `error` | Tipo de error: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` o `unknown` |3023| `error` | Tipo de error: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` o `unknown` |

2998| `error_details` | Detalles adicionales sobre el error, cuando están disponibles |3024| `error_details` | Detalles adicionales sobre el error, cuando están disponibles |

2999| `last_assistant_message` | El texto de error renderizado que se muestra en la conversación. A diferencia de `Stop` y `SubagentStop`, donde este campo contiene la salida conversacional de Claude, para `StopFailure` contiene la propia cadena de error de la API, como `"API Error: Rate limit reached"` |3025| `last_assistant_message` | El texto de error renderizado que se muestra en la conversación. A diferencia de `Stop` y `SubagentStop`, donde este campo contiene la salida conversacional de Claude, en `StopFailure` contiene la propia cadena de error de la API, como `"API Error: Rate limit reached"` |

3000 3026 

3001```json theme={null}3027```json theme={null}

3002{3028{


3016 TeammateIdle3042 TeammateIdle

3017</h3>3043</h3>

3018 3044 

3019Se ejecuta cuando un compañero de un [equipo de agentes](/docs/es/agent-teams) está a punto de quedar inactivo después de terminar su turno. Úsalo para aplicar controles de calidad antes de que un compañero deje de trabajar, como exigir que pasen las verificaciones de lint o comprobar que existan los archivos de salida.3045Se ejecuta cuando un compañero de un [equipo de agentes](/docs/es/agent-teams) está a punto de quedar inactivo después de terminar su turno. Úsalo para aplicar controles de calidad antes de que un compañero deje de trabajar, como exigir que pasen las comprobaciones de lint o verificar que existan los archivos de salida.

3020 3046 

3021Los hooks TeammateIdle no admiten matchers y se activan en cada ocurrencia.3047Los hooks TeammateIdle no admiten matchers y se disparan en cada ocurrencia.

3022 3048 

3023<h4 id="teammateidle-input">3049<h4 id="teammateidle-input">

3024 Entrada de TeammateIdle3050 Entrada de TeammateIdle


3048 Control de decisiones de TeammateIdle3074 Control de decisiones de TeammateIdle

3049</h4>3075</h4>

3050 3076 

3051Los hooks TeammateIdle admiten dos formas de controlar el comportamiento del compañero:3077Los hooks TeammateIdle admiten dos formas de controlar el comportamiento de los compañeros:

3052 3078 

3053* **Código de salida 2**: el compañero recibe el mensaje de stderr como retroalimentación y sigue trabajando en lugar de quedar inactivo.3079* **Código de salida 2**: el compañero recibe el mensaje de stderr como retroalimentación y sigue trabajando en lugar de quedar inactivo.

3054* **JSON `{"continue": false, "stopReason": "..."}`**: detiene por completo al compañero, igual que el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario.3080* **JSON `{"continue": false, "stopReason": "..."}`**: detiene al compañero por completo, igual que el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario.

3055 3081 

3056Este ejemplo comprueba que exista un artefacto de compilación antes de permitir que un compañero quede inactivo:3082Este ejemplo comprueba que exista un artefacto de compilación antes de permitir que un compañero quede inactivo:

3057 3083 


3070 ConfigChange3096 ConfigChange

3071</h3>3097</h3>

3072 3098 

3073Se ejecuta cuando un archivo de configuración cambia durante una sesión. Úsalo para auditar cambios de configuración, aplicar políticas de seguridad o bloquear modificaciones no autorizadas de los archivos de configuración.3099Se ejecuta cuando un archivo de configuración cambia durante una sesión. Úsalo para auditar cambios de configuración, aplicar políticas de seguridad o bloquear modificaciones no autorizadas en los archivos de configuración.

3074 3100 

3075Claude Code ejecuta los hooks ConfigChange cuando cambia un archivo de configuración, un archivo de política administrada o un archivo de skill. Para la política administrada, solo los ejecuta cuando cambia `managed-settings.json` o un archivo en `managed-settings.d/`. Aplica la [configuración administrada por el servidor](/docs/es/server-managed-settings) y los cambios en las preferencias administradas de macOS o en la política del registro de Windows sin ejecutarlos. En WSL con [`wslInheritsWindowsSettings`](/docs/es/settings-reference#wslinheritswindowssettings), también aplica un archivo de configuración administrada del lado de Windows que haya cambiado en su sondeo de políticas sin ejecutarlos.3101Claude Code ejecuta los hooks ConfigChange cuando cambia un archivo de configuración, un archivo de política administrada o un archivo de skill. Para la política administrada, los ejecuta solo cuando cambia `managed-settings.json` o un archivo en `managed-settings.d/`. Aplica la [configuración administrada por el servidor](/docs/es/server-managed-settings) y los cambios en las preferencias administradas de macOS o en la política del registro de Windows sin ejecutarlos. En WSL con [`wslInheritsWindowsSettings`](/docs/es/settings-reference#wslinheritswindowssettings), también aplica un archivo de configuración administrada del lado de Windows que haya cambiado, en su sondeo de políticas, sin ejecutarlos.

3076 3102 

3077El matcher filtra por el origen de la configuración:3103El matcher filtra según el origen de la configuración:

3078 3104 

3079| Matcher | Cuándo se activa |3105| Matcher | Cuándo se dispara |

3080| :- | :- |3106| :- | :- |

3081| `user_settings` | Cambia `~/.claude/settings.json` |3107| `user_settings` | Cambia `~/.claude/settings.json` |

3082| `project_settings` | Cambia `.claude/settings.json` |3108| `project_settings` | Cambia `.claude/settings.json` |


3084| `policy_settings` | Cambia `managed-settings.json` o un archivo en `managed-settings.d/` |3110| `policy_settings` | Cambia `managed-settings.json` o un archivo en `managed-settings.d/` |

3085| `skills` | Cambia un archivo de skill en `.claude/skills/` |3111| `skills` | Cambia un archivo de skill en `.claude/skills/` |

3086 3112 

3087Este ejemplo registra todos los cambios de configuración para auditoría de seguridad:3113Este ejemplo registra todos los cambios de configuración para auditorías de seguridad:

3088 3114 

3089```json theme={null}3115```json theme={null}

3090{3116{


3125 Control de decisiones de ConfigChange3151 Control de decisiones de ConfigChange

3126</h4>3152</h4>

3127 3153 

3128Los hooks ConfigChange pueden impedir que los cambios de configuración surtan efecto. Usa el código de salida 2 o un `decision` en JSON para impedir el cambio. Cuando se bloquea, la nueva configuración no se aplica a la sesión en ejecución.3154Los hooks ConfigChange pueden impedir que los cambios de configuración surtan efecto. Usa el código de salida 2 o una `decision` JSON para impedir el cambio. Cuando se bloquea, la nueva configuración no se aplica a la sesión en ejecución.

3129 3155 

3130| Campo | Descripción |3156| Campo | Descripción |

3131| :- | :- |3157| :- | :- |


3139}3165}

3140```3166```

3141 3167 

3142Los cambios de `policy_settings` no se pueden bloquear. Los hooks siguen activándose para los orígenes `policy_settings` cuando cambia un archivo de configuración administrada en la máquina, así que puedes usarlos para registrar esas ediciones, pero cualquier decisión de bloqueo se ignora. Esto garantiza que la configuración administrada por la empresa siempre surta efecto. Claude Code no ejecuta hooks `ConfigChange` cuando llega o se actualiza la [configuración administrada por el servidor](/docs/es/server-managed-settings).3168Los cambios de `policy_settings` no se pueden bloquear. Los hooks siguen disparándose para los orígenes `policy_settings` cuando cambia un archivo de configuración administrada en la máquina, por lo que puedes usarlos para registrar esas ediciones, pero cualquier decisión de bloqueo se ignora. Esto garantiza que la configuración administrada por la empresa siempre surta efecto. Claude Code no ejecuta hooks `ConfigChange` cuando llega o se actualiza la [configuración administrada por el servidor](/docs/es/server-managed-settings).

3143 3169 

3144Claude Code actúa según la decisión de bloqueo de la salida JSON de un hook ConfigChange y descarta `systemMessage` y `continue`. Un cambio bloqueado no muestra ningún mensaje ni a ti ni a Claude, ya sea que bloquees con `reason` o con stderr y el código de salida 2. Claude Code solo escribe una línea en el registro de depuración.3170Claude Code actúa según la decisión de bloqueo de la salida JSON de un hook ConfigChange y descarta `systemMessage` y `continue`. Un cambio bloqueado no muestra ningún mensaje ni a ti ni a Claude, tanto si bloqueas con `reason` como con stderr al salir con 2. Claude Code solo escribe una línea en el registro de depuración.

3145 3171 

3146<h3 id="cwdchanged">3172<h3 id="cwdchanged">

3147 CwdChanged3173 CwdChanged

3148</h3>3174</h3>

3149 3175 

3150Se ejecuta cuando un comando de shell en la conversación principal cambia el directorio de trabajo, por ejemplo cuando Claude ejecuta un comando `cd`. Úsalo para reaccionar a los cambios de directorio: recargar variables de entorno, activar toolchains específicas del proyecto o ejecutar scripts de configuración automáticamente. Se complementa con [FileChanged](#filechanged) para herramientas como [direnv](https://direnv.net/) que gestionan el entorno por directorio.3176Se ejecuta cuando un comando de shell en la conversación principal cambia el directorio de trabajo, por ejemplo cuando Claude ejecuta un comando `cd`. Úsalo para reaccionar a los cambios de directorio: recargar variables de entorno, activar toolchains específicas del proyecto o ejecutar scripts de configuración automáticamente. Se combina con [FileChanged](#filechanged) para herramientas como [direnv](https://direnv.net/) que administran el entorno por directorio.

3151 3177 

3152Los hooks CwdChanged tienen acceso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Las variables escritas en ese archivo persisten en los comandos Bash posteriores hasta el siguiente evento CwdChanged, cuando Claude Code las borra.3178Los hooks CwdChanged tienen acceso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Las variables escritas en ese archivo persisten en los comandos Bash posteriores hasta el siguiente evento CwdChanged, cuando Claude Code las borra.

3153 3179 

3154CwdChanged no admite matchers y se activa en cada ocurrencia.3180CwdChanged no admite matchers y se dispara en cada ocurrencia.

3155 3181 

3156<h4 id="cwdchanged-input">3182<h4 id="cwdchanged-input">

3157 Entrada de CwdChanged3183 Entrada de CwdChanged


3178 3204 

3179| Campo | Descripción |3205| Campo | Descripción |

3180| :- | :- |3206| :- | :- |

3181| `watchPaths` | Array de rutas absolutas. Reemplaza la lista de vigilancia dinámica actual. Las rutas de tu configuración de `matcher` siempre se vigilan. Devolver un array vacío borra la lista dinámica, lo que es típico al entrar en un directorio nuevo |3207| `watchPaths` | Array de rutas absolutas. Reemplaza la lista dinámica de vigilancia actual. Las rutas de tu configuración de `matcher` siempre se vigilan. Devolver un array vacío borra la lista dinámica, lo cual es habitual al entrar en un directorio nuevo |

3182 3208 

3183Los hooks CwdChanged no tienen control de decisiones. No pueden bloquear el cambio de directorio.3209Los hooks CwdChanged no tienen control de decisiones. No pueden bloquear el cambio de directorio.

3184 3210 


3188 DirectoryAdded3214 DirectoryAdded

3189</h3>3215</h3>

3190 3216 

3191Se ejecuta después de que agregas un directorio de trabajo a mitad de sesión con el comando `/add-dir`, o después de que un cliente del SDK agrega uno con la solicitud de control `register_repo_root`. Úsalo para preparar un repositorio recién agregado, por ejemplo instalando sus dependencias.3217Se ejecuta después de que agregas un directorio de trabajo a mitad de la sesión con el comando `/add-dir`, o después de que un cliente del SDK agrega uno con la solicitud de control `register_repo_root`. Úsalo para preparar un repositorio recién agregado, por ejemplo instalando sus dependencias.

3192 3218 

3193Claude Code no activa este evento cuando:3219Claude Code no dispara este evento cuando:

3194 3220 

3195* Pasas un directorio con el flag de inicio `--add-dir`; [SessionStart](#sessionstart) cubre esos directorios3221* Pasas un directorio con el flag de inicio `--add-dir`; [SessionStart](#sessionstart) cubre esos directorios

3196* Agregas un directorio en la pestaña Workspace de `/permissions`3222* Agregas un directorio en la pestaña Workspace de `/permissions`

3197* Agregas un directorio que ya es un directorio de trabajo o que está dentro de uno3223* Agregas un directorio que ya es un directorio de trabajo o que está dentro de uno

3198 3224 

3199Claude Code activa DirectoryAdded después de actualizar el estado del sandbox y de los permisos, por lo que las herramientas en el sandbox ya ven el nuevo directorio cuando se ejecuta tu hook. Los propios comandos del hook se ejecutan fuera del sandbox.3225Claude Code dispara DirectoryAdded después de actualizar el estado del sandbox y de los permisos, por lo que las herramientas en el sandbox ya ven el nuevo directorio cuando se ejecuta tu hook. Los comandos de los hooks en sí se ejecutan fuera del sandbox.

3200 3226 

3201Claude Code no espera al hook: la adición se completa inmediatamente y el hook se ejecuta en segundo plano con el tiempo de espera predeterminado de 600 segundos.3227Claude Code no espera al hook: la adición se completa inmediatamente, y el hook se ejecuta en segundo plano con el tiempo de espera predeterminado de 600 segundos.

3202 3228 

3203El matcher filtra según cómo se agregó el directorio:3229El matcher filtra según cómo se agregó el directorio:

3204 3230 

3205| Matcher | Cuándo se activa |3231| Matcher | Cuándo se dispara |

3206| :- | :- |3232| :- | :- |

3207| `slash_command` | Agregas un directorio con `/add-dir` |3233| `slash_command` | Agregas un directorio con `/add-dir` |

3208| `register_repo_root` | Un cliente del SDK agrega un directorio con la solicitud de control `register_repo_root` |3234| `register_repo_root` | Un cliente del SDK agrega un directorio con la solicitud de control `register_repo_root` |


3231 3257 

3232Los hooks DirectoryAdded no tienen control de decisiones. No pueden bloquear la adición, que ya se completó cuando se ejecuta el hook. Claude Code descarta el campo `continue` de su salida JSON y muestra el resto de forma diferente según el origen:3258Los hooks DirectoryAdded no tienen control de decisiones. No pueden bloquear la adición, que ya se completó cuando se ejecuta el hook. Claude Code descarta el campo `continue` de su salida JSON y muestra el resto de forma diferente según el origen:

3233 3259 

3234* `slash_command`: Claude Code entrega el `systemMessage` del hook a Claude como contexto en el siguiente turno de la conversación, en lugar de mostrártelo a ti. En la transcripción aparece un recuento de los hooks fallidos. La salida completa del fallo va al registro de depuración3260* `slash_command`: Claude Code entrega el `systemMessage` del hook a Claude como contexto en el siguiente turno de la conversación, en lugar de mostrártelo a ti. En la transcripción aparece un recuento de los hooks fallidos. La salida completa de los fallos va al registro de depuración

3235* `register_repo_root`: Claude Code escribe la salida de `systemMessage` y la salida de fallos solo en el registro de depuración3261* `register_repo_root`: Claude Code escribe la salida de `systemMessage` y la salida de los fallos solo en el registro de depuración

3236 3262 

3237<h3 id="filechanged">3263<h3 id="filechanged">

3238 FileChanged3264 FileChanged

3239</h3>3265</h3>

3240 3266 

3241Se ejecuta cuando un archivo vigilado cambia en el disco. Claude Code detecta los cambios con un observador del sistema de archivos, no inspeccionando las llamadas a herramientas, así que ejecuta el hook sin importar qué cambió el archivo: una llamada a las herramientas `Edit` o `Write`, un script que Claude ejecuta con `Bash` o un proceso completamente ajeno a Claude Code. Un uso común es recargar variables de entorno cuando cambian los archivos de configuración del proyecto.3267Se ejecuta cuando un archivo vigilado cambia en el disco. Claude Code detecta los cambios con un observador del sistema de archivos, no inspeccionando las llamadas a herramientas, por lo que ejecuta el hook sin importar qué cambió el archivo: una llamada a la herramienta `Edit` o `Write`, un script que Claude ejecuta con `Bash`, o un proceso completamente ajeno a Claude Code. Un uso común es recargar variables de entorno cuando cambian los archivos de configuración del proyecto.

3242 3268 

3243El `matcher` de este evento cumple dos funciones:3269El `matcher` de este evento cumple dos funciones:

3244 3270 

3245* **Construir la lista de vigilancia**: el valor se divide por `|` y cada segmento se registra como un nombre de archivo literal en el directorio de trabajo, así que `".envrc|.env"` vigila exactamente esos dos archivos. Los patrones de expresiones regulares no son útiles aquí: un valor como `^\.env` vigilaría un archivo llamado literalmente `^\.env`.3271* **Construir la lista de vigilancia**: el valor se divide por `|` y cada segmento se registra como un nombre de archivo literal en el directorio de trabajo, así que `".envrc|.env"` vigila exactamente esos dos archivos. Los patrones regex no sirven aquí: un valor como `^\.env` vigilaría un archivo llamado literalmente `^\.env`.

3246* **Filtrar qué hooks se ejecutan**: cuando un archivo vigilado cambia, el mismo valor filtra qué grupos de hooks se ejecutan usando las [reglas estándar de matcher](#matcher-patterns) contra el nombre base del archivo modificado.3272* **Filtrar qué hooks se ejecutan**: cuando cambia un archivo vigilado, el mismo valor filtra qué grupos de hooks se ejecutan usando las [reglas de matcher](#matcher-patterns) estándar contra el nombre base del archivo modificado.

3247 3273 

3248Este ejemplo normaliza los finales de línea en `data.csv` después de cualquier cambio, incluido un comando `Bash` o un script externo que reescriba el archivo:3274Este ejemplo normaliza los finales de línea en `data.csv` después de cualquier cambio, incluido un comando `Bash` o un script externo que reescriba el archivo:

3249 3275 


3265}3291}

3266```3292```

3267 3293 

3268El hook lee la ruta absoluta del archivo modificado desde el campo `file_path` de la [entrada JSON](#filechanged-input) en stdin. Su guarda `grep` comprueba lo mismo que elimina `perl`, un CR al final de una línea, de modo que la ejecución posterior a una normalización termina sin tocar el archivo. Una guarda más laxa entra en un bucle infinito, porque `perl -i` reescribe el archivo incluso cuando no sustituye nada y Claude Code vuelve a ejecutar el hook después de cada reescritura. Guarda este script en `/path/to/normalize-line-endings.sh` y hazlo ejecutable:3294El hook lee la ruta absoluta del archivo modificado desde el campo `file_path` de la [entrada JSON](#filechanged-input) en stdin. Su comprobación con `grep` busca lo mismo que elimina `perl`, un CR al final de una línea, así que la ejecución posterior a una normalización termina sin tocar el archivo. Una comprobación más laxa entra en un bucle infinito, porque `perl -i` reescribe el archivo aunque no sustituya nada y Claude Code vuelve a ejecutar el hook después de cada reescritura. Guarda este script en `/path/to/normalize-line-endings.sh` y hazlo ejecutable:

3269 3295 

3270```bash theme={null}3296```bash theme={null}

3271#!/bin/bash3297#!/bin/bash


3275fi3301fi

3276```3302```

3277 3303 

3278Para confirmar que el hook funciona, pídele a Claude que agregue una línea CRLF a `data.csv` con un comando `Bash`. Claude Code ejecuta el hook y el archivo termina con finales LF.3304Para confirmar que el hook funciona, pídele a Claude que agregue una línea CRLF a `data.csv` con un comando `Bash`. Claude Code ejecuta el hook y el archivo termina con finales de línea LF.

3279 3305 

3280Para vigilar archivos que no puedes nombrar de antemano, devuelve [`watchPaths`](#filechanged-output) desde un hook para actualizar la lista de vigilancia dinámicamente. Claude Code inicia el observador solo cuando algo nombra un archivo que vigilar, así que inicializa la lista con un grupo FileChanged cuyo matcher nombre al menos un archivo, o con un hook [SessionStart](#sessionstart-decision-control) o [CwdChanged](#cwdchanged) que devuelva `watchPaths`. El matcher sigue filtrando qué grupos de hooks se ejecutan cuando cambia un archivo vigilado, así que deja sin matcher el grupo que gestiona las rutas dinámicas: así coincide con todos los archivos vigilados y no agrega nada a la lista de vigilancia. Un matcher `"*"` también coincide con todos los archivos, pero Claude Code lo registra en la lista de vigilancia como cualquier otro valor, como un archivo literal llamado `*`.3306Para vigilar archivos que no puedes nombrar de antemano, devuelve [`watchPaths`](#filechanged-output) desde un hook para actualizar la lista de vigilancia dinámicamente. Claude Code inicia el observador solo cuando algo nombra un archivo que vigilar, así que inicializa la lista con un grupo FileChanged cuyo matcher nombre al menos un archivo, o con un hook [SessionStart](#sessionstart-decision-control) o [CwdChanged](#cwdchanged) que devuelva `watchPaths`. El matcher sigue filtrando qué grupos de hooks se ejecutan cuando cambia un archivo vigilado, así que omite el matcher en el grupo que maneja las rutas dinámicas: así coincide con todos los archivos vigilados y no agrega nada a la lista de vigilancia. Un matcher `"*"` también coincide con todos los archivos, pero Claude Code lo registra en la lista de vigilancia como cualquier otro valor, como un archivo literal llamado `*`.

3281 3307 

3282Los hooks FileChanged tienen acceso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Las variables escritas en ese archivo persisten en los comandos Bash posteriores hasta el siguiente evento [CwdChanged](#cwdchanged), cuando Claude Code las borra.3308Los hooks FileChanged tienen acceso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Las variables escritas en ese archivo persisten en los comandos Bash posteriores hasta el siguiente evento [CwdChanged](#cwdchanged), cuando Claude Code las borra.

3283 3309 


3311 3337 

3312| Campo | Descripción |3338| Campo | Descripción |

3313| :- | :- |3339| :- | :- |

3314| `watchPaths` | Array de rutas absolutas. Reemplaza la lista de vigilancia dinámica actual. Las rutas de tu configuración de `matcher` siempre se vigilan. Úsalo cuando tu script de hook descubra archivos adicionales que vigilar en función del archivo modificado |3340| `watchPaths` | Array de rutas absolutas. Reemplaza la lista de vigilancia dinámica actual. Las rutas de tu configuración de `matcher` siempre se vigilan. Úsalo cuando tu script de hook descubra archivos adicionales que vigilar según el archivo modificado |

3315 3341 

3316Los hooks FileChanged no tienen control de decisiones. No pueden impedir que se produzca el cambio del archivo.3342Los hooks FileChanged no tienen control de decisión. No pueden impedir que ocurra el cambio del archivo.

3317 3343 

3318Claude Code lee `watchPaths` y `systemMessage` de su salida JSON y descarta `continue`. En las sesiones interactivas, muestra el `systemMessage` como una breve notificación en la terminal. El mensaje no llega al flujo de mensajes del SDK.3344Claude Code lee `watchPaths` y `systemMessage` de su salida JSON y descarta `continue`. En sesiones interactivas, muestra el `systemMessage` como una breve notificación en la terminal. El mensaje no llega al flujo de mensajes del SDK.

3319 3345 

3320<h3 id="worktreecreate">3346<h3 id="worktreecreate">

3321 WorktreeCreate3347 WorktreeCreate


3334 3360 

3335De forma predeterminada, Claude Code crea la copia de trabajo aislada con `git worktree`. Configurar un hook WorktreeCreate reemplaza ese comportamiento predeterminado de git, lo que te permite usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.3361De forma predeterminada, Claude Code crea la copia de trabajo aislada con `git worktree`. Configurar un hook WorktreeCreate reemplaza ese comportamiento predeterminado de git, lo que te permite usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.

3336 3362 

3337Como el hook reemplaza por completo el comportamiento predeterminado, [`.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) no se procesa. Si necesitas copiar archivos de configuración locales como `.env` al nuevo worktree, hazlo dentro de tu script del hook.3363Como el hook reemplaza por completo el comportamiento predeterminado, [`.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) no se procesa. Si necesitas copiar archivos de configuración locales como `.env` al nuevo worktree, hazlo dentro de tu script de hook.

3338 3364 

3339El hook debe devolver la ruta al directorio del worktree creado. Claude Code usa esta ruta como directorio de trabajo para la sesión aislada. Consulta [Salida de WorktreeCreate](#worktreecreate-output) para ver cómo cada tipo de hook devuelve la ruta.3365El hook debe devolver la ruta al directorio del worktree creado. Claude Code usa esta ruta como directorio de trabajo para la sesión aislada. Consulta [Salida de WorktreeCreate](#worktreecreate-output) para ver cómo devuelve la ruta cada tipo de hook.

3340 3366 

3341Claude Code actúa según el éxito del hook y la ruta devuelta, y descarta `systemMessage` y `continue`.3367Claude Code actúa según el éxito del hook y la ruta devuelta, y descarta `systemMessage` y `continue`.

3342 3368 


3359}3385}

3360```3386```

3361 3387 

3362El hook lee el `name` del worktree desde la entrada JSON en stdin, extrae una copia nueva en un directorio nuevo e imprime la ruta del directorio. El `echo` de la última línea es lo que Claude Code lee como la ruta del worktree. Redirige cualquier otra salida a stderr para que no interfiera con la ruta.3388El hook lee el `name` del worktree de la entrada JSON en stdin, extrae una copia nueva en un directorio nuevo e imprime la ruta del directorio. El `echo` de la última línea es lo que Claude Code lee como la ruta del worktree. Redirige cualquier otra salida a stderr para que no interfiera con la ruta.

3363 3389 

3364<h4 id="worktreecreate-input">3390<h4 id="worktreecreate-input">

3365 Entrada de WorktreeCreate3391 Entrada de WorktreeCreate

3366</h4>3392</h4>

3367 3393 

3368Además de los [campos de entrada comunes](#common-input-fields), los hooks WorktreeCreate reciben el campo `name`. Es un identificador slug para el nuevo worktree, especificado por el usuario o generado automáticamente, por ejemplo `bold-oak-a3f2`.3394Además de los [campos de entrada comunes](#common-input-fields), los hooks WorktreeCreate reciben el campo `name`. Es un identificador tipo slug para el nuevo worktree, especificado por el usuario o generado automáticamente, por ejemplo `bold-oak-a3f2`.

3369 3395 

3370```json theme={null}3396```json theme={null}

3371{3397{


3381 Salida de WorktreeCreate3407 Salida de WorktreeCreate

3382</h4>3408</h4>

3383 3409 

3384Los hooks WorktreeCreate no usan el modelo estándar de decisión de permitir/bloquear. En cambio, el éxito o fracaso del hook determina el resultado. El hook debe devolver la ruta al directorio del worktree creado:3410Los hooks WorktreeCreate no usan el modelo estándar de decisión de permitir/bloquear. En su lugar, el éxito o el fallo del hook determina el resultado. El hook debe devolver la ruta al directorio del worktree creado:

3385 3411 

3386* **Hooks de comando** (`type: "command"`): imprime la ruta como la última línea no vacía de stdout. Claude Code elimina los códigos de escape ANSI antes de leer esa línea, por lo que los banners de inicio del shell impresos antes de tu `echo` se ignoran. Redirige cualquier otra salida del hook a stderr.3412* **Hooks de comando** (`type: "command"`): imprime la ruta como la última línea no vacía de stdout. Claude Code elimina los códigos de escape ANSI antes de leer esa línea, así que los banners de inicio del shell impresos antes de tu `echo` se ignoran. Redirige cualquier otra salida del hook a stderr.

3387* **Hooks HTTP** (`type: "http"`): devuelve `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` en el cuerpo de la respuesta.3413* **Hooks HTTP** (`type: "http"`): devuelve `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` en el cuerpo de la respuesta.

3388 3414 

3389Si el hook falla o no produce ninguna ruta, la creación del worktree falla con un error.3415Si el hook falla o no produce ninguna ruta, la creación del worktree falla con un error.

3390 3416 

3391Claude Code resuelve una ruta relativa con respecto al directorio en el que se ejecutó el hook, colapsando cualquier segmento `.` o `..` que contenga. Si la ruta resultante no es un directorio al que Claude Code pueda entrar, la sesión imprime un error que nombra la ruta y termina con el código 1.3417Claude Code resuelve una ruta relativa respecto al directorio en el que se ejecutó el hook, colapsando cualquier segmento `.` o `..` que contenga. Si la ruta resultante no es un directorio al que Claude Code pueda entrar, la sesión imprime un error que nombra la ruta y termina con código 1.

3392 3418 

3393Claude Code rechaza una ruta absoluta que contenga segmentos `.` o `..`, y cualquier ruta que pase por un enlace simbólico debajo de la raíz del repositorio, porque un enlace simbólico confirmado en el repositorio podría redirigir el worktree fuera de él. El error nombra el componente rechazado. Devuelve una ruta normalizada que no pase por un enlace simbólico dentro del repositorio. Antes de v2.1.216, la creación del worktree seguía la ruta del hook sin esta verificación.3419Claude Code rechaza una ruta absoluta que contenga segmentos `.` o `..`, y cualquier ruta que pase por un enlace simbólico debajo de la raíz del repositorio, porque un enlace simbólico incluido en un commit del repositorio podría redirigir el worktree fuera de él. El error nombra el componente rechazado. Devuelve una ruta normalizada que no pase por un enlace simbólico dentro del repositorio. Antes de v2.1.216, la creación del worktree seguía la ruta del hook sin esta comprobación.

3394 3420 

3395<h3 id="worktreeremove">3421<h3 id="worktreeremove">

3396 WorktreeRemove3422 WorktreeRemove

3397</h3>3423</h3>

3398 3424 

3399Se ejecuta cuando Claude Code limpia un worktree que creó tu hook [`WorktreeCreate`](#worktreecreate). El evento se activa cuando:3425Se ejecuta cuando Claude Code limpia un worktree que creó tu hook [`WorktreeCreate`](#worktreecreate). El evento se dispara cuando:

3400 3426 

3401* Sales de una [sesión de worktree](/docs/es/worktrees#start-claude-in-a-worktree) interactiva y eliges eliminar el worktree cuando Claude Code te lo pregunta3427* Sales de una [sesión de worktree](/docs/es/worktrees#start-claude-in-a-worktree) interactiva y eliges eliminar el worktree cuando Claude Code te lo pregunta

3402* Sales de una sesión de worktree interactiva a la que no le has [puesto nombre](/docs/es/sessions#name-your-sessions), Claude Code no encuentra archivos modificados ni sin seguimiento, y elimina el worktree sin preguntarte3428* Sales de una sesión de worktree interactiva a la que no le has [puesto nombre](/docs/es/sessions#name-your-sessions), Claude Code no encuentra archivos modificados ni sin seguimiento, y elimina el worktree sin preguntarte

3403* Eliminas una [sesión en segundo plano](/docs/es/agent-view#what-deleting-a-session-removes) que se ejecuta en el worktree3429* Eliminas una [sesión en segundo plano](/docs/es/agent-view#what-deleting-a-session-removes) que se ejecuta en el worktree

3404* Le pides a Claude que salga y elimine el worktree durante una sesión, y Claude lo elimina con la herramienta [`ExitWorktree`](/docs/es/tools-reference)3430* Le pides a Claude que salga y elimine el worktree durante una sesión, y Claude lo elimina con la herramienta [`ExitWorktree`](/docs/es/tools-reference)

3405* Una sesión que [`claude remote-control`](/docs/es/remote-control#start-a-remote-control-session) inició en modo `worktree` termina sin fallar, y Claude Code no encuentra archivos modificados ni sin seguimiento ni commits nuevos en su worktree3431* Una sesión que [`claude remote-control`](/docs/es/remote-control#start-a-remote-control-session) inició en modo `worktree` termina sin fallar, y Claude Code no encuentra archivos modificados ni sin seguimiento ni commits nuevos en su worktree

3406* Detienes `claude remote-control` mientras las sesiones que inició en modo `worktree` siguen en ejecución, y Claude Code no encuentra archivos modificados ni sin seguimiento ni commits nuevos en sus worktrees3432* Detienes `claude remote-control` mientras las sesiones que inició en modo `worktree` siguen ejecutándose, y Claude Code no encuentra archivos modificados ni sin seguimiento ni commits nuevos en sus worktrees

3407 3433 

3408Cuando un subagente o un agente de un flujo de trabajo termina, Claude Code conserva el worktree que tu hook WorktreeCreate creó para él y no ejecuta tu hook WorktreeRemove. Elimina esos worktrees tú mismo cuando el trabajo esté terminado.3434Cuando un subagente o un agente de un flujo de trabajo termina, Claude Code conserva el worktree que tu hook WorktreeCreate creó para él y no ejecuta tu hook WorktreeRemove. Elimina esos worktrees tú mismo cuando termine el trabajo.

3409 3435 

3410Claude Code no te pregunta antes de que tu hook se ejecute para una llamada a `ExitWorktree` o una limpieza de `claude remote-control`. `ExitWorktree` se niega a eliminar un worktree creado por un hook a menos que la llamada pase [`discard_changes: true`](/docs/es/agent-sdk/typescript#exitworktree), lo que convierte a tu hook en la última comprobación en esa ruta.3436Claude Code no te pregunta antes de que tu hook se ejecute para una llamada a `ExitWorktree` o una limpieza de `claude remote-control`. `ExitWorktree` se niega a eliminar un worktree creado por un hook a menos que la llamada pase [`discard_changes: true`](/docs/es/agent-sdk/typescript#exitworktree), lo que convierte a tu hook en la última comprobación en esa vía.

3411 3437 

3412Claude Code usa git para buscar archivos modificados o sin seguimiento, por lo que no encuentra ninguno en un worktree que no sea un checkout de git ni esté dentro de uno, incluso cuando el directorio contiene trabajo sin confirmar. Comprueba si existe ese trabajo en tu hook WorktreeRemove antes de que elimine cualquier cosa.3438Claude Code usa git para buscar archivos modificados o sin seguimiento, así que no encuentra ninguno en un worktree que no sea un checkout de git ni esté dentro de uno, aunque el directorio contenga trabajo sin commit. Comprueba ese trabajo en tu hook WorktreeRemove antes de que elimine nada.

3413 3439 

3414Para los worktrees basados en git, Claude Code gestiona la limpieza automáticamente con `git worktree remove`. Si configuraste un hook WorktreeCreate, combínalo con un hook WorktreeRemove para controlar la limpieza:3440Para los worktrees basados en git, Claude Code gestiona la limpieza automáticamente con `git worktree remove`. Si configuraste un hook WorktreeCreate, combínalo con un hook WorktreeRemove para controlar la limpieza:

3415 3441 

3416* **Sin hook WorktreeRemove**: Claude Code recurre a git para una eliminación al salir o mediante `ExitWorktree`, y conserva el worktree cuando `claude remote-control` hace la limpieza:3442* **Sin hook WorktreeRemove**: Claude Code recurre a git para una eliminación al salir o mediante `ExitWorktree`, y conserva el worktree cuando `claude remote-control` hace la limpieza:

3417 * **Sales de una sesión de worktree, o Claude llama a `ExitWorktree`**: Claude Code elimina la ruta que devolvió tu hook WorktreeCreate como lo haría `git worktree remove --force`, así que se elimina un worktree que git reconoce. Un worktree que git no reconoce, por ejemplo uno que tu hook creó con un sistema de control de versiones distinto de git, se queda en el disco.3443 * **Sales de una sesión de worktree, o Claude llama a `ExitWorktree`**: Claude Code elimina la ruta que devolvió tu hook WorktreeCreate como lo haría `git worktree remove --force`, así que se elimina un worktree que git reconoce. Un worktree que git no reconoce, por ejemplo uno que tu hook creó con un sistema de control de versiones distinto de git, permanece en el disco.

3418 * **`claude remote-control` limpia el worktree de una sesión**: el worktree se queda en el disco, y la terminal que ejecuta `claude remote-control` muestra `worktree removal failed, kept: <path>`.3444 * **`claude remote-control` limpia el worktree de una sesión**: el worktree permanece en el disco, y la terminal que ejecuta `claude remote-control` muestra `worktree removal failed, kept: <path>`.

3419 * **Eliminas una sesión en segundo plano**: consulta [Qué elimina borrar una sesión](/docs/es/agent-view#what-deleting-a-session-removes).3445 * **Eliminas una sesión en segundo plano**: consulta [Qué elimina borrar una sesión](/docs/es/agent-view#what-deleting-a-session-removes).

3420* **El hook termina con 0**: el worktree se considera eliminado. Claude Code no lee nada más del hook, así que asegúrate de que tu hook haya eliminado el directorio.3446* **El hook termina con 0**: el worktree cuenta como eliminado. Claude Code no lee nada más del hook, así que asegúrate de que tu hook haya eliminado el directorio.

3421* **El hook termina con un código distinto de cero**: la eliminación falla si el directorio en `worktree_path` sigue existiendo después, y el worktree permanece en el disco sin recurrir a git. Un hook que eliminó el directorio antes de terminar con un código distinto de cero se considera eliminado. Para saber cómo se informa el fallo, consulta [Entrada de WorktreeRemove](#worktreeremove-input).3447* **El hook termina con un código distinto de cero**: la eliminación falla si el directorio en `worktree_path` sigue existiendo después, y el worktree permanece en el disco sin recurrir a git. Un hook que eliminó el directorio antes de terminar con un código distinto de cero cuenta como eliminado. Para saber cómo se informa el fallo, consulta [Entrada de WorktreeRemove](#worktreeremove-input).

3422 3448 

3423Claude Code nunca elimina una rama que pertenezca a un worktree creado por un hook, porque solo conoce la ruta que devolvió tu hook WorktreeCreate. Si tu hook WorktreeCreate crea una rama, elimínala en tu hook WorktreeRemove.3449Claude Code nunca elimina una rama perteneciente a un worktree creado por un hook, porque solo conoce la ruta que devolvió tu hook WorktreeCreate. Si tu hook WorktreeCreate crea una rama, elimínala en tu hook WorktreeRemove.

3424 3450 

3425Claude Code descarta los [campos de salida JSON](#json-output) de un hook WorktreeRemove, como `systemMessage` y `continue`.3451Claude Code descarta los [campos de salida JSON](#json-output) de un hook WorktreeRemove, como `systemMessage` y `continue`.

3426 3452 

3427Al eliminar una sesión en segundo plano, Claude Code verifica la ruta del worktree almacenada antes de ejecutar el hook y rechaza una ruta que sea un enlace simbólico o que pase por uno por debajo de la raíz del repositorio. En esa ruta, el hook se ejecuta para un worktree que aún contiene archivos solo cuando confirmas la eliminación en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes); para un worktree así, [`claude rm`](/docs/es/agent-view#manage-sessions-from-the-shell) conserva la sesión y el worktree en su lugar. Antes de v2.1.216, el hook se ejecutaba sobre la ruta almacenada sin estas comprobaciones.3453Al eliminar una sesión en segundo plano, Claude Code verifica la ruta del worktree almacenada antes de ejecutar el hook y rechaza una ruta que sea un enlace simbólico o que pase por uno debajo de la raíz del repositorio. En esa vía, el hook se ejecuta para un worktree que todavía contiene archivos solo cuando confirmas la eliminación en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes); para un worktree así, [`claude rm`](/docs/es/agent-view#manage-sessions-from-the-shell) conserva la sesión y el worktree. Antes de v2.1.216, el hook se ejecutaba sobre la ruta almacenada sin estas comprobaciones.

3428 3454 

3429Claude Code pasa la ruta devuelta por WorktreeCreate como `worktree_path` en la entrada del hook. Este ejemplo lee esa ruta y elimina el directorio:3455Claude Code pasa la ruta devuelta por WorktreeCreate como `worktree_path` en la entrada del hook. Este ejemplo lee esa ruta y elimina el directorio:

3430 3456 


3464El código de salida de un hook WorktreeRemove decide el resultado. Cuando un hook termina con un código distinto de cero y el directorio en `worktree_path` sigue existiendo después, la eliminación falla:3490El código de salida de un hook WorktreeRemove decide el resultado. Cuando un hook termina con un código distinto de cero y el directorio en `worktree_path` sigue existiendo después, la eliminación falla:

3465 3491 

3466* El worktree permanece en el disco, y el comando del hook y su stderr van al [registro de depuración](#debug-hooks).3492* El worktree permanece en el disco, y el comando del hook y su stderr van al [registro de depuración](#debug-hooks).

3467* Si estabas eliminando una sesión en segundo plano, la sesión también permanece. El mensaje de rechazo en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes) informa cómo terminó el hook, como `exited 1`, cita el inicio de su stderr e indica si volver a eliminar la sesión elimina el directorio de todos modos.3493* Si estabas eliminando una sesión en segundo plano, la sesión también permanece. El mensaje de rechazo en la [vista de agentes](/docs/es/agent-view#what-deleting-a-session-removes) informa cómo terminó el hook, por ejemplo `exited 1`, cita el comienzo de su stderr e indica si volver a eliminar la sesión elimina el directorio de todos modos.

3468* Si `claude remote-control` estaba limpiando el worktree de una sesión, la terminal que lo ejecuta muestra `worktree removal failed, kept: <path>`.3494* Si `claude remote-control` estaba limpiando el worktree de una sesión, la terminal que lo ejecuta muestra `worktree removal failed, kept: <path>`.

3469 3495 

3470<h3 id="precompact">3496<h3 id="precompact">

3471 PreCompact3497 PreCompact

3472</h3>3498</h3>

3473 3499 

3474Se ejecuta antes de que Claude Code esté a punto de ejecutar una operación de compactación.3500Se ejecuta antes de que Claude Code vaya a ejecutar una operación de compactación.

3475 3501 

3476El valor del matcher indica si la compactación se activó de forma manual o automática:3502El valor del matcher indica si la compactación se activó manual o automáticamente:

3477 3503 

3478| Matcher | Cuándo se activa |3504| Matcher | Cuándo se dispara |

3479| :- | :- |3505| :- | :- |

3480| `manual` | `/compact` |3506| `manual` | `/compact` |

3481| `auto` | Compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window) |3507| `auto` | Compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window), y [compactación por inactividad](/docs/es/settings-reference#idlecompaction) |

3482 3508 

3483Termina con el código 2 para bloquear la compactación. Para un `/compact` manual, el mensaje de stderr se muestra al usuario. También puedes bloquearla devolviendo JSON con `"decision": "block"`.3509Termina con el código 2 para bloquear la compactación. Para un `/compact` manual, el mensaje de stderr se muestra al usuario. También puedes bloquear devolviendo JSON con `"decision": "block"`.

3484 3510 

3485Bloquear la compactación automática tiene efectos diferentes según cuándo se active. Si la compactación se activó de forma proactiva antes del límite de contexto, Claude Code la omite y la conversación continúa sin compactar. Si la compactación se activó para recuperarse de un error de límite de contexto ya devuelto por la API, el error subyacente aparece y la solicitud actual falla.3511Bloquear la compactación automática tiene efectos distintos según cuándo se dispare. Si la compactación se activó de forma proactiva antes del límite de contexto, Claude Code la omite y la conversación continúa sin compactar. Si la compactación se activó para recuperarse de un error de límite de contexto ya devuelto por la API, aparece el error subyacente y la solicitud actual falla.

3486 3512 

3487Claude Code descarta los campos `systemMessage` y `continue` de un hook PreCompact.3513Claude Code descarta los campos `systemMessage` y `continue` de un hook PreCompact.

3488 3514 


3511 3537 

3512Se aplican los mismos valores de matcher que para `PreCompact`:3538Se aplican los mismos valores de matcher que para `PreCompact`:

3513 3539 

3514| Matcher | Cuándo se activa |3540| Matcher | Cuándo se dispara |

3515| :- | :- |3541| :- | :- |

3516| `manual` | Después de `/compact` |3542| `manual` | Después de `/compact` |

3517| `auto` | Después de la compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window) |3543| `auto` | Después de la compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window), y después de la [compactación por inactividad](/docs/es/settings-reference#idlecompaction) |

3518 3544 

3519<h4 id="postcompact-input">3545<h4 id="postcompact-input">

3520 Entrada de PostCompact3546 Entrada de PostCompact


3539 PreModelSwitch3565 PreModelSwitch

3540</h3>3566</h3>

3541 3567 

3542Se ejecuta antes de que Claude Code aplique un cambio de modelo que tú o un cliente solicitaron. Úsalo para bloquear un cambio, requerir confirmación o mostrar lo que costará el cambio antes de que ocurra.3568Se ejecuta antes de que Claude Code aplique un cambio de modelo que tú o un cliente solicitaron. Úsalo para bloquear un cambio, exigir confirmación o mostrar lo que costará el cambio antes de que ocurra.

3543 3569 

3544PreModelSwitch requiere Claude Code v2.1.251 o posterior. Claude Code lo ejecuta para estas solicitudes:3570PreModelSwitch requiere Claude Code v2.1.251 o posterior. Claude Code lo ejecuta para estas solicitudes:

3545 3571 

3546* `/model <name>` y el selector de `/model`3572* `/model <name>` y el selector de `/model`

3547* El selector de modelo de `Option+P` o `Alt+P`3573* El selector de modelo con `Option+P` o `Alt+P`

3548* El ajuste Model en `/config`3574* El ajuste Model en `/config`

3549* Activar el [modo rápido](/docs/es/fast-mode) cuando eso cambia el modelo de la sesión3575* Activar el [modo rápido](/docs/es/fast-mode) cuando eso cambia el modelo de la sesión

3550* Una solicitud `set_model`, o un cambio de modelo en una solicitud `apply_flag_settings`, desde un host del [Agent SDK](/docs/es/agent-sdk/typescript#query-object) o desde [Remote Control](/docs/es/remote-control)3576* Una solicitud `set_model`, o un cambio de modelo en una solicitud `apply_flag_settings`, desde un host del [Agent SDK](/docs/es/agent-sdk/typescript#query-object) o [Remote Control](/docs/es/remote-control)

3551 3577 

3552Claude Code no ejecuta hooks PreModelSwitch para los cambios que realiza por su cuenta, como un [respaldo automático de modelo](/docs/es/model-config#automatic-model-fallback) o la restauración del modelo al reanudar una sesión. Esos cambios solo llegan a [PostModelSwitch](#postmodelswitch).3578Claude Code no ejecuta hooks PreModelSwitch para los cambios que hace por su cuenta, como un [respaldo automático de modelo](/docs/es/model-config#automatic-model-fallback) o la restauración del modelo cuando reanudas una sesión. Esos cambios solo llegan a [PostModelSwitch](#postmodelswitch).

3553 3579 

3554Claude Code compara el matcher con el nombre canónico del modelo al que está cambiando la sesión, ignorando cualquier sufijo `[1m]`. Un alias como `opus`, un ID de modelo con fecha y un ID específico del proveedor, como un ID de modelo de Amazon Bedrock, coinciden todos con el único nombre canónico al que se resuelven, por lo que `claude-opus-5` cubre todas las formas de escribir Opus 5.3580Claude Code compara el matcher con el nombre canónico del modelo al que cambia la sesión, ignorando cualquier sufijo `[1m]`. Un alias como `opus`, un ID de modelo con fecha y un ID específico del proveedor, como un ID de modelo de Amazon Bedrock, coinciden todos con el único nombre canónico al que se resuelven, así que `claude-opus-5` cubre todas las formas de escribir Opus 5.

3555 3581 

3556Cuando Claude Code no puede determinar un nombre canónico para el destino, por ejemplo un ID de modelo personalizado que solo conoce tu [gateway de LLM](/docs/es/llm-gateway), ejecuta todos los hooks PreModelSwitch sin importar el matcher. Por lo tanto, un hook que bloquea debe comprobar `to_model` en su entrada en lugar de depender solo del matcher.3582Cuando Claude Code no puede determinar un nombre canónico para el destino, por ejemplo un ID de modelo personalizado que solo conoce tu [gateway de LLM](/docs/es/llm-gateway), ejecuta todos los hooks PreModelSwitch independientemente del matcher. Por eso, un hook que bloquea debe comprobar `to_model` en su entrada en lugar de depender solo del matcher.

3557 3583 

3558Escribe el matcher como un nombre exacto, una lista separada por `|` como `claude-opus-4-6|claude-opus-5`, o una expresión regular como `.*opus.*`. Este ejemplo usa un matcher de nombre exacto y también comprueba `to_model` en la entrada del hook, por lo que rechaza un cambio a Opus 4.6 terminando con el código 2 y deja pasar cualquier otro destino:3584Escribe el matcher como un nombre exacto, una lista separada por `|` como `claude-opus-4-6|claude-opus-5`, o una expresión regular como `.*opus.*`. Este ejemplo usa un matcher de nombre exacto y además comprueba `to_model` en la entrada del hook, así que rechaza un cambio a Opus 4.6 terminando con el código 2 y deja pasar cualquier otro destino:

3559 3585 

3560<Tabs>3586<Tabs>

3561 <Tab title="macOS/Linux">3587 <Tab title="macOS/Linux">


3581 </Tab>3607 </Tab>

3582 3608 

3583 <Tab title="Windows (PowerShell)">3609 <Tab title="Windows (PowerShell)">

3584 Registra un hook de comando que ejecute un script a través de PowerShell:3610 Registra un hook de comando que ejecute un script mediante PowerShell:

3585 3611 

3586 ```json theme={null}3612 ```json theme={null}

3587 {3613 {


3627 Entrada de PreModelSwitch3653 Entrada de PreModelSwitch

3628</h4>3654</h4>

3629 3655 

3630Además de los [campos de entrada comunes](#common-input-fields), los hooks PreModelSwitch reciben los campos de esta tabla. Los últimos cinco describen lo que cuesta volver a enviar la conversación al nuevo modelo, para que un hook pueda mostrar esa cifra antes de que ocurra el cambio.3656Además de los [campos de entrada comunes](#common-input-fields), los hooks PreModelSwitch reciben los campos de esta tabla. Los últimos cinco describen lo que cuesta reenviar la conversación al nuevo modelo, para que un hook pueda mostrar esa cifra antes de que ocurra el cambio.

3631 3657 

3632| Campo | Tipo | Descripción |3658| Campo | Tipo | Descripción |

3633| :- | :- | :- |3659| :- | :- | :- |

3634| `from_model` | string | ID del modelo desde el que se realiza el cambio |3660| `from_model` | string | ID del modelo desde el que se cambia |

3635| `to_model` | string | ID del modelo al que se realiza el cambio. El matcher se compara con el nombre canónico de este modelo |3661| `to_model` | string | ID del modelo al que se cambia. El matcher se compara con el nombre canónico de este modelo |

3636| `requested_model` | string o `null` | El modelo que nombró la solicitud: un alias como `opus`, un ID de modelo completo, o `null` cuando la solicitud era para el modelo predeterminado |3662| `requested_model` | string o `null` | El modelo que nombró la solicitud: un alias como `opus`, un ID de modelo completo, o `null` cuando la solicitud era para el modelo predeterminado |

3637| `source` | string | De dónde vino la solicitud: `"command"` para `/model <name>`, el ajuste Model en `/config` o la activación del modo rápido; `"picker"` para un selector de modelo; `"sdk"` para una solicitud `set_model`, o un cambio de modelo en una solicitud `apply_flag_settings`, desde un host del Agent SDK o desde Remote Control |3663| `source` | string | De dónde vino la solicitud: `"command"` para `/model <name>`, el ajuste Model en `/config` o la activación del modo rápido; `"picker"` para un selector de modelo; `"sdk"` para una solicitud `set_model`, o un cambio de modelo en una solicitud `apply_flag_settings`, desde un host del Agent SDK o Remote Control |

3638| `context_tokens` | number | Tokens que la siguiente solicitud vuelve a enviar como su prompt: la suma de los tokens de entrada, lectura de caché, creación de caché y salida de la última respuesta en la conversación principal. `0` antes de la primera respuesta |3664| `context_tokens` | number | Tokens que la siguiente solicitud reenvía como su prompt: los tokens de entrada, de lectura de caché, de creación de caché y de salida de la última respuesta en la conversación principal, combinados. `0` antes de la primera respuesta |

3639| `prompt_cache_warm` | boolean | Si es probable que la caché de prompts del modelo actual siga activa, lo que significa que el cambio la pierde |3665| `prompt_cache_warm` | boolean | Si es probable que la caché de prompts del modelo actual siga caliente, lo que significa que el cambio la pierde |

3640| `cache_ttl` | string | [Duración de la caché de prompts](/docs/es/prompt-caching#cache-lifetime) que Claude Code solicita para esta sesión: `"5m"` o `"1h"` |3666| `cache_ttl` | string | [Duración de la caché de prompts](/docs/es/prompt-caching#cache-lifetime) que Claude Code solicita para esta sesión: `"5m"` o `"1h"` |

3641| `estimated_cache_write_usd` | number | Costo estimado en dólares estadounidenses de escribir `context_tokens` en la caché de prompts de `to_model` con la tarifa de `cache_ttl`, sin incluir la siguiente respuesta. Es posible que el servidor no necesite volver a almacenar en caché todo el contexto, así que trátalo como una estimación |3667| `estimated_cache_write_usd` | number | Costo estimado en dólares estadounidenses de escribir `context_tokens` en la caché de prompts de `to_model` a la tarifa de `cache_ttl`, sin incluir la siguiente respuesta. Es posible que el servidor no necesite volver a almacenar en caché todo el contexto, así que trátalo como una estimación |

3642| `pricing` | string | Cómo calculó Claude Code el precio de `estimated_cache_write_usd`: `"configured"` con las tarifas propias de tu organización cuando las ha configurado, `"catalog"` con el precio de lista, o `"default"` cuando `to_model` no tiene un precio conocido y Claude Code asumió una tarifa predeterminada |3668| `pricing` | string | Cómo calculó Claude Code el precio de `estimated_cache_write_usd`: `"configured"` con las tarifas propias de tu organización cuando las ha configurado, `"catalog"` a precio de lista, o `"default"` cuando `to_model` no tiene un precio conocido y Claude Code asumió una tarifa predeterminada |

3643 3669 

3644Este ejemplo muestra la entrada para `/model opus` en una sesión que usa Sonnet 5:3670Este ejemplo muestra la entrada para `/model opus` en una sesión que usa Sonnet 5:

3645 3671 


3665 Control de decisión de PreModelSwitch3691 Control de decisión de PreModelSwitch

3666</h4>3692</h4>

3667 3693 

3668Los hooks `PreModelSwitch` pueden cancelar el cambio, pedir al usuario que lo confirme o dejar que continúe. El código de salida 2 o un `decision: "block"` de nivel superior cancela el cambio.3694Los hooks `PreModelSwitch` pueden cancelar el cambio, pedirle al usuario que lo confirme o dejar que continúe. El código de salida 2 o un `decision: "block"` de nivel superior cancela el cambio.

3669 3695 

3670Para un control más preciso, devuelve `permissionDecision` y `permissionDecisionReason` en un objeto `hookSpecificOutput`, como en [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` acepta `"allow"`, `"deny"` y `"ask"`. No acepta `"defer"`, `updatedInput` ni `additionalContext`. La siguiente tabla describe ambos campos:3696Para un control más fino, devuelve `permissionDecision` y `permissionDecisionReason` en un objeto `hookSpecificOutput`, como en [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` acepta `"allow"`, `"deny"` y `"ask"`. No acepta `"defer"`, `updatedInput` ni `additionalContext`. La siguiente tabla describe ambos campos:

3671 3697 

3672| Campo | Descripción |3698| Campo | Descripción |

3673| :- | :- |3699| :- | :- |

3674| `permissionDecision` | `"allow"` continúa y omite la [confirmación que Claude Code muestra mientras la caché de prompts está activa](/docs/es/prompt-caching#switching-models). `"deny"` cancela el cambio. `"ask"` pide al usuario que lo confirme |3700| `permissionDecision` | `"allow"` continúa y omite la [confirmación que Claude Code muestra mientras la caché de prompts está caliente](/docs/es/prompt-caching#switching-models). `"deny"` cancela el cambio. `"ask"` le pide al usuario que lo confirme |

3675| `permissionDecisionReason` | Para `"deny"`, se muestra al usuario como el motivo por el que se bloqueó el cambio, o se devuelve como el error de una solicitud `set_model`. Para `"ask"`, se muestra en la solicitud de confirmación. Se ignora para `"allow"` |3701| `permissionDecisionReason` | Para `"deny"`, se muestra al usuario como el motivo por el que se bloqueó el cambio, o se devuelve como el error de una solicitud `set_model`. Para `"ask"`, se muestra en la solicitud de confirmación. Se ignora para `"allow"` |

3676 3702 

3677Solo `/model` en una sesión interactiva puede mostrar la solicitud de `"ask"`. En todas las demás superficies, incluido el modo no interactivo con el flag `-p`, `/config` y las solicitudes `set_model`, Claude Code trata `"ask"` como un rechazo.3703Solo `/model` en una sesión interactiva puede mostrar la solicitud de `"ask"`. En todas las demás superficies, incluido el modo no interactivo con el flag `-p`, `/config` y las solicitudes `set_model`, Claude Code trata `"ask"` como un rechazo.

3678 3704 

3679Este ejemplo pide al usuario que confirme y cita el recuento de tokens de `context_tokens`:3705Este ejemplo le pide al usuario que confirme y cita el recuento de tokens de `context_tokens`:

3680 3706 

3681```json theme={null}3707```json theme={null}

3682{3708{


3690 3716 

3691Cuando varios hooks PreModelSwitch devuelven decisiones diferentes, la precedencia es `deny` > `ask` > `allow`.3717Cuando varios hooks PreModelSwitch devuelven decisiones diferentes, la precedencia es `deny` > `ask` > `allow`.

3692 3718 

3693Claude Code muestra al usuario cualquier `systemMessage` que devuelva tu hook, independientemente de la decisión, por lo que un hook que informa costos puede devolver `{"systemMessage": "..."}` y terminar con 0.3719Claude Code le muestra al usuario cualquier `systemMessage` que devuelva tu hook independientemente de la decisión, así que un hook de informe de costos puede devolver `{"systemMessage": "..."}` y terminar con 0.

3694 3720 

3695Un hook PreModelSwitch que no responde antes de que se agote su tiempo de espera bloquea el cambio. Para saber qué hace un tiempo de espera agotado en otros eventos, consulta [Tiempos de espera](#timeouts). El tiempo de espera predeterminado para este evento es de 30 segundos. `PreModelSwitch` solo ejecuta hooks `command`, `http` y `mcp_tool`, por lo que los valores predeterminados de `prompt` y `agent` no se aplican.3721Un hook PreModelSwitch que no responde antes de su tiempo de espera bloquea el cambio. Para saber qué hace un tiempo de espera agotado en otros eventos, consulta [Tiempos de espera](#timeouts). El tiempo de espera predeterminado para este evento es de 30 segundos. `PreModelSwitch` solo ejecuta hooks `command`, `http` y `mcp_tool`, así que los valores predeterminados de `prompt` y `agent` no se aplican.

3696 3722 

3697Un hook que termina con un código distinto de 0 o 2 y no imprime ninguna decisión JSON es un error no bloqueante, como se describe en [Otros códigos de salida](#other-exit-codes).3723Un hook que termina con un código distinto de 0 o 2 y no imprime ninguna decisión JSON es un error no bloqueante, como se describe en [Otros códigos de salida](#other-exit-codes).

3698 3724 


3700 PostModelSwitch3726 PostModelSwitch

3701</h3>3727</h3>

3702 3728 

3703Se ejecuta después de que cambia el modelo de la sesión. Úsalo para darle a Claude indicaciones específicas del modelo sin editar cada CLAUDE.md, por ejemplo una instrucción para toda la organización que se aplique en ciertos modelos.3729Se ejecuta después de que cambia el modelo de la sesión. Úsalo para darle a Claude orientación específica del modelo sin editar cada CLAUDE.md, por ejemplo una instrucción para toda la organización que se aplica en ciertos modelos.

3704 3730 

3705PostModelSwitch requiere Claude Code v2.1.251 o posterior. No puede bloquear, porque el modelo ya cambió. Claude Code ejecuta hooks PostModelSwitch después de cualquiera de estos cambios:3731PostModelSwitch requiere Claude Code v2.1.251 o posterior. No puede bloquear, porque el modelo ya cambió. Claude Code ejecuta hooks PostModelSwitch después de cualquiera de estos cambios:

3706 3732 

3707* Un cambio que tú o un cliente solicitaron3733* Un cambio que tú o un cliente solicitaron

3708* Un [respaldo automático de modelo](/docs/es/model-config#automatic-model-fallback), que cambia el modelo de la sesión3734* Un [respaldo automático de modelo](/docs/es/model-config#automatic-model-fallback), que cambia el modelo de la sesión

3709* Un ajuste como [`opusplan`](/docs/es/model-config#opusplan-model-setting) al entrar o salir del modo plan3735* Un ajuste como [`opusplan`](/docs/es/model-config#opusplan-model-setting) al entrar o salir del modo plan

3710* Claude Code restaurando el modelo al reanudar una sesión3736* Claude Code restaurando el modelo cuando reanudas una sesión

3711 3737 

3712Claude Code no ejecuta hooks PostModelSwitch cuando un modelo de una [cadena de modelos de respaldo](/docs/es/model-config#fallback-model-chains) atiende un turno, porque esa sustitución dura un turno y deja sin cambios el modelo de la sesión.3738Claude Code no ejecuta hooks PostModelSwitch cuando un modelo de una [cadena de modelos de respaldo](/docs/es/model-config#fallback-model-chains) atiende un turno, porque esa sustitución dura un turno y deja sin cambios el modelo de la sesión.

3713 3739 

3714El matcher sigue las mismas reglas que [PreModelSwitch](#premodelswitch): Claude Code lo compara con el nombre canónico del modelo al que cambió la sesión.3740El matcher sigue las mismas reglas que [PreModelSwitch](#premodelswitch): Claude Code lo compara con el nombre canónico del modelo al que cambió la sesión.

3715 3741 

3716Este ejemplo agrega indicaciones cada vez que el modelo de la sesión cambia a cualquier modelo Opus:3742Este ejemplo agrega orientación cada vez que el modelo de la sesión cambia a cualquier modelo Opus:

3717 3743 

3718```json theme={null}3744```json theme={null}

3719{3745{


3733}3759}

3734```3760```

3735 3761 

3736Para confirmar que el hook funciona, cambia a un modelo Opus desde una sesión que use un modelo diferente, por ejemplo ejecuta `/model opus` desde una sesión de Sonnet, y luego pregúntale a Claude qué indicaciones tiene sobre el modelo actual.3762Para confirmar que el hook funciona, cambia a un modelo Opus desde una sesión que use un modelo diferente, por ejemplo ejecuta `/model opus` desde una sesión de Sonnet, y luego pregúntale a Claude qué orientación tiene sobre el modelo actual.

3737 3763 

3738<h4 id="postmodelswitch-input">3764<h4 id="postmodelswitch-input">

3739 Entrada de PostModelSwitch3765 Entrada de PostModelSwitch

3740</h4>3766</h4>

3741 3767 

3742Los hooks PostModelSwitch reciben los mismos campos que [PreModelSwitch](#premodelswitch-input), con `hook_event_name` establecido en `"PostModelSwitch"` y dos valores adicionales de `source`: `"auto"` para un respaldo automático u otro cambio que Claude Code hizo por su cuenta, y `"resume"` para el modelo restaurado al reanudar una sesión.3768Los hooks PostModelSwitch reciben los mismos campos que [PreModelSwitch](#premodelswitch-input), con `hook_event_name` establecido en `"PostModelSwitch"` y dos valores más de `source`: `"auto"` para un respaldo automático u otro cambio que Claude Code hizo por su cuenta, y `"resume"` para el modelo restaurado cuando reanudas una sesión.

3743 3769 

3744`requested_model` es `null` cuando `source` es `"auto"`. Cuando `source` es `"resume"`, es el ajuste de modelo guardado que Claude Code restauró.3770`requested_model` es `null` cuando `source` es `"auto"`. Cuando `source` es `"resume"`, es el ajuste de modelo guardado que Claude Code restauró.

3745 3771 


3747 Control de decisión de PostModelSwitch3773 Control de decisión de PostModelSwitch

3748</h4>3774</h4>

3749 3775 

3750Claude Code toma el [stdout de texto plano](#exit-code-0) de tu hook al terminar con 0, o `additionalContext` de la salida JSON, y se lo entrega a Claude con la siguiente solicitud después del cambio. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puedes devolver:3776Claude Code toma la [stdout de texto plano](#exit-code-0) de tu hook al terminar con 0, o `additionalContext` de la salida JSON, y se la entrega a Claude con la siguiente solicitud después del cambio. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puedes devolver:

3751 3777 

3752| Campo | Descripción |3778| Campo | Descripción |

3753| :- | :- |3779| :- | :- |

3754| `additionalContext` | String que se agrega al contexto de Claude con la siguiente solicitud. Consulta [Agregar contexto para Claude](#add-context-for-claude) |3780| `additionalContext` | Cadena que se agrega al contexto de Claude con la siguiente solicitud. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

3755 3781 

3756Si el hook no ha terminado en los cinco segundos posteriores a que envías el siguiente prompt, Claude Code envía esa solicitud sin la salida y la adjunta a la solicitud siguiente. Si el modelo cambia varias veces antes de la siguiente solicitud, Claude Code entrega solo la salida correspondiente al modelo de destino del último cambio.3782Si el hook no ha terminado dentro de los cinco segundos posteriores a que envíes el siguiente prompt, Claude Code envía esa solicitud sin la salida y la adjunta a la solicitud siguiente. Si el modelo cambia varias veces antes de la siguiente solicitud, Claude Code entrega solo la salida correspondiente al modelo de destino del último cambio.

3757 3783 

3758<h3 id="sessionend">3784<h3 id="sessionend">

3759 SessionEnd3785 SessionEnd

3760</h3>3786</h3>

3761 3787 

3762Se ejecuta cuando termina una sesión de Claude Code. Es útil para tareas de limpieza, registrar estadísticas3788Se ejecuta cuando termina una sesión de Claude Code. Útil para tareas de limpieza, registrar estadísticas

3763de la sesión o guardar el estado de la sesión. Admite matchers para filtrar por motivo de salida.3789de la sesión o guardar el estado de la sesión. Admite matchers para filtrar por motivo de salida.

3764 3790 

3765El campo `reason` en la entrada del hook indica por qué terminó la sesión:3791El campo `reason` en la entrada del hook indica por qué terminó la sesión:


3793 3819 

3794Los hooks SessionEnd tienen un tiempo de espera predeterminado de 1.5 segundos. Se aplica cuando sales, ejecutas `/clear` o cambias de sesión con `/resume` interactivo. Puedes darle más tiempo a un hook de dos maneras:3820Los hooks SessionEnd tienen un tiempo de espera predeterminado de 1.5 segundos. Se aplica cuando sales, ejecutas `/clear` o cambias de sesión con `/resume` interactivo. Puedes darle más tiempo a un hook de dos maneras:

3795 3821 

3796* **`timeout` por hook**: establece `timeout` en la configuración de ese hook. El presupuesto total aumenta automáticamente para coincidir con el `timeout` por hook más alto en tus archivos de configuración, hasta 60 segundos. Si aumentas el presupuesto de esta manera, un hook sin su propio `timeout` conserva el valor predeterminado. Los tiempos de espera establecidos en hooks proporcionados por plugins no aumentan el presupuesto.3822* **`timeout` por hook**: establece `timeout` en la configuración de ese hook. El presupuesto total aumenta automáticamente para igualar el `timeout` por hook más alto de tus archivos de configuración, hasta 60 segundos. Si aumentas el presupuesto de esta manera, un hook sin su propio `timeout` sigue conservando el valor predeterminado. Los tiempos de espera establecidos en hooks proporcionados por plugins no aumentan el presupuesto.

3797* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**: establece esta variable de entorno en milisegundos para sobrescribir el presupuesto de forma explícita. El valor que establezcas también se convierte en el tiempo de espera de cada hook sin su propio `timeout`.3823* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**: establece esta variable de entorno en milisegundos para sobrescribir el presupuesto explícitamente. El valor que establezcas también se convierte en el tiempo de espera de cada hook sin su propio `timeout`.

3798 3824 

3799Este ejemplo establece el presupuesto en 5 segundos:3825Este ejemplo establece el presupuesto en 5 segundos:

3800 3826 


3808 Elicitation3834 Elicitation

3809</h3>3835</h3>

3810 3836 

3811Se ejecuta cuando un servidor MCP solicita información al usuario a mitad de una tarea. De forma predeterminada, Claude Code muestra un diálogo interactivo para que el usuario responda. Los hooks pueden interceptar esta solicitud y responder mediante programación, omitiendo el diálogo por completo.3837Se ejecuta cuando un servidor MCP solicita entrada del usuario a mitad de una tarea. De forma predeterminada, Claude Code muestra un diálogo interactivo para que el usuario responda. Los hooks pueden interceptar esta solicitud y responder mediante programación, omitiendo el diálogo por completo.

3812 3838 

3813Para ver un hook completo con su entrada de configuración y su script, consulta [Responder una solicitud de formulario desde un script](#answer-a-form-request-from-a-script).3839Para ver un hook completo con su entrada de configuración y su script, consulta [Responder una solicitud de formulario desde un script](#answer-a-form-request-from-a-script).

3814 3840 


3840}3866}

3841```3867```

3842 3868 

3843Para la elicitación en modo URL, que se usa para la autenticación basada en el navegador:3869Para la elicitación en modo URL, usada para la autenticación basada en navegador:

3844 3870 

3845```json theme={null}3871```json theme={null}

3846{3872{


3859 Salida de Elicitation3885 Salida de Elicitation

3860</h4>3886</h4>

3861 3887 

3862Un hook Elicitation puede responder la solicitud en nombre del usuario, rechazarla o cancelarla, o dejarla al diálogo. Para responder, rechazar o cancelar, termina con 0 e imprime un objeto `hookSpecificOutput` con una `action`. El servidor recibe tu respuesta y no aparece ningún diálogo. Cada fila de esta tabla muestra qué devolver para un resultado y qué recibe el servidor MCP:3888Un hook Elicitation puede responder la solicitud en nombre del usuario, rechazarla o cancelarla, o dejarla al diálogo. Para responder, rechazar o cancelar, termina con 0 e imprime un objeto `hookSpecificOutput` con un `action`. El servidor recibe tu respuesta y no aparece ningún diálogo. Cada fila de esta tabla muestra qué devolver para un resultado y qué recibe el servidor MCP:

3863 3889 

3864| Para | Devuelve | El servidor recibe |3890| Para | Devuelve | El servidor recibe |

3865| :- | :- | :- |3891| :- | :- | :- |

3866| Responder en nombre del usuario | `"action": "accept"`, con los valores de los campos del formulario en `content` | `accept` con tu `content` |3892| Responder en nombre del usuario | `"action": "accept"`, con los valores de los campos del formulario en `content` | `accept` con tu `content` |

3867| Rechazar la solicitud | `"action": "decline"` | `decline` |3893| Rechazar la solicitud | `"action": "decline"` | `decline` |

3868| Cancelar la solicitud | `"action": "cancel"` | `cancel` |3894| Cancelar la solicitud | `"action": "cancel"` | `cancel` |

3869| Dejar la solicitud al usuario | Ninguna salida, con código de salida 0 | La respuesta del usuario desde el [diálogo](/docs/es/mcp#respond-to-mcp-elicitation-requests) |3895| Dejar la solicitud al usuario | Sin salida, con código de salida 0 | La respuesta del usuario desde el [diálogo](/docs/es/mcp#respond-to-mcp-elicitation-requests) |

3870 3896 

3871Esta salida responde la solicitud en modo formulario que se muestra en [Entrada de Elicitation](#elicitation-input). Las claves en `content` son los nombres de las propiedades del `requested_schema` de esa solicitud:3897Esta salida responde la solicitud en modo formulario que se muestra en [Entrada de Elicitation](#elicitation-input). Las claves de `content` son los nombres de propiedad del `requested_schema` de esa solicitud:

3872 3898 

3873```json theme={null}3899```json theme={null}

3874{3900{


3895 3921 

3896En el diálogo, seleccionar **Decline** envía `decline` y presionar `Esc` envía `cancel`, así que devuelve el que quieras que vea el servidor.3922En el diálogo, seleccionar **Decline** envía `decline` y presionar `Esc` envía `cancel`, así que devuelve el que quieras que vea el servidor.

3897 3923 

3898Para una solicitud en modo URL, un hook que devuelve `accept` omite el diálogo, por lo que la URL nunca se abre.3924Para una solicitud en modo URL, un hook que devuelve `accept` omite el diálogo, así que la URL nunca se abre.

3899 3925 

3900Claude Code descarta `reason`, `systemMessage` y `continue` de la salida JSON de un hook Elicitation, sea cual sea la `action` que devuelvas.3926Claude Code descarta `reason`, `systemMessage` y `continue` de la salida JSON de un hook Elicitation, sea cual sea el `action` que devuelvas.

3901 3927 

3902<h4 id="other-ways-to-decline-an-elicitation">3928<h4 id="other-ways-to-decline-an-elicitation">

3903 Otras formas de rechazar una elicitación3929 Otras formas de rechazar una elicitación

3904</h4>3930</h4>

3905 3931 

3906Tu hook también puede rechazar de estas formas. El servidor recibe el mismo `decline` que con `"action": "decline"`:3932Tu hook también puede rechazar de estas maneras. El servidor recibe el mismo `decline` que con `"action": "decline"`:

3907 3933 

3908* **Termina con el código 2**: Claude Code ignora un `hookSpecificOutput` impreso por el mismo hook3934* **Termina con el código 2**: Claude Code ignora un `hookSpecificOutput` impreso por el mismo hook

3909* **Imprime un `"decision": "block"` de nivel superior**: el bloqueo sobrescribe una `action` en la misma salida3935* **Imprime un `"decision": "block"` de nivel superior**: el bloqueo sobrescribe un `action` en la misma salida

3910 3936 

3911Cuando varios hooks coinciden con la misma solicitud, un rechazo de uno de ellos sobrescribe un `accept` o `cancel` de otro.3937Cuando varios hooks coinciden con la misma solicitud, un rechazo de uno de ellos sobrescribe un `accept` o `cancel` de otro.

3912 3938 


3919fi3945fi

3920```3946```

3921 3947 

3922Ni el usuario ni el servidor ven por qué rechazó tu hook, porque Claude Code no muestra tu stderr ni tu `reason`.3948Ni el usuario ni el servidor ven por qué tu hook rechazó, porque Claude Code no muestra tu stderr ni tu `reason`.

3923 3949 

3924Claude Code ignoró un `decision` de nivel superior de los hooks `Elicitation` y `ElicitationResult` desde v2.1.105 hasta la corrección en v2.1.284.3950Claude Code ignoró un `decision` de nivel superior de los hooks `Elicitation` y `ElicitationResult` desde v2.1.105 hasta la corrección en v2.1.284.

3925 3951 


3927 Responder una solicitud de formulario desde un script3953 Responder una solicitud de formulario desde un script

3928</h4>3954</h4>

3929 3955 

3930Este ejemplo responde una pregunta recurrente en nombre del usuario. Un servidor MCP llamado `issue-tracker` pide una clave de proyecto en un formulario, y el hook completa `DOCS`. El script acepta cuando `project_key` es el único campo del formulario. Para cualquier otra solicitud no imprime nada, por lo que aparece el diálogo.3956Este ejemplo responde una pregunta recurrente en nombre del usuario. Un servidor MCP llamado `issue-tracker` pide una clave de proyecto en un formulario, y el hook completa `DOCS`. El script acepta cuando `project_key` es el único campo del formulario. Para cualquier otra solicitud no imprime nada, así que aparece el diálogo.

3931 3957 

3932<Tabs>3958<Tabs>

3933 <Tab title="macOS/Linux">3959 <Tab title="macOS/Linux">


3966 </Tab>3992 </Tab>

3967 3993 

3968 <Tab title="Windows (PowerShell)">3994 <Tab title="Windows (PowerShell)">

3969 Registra un hook de comando que ejecute el script a través de PowerShell, con el nombre del servidor como matcher:3995 Registra un hook de comando que ejecute el script mediante PowerShell, con el nombre del servidor como matcher:

3970 3996 

3971 ```json theme={null}3997 ```json theme={null}

3972 {3998 {


4047 Salida de ElicitationResult4073 Salida de ElicitationResult

4048</h4>4074</h4>

4049 4075 

4050Un hook ElicitationResult puede dejar pasar la respuesta del usuario, cambiar sus valores o bloquearla. Para cambiar o bloquear la respuesta, termina con 0 e imprime un objeto `hookSpecificOutput` con una `action`. Cada fila de esta tabla muestra qué devolver para un resultado y qué recibe el servidor MCP:4076Un hook ElicitationResult puede dejar pasar la respuesta del usuario, cambiar sus valores o bloquearla. Para cambiar o bloquear la respuesta, termina con 0 e imprime un objeto `hookSpecificOutput` con un `action`. Cada fila de esta tabla muestra qué devolver para un resultado y qué recibe el servidor MCP:

4051 4077 

4052| Para | Devuelve | El servidor recibe |4078| Para | Devuelve | El servidor recibe |

4053| :- | :- | :- |4079| :- | :- | :- |

4054| Dejar pasar la respuesta | Ninguna salida, con código de salida 0 | La respuesta del usuario, sin cambios |4080| Dejar pasar la respuesta | Sin salida, con código de salida 0 | La respuesta del usuario, sin cambios |

4055| Cambiar los valores enviados | `"action": "accept"`, con los nuevos valores en `content` | `accept` con tu `content` en lugar de los valores del usuario |4081| Cambiar los valores enviados | `"action": "accept"`, con los nuevos valores en `content` | `accept` con tu `content` en lugar de los valores del usuario |

4056| Bloquear la respuesta | `"action": "decline"` | `decline`, sin los valores del usuario |4082| Bloquear la respuesta | `"action": "decline"` | `decline`, sin los valores del usuario |

4057| Cancelar la solicitud | `"action": "cancel"` | `cancel`, junto con los valores que envió el usuario. Para ocultarlos, devuelve `"decline"` |4083| Cancelar la solicitud | `"action": "cancel"` | `cancel`, junto con los valores que envió el usuario. Para retenerlos, devuelve `"decline"` |

4058 4084 

4059Esta salida cambia la respuesta que se muestra en [Entrada de ElicitationResult](#elicitationresult-input), de modo que el servidor recibe `alice@example.com` donde el usuario envió `alice`:4085Esta salida cambia la respuesta que se muestra en [Entrada de ElicitationResult](#elicitationresult-input), así que el servidor recibe `alice@example.com` donde el usuario envió `alice`:

4060 4086 

4061```json theme={null}4087```json theme={null}

4062{4088{


4070}4096}

4071```4097```

4072 4098 

4073Tu `content` reemplaza todo el objeto `content` del usuario, así que incluye los campos que no estás cambiando. Devuelve `action` junto con él, porque Claude Code ignora un `hookSpecificOutput` que no tiene `action`.4099Tu `content` reemplaza todo el objeto `content` del usuario, así que incluye los campos que no vas a cambiar. Devuelve `action` junto con él, porque Claude Code ignora un `hookSpecificOutput` que no tenga `action`.

4074 4100 

4075Los hooks ElicitationResult también se ejecutan cuando el usuario rechaza o cancela, y tu `action` reemplaza la suya. Comprueba que la `action` de la entrada sea `accept` antes de devolver `accept`, o tu hook convertirá una solicitud rechazada en una aceptada. Este script hace el mismo cambio cuando el usuario aceptó, conserva los demás campos y no imprime nada en caso contrario:4101Los hooks ElicitationResult también se ejecutan cuando el usuario rechaza o cancela, y tu `action` reemplaza el suyo. Comprueba que el `action` de la entrada sea `accept` antes de devolver `accept`, o tu hook convertirá una solicitud rechazada en una aceptada. Este script hace el mismo cambio cuando el usuario aceptó, conserva los demás campos y no imprime nada en caso contrario:

4076 4102 

4077```bash theme={null}4103```bash theme={null}

4078#!/bin/bash4104#!/bin/bash


4096 4122 

4097El código de salida 2 y un `"decision": "block"` de nivel superior también bloquean la respuesta. [Otras formas de rechazar una elicitación](#other-ways-to-decline-an-elicitation) explica cuál tiene efecto cuando un hook los combina, qué ve el usuario y qué versiones ignoraron `decision`.4123El código de salida 2 y un `"decision": "block"` de nivel superior también bloquean la respuesta. [Otras formas de rechazar una elicitación](#other-ways-to-decline-an-elicitation) explica cuál tiene efecto cuando un hook los combina, qué ve el usuario y qué versiones ignoraron `decision`.

4098 4124 

4099Claude Code descarta `reason`, `systemMessage` y `continue` de la salida JSON de un hook ElicitationResult, sea cual sea la `action` que devuelvas.4125Claude Code descarta `reason`, `systemMessage` y `continue` de la salida JSON de un hook ElicitationResult, sea cual sea el `action` que devuelvas.

4100 4126 

4101<h2 id="prompt-based-hooks">4127<h2 id="prompt-based-hooks">

4102 Hooks basados en prompts4128 Hooks basados en prompts


4351* **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.4377* **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.

4352* **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`.4378* **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`.

4353 4379 

4354Claude 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.4380Claude Code valida esa respuesta JSON contra el mismo [esquema de salida](#json-output) que los hooks síncronos, y descarta cualquier campo cuyo valor tenga el tipo incorrecto, como un `systemMessage` que no sea una cadena, en lugar de entregarlo. Ejecuta con `--debug` para ver una advertencia que nombre cada campo descartado.

4355 4381 

4356Las 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`.4382Las 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`.

4357 4383 

Details

491 491 

492Para desactivar las sugerencias de prompt en toda una organización, establezca `promptSuggestionEnabled` en `false` en [configuración administrada](/docs/es/managed-settings). También establezca `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` en `false` bajo la clave [`env`](/docs/es/settings-reference#env) administrada para que los usuarios no puedan reactivarlas con su propia variable de entorno.492Para desactivar las sugerencias de prompt en toda una organización, establezca `promptSuggestionEnabled` en `false` en [configuración administrada](/docs/es/managed-settings). También establezca `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` en `false` bajo la clave [`env`](/docs/es/settings-reference#env) administrada para que los usuarios no puedan reactivarlas con su propia variable de entorno.

493 493 

494<h2 id="you-should-know-suggestions">

495 Sugerencias de You should know

496</h2>

497 

498"You should know" busca algo que deberías saber pero que quizá pasaste por alto, como una compensación que Claude eligió sin mencionarla o un resultado que podría estar equivocado. Cuando encuentra algo, muestra una nota breve encima de la entrada del prompt:

499 

500```text theme={null}

501✦ Heads up · There was a change to how folder sharing starts in June, which may have bumped usage metrics artificially.

502 1: Learn more 2: Knew this already 0: Dismiss

503```

504 

505Es uno de los [mods integrados](/docs/es/plugins/mods/overview#mods-built-into-claude-code) de Claude Code, un plugin integrado en Claude Code que está desactivado de forma predeterminada. Requiere Claude Code v2.1.287 o posterior.

506 

507Mientras está activado, un agente secundario vuelve a leer la conversación de vez en cuando mientras Claude trabaja en una tarea más larga. El agente secundario es una solicitud separada al mismo modelo y no tiene herramientas, por lo que no puede leer archivos, ejecutar comandos ni cambiar lo que hace Claude.

508 

509Si el mod está disponible para tu organización, `/plugin` lo muestra cuando te conectas directamente a la API de Claude con una cuenta de claude.ai o una clave de API de Console. No lo muestra cuando te conectas a través de un [gateway de LLM](/docs/es/llm-gateway) o un [gateway de aplicaciones de Claude](/docs/es/claude-apps-gateway), o cuando obtienes tu clave de un [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper). Incluso con una conexión directa, estas sesiones no lo muestran:

510 

511* Una sesión que [no obtiene los feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching) de los que depende el mod, como una con `DISABLE_TELEMETRY` configurado

512* Una [primera sesión después de una instalación o actualización](/docs/es/env-vars#first-session-after-an-install-or-upgrade) cuyos flags aún no han llegado

513 

514Para activarlo, ejecuta esto en el prompt de Claude Code:

515 

516```text theme={null}

517/plugin enable cc-plugin-you-should-know@builtin

518```

519 

520Donde `/plugin` no muestra el mod, el comando de activación responde `Plugin "cc-plugin-you-should-know@builtin" is not installed in this project`.

521 

522<h3 id="cost-of-checks">

523 Costo de las comprobaciones

524</h3>

525 

526Mientras el mod está activado, las comprobaciones son solicitudes en segundo plano al mismo modelo que usa tu sesión, y cuentan para los límites de uso de tu plan o tus costos de API. Cada comprobación envía lo que ya está en el contexto de Claude, es decir, la conversación hasta el momento con los resultados de sus herramientas, seguido de las instrucciones propias del mod y el texto de tus notas recientes. La parte de la conversación se lee de la [caché de prompts](/docs/es/prompt-caching) de la sesión en las mismas condiciones que la siguiente solicitud de Claude. Las instrucciones, que suman varios miles de tokens, y la respuesta del agente secundario se facturan completas en cada comprobación.

527 

528Para ver cómo ocurren las comprobaciones, configura [`CLAUDE_CODE_YOU_SHOULD_KNOW_DEBUG=1`](/docs/es/env-vars) en tu shell antes de iniciar Claude Code.

529 

530<h3 id="answer-a-note">

531 Responder a una nota

532</h3>

533 

534Escribe solo el dígito de la opción en una entrada de prompt vacía. Una nota ofrece estas opciones:

535 

536* **Learn more**: abre una breve explicación debajo de la nota, con sus propias opciones:

537 * **Understood**: la cierra y marca el tema como conocido

538 * **Chat in main session**: cita la nota en tu entrada de prompt para que puedas agregar una pregunta y enviársela a Claude

539 * **Dismiss**: la cierra sin marcar el tema como conocido

540* **Knew this already**: cierra la nota y marca el tema como conocido.

541* **Dismiss**: cierra la nota.

542 

543El agente principal no ve una nota a menos que la envíes con **Chat in main session**.

544 

545Claude Code guarda tus notas recientes y los temas que marcaste como conocidos en un archivo cuyo nombre empieza con `cc-plugin-you-should-know` dentro de `~/.claude/plugins/store/`. Cada comprobación, en esta sesión y en las siguientes, se los indica al agente secundario como temas que no debe repetir. Claude Code elimina el archivo una vez que han pasado [`cleanupPeriodDays`](/docs/es/settings-reference#cleanupperioddays) sin que ninguna sesión lo lea ni lo escriba. Para borrarlos antes, elimina ese archivo mientras no haya ninguna sesión en ejecución.

546 

547<h3 id="turn-off-you-should-know">

548 Desactivar You should know

549</h3>

550 

551Para desactivar You should know, usa cualquiera de las siguientes opciones:

552 

553* En el prompt de Claude Code, ejecuta `/plugin disable cc-plugin-you-should-know@builtin`, o desactívalo desde la pestaña **Installed** de `/plugin`

554* Después de elegir **Dismiss** en una nota sin abrir antes **Learn more**, elige **Turn off suggestions** en la línea `Dismissed.`, que desaparece después de 20 segundos

555 

494<h2 id="emoji-shortcodes">556<h2 id="emoji-shortcodes">

495 Códigos de emoji557 Códigos de emoji

496</h2>558</h2>

Details

257 257 

258Enumere directorios en `sparsePaths`, no archivos individuales. Los archivos de nivel raíz como `package.json`, `tsconfig.base.json` y archivos de bloqueo siempre se verifican junto con los directorios que enumera. Los directorios de nivel raíz no, así que incluya `.claude` en la lista si desea que el `.claude/settings.json` de la raíz del repositorio o los archivos `.claude/rules/` estén disponibles dentro del worktree. Para skills de proyecto, agentes y comandos, consulte [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).258Enumere directorios en `sparsePaths`, no archivos individuales. Los archivos de nivel raíz como `package.json`, `tsconfig.base.json` y archivos de bloqueo siempre se verifican junto con los directorios que enumera. Los directorios de nivel raíz no, así que incluya `.claude` en la lista si desea que el `.claude/settings.json` de la raíz del repositorio o los archivos `.claude/rules/` estén disponibles dentro del worktree. Para skills de proyecto, agentes y comandos, consulte [Qué comparten los worktrees con el checkout principal](/docs/es/worktrees#what-worktrees-share-with-the-main-checkout).

259 259 

260El sparse checkout requiere que git habilite `extensions.worktreeConfig` en el `.git/config` compartido del repositorio mientras existe un worktree disperso. Claude Code elimina esa entrada después de que se elimina el último worktree, pero solo si Claude Code la agregó. Nunca elimina un valor que usted estableció. Antes de v2.1.207, la entrada permanecía después de que se eliminaba el último worktree, y las herramientas basadas en go-git como `tea` no podían abrir el repositorio hasta que ejecutaba `git config --unset extensions.worktreeConfig`.260El sparse checkout requiere que git habilite `extensions.worktreeConfig` en el `.git/config` compartido del repositorio mientras exista un worktree disperso. Claude Code elimina esa entrada después de que se elimina el último worktree, pero solo si Claude Code la agregó. Nunca elimina un valor que hayas establecido tú.

261 261 

262Para evitar duplicar directorios grandes como `node_modules` entre worktrees, empareje `sparsePaths` con `symlinkDirectories` en el mismo `.claude/settings.json`:262Para evitar duplicar directorios grandes como `node_modules` entre worktrees, empareje `sparsePaths` con `symlinkDirectories` en el mismo `.claude/settings.json`:

263 263 

Details

518 518 

519Ponga la credencial de la puerta de enlace en `ANTHROPIC_FOUNDRY_API_KEY`; se envía a la puerta de enlace como el encabezado `x-api-key`. Una puerta de enlace que espera un token de portador puede tomar [`ANTHROPIC_FOUNDRY_AUTH_TOKEN`](/docs/es/env-vars) en su lugar. Claude Code envía ese valor como el encabezado `Authorization: Bearer`, y tiene precedencia sobre `ANTHROPIC_FOUNDRY_API_KEY` cuando ambos están establecidos. Requiere Claude Code v2.1.203 o posterior.519Ponga la credencial de la puerta de enlace en `ANTHROPIC_FOUNDRY_API_KEY`; se envía a la puerta de enlace como el encabezado `x-api-key`. Una puerta de enlace que espera un token de portador puede tomar [`ANTHROPIC_FOUNDRY_AUTH_TOKEN`](/docs/es/env-vars) en su lugar. Claude Code envía ese valor como el encabezado `Authorization: Bearer`, y tiene precedencia sobre `ANTHROPIC_FOUNDRY_API_KEY` cuando ambos están establecidos. Requiere Claude Code v2.1.203 o posterior.

520 520 

521Para una puerta de enlace que inyecta su propio encabezado `Authorization`, establezca `CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1` y deje ambas variables de credencial sin establecer. Claude Code entonces envía solicitudes sin una credencial de Azure y preserva el encabezado `Authorization` que suministra, por ejemplo a través de `ANTHROPIC_CUSTOM_HEADERS`. Antes de v2.1.203, `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` sin una clave de API dejaba el cliente de Microsoft Foundry incapaz de enviar solicitudes.521Para un gateway que inyecta su propio encabezado `Authorization`, establece `CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1` y deja ambas variables de credencial sin establecer. Claude Code envía entonces las solicitudes sin una credencial de Azure y conserva el encabezado `Authorization` que proporciones, por ejemplo a través de `ANTHROPIC_CUSTOM_HEADERS`.

522 522 

523<Tabs>523<Tabs>

524 <Tab title="Bash o Zsh">524 <Tab title="Bash o Zsh">

Details

168| :- | :- |168| :- | :- |

169| `x-claude-code-request-class` | Qué tipo de solicitud es esta: `main` para un turno de la conversación principal, `subagent` para un turno de un [subagente](/docs/es/sub-agents), `workflow` para un agente ejecutándose dentro de un flujo de trabajo, `compaction` para la solicitud de resumen que compacta una conversación, o `auxiliary` para solicitudes secundarias como títulos de sesión, clasificadores y resúmenes. Enviado en cada solicitud |169| `x-claude-code-request-class` | Qué tipo de solicitud es esta: `main` para un turno de la conversación principal, `subagent` para un turno de un [subagente](/docs/es/sub-agents), `workflow` para un agente ejecutándose dentro de un flujo de trabajo, `compaction` para la solicitud de resumen que compacta una conversación, o `auxiliary` para solicitudes secundarias como títulos de sesión, clasificadores y resúmenes. Enviado en cada solicitud |

170| `x-claude-code-agent-type` | El tipo de subagente que emitió la solicitud: un nombre de tipo de agente integrado como `Explore`, `Plan` o `general-purpose`, o `custom` para un agente definido por el usuario, `teammate` para un miembro del [equipo de agentes](/docs/es/agent-teams) ejecutándose en el proceso del líder, o `fork` para un [fork](/docs/es/sub-agents#fork-the-current-conversation). Presente solo en los turnos propios de un subagente; la compactación o solicitudes secundarias de un subagente mantienen el ID del agente pero no llevan tipo. Un nombre de agente elegido por el usuario nunca se envía |170| `x-claude-code-agent-type` | El tipo de subagente que emitió la solicitud: un nombre de tipo de agente integrado como `Explore`, `Plan` o `general-purpose`, o `custom` para un agente definido por el usuario, `teammate` para un miembro del [equipo de agentes](/docs/es/agent-teams) ejecutándose en el proceso del líder, o `fork` para un [fork](/docs/es/sub-agents#fork-the-current-conversation). Presente solo en los turnos propios de un subagente; la compactación o solicitudes secundarias de un subagente mantienen el ID del agente pero no llevan tipo. Un nombre de agente elegido por el usuario nunca se envía |

171| `x-claude-code-compaction` | Presente en la solicitud que resume la conversación durante una [compactación](/docs/es/prompt-caching#compacting-the-conversation). El valor dice qué la activó: `auto` cuando la ventana de contexto se acercaba a la capacidad, `manual` para `/compact`, o `reactive` cuando la API rechazó una solicitud como demasiado larga. Ausente en todas las otras solicitudes |171| `x-claude-code-compaction` | Presente en la solicitud que resume la conversación durante una [compactación](/docs/es/prompt-caching#compacting-the-conversation). El valor indica qué la activó: `auto` cuando la ventana de contexto se acercaba a su capacidad, `manual` para `/compact`, o `reactive` cuando la API rechazó una solicitud por ser demasiado larga. El valor también es `auto` para la [compactación por inactividad](/docs/es/settings-reference#idlecompaction). Ausente en todas las demás solicitudes |

172| `x-claude-code-context-compacted` | Presente una vez, en la primera solicitud de conversación principal después de una compactación, con los mismos valores que `x-claude-code-compaction`. El prefijo de conversación antes de esta solicitud ya no se usa, así que un caché codificado en él puede descartarse |172| `x-claude-code-context-compacted` | Presente una vez, en la primera solicitud de conversación principal después de una compactación, con los mismos valores que `x-claude-code-compaction`. El prefijo de conversación antes de esta solicitud ya no se usa, así que un caché codificado en él puede descartarse |

173| `x-claude-code-prev-tool-durations` | Tiempo de ejecución medido de las llamadas de herramienta cuyos resultados lleva esta solicitud, como `<name>=<ms>;<name>=<ms>`, por ejemplo `Bash=742;Read=9`. Enviado en la siguiente solicitud de la misma conversación después de un lote de llamadas de herramienta, desde la sesión principal o un subagente |173| `x-claude-code-prev-tool-durations` | Tiempo de ejecución medido de las llamadas de herramienta cuyos resultados lleva esta solicitud, como `<name>=<ms>;<name>=<ms>`, por ejemplo `Bash=742;Read=9`. Enviado en la siguiente solicitud de la misma conversación después de un lote de llamadas de herramienta, desde la sesión principal o un subagente |

174| `x-claude-code-prompt-id` | UUID aleatorio que identifica la solicitud del usuario que sirve una solicitud. Las solicitudes que sirven una solicitud comparten el valor, incluidos los turnos de subagentes que la solicitud inició. Las solicitudes no atribuidas a una solicitud la omiten. Úselo para agrupar las solicitudes de una sesión por solicitud. Requiere Claude Code v2.1.283 o posterior |174| `x-claude-code-prompt-id` | UUID aleatorio que identifica la solicitud del usuario que sirve una solicitud. Las solicitudes que sirven una solicitud comparten el valor, incluidos los turnos de subagentes que la solicitud inició. Las solicitudes no atribuidas a una solicitud la omiten. Úselo para agrupar las solicitudes de una sesión por solicitud. Requiere Claude Code v2.1.283 o posterior |


291 291 

292En Claude Code v2.1.227 o posterior, su organización puede mantener [búsqueda de herramientas MCP](/docs/es/mcp#scale-with-mcp-tool-search) activada bajo esta variable a través de [configuración administrada](/docs/es/managed-settings). Lo que Claude Code envía con esa anulación en su lugar depende de cómo se conecte:292En Claude Code v2.1.227 o posterior, su organización puede mantener [búsqueda de herramientas MCP](/docs/es/mcp#scale-with-mcp-tool-search) activada bajo esta variable a través de [configuración administrada](/docs/es/managed-settings). Lo que Claude Code envía con esa anulación en su lugar depende de cómo se conecte:

293 293 

294* En una conexión directa, o a través de una puerta de enlace configurada con `ANTHROPIC_BASE_URL`, Claude Code sigue enviando el encabezado beta de búsqueda de herramientas, campos de herramienta `defer_loading`, y bloques `tool_reference`, y elimina el resto294* En una conexión directa sin la configuración HIPAA, o a través de un gateway configurado con `ANTHROPIC_BASE_URL`, Claude Code sigue enviando el encabezado beta de búsqueda de herramientas, los campos de herramienta `defer_loading` y los bloques `tool_reference`

295* En un proveedor de nube, o iniciando sesión a través de una [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway), la anulación no tiene efecto295* En un proveedor de nube, o iniciando sesión a través de una [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway), la anulación no tiene efecto

296* En una sesión que [recibe la configuración HIPAA](/docs/es/hipaa-setup#check-how-developers-sign-in-and-connect), la sobrescritura no tiene efecto y la búsqueda de herramientas permanece desactivada

296 297 

297El conjunto de capacidades que Claude Code envía crece en las versiones. Para cadenas de encabezado beta actuales, consulte la [referencia de encabezados beta](https://platform.claude.com/docs/en/api/beta-headers); pruebe su puerta de enlace contra nuevas versiones de Claude Code en lugar de fijar a una lista observada.298El conjunto de capacidades que Claude Code envía crece en las versiones. Para cadenas de encabezado beta actuales, consulte la [referencia de encabezados beta](https://platform.claude.com/docs/en/api/beta-headers); pruebe su puerta de enlace contra nuevas versiones de Claude Code en lugar de fijar a una lista observada.

298 299 

mcp.md +134 −105

Details

90 90 

91Al configurar servidores MCP a través de JSON en `.mcp.json`, `~/.claude.json`, o `claude mcp add-json`, el campo `type` acepta `streamable-http` como alias para `http`. La especificación MCP utiliza el nombre `streamable-http` para este transporte, por lo que las configuraciones copiadas de la documentación del servidor funcionan sin modificación.91Al configurar servidores MCP a través de JSON en `.mcp.json`, `~/.claude.json`, o `claude mcp add-json`, el campo `type` acepta `streamable-http` como alias para `http`. La especificación MCP utiliza el nombre `streamable-http` para este transporte, por lo que las configuraciones copiadas de la documentación del servidor funcionan sin modificación.

92 92 

93Una entrada JSON que tiene una `url` pero sin `type` es un error de configuración, porque Claude Code lee una entrada sin `type` como un servidor stdio. Claude Code omite ese servidor e informa `MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry`. Antes de v2.1.202, Claude Code informaba esta configuración incorrecta como `command: expected string, received undefined`.93Una entrada JSON que tiene una `url` pero sin `type` es un error de configuración, porque Claude Code lee una entrada sin `type` como un servidor stdio. Claude Code omite ese servidor e informa `MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry`.

94 94 

95Solo una aplicación host SDK, como una aplicación [Agent SDK](/docs/es/agent-sdk/mcp) o la [aplicación de escritorio](/docs/es/desktop), puede registrar un servidor `"type": "sdk"` en proceso. Claude Code omite una entrada `"type": "sdk"` en `.mcp.json`, `~/.claude.json`, o la configuración e informa `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`.95Solo una aplicación host SDK, como una aplicación [Agent SDK](/docs/es/agent-sdk/mcp) o la [aplicación de escritorio](/docs/es/desktop), puede registrar un servidor `"type": "sdk"` en proceso. Claude Code omite una entrada `"type": "sdk"` en `.mcp.json`, `~/.claude.json`, o la configuración e informa `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`.

96 96 


128 128 

129Claude Code establece `CLAUDE_PROJECT_DIR` en el entorno del servidor generado a la raíz del proyecto, para que tu servidor pueda resolver rutas relativas al proyecto sin depender del directorio de trabajo. Este es el mismo directorio que los hooks reciben en su variable `CLAUDE_PROJECT_DIR`. Léelo desde dentro de tu proceso de servidor, por ejemplo `process.env.CLAUDE_PROJECT_DIR` en Node o `os.environ["CLAUDE_PROJECT_DIR"]` en Python.129Claude Code establece `CLAUDE_PROJECT_DIR` en el entorno del servidor generado a la raíz del proyecto, para que tu servidor pueda resolver rutas relativas al proyecto sin depender del directorio de trabajo. Este es el mismo directorio que los hooks reciben en su variable `CLAUDE_PROJECT_DIR`. Léelo desde dentro de tu proceso de servidor, por ejemplo `process.env.CLAUDE_PROJECT_DIR` en Node o `os.environ["CLAUDE_PROJECT_DIR"]` en Python.

130 130 

131`CLAUDE_PROJECT_DIR` es la raíz estable del proyecto y no cambia cuando agregas o eliminas directorios de trabajo a mitad de sesión. Un servidor que limita su propio acceso al sistema de archivos a un conjunto de directorios permitidos debe implementar la solicitud MCP `roots/list` en su lugar. Claude Code responde `roots/list` con el directorio de lanzamiento de la sesión más cada [directorio de trabajo adicional](/docs/es/permissions#working-directories) que hayas otorgado con `--add-dir`, `/add-dir`, o el ajuste `additionalDirectories`. Claude Code envía `notifications/roots/list_changed` cuando ese conjunto cambia. Antes de v2.1.203, `roots/list` devolvía solo el directorio de lanzamiento y Claude Code no enviaba `notifications/roots/list_changed`.131`CLAUDE_PROJECT_DIR` es la raíz estable del proyecto y no cambia cuando agregas o eliminas directorios de trabajo a mitad de sesión. Un servidor que limita su propio acceso al sistema de archivos a un conjunto de directorios permitidos debe implementar la solicitud MCP `roots/list` en su lugar. Claude Code responde `roots/list` con el directorio de lanzamiento de la sesión más cada [directorio de trabajo adicional](/docs/es/permissions#working-directories) que hayas otorgado con `--add-dir`, `/add-dir`, o el ajuste `additionalDirectories`. Claude Code envía `notifications/roots/list_changed` cuando ese conjunto cambia.

132 132 

133Esta variable se establece en el entorno del servidor, no en el entorno propio de Claude Code, por lo que hacer referencia a ella a través de la expansión `${VAR}` en el `command` o `args` de una entrada `.mcp.json` con alcance de proyecto o de una entrada de servidor con alcance local o de usuario en `~/.claude.json` requiere un valor predeterminado como `${CLAUDE_PROJECT_DIR:-.}`. Las configuraciones MCP proporcionadas por plugins sustituyen `${CLAUDE_PROJECT_DIR}` directamente y no necesitan el valor predeterminado.133Esta variable se establece en el entorno del servidor, no en el entorno propio de Claude Code, por lo que hacer referencia a ella a través de la expansión `${VAR}` en el `command` o `args` de una entrada `.mcp.json` con alcance de proyecto o de una entrada de servidor con alcance local o de usuario en `~/.claude.json` requiere un valor predeterminado como `${CLAUDE_PROJECT_DIR:-.}`. Las configuraciones MCP proporcionadas por plugins sustituyen `${CLAUDE_PROJECT_DIR}` directamente y no necesitan el valor predeterminado.

134 134 


154 `--env` acepta múltiples pares `KEY=value`. Si el nombre del servidor viene directamente después de `--env`, la CLI lee el nombre como otro par y lo rechaza, así que coloca al menos otra opción, como `--transport stdio`, entre `--env` y el nombre del servidor.154 `--env` acepta múltiples pares `KEY=value`. Si el nombre del servidor viene directamente después de `--env`, la CLI lee el nombre como otro par y lo rechaza, así que coloca al menos otra opción, como `--transport stdio`, entre `--env` y el nombre del servidor.

155</Note>155</Note>

156 156 

157<h4 id="how-claude-code-stops-a-stdio-server">

158 Cómo Claude Code detiene un servidor stdio

159</h4>

160 

161Cuando Claude Code desconecta un servidor stdio, por ejemplo cuando termina tu sesión, envía una señal al proceso del servidor y espera brevemente a que termine antes de forzar su detención. Si tu servidor guarda estado o elimina archivos de bloqueo al apagarse, maneja la señal correspondiente a tu plataforma y termina dentro de ese tiempo:

162 

163* **En macOS y Linux**: Claude Code envía `SIGINT`, luego `SIGTERM` si el proceso aún se está ejecutando 100 milisegundos después, y luego `SIGKILL` tras otros 400 milisegundos.

164* **En Windows**: Claude Code cierra el stdin del servidor y luego finaliza el árbol de procesos del servidor si el proceso aún se está ejecutando 300 milisegundos después.

165 

166Antes de v2.1.296, Claude Code en Windows finalizaba el árbol de procesos del servidor de inmediato, sin cerrar primero stdin ni esperar.

167 

157<h3 id="option-4-add-a-remote-websocket-server">168<h3 id="option-4-add-a-remote-websocket-server">

158 Opción 4: Agregar un servidor WebSocket remoto169 Opción 4: Agregar un servidor WebSocket remoto

159</h3>170</h3>


415 Caídas a mitad de sesión de un servidor remoto426 Caídas a mitad de sesión de un servidor remoto

416</h4>427</h4>

417 428 

418Claude Code reconecta un servidor remoto caído con retroceso exponencial: hasta cinco intentos, comenzando con un retraso de un segundo y duplicándolo cada vez. Lo que ves depende de cómo estés ejecutando Claude Code:429Claude Code primero intenta reconectar un servidor remoto caído hasta cinco veces con retroceso exponencial, comenzando con un retraso de un segundo y duplicándolo cada vez:

419 430 

420* **En una sesión interactiva**: `/mcp` muestra el servidor como pendiente mientras Claude Code se reconecta. Después de cinco intentos fallidos, Claude Code marca el servidor como fallido, o como que necesita autenticación cuando el servidor necesita autorizarse de nuevo. Cuando marca el servidor como fallido, ves una notificación `MCP server "<name>" disconnected · open /mcp to reconnect`. Puedes reintentar manualmente desde `/mcp`.431* **En una sesión interactiva**: `/mcp` muestra el servidor como pendiente mientras Claude Code se reconecta. Después de cinco intentos fallidos, Claude Code marca el servidor como fallido, o como que necesita autenticación cuando el servidor necesita autorizarse de nuevo. Cuando marca el servidor como fallido, ves una notificación `MCP server "<name>" disconnected · open /mcp to reconnect`. Puedes reintentar manualmente desde `/mcp`.

421* **En ejecuciones de [`claude -p`](/docs/es/headless) y sesiones del [Agent SDK](/docs/es/agent-sdk/overview)**: Claude Code se reconecta con el mismo cronograma, sin panel `/mcp` para mostrar los intentos.432* **En ejecuciones de [`claude -p`](/docs/es/headless) y sesiones del [Agent SDK](/docs/es/agent-sdk/overview)**: Claude Code hace los mismos cinco intentos, sin panel `/mcp` para mostrarlos. Cuando los intentos de un servidor HTTP o SSE fallan con un error transitorio, sigue reintentando en segundo plano durante hasta aproximadamente media hora, y el servidor y sus herramientas vuelven a estar disponibles cuando un reintento se conecta.

422 433 

423<h4 id="failed-first-connections">434<h4 id="failed-first-connections">

424 Conexiones iniciales fallidas435 Conexiones iniciales fallidas


479 490 

480El `timeout` por servidor es un límite estricto de tiempo real por llamada a herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores por debajo de 1000 se ignoran y se recurre a `MCP_TOOL_TIMEOUT`, o a su valor predeterminado de aproximadamente 28 horas cuando esa variable no está establecida. Para un servidor HTTP, SSE, o de [conector de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai) también hay un segundo temporizador por solicitud que cubre cada solicitud hasta el primer byte de respuesta del servidor. Claude Code establece ese temporizador en el mayor de tres valores: 60 segundos, el tiempo de espera de herramientas que se aplica al servidor, y `MCP_TIMEOUT`. El valor predeterminado de 28 horas de un `MCP_TOOL_TIMEOUT` sin establecer no entra en esa comparación, y un valor por debajo de 60 segundos no acorta el temporizador. Los servidores stdio y WebSocket no tienen temporizador por solicitud.491El `timeout` por servidor es un límite estricto de tiempo real por llamada a herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores por debajo de 1000 se ignoran y se recurre a `MCP_TOOL_TIMEOUT`, o a su valor predeterminado de aproximadamente 28 horas cuando esa variable no está establecida. Para un servidor HTTP, SSE, o de [conector de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai) también hay un segundo temporizador por solicitud que cubre cada solicitud hasta el primer byte de respuesta del servidor. Claude Code establece ese temporizador en el mayor de tres valores: 60 segundos, el tiempo de espera de herramientas que se aplica al servidor, y `MCP_TIMEOUT`. El valor predeterminado de 28 horas de un `MCP_TOOL_TIMEOUT` sin establecer no entra en esa comparación, y un valor por debajo de 60 segundos no acorta el temporizador. Los servidores stdio y WebSocket no tienen temporizador por solicitud.

481 492 

482Un `timeout` por servidor de al menos 1000 también actúa como un mínimo para el tiempo de espera de inactividad descrito a continuación: Claude Code nunca aborta las llamadas a herramientas de ese servidor por inactividad antes del `timeout` por servidor. Requiere Claude Code v2.1.203 o posterior.493Un `timeout` por servidor de al menos 1000 también actúa como un mínimo para el tiempo de espera de inactividad descrito a continuación: Claude Code nunca aborta las llamadas a herramientas de ese servidor por inactividad antes del `timeout` por servidor.

483 494 

484Una llamada a herramienta a un servidor MCP que no envía respuesta ni notificación de progreso durante la ventana de inactividad se aborta con un error en lugar de esperar el límite de tiempo real. El tiempo de espera de inactividad se aplica a todos los tipos de servidor excepto los servidores IDE y los servidores SDK en proceso. La ventana de inactividad tiene un valor predeterminado de cinco minutos para servidores HTTP, SSE, WebSocket, y de [conector de claude.ai](#use-mcp-servers-from-claude-ai), y de 30 minutos para servidores stdio. Antes de v2.1.203, los servidores stdio estaban exentos del tiempo de espera de inactividad.495Una llamada a herramienta a un servidor MCP que no envía respuesta ni notificación de progreso durante la ventana de inactividad se aborta con un error en lugar de esperar el límite de tiempo real. El tiempo de espera de inactividad se aplica a todos los tipos de servidor excepto los servidores IDE y los servidores SDK en proceso. La ventana de inactividad tiene un valor predeterminado de cinco minutos para servidores HTTP, SSE, WebSocket, y de [conector de claude.ai](#use-mcp-servers-from-claude-ai), y de 30 minutos para servidores stdio.

485 496 

486Establece la variable de entorno [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars) en milisegundos para cambiar la ventana de inactividad, o establécela en `0` para deshabilitar la verificación.497Establece la variable de entorno [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars) en milisegundos para cambiar la ventana de inactividad, o establécela en `0` para deshabilitar la verificación.

487 498 


493 504 

494Una llamada a herramienta MCP en la conversación principal que aún se está ejecutando después de dos minutos pasa a una tarea en segundo plano en lugar de bloquear la sesión. Claude recibe el ID de la tarea inmediatamente y sigue trabajando, y el resultado llega como una notificación de tarea cuando la llamada termina. La ejecución automática en segundo plano requiere Claude Code v2.1.212 o posterior.505Una llamada a herramienta MCP en la conversación principal que aún se está ejecutando después de dos minutos pasa a una tarea en segundo plano en lugar de bloquear la sesión. Claude recibe el ID de la tarea inmediatamente y sigue trabajando, y el resultado llega como una notificación de tarea cuando la llamada termina. La ejecución automática en segundo plano requiere Claude Code v2.1.212 o posterior.

495 506 

496La tarea aparece en [`/tasks`](/docs/es/commands#all-commands), donde también puedes detenerla, y no sobrevive a la salida de la sesión. La entrada de la tarea muestra el progreso más reciente que el servidor ha informado.507La tarea aparece en [`/tasks`](/docs/es/commands#all-commands), donde también puedes detenerla, y no sobrevive a la salida de la sesión. La entrada de la tarea muestra el progreso más reciente que el servidor ha informado. Si detienes la tarea, Claude Code cancela la llamada y le dice a Claude que no llegará ningún resultado. Detenerla no garantiza que el servidor se detenga: puede que ya haya hecho parte del trabajo, o que aún lo termine.

497 508 

498Los límites por llamada aún se aplican mientras la llamada se ejecuta en segundo plano: el límite de tiempo real establecido por el `timeout` por servidor o [`MCP_TOOL_TIMEOUT`](/docs/es/env-vars), y el tiempo de espera de inactividad establecido por [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars).509Los límites por llamada aún se aplican mientras la llamada se ejecuta en segundo plano: el límite de tiempo real establecido por el `timeout` por servidor o [`MCP_TOOL_TIMEOUT`](/docs/es/env-vars), y el tiempo de espera de inactividad establecido por [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars).

499 510 


793 --header "Authorization: Bearer YOUR_GITHUB_PAT"804 --header "Authorization: Bearer YOUR_GITHUB_PAT"

794```805```

795 806 

796Reemplace `YOUR_GITHUB_PAT` con su token de acceso personal. El comando `claude mcp add` guarda la configuración sin validar credenciales, por lo que se acepta un valor de marcador de posición aquí pero el servidor no se conecta más tarde. Para verificar la conexión, ejecute `/mcp` y compruebe que el servidor muestre `connected`. Un servidor con credenciales incorrectas muestra `failed`, y el detalle de fallo incluye el estado HTTP que devolvió el servidor, como un 401.807Reemplaza `YOUR_GITHUB_PAT` con tu token de acceso personal. El comando `claude mcp add` guarda la configuración sin validar credenciales, por lo que aquí se acepta un valor de marcador de posición, pero el servidor no logra conectarse más tarde. Para verificar la conexión, ejecuta `/mcp` y comprueba que la fila del servidor muestre una marca de verificación. Un servidor con credenciales incorrectas muestra en su lugar una ✘, y su [detalle de fallo](#server-status-detail) incluye el estado HTTP que devolvió el servidor, como un 401.

797 808 

798Luego trabaje con GitHub:809Luego trabaje con GitHub:

799 810 

800```text wrap theme={null}811```text wrap theme={null}

801Revise el PR #456 y sugiera mejoras812Revisa el PR #456 y sugiere mejoras

802```813```

803 814 

804```text wrap theme={null}815```text wrap theme={null}

805Cree un nuevo problema para el error que acabamos de encontrar816Crea un nuevo issue para el error que acabamos de encontrar

806```817```

807 818 

808```text wrap theme={null}819```text wrap theme={null}


820 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"831 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

821```832```

822 833 

823Para confirmar que el servidor se inicia, ejecute `/mcp` y compruebe que `db` muestre `connected`.834Para confirmar que el servidor se inicia, ejecuta `/mcp` y comprueba que la fila de `db` muestre una marca de verificación.

824 835 

825Luego consulte su base de datos de forma natural:836Luego consulte su base de datos de forma natural:

826 837 


829```840```

830 841 

831```text wrap theme={null}842```text wrap theme={null}

832Muéstrame el esquema para la tabla de pedidos843Muéstrame el esquema de la tabla de pedidos

833```844```

834 845 

835```text wrap theme={null}846```text wrap theme={null}

836Encuentre clientes que no han realizado una compra en 90 días847Encuentra los clientes que no han realizado una compra en 90 días

837```848```

838 849 

839<h2 id="authenticate-with-remote-mcp-servers">850<h2 id="authenticate-with-remote-mcp-servers">


844 855 

845Claude Code marca un servidor remoto como que necesita autenticación cuando el servidor responde con `401 Unauthorized` o `403 Forbidden`. Lo que Claude Code muestra depende del servidor:856Claude Code marca un servidor remoto como que necesita autenticación cuando el servidor responde con `401 Unauthorized` o `403 Forbidden`. Lo que Claude Code muestra depende del servidor:

846 857 

847* Para un servidor en el que no ha iniciado sesión, cualquiera de los códigos de estado lo marca en `/mcp` para que pueda completar el flujo de OAuth.858* Para un servidor en el que no has iniciado sesión, cualquiera de los códigos de estado lo marca en `/mcp` para que puedas completar el flujo de OAuth.

848* Para un [conector de claude.ai](#use-mcp-servers-from-claude-ai), un `401` causado por claude.ai rechazando su token de sesión no marca el conector, porque volver a autorizar el conector no puede solucionar su inicio de sesión. Claude Code muestra el [estado de token de sesión rechazado](/docs/es/errors#claude-ai-rejected-the-session-token) en su lugar.859* Para un [conector de claude.ai](#use-mcp-servers-from-claude-ai), un `401` causado por claude.ai rechazando tu token de sesión no marca el conector, porque volver a autorizar el conector no puede solucionar tu inicio de sesión. Claude Code muestra el [estado de token de sesión rechazado](/docs/es/errors#claude-ai-rejected-the-session-token) en su lugar.

849* Para un servidor cuyo encabezado `Authorization` configuró, en `headers` o a través de un [`headersHelper`](#use-dynamic-headers-for-custom-authentication), un `401` o `403` al conectar no marca el servidor, porque la credencial a corregir es la que configuró. Claude Code informa que la conexión falló en su lugar. Si establece ese encabezado desde una referencia `${VAR}`, verifique si esa variable es una que Claude Code [lee como vacía](#credential-variables-that-read-as-empty).860* Para un servidor cuyo encabezado `Authorization` configuraste, en `headers` o a través de un [`headersHelper`](#use-dynamic-headers-for-custom-authentication), un `401` o `403` al conectar no marca el servidor, porque la credencial a corregir es la que configuraste. Claude Code informa que la conexión falló en su lugar. Si estableces ese encabezado desde una referencia `${VAR}`, verifica si esa variable es una que Claude Code [lee como vacía](#credential-variables-that-read-as-empty).

850* Para un conector [entregado a una sesión en la nube](#how-connectors-reach-claude-code), Claude Code no ejecuta un flujo de inicio de sesión, porque el proxy de la sesión se autentica con el conector con la autorización que otorgó en claude.ai. Cuando un conector allí necesita autorización nuevamente, reconéctelo en [claude.ai/customize/connectors](https://claude.ai/customize/connectors) en lugar de desde la sesión.861* Para un conector [entregado a una sesión en la nube](#how-connectors-reach-claude-code), Claude Code no ejecuta un flujo de inicio de sesión, porque el proxy de la sesión se autentica con el conector con la autorización que otorgaste en claude.ai. Cuando un conector allí necesita autorización nuevamente, reconéctalo en [claude.ai/customize/connectors](https://claude.ai/customize/connectors) en lugar de desde la sesión.

851 862 

852Cuando una solicitud a un servidor OAuth en el que ya inició sesión devuelve `401 Unauthorized`, Claude Code actualiza el token almacenado, se reconecta e intenta la solicitud una vez más. Solo marca el servidor en `/mcp` si ese reintento también falla. Antes de v2.1.206, una actualización de token que falló por una razón transitoria, como un error de red, marcaba un servidor OAuth como que necesita autenticación para el resto de la sesión aunque su token de actualización aún fuera válido.863Cuando una solicitud a un servidor OAuth en el que ya iniciaste sesión devuelve `401 Unauthorized`, Claude Code actualiza el token almacenado, se reconecta e intenta la solicitud una vez más. Solo marca el servidor en `/mcp` si ese reintento también falla.

853 864 

854Cuando el servidor rechaza el token de actualización almacenado, Claude Code muestra inmediatamente un aviso que apunta a `/mcp`. Abra `/mcp` y seleccione **Re-authenticate** en el servidor para iniciar sesión nuevamente antes de que la siguiente llamada de herramienta falle.865Cuando el servidor rechaza el token de actualización almacenado, Claude Code muestra inmediatamente un aviso que apunta a `/mcp`. Abre `/mcp` y selecciona **Re-authenticate** en el servidor para iniciar sesión nuevamente antes de que la siguiente llamada a herramienta falle.

855 866 

856Un servidor personalizado que devuelve un encabezado `WWW-Authenticate` que apunta a su servidor de autorización obtiene el mismo descubrimiento automático que cualquier otro servidor remoto.867Un servidor personalizado que devuelve un encabezado `WWW-Authenticate` que apunta a su servidor de autorización obtiene el mismo descubrimiento automático que cualquier otro servidor remoto.

857 868 


859 870 

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.871El 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 872 

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>`.873Una ejecución de `claude -p` o del Agent SDK no tiene panel `/mcp`, por lo que Claude Code no puede ejecutar el flujo de OAuth allí. Para usar un servidor que necesita autenticación, completa primero el inicio de sesión desde una sesión interactiva: ejecuta `/mcp` en la sesión, o `claude mcp login <name>` en tu shell. Cuando un servidor configurado necesita autenticación durante una ejecución de `claude -p` o del Agent SDK con [búsqueda de herramientas](#scale-with-mcp-tool-search) habilitada, Claude Code le dice a Claude que las herramientas del servidor no están disponibles hasta que lo autorices.

863 874 

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.875Si configuraste `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. Verifica que el token sea válido para el endpoint de MCP, o elimina el encabezado para usar el flujo de OAuth.

865 876 

866<Steps>877<Steps>

867 <Step title="Agregue el servidor que requiere autenticación">878 <Step title="Agrega el servidor que requiere autenticación">

868 Si ya agregó el servidor `sentry` en el [inicio rápido de MCP](/docs/es/mcp-quickstart#connect-a-server-that-requires-sign-in), omita este paso: ejecutar `claude mcp add` nuevamente con el mismo nombre de servidor en el mismo alcance falla con `MCP server sentry already exists in local config`. De lo contrario, ejecute:879 Si ya agregaste el servidor `sentry` en el [inicio rápido de MCP](/docs/es/mcp-quickstart#connect-a-server-that-requires-sign-in), omite este paso: ejecutar `claude mcp add` nuevamente con el mismo nombre de servidor en el mismo alcance falla con `MCP server sentry already exists in local config`. De lo contrario, ejecuta:

869 880 

870 ```bash theme={null}881 ```bash theme={null}

871 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp882 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

872 ```883 ```

873 </Step>884 </Step>

874 885 

875 <Step title="Use el comando /mcp dentro de Claude Code">886 <Step title="Usa el comando /mcp dentro de Claude Code">

876 En Claude Code, use el comando:887 En Claude Code, usa el comando:

877 888 

878 ```text wrap theme={null}889 ```text wrap theme={null}

879 /mcp890 /mcp

880 ```891 ```

881 892 

882 Luego siga los pasos en su navegador para iniciar sesión.893 Luego sigue los pasos en tu navegador para iniciar sesión.

883 </Step>894 </Step>

884</Steps>895</Steps>

885 896 


887 Consejos:898 Consejos:

888 899 

889 * Los tokens de autenticación se almacenan de forma segura y se actualizan automáticamente900 * Los tokens de autenticación se almacenan de forma segura y se actualizan automáticamente

890 * Use "Clear authentication" en el menú `/mcp` para revocar el acceso901 * Usa "Clear authentication" en el menú `/mcp` para revocar el acceso

891 * Si su navegador no se abre automáticamente, copie la URL proporcionada y ábrala manualmente902 * Si tu navegador no se abre automáticamente, copia la URL proporcionada y ábrela manualmente

892 * Si la redirección del navegador falla con un error de conexión después de autenticarse, pegue la URL de devolución de llamada completa de la barra de direcciones de su navegador en el aviso de URL que aparece en Claude Code903 * Si la redirección del navegador falla con un error de conexión después de autenticarte, pega la URL de devolución de llamada completa de la barra de direcciones de tu navegador en la solicitud de URL que aparece en Claude Code

893 * La autenticación OAuth funciona con servidores HTTP904 * La autenticación OAuth funciona con servidores HTTP

894</Tip>905</Tip>

895 906 


903claude mcp login sentry914claude mcp login sentry

904```915```

905 916 

906Para borrar las credenciales almacenadas más tarde, ejecute `claude mcp logout <name>`.917Para borrar las credenciales almacenadas más tarde, ejecuta `claude mcp logout <name>`.

907 918 

908`claude mcp login` detecta cuando no hay navegador local disponible, como durante una sesión SSH o en Linux sin un servidor de pantalla, e imprime la URL de autorización en lugar de intentar abrir un navegador. Abra la URL en su máquina local, luego pegue la URL de redirección completa de la barra de direcciones de su navegador nuevamente en el aviso. El comando necesita una terminal interactiva para el paso de pegado, así que conéctese con `ssh -t`. Pase `--no-browser` para forzar el aviso de URL incluso cuando se detecta un navegador local.919`claude mcp login` detecta cuando no hay navegador local disponible, como durante una sesión SSH o en Linux sin un servidor de pantalla, e imprime la URL de autorización en lugar de intentar abrir un navegador. Abre la URL en tu máquina local y luego pega la URL de redirección completa de la barra de direcciones de tu navegador en la solicitud. El comando necesita una terminal interactiva para el paso de pegado, así que conéctate con `ssh -t`. Pasa `--no-browser` para forzar la solicitud de URL incluso cuando se detecta un navegador local.

909 920 

910```bash theme={null}921```bash theme={null}

911claude mcp login sentry --no-browser922claude mcp login sentry --no-browser

912```923```

913 924 

914<h3 id="use-a-fixed-oauth-callback-port">925<h3 id="use-a-fixed-oauth-callback-port">

915 Use un puerto de devolución de llamada de OAuth fijo926 Usa un puerto de devolución de llamada de OAuth fijo

916</h3>927</h3>

917 928 

918Algunos servidores MCP requieren un URI de redirección específico registrado con anticipación. De forma predeterminada, Claude Code elige un puerto disponible aleatorio para la devolución de llamada de OAuth. Use `--callback-port` para fijar el puerto para que coincida con un URI de redirección preregistrado del formulario `http://localhost:PORT/callback`. Si el inicio de sesión en Claude Code v2.1.229 falla con una falta de coincidencia de URI de redirección, consulte la nota de versión en [Use pre-configured OAuth credentials](#use-pre-configured-oauth-credentials).929Algunos servidores MCP requieren un URI de redirección específico registrado con anticipación. De forma predeterminada, Claude Code elige un puerto disponible aleatorio para la devolución de llamada de OAuth. Usa `--callback-port` para fijar el puerto de modo que coincida con un URI de redirección preregistrado de la forma `http://localhost:PORT/callback`. Si el inicio de sesión en Claude Code v2.1.229 falla con una falta de coincidencia de URI de redirección, consulta la nota de versión en [Usa credenciales de OAuth preconfiguradas](#use-pre-configured-oauth-credentials).

919 930 

920Puede usar `--callback-port` por sí solo (con registro dinámico de cliente) o junto con `--client-id` (con credenciales preconfiguradas).931Puedes usar `--callback-port` por sí solo (con registro dinámico de cliente) o junto con `--client-id` (con credenciales preconfiguradas).

921 932 

922```bash theme={null}933```bash theme={null}

923# Fixed callback port with dynamic client registration934# Fixed callback port with dynamic client registration


927```938```

928 939 

929<h3 id="use-pre-configured-oauth-credentials">940<h3 id="use-pre-configured-oauth-credentials">

930 Use credenciales de OAuth preconfiguradas941 Usa credenciales de OAuth preconfiguradas

931</h3>942</h3>

932 943 

933Algunos servidores MCP no admiten la configuración automática de OAuth a través del Registro Dinámico de Clientes. Si ve un error como "Incompatible auth server: does not support dynamic client registration", el servidor requiere credenciales preconfiguradas. Claude Code también admite servidores que usan un Documento de Metadatos de ID de Cliente (CIMD) en lugar del Registro Dinámico de Clientes, y los descubre automáticamente. Si el descubrimiento automático falla, registre una aplicación OAuth a través del portal de desarrolladores del servidor primero, luego proporcione las credenciales al agregar el servidor.944Algunos servidores MCP no admiten la configuración automática de OAuth a través del Registro Dinámico de Clientes. Si ves un error como "Incompatible auth server: does not support dynamic client registration", el servidor requiere credenciales preconfiguradas. Claude Code también admite servidores que usan un Documento de Metadatos de ID de Cliente (CIMD) en lugar del Registro Dinámico de Clientes, y los descubre automáticamente. Si el descubrimiento automático falla, registra primero una aplicación OAuth a través del portal de desarrolladores del servidor y luego proporciona las credenciales al agregar el servidor.

934 945 

935<Steps>946<Steps>

936 <Step title="Registre una aplicación OAuth con el servidor">947 <Step title="Registra una aplicación OAuth con el servidor">

937 Cree una aplicación a través del portal de desarrolladores del servidor y anote su ID de cliente y secreto de cliente.948 Crea una aplicación a través del portal de desarrolladores del servidor y anota tu ID de cliente y secreto de cliente.

938 949 

939 Si el formulario de registro solicita un URI de redirección, elija cualquier puerto disponible e ingrese `http://localhost:PORT/callback` con ese puerto. Usará el mismo puerto en el siguiente paso.950 Si el formulario de registro solicita un URI de redirección, elige cualquier puerto disponible e ingresa `http://localhost:PORT/callback` con ese puerto. Usarás el mismo puerto en el siguiente paso.

940 951 

941 En v2.1.229, Claude Code envió `http://127.0.0.1:PORT/callback` en su lugar, y los servidores que coincidían exactamente con el URI de redirección registrado rechazaban el inicio de sesión con una falta de coincidencia de URI de redirección. Claude Code v2.1.231 restauró el formulario `localhost`. Para recuperarse en v2.1.229, actualice Claude Code, o agregue temporalmente el formulario `http://127.0.0.1:PORT/callback` a los URI de redirección registrados del servidor.952 En v2.1.229, Claude Code enviaba `http://127.0.0.1:PORT/callback` en su lugar, y los servidores que coincidían exactamente con el URI de redirección registrado rechazaban el inicio de sesión con una falta de coincidencia de URI de redirección. Claude Code v2.1.231 restauró la forma `localhost`. Para recuperarte en v2.1.229, actualiza Claude Code, o agrega temporalmente la forma `http://127.0.0.1:PORT/callback` a los URI de redirección registrados del servidor.

942 </Step>953 </Step>

943 954 

944 <Step title="Agregue el servidor con sus credenciales">955 <Step title="Agrega el servidor con tus credenciales">

945 Las pestañas cubren ambos comandos: `claude mcp add` toma su ID de cliente y puerto de devolución de llamada como banderas, y `claude mcp add-json` los toma en un objeto `oauth`. Si registró un URI de redirección, establezca el puerto de devolución de llamada en el puerto en ese URI.956 Las pestañas cubren ambos comandos: `claude mcp add` toma tu ID de cliente y puerto de devolución de llamada como flags, y `claude mcp add-json` los toma en un objeto `oauth`. Si registraste un URI de redirección, establece el puerto de devolución de llamada en el puerto de ese URI.

946 957 

947 <Tabs>958 <Tabs>

948 <Tab title="claude mcp add">959 <Tab title="claude mcp add">

949 Use `--client-id` para pasar el ID de cliente de su aplicación. La bandera `--client-secret` solicita el secreto con entrada enmascarada:960 Usa `--client-id` para pasar el ID de cliente de tu aplicación. El flag `--client-secret` solicita el secreto con entrada enmascarada:

950 961 

951 ```bash theme={null}962 ```bash theme={null}

952 claude mcp add --transport http \963 claude mcp add --transport http \


956 </Tab>967 </Tab>

957 968 

958 <Tab title="claude mcp add-json">969 <Tab title="claude mcp add-json">

959 Incluya el objeto `oauth` en la configuración JSON y pase `--client-secret` como una bandera separada:970 Incluye el objeto `oauth` en la configuración JSON y pasa `--client-secret` como un flag separado:

960 971 

961 ```bash theme={null}972 ```bash theme={null}

962 claude mcp add-json my-server \973 claude mcp add-json my-server \


966 </Tab>977 </Tab>

967 978 

968 <Tab title="claude mcp add-json (callback port only)">979 <Tab title="claude mcp add-json (callback port only)">

969 Para fijar solo el puerto de devolución de llamada y dejar que Claude Code registre el cliente automáticamente, establezca `callbackPort` por sí solo:980 Para fijar solo el puerto de devolución de llamada y dejar que Claude Code registre el cliente automáticamente, establece `callbackPort` por sí solo:

970 981 

971 ```bash theme={null}982 ```bash theme={null}

972 claude mcp add-json my-server \983 claude mcp add-json my-server \


975 </Tab>986 </Tab>

976 987 

977 <Tab title="CI / env var">988 <Tab title="CI / env var">

978 Establezca el secreto a través de una variable de entorno para omitir el aviso interactivo:989 Establece el secreto a través de una variable de entorno para omitir la solicitud interactiva:

979 990 

980 ```bash theme={null}991 ```bash theme={null}

981 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \992 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \


986 </Tabs>997 </Tabs>

987 </Step>998 </Step>

988 999 

989 <Step title="Autentíquese en Claude Code">1000 <Step title="Autentícate en Claude Code">

990 Ejecute `/mcp` en Claude Code y siga el flujo de inicio de sesión del navegador.1001 Ejecuta `/mcp` en Claude Code y sigue el flujo de inicio de sesión del navegador.

991 </Step>1002 </Step>

992</Steps>1003</Steps>

993 1004 

994<Tip>1005<Tip>

995 Consejos:1006 Consejos:

996 1007 

997 * El secreto del cliente se almacena de forma segura en su llavero del sistema (macOS) o un archivo de credenciales, no en su configuración1008 * El secreto del cliente se almacena de forma segura en el llavero de tu sistema (macOS) o en un archivo de credenciales, no en tu configuración

998 * Solo puede establecer el secreto del cliente cuando agrega el servidor. Cuando se autentica con `claude mcp login` o desde `/mcp`, Claude Code usa el secreto almacenado y no solicita uno ni lee `MCP_CLIENT_SECRET`1009 * Solo puedes establecer el secreto del cliente cuando agregas el servidor. Cuando te autenticas con `claude mcp login` o desde `/mcp`, Claude Code usa el secreto almacenado y no solicita uno ni lee `MCP_CLIENT_SECRET`

999 * Para agregar o cambiar el secreto más tarde, elimine el servidor con `claude mcp remove <name>`, luego agréguelo nuevamente con `--client-secret` y el mismo `--scope`1010 * Para agregar o cambiar el secreto más tarde, elimina el servidor con `claude mcp remove <name>` y luego agrégalo nuevamente con `--client-secret` y el mismo `--scope`

1000 * Si el servidor usa un cliente OAuth público sin secreto, use solo `--client-id` sin `--client-secret`1011 * Si el servidor usa un cliente OAuth público sin secreto, usa solo `--client-id` sin `--client-secret`

1001 * Estas banderas solo se aplican a transportes HTTP y SSE. No tienen efecto en servidores stdio1012 * Estos flags solo se aplican a transportes HTTP y SSE. No tienen efecto en servidores stdio

1002 * Use `claude mcp get <name>` para verificar que las credenciales de OAuth estén configuradas para un servidor1013 * Usa `claude mcp get <name>` para verificar que las credenciales de OAuth estén configuradas para un servidor

1003</Tip>1014</Tip>

1004 1015 

1005<h3 id="override-oauth-metadata-discovery">1016<h3 id="override-oauth-metadata-discovery">

1006 Anule el descubrimiento de metadatos de OAuth1017 Sobrescribe el descubrimiento de metadatos de OAuth

1007</h3>1018</h3>

1008 1019 

1009Apunte Claude Code a una URL de metadatos de servidor de autorización de OAuth específica para omitir la cadena de descubrimiento predeterminada. Establezca `authServerMetadataUrl` cuando los puntos finales estándar del servidor MCP generen errores, o cuando desee enrutar el descubrimiento a través de un proxy interno. De forma predeterminada, Claude Code primero verifica los Metadatos de Recurso Protegido de RFC 9728 en `/.well-known/oauth-protected-resource`, luego recurre a los metadatos del servidor de autorización de RFC 8414 en `/.well-known/oauth-authorization-server`.1020Apunta Claude Code a una URL de metadatos de servidor de autorización de OAuth específica para omitir la cadena de descubrimiento predeterminada. Establece `authServerMetadataUrl` cuando los endpoints estándar del servidor MCP generen errores, o cuando quieras enrutar el descubrimiento a través de un proxy interno. De forma predeterminada, Claude Code primero verifica los Metadatos de Recurso Protegido de RFC 9728 en `/.well-known/oauth-protected-resource` y luego recurre a los metadatos del servidor de autorización de RFC 8414 en `/.well-known/oauth-authorization-server`.

1010 1021 

1011Establezca `authServerMetadataUrl` en el objeto `oauth` de la configuración de su servidor en `.mcp.json`:1022Establece `authServerMetadataUrl` en el objeto `oauth` de la configuración de tu servidor en `.mcp.json`:

1012 1023 

1013```json theme={null}1024```json theme={null}

1014{1025{


1024}1035}

1025```1036```

1026 1037 

1027La URL debe usar `https://`. El `scopes_supported` de la URL de metadatos anula los alcances que el servidor ascendente anuncia.1038La URL debe usar `https://`. El `scopes_supported` de la URL de metadatos sobrescribe los alcances que anuncia el servidor ascendente.

1028 1039 

1029<h3 id="restrict-oauth-scopes">1040<h3 id="restrict-oauth-scopes">

1030 Restrinja los alcances de OAuth1041 Restringe los alcances de OAuth

1031</h3>1042</h3>

1032 1043 

1033Establezca `oauth.scopes` para fijar los alcances que Claude Code solicita durante el flujo de autorización. Esta es la forma admitida de restringir un servidor MCP a un subconjunto aprobado por el equipo de seguridad cuando el servidor de autorización ascendente anuncia más alcances de los que desea otorgar. El valor es una cadena única separada por espacios, que coincide con el formato del parámetro `scope` en RFC 6749 §3.3.1044Establece `oauth.scopes` para fijar los alcances que Claude Code solicita durante el flujo de autorización. Esta es la forma admitida de restringir un servidor MCP a un subconjunto aprobado por el equipo de seguridad cuando el servidor de autorización ascendente anuncia más alcances de los que quieres otorgar. El valor es una cadena única separada por espacios, que coincide con el formato del parámetro `scope` en RFC 6749 §3.3.

1034 1045 

1035```json theme={null}1046```json theme={null}

1036{1047{


1046}1057}

1047```1058```

1048 1059 

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.1060`oauth.scopes` tiene prioridad sobre `authServerMetadataUrl` y sobre los alcances que el servidor descubre en `/.well-known`. Déjalo sin establecer para permitir que el servidor MCP determine el conjunto de alcances solicitados.

1050 1061 

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.1062Cuando `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 1063 

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.1064Si 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 en el navegador.

1054 1065 

1055Si el servidor luego devuelve un 403 `insufficient_scope` para una llamada de herramienta, la llamada falla con un mensaje [`needs additional permissions`](/docs/es/errors#mcp-server-needs-you-to-sign-in-again) que nombra el alcance que el servidor solicita. El servidor se muestra como que necesita autenticación en `/mcp`.1066Si el servidor luego devuelve un 403 `insufficient_scope` para una llamada a herramienta, la llamada falla con un mensaje [`needs additional permissions`](/docs/es/errors#mcp-server-needs-you-to-sign-in-again) que nombra el alcance que el servidor solicita. El servidor se muestra como que necesita autenticación en `/mcp`.

1056 1067 

1057Si ese alcance no está en su `oauth.scopes` fijado, agréguelo, luego ejecute `/mcp` y autentique el servidor nuevamente. Claude Code solicita los alcances fijados en lugar del alcance que el servidor nombró, por lo que si se autentica nuevamente sin agregarlo, el token que obtiene aún carece de él.1068Si ese alcance no está en tu `oauth.scopes` fijado, agrégalo y luego ejecuta `/mcp` y autentica el servidor nuevamente. Claude Code solicita los alcances fijados en lugar del alcance que el servidor nombró, por lo que si te autenticas nuevamente sin agregarlo, el token que obtienes aún carece de él.

1058 1069 

1059<h3 id="use-dynamic-headers-for-custom-authentication">1070<h3 id="use-dynamic-headers-for-custom-authentication">

1060 Use encabezados dinámicos para autenticación personalizada1071 Usa encabezados dinámicos para autenticación personalizada

1061</h3>1072</h3>

1062 1073 

1063Si su servidor MCP usa un esquema de autenticación distinto de OAuth, como Kerberos, tokens de corta duración o un SSO interno, use `headersHelper` para generar encabezados de solicitud en el momento de la conexión. Claude Code ejecuta el comando y fusiona su salida en los encabezados de conexión.1074Si tu servidor MCP usa un esquema de autenticación distinto de OAuth, como Kerberos, tokens de corta duración o un SSO interno, usa `headersHelper` para generar encabezados de solicitud en el momento de la conexión. Claude Code ejecuta el comando y combina su salida con los encabezados de conexión.

1064 1075 

1065```json theme={null}1076```json theme={null}

1066{1077{


1092 1103 

1093* El comando debe escribir un objeto JSON de pares clave-valor de cadena en stdout1104* El comando debe escribir un objeto JSON de pares clave-valor de cadena en stdout

1094* Claude Code ejecuta el comando en un shell y se rinde después de 10 segundos1105* Claude Code ejecuta el comando en un shell y se rinde después de 10 segundos

1095* Claude Code elige el directorio de trabajo del comando por [dónde configuró el servidor](#where-the-helper-runs), así que proporcione el script como una ruta absoluta o colóquelo en `PATH`1106* Claude Code elige el directorio de trabajo del comando según [dónde configuraste el servidor](#where-the-helper-runs), así que proporciona el script como una ruta absoluta o colócalo en `PATH`

1096* Los encabezados dinámicos anulan cualquier `headers` estático con el mismo nombre1107* Los encabezados dinámicos sobrescriben cualquier `headers` estático con el mismo nombre

1097 1108 

1098Claude Code ejecuta el helper nuevamente en cada conexión, al inicio de la sesión y al reconectar, una vez que la [regla de confianza para servidores de alcance de proyecto y local](#trust-a-folder-before-its-headershelper-runs) le permite ejecutarse. No almacena en caché el resultado, por lo que su script es responsable de cualquier reutilización de token.1109Claude Code ejecuta el helper nuevamente en cada conexión, al inicio de la sesión y al reconectar, una vez que la [regla de confianza para servidores de alcance de proyecto y local](#trust-a-folder-before-its-headershelper-runs) le permite ejecutarse. No almacena en caché el resultado, por lo que tu script es responsable de cualquier reutilización de token.

1099 1110 

1100Si una llamada de herramienta devuelve `401 Unauthorized` o `403 Forbidden`, Claude Code ejecuta automáticamente el helper nuevamente bajo la misma regla, se reconecta con los encabezados frescos e intenta la llamada una vez más. Claude Code marca el servidor como que necesita autenticación en `/mcp` solo si ese reintento también falla.1111Si una llamada a herramienta devuelve `401 Unauthorized` o `403 Forbidden`, Claude Code ejecuta automáticamente el helper nuevamente bajo la misma regla, se reconecta con los encabezados nuevos e intenta la llamada una vez más. Claude Code marca el servidor como que necesita autenticación en `/mcp` solo si ese reintento también falla.

1101 1112 

1102Cuando la salida del helper incluye un encabezado `Authorization`, Claude Code usa esa credencial como la autenticación del servidor y no recurre a OAuth para el servidor.1113Cuando la salida del helper incluye un encabezado `Authorization`, Claude Code usa esa credencial como la autenticación del servidor y no recurre a OAuth para el servidor.

1103 1114 

1104Si el servidor rechaza la credencial del helper al conectar, Claude Code informa que la conexión falló en lugar de marcar el servidor como que necesita autenticación. Corrija la credencial que devuelve su helper, luego reconéctese desde `/mcp` para ejecutar el helper nuevamente.1115Si el servidor rechaza la credencial del helper al conectar, Claude Code informa que la conexión falló en lugar de marcar el servidor como que necesita autenticación. Corrige la credencial que devuelve tu helper y luego reconéctate desde `/mcp` para ejecutar el helper nuevamente.

1105 1116 

1106Claude Code establece estas variables de entorno al ejecutar el helper:1117Claude Code establece estas variables de entorno al ejecutar el helper:

1107 1118 


1111| `CLAUDE_CODE_MCP_SERVER_URL` | la URL del servidor MCP |1122| `CLAUDE_CODE_MCP_SERVER_URL` | la URL del servidor MCP |

1112| `CLAUDE_PLUGIN_ROOT` | el directorio raíz del plugin. Se establece solo cuando un [plugin](/docs/es/plugins/components#mcp-servers) proporciona el servidor |1123| `CLAUDE_PLUGIN_ROOT` | el directorio raíz del plugin. Se establece solo cuando un [plugin](/docs/es/plugins/components#mcp-servers) proporciona el servidor |

1113 1124 

1114Úselos para escribir un único script helper que sirva a múltiples servidores MCP.1125Úsalas para escribir un único script helper que sirva a múltiples servidores MCP.

1115 1126 

1116Un `headersHelper` proporcionado por un plugin no puede hacer referencia a los valores [`${user_config.*}`](/docs/es/plugins/manifest-reference#user-configuration) del plugin, porque el comando se ejecuta a través de un shell. Claude Code informa que el servidor está mal configurado con un [error](/docs/es/errors#plugin-command-references-user-config) y no sustituye el valor. Coloque `${user_config.KEY}` en el campo `headers` del servidor en su lugar, que no se analiza mediante shell, o haga que el script helper lea el valor de un archivo de configuración. Antes de v2.1.207, `headersHelper` sustituía valores `${user_config.*}`.1127Un `headersHelper` proporcionado por un plugin no puede hacer referencia a los valores [`${user_config.*}`](/docs/es/plugins/manifest-reference#user-configuration) del plugin, porque el comando se ejecuta a través de un shell. Claude Code informa que el servidor está mal configurado con un [error](/docs/es/errors#plugin-command-references-user-config) y no sustituye el valor. Coloca `${user_config.KEY}` en el campo `headers` del servidor en su lugar, que no se analiza mediante shell, o haz que el script helper lea el valor de un archivo de configuración. Antes de v2.1.207, `headersHelper` sustituía valores `${user_config.*}`.

1117 1128 

1118<h4 id="where-the-helper-runs">1129<h4 id="where-the-helper-runs">

1119 Dónde se ejecuta el helper1130 Dónde se ejecuta el helper

1120</h4>1131</h4>

1121 1132 

1122Claude Code elige el directorio de trabajo del comando `headersHelper` de la configuración que declara el servidor. Un `cd` que Claude ejecuta en Bash no lo mueve, y [`/cd`](/docs/es/permissions#move-the-session-to-another-directory) lo mueve solo para servidores que se ejecutan desde el directorio de trabajo principal de la sesión. Cada fila a continuación proporciona el directorio contra el cual se resuelve una ruta relativa en su comando `headersHelper`.1133Claude Code elige el directorio de trabajo del comando `headersHelper` a partir de la configuración que declara el servidor. Un `cd` que Claude ejecuta en Bash no lo mueve, y [`/cd`](/docs/es/permissions#move-the-session-to-another-directory) lo mueve solo para servidores que se ejecutan desde el directorio de trabajo principal de la sesión. Cada fila a continuación indica el directorio contra el cual se resuelve una ruta relativa en tu comando `headersHelper`.

1123 1134 

1124| Dónde configuró el servidor | Directorio de trabajo |1135| Dónde configuraste el servidor | Directorio de trabajo |

1125| :- | :- |1136| :- | :- |

1126| Un [plugin](/docs/es/plugins/components#mcp-servers) | El directorio raíz del plugin |1137| Un [plugin](/docs/es/plugins/components#mcp-servers) | El directorio raíz del plugin |

1127| Un proyecto `.mcp.json` o un servidor de [alcance local](#local-scope) | El directorio del proyecto en el que se declara el servidor |1138| Un `.mcp.json` de proyecto o un servidor de [alcance local](#local-scope) | El directorio del proyecto en el que se declara el servidor |

1128| Un archivo de agente en su proyecto, un servidor de la opción `mcpServers` del SDK o el método `setMcpServers()`, o [`--mcp-config`](/docs/es/cli-reference) | El [directorio de trabajo principal](/docs/es/permissions#working-directories) de la sesión |1139| Un archivo de agente en tu proyecto, un servidor de la opción `mcpServers` del SDK o del método `setMcpServers()`, o [`--mcp-config`](/docs/es/cli-reference) | El [directorio de trabajo principal](/docs/es/permissions#working-directories) de la sesión |

1129| [Alcance de usuario](#user-scope), [MCP administrado](/docs/es/managed-mcp), un [conector de claude.ai](#use-mcp-servers-from-claude-ai), o un archivo de agente de fuera de su proyecto, incluido uno de un directorio `--add-dir` | Su directorio de configuración, `~/.claude` a menos que establezca [`CLAUDE_CONFIG_DIR`](/docs/es/env-vars) |1140| [Alcance de usuario](#user-scope), [MCP administrado](/docs/es/managed-mcp), un [conector de claude.ai](#use-mcp-servers-from-claude-ai), o un archivo de agente de fuera de tu proyecto, incluido uno de un directorio `--add-dir` | Tu directorio de configuración, `~/.claude` a menos que establezcas [`CLAUDE_CONFIG_DIR`](/docs/es/env-vars) |

1130 1141 

1131Antes de v2.1.238, Claude Code también ejecutaba los helpers de servidores de alcance de usuario, administrados y de conector de claude.ai, y de archivos de agente de fuera de su proyecto, desde el directorio en el que lo inició.1142Antes de v2.1.238, Claude Code también ejecutaba los helpers de servidores de alcance de usuario, administrados y de conector de claude.ai, y de archivos de agente de fuera de tu proyecto, desde el directorio en el que lo iniciaste.

1132 1143 

1133<h4 id="which-variables-a-helper-can-read">1144<h4 id="which-variables-a-helper-can-read">

1134 Qué variables puede leer un helper1145 Qué variables puede leer un helper

1135</h4>1146</h4>

1136 1147 

1137Un `headersHelper` que un repositorio o plugin proporciona es un comando que no escribió, por lo que Claude Code lo ejecuta sin las variables de credencial de su entorno, como `ANTHROPIC_API_KEY`. Dónde configuró el servidor decide si esto se aplica:1148Un `headersHelper` que proporciona un repositorio o un plugin es un comando que no escribiste, por lo que Claude Code lo ejecuta sin las variables de credencial de tu entorno, como `ANTHROPIC_API_KEY`. Dónde configuraste el servidor decide si esto se aplica:

1138 1149 

1139* **Eliminado**: un servidor en un proyecto `.mcp.json` o en un plugin, y un servidor en línea en un archivo de agente de su proyecto o de un directorio `--add-dir`1150* **Eliminadas**: un servidor en un `.mcp.json` de proyecto o en un plugin, y un servidor en línea en un archivo de agente de tu proyecto o de un directorio `--add-dir`

1140* **No eliminado**: un servidor en [alcance de usuario](#user-scope) o [alcance local](#local-scope), en [MCP administrado](/docs/es/managed-mcp), de un [conector de claude.ai](#use-mcp-servers-from-claude-ai), o proporcionado por el SDK o [`--mcp-config`](/docs/es/cli-reference), y un servidor en línea en un archivo de agente de `~/.claude/agents/`, de configuración administrada, o pasado con `--agents`1151* **No eliminadas**: un servidor en [alcance de usuario](#user-scope) o [alcance local](#local-scope), en [MCP administrado](/docs/es/managed-mcp), de un [conector de claude.ai](#use-mcp-servers-from-claude-ai), o proporcionado por el SDK o [`--mcp-config`](/docs/es/cli-reference), y un servidor en línea en un archivo de agente de `~/.claude/agents/`, de la configuración administrada, o pasado con `--agents`

1141 1152 

1142Aparte de las variables `GIT_CONFIG_KEY_<n>` de Git, Claude Code elimina todas las variables de su entorno cuyo nombre parece una credencial, como un nombre con `TOKEN`, `SECRET`, `PASSWORD`, `KEY` o `AUTH` en él en cualquier caso de letra, por lo que `ANTHROPIC_API_KEY` y `MY_REGISTRY_TOKEN` se eliminan. Claude Code también elimina una lista fija de variables de credencial cuyos nombres no siguen ese patrón, como `ANTHROPIC_CUSTOM_HEADERS`.1153Aparte de las variables `GIT_CONFIG_KEY_<n>` de Git, Claude Code elimina todas las variables de tu entorno cuyo nombre parece una credencial, como un nombre que contenga `TOKEN`, `SECRET`, `PASSWORD`, `KEY` o `AUTH` en mayúsculas o minúsculas, por lo que tanto `ANTHROPIC_API_KEY` como `MY_REGISTRY_TOKEN` se eliminan. Claude Code también elimina una lista fija de variables de credencial cuyos nombres no siguen ese patrón, como `ANTHROPIC_CUSTOM_HEADERS`.

1143 1154 

1144Cuando esto se aplica a su helper, haga que el script lea su credencial de un archivo o un almacén de credenciales. Si la `url` del servidor [lleva el valor en vivo de una de estas variables](#environment-variable-expansion-in-mcp-json), como `MY_REGISTRY_TOKEN`, el valor `CLAUDE_CODE_MCP_SERVER_URL` que recibe el helper también tiene esa parte reemplazada con `REDACTED`.1155Cuando esto se aplica a tu helper, haz que el script lea su credencial de un archivo o de un almacén de credenciales. Si la `url` del servidor [lleva el valor en vivo de una de estas variables](#environment-variable-expansion-in-mcp-json), como `MY_REGISTRY_TOKEN`, el valor `CLAUDE_CODE_MCP_SERVER_URL` que recibe el helper también tiene esa parte reemplazada con `REDACTED`.

1145 1156 

1146<h4 id="trust-a-folder-before-its-headershelper-runs">1157<h4 id="trust-a-folder-before-its-headershelper-runs">

1147 Confíe en una carpeta antes de que se ejecute su headersHelper1158 Confía en una carpeta antes de que se ejecute su headersHelper

1148</h4>1159</h4>

1149 1160 

1150Claude Code ejecuta un `headersHelper` como un comando de shell arbitrario. Para un servidor en un proyecto `.mcp.json` o en [alcance local](#local-scope), ejecuta el helper solo después de que acepte el [diálogo de confianza](/docs/es/permissions#project-allow-rules-and-workspace-trust) para el directorio del proyecto en el que se declara el servidor. Antes de v2.1.238, una sesión `claude -p` o SDK ejecutaba estos helpers sin verificar la confianza, y una sesión interactiva los ejecutaba una vez que había confiado en una carpeta principal.1161Claude Code ejecuta un `headersHelper` como un comando de shell arbitrario. Para un servidor en un `.mcp.json` de proyecto o en [alcance local](#local-scope), ejecuta el helper solo después de que aceptes el [diálogo de confianza](/docs/es/permissions#project-allow-rules-and-workspace-trust) para el directorio del proyecto en el que se declara el servidor. Antes de v2.1.238, una sesión de `claude -p` o del SDK ejecutaba estos helpers sin verificar la confianza, y una sesión interactiva los ejecutaba una vez que habías confiado en una carpeta principal.

1151 1162 

1152* **Confianza que no cuenta**: la confianza de una carpeta principal, y la confianza automática que una sesión `claude -p` o SDK obtiene para [hooks en archivos de configuración](/docs/es/permissions#what-runs-before-you-trust-a-folder)1163* **Confianza que no cuenta**: la confianza de una carpeta principal, y la confianza automática que una sesión de `claude -p` o del SDK obtiene para [hooks en archivos de configuración](/docs/es/permissions#what-runs-before-you-trust-a-folder)

1153* **Hasta que confíe en la carpeta**: Claude Code conecta el servidor solo con su `headers` estático. En una sesión `claude -p` o SDK también imprime una línea [`headersHelper not run`](/docs/es/errors#headershelper-not-run) por servidor en stderr, diciéndole cómo otorgar la confianza.1164* **Hasta que confíes en la carpeta**: Claude Code conecta el servidor solo con sus `headers` estáticos. En una sesión de `claude -p` o del SDK también imprime una línea [`headersHelper not run`](/docs/es/errors#headershelper-not-run) por servidor en stderr, indicándote cómo otorgar la confianza.

1154* **Confianza sin un diálogo**: establezca `projects["<path>"].hasTrustDialogAccepted` en `true` en `~/.claude.json`. `<path>` es la carpeta en la que [Project allow rules and workspace trust](/docs/es/permissions#project-allow-rules-and-workspace-trust) dice que Claude Code basa la confianza.1165* **Confianza sin un diálogo**: establece `projects["<path>"].hasTrustDialogAccepted` en `true` en `~/.claude.json`. `<path>` es la carpeta en la que, según [Reglas de permiso de proyecto y confianza del espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust), Claude Code basa la confianza.

1155 1166 

1156Claude Code aplica la misma regla a un servidor declarado en línea en un [archivo de agente](/docs/es/sub-agents#scope-mcp-servers-to-a-subagent), verificando de dónde vino ese archivo de agente: su proyecto, para un archivo en su directorio `.claude/agents/`, o un directorio `--add-dir`. Hasta que [confíe en ese proyecto o directorio mismo](/docs/es/permissions#what-runs-before-you-trust-a-folder), Claude Code no carga el servidor en absoluto, por lo que su helper nunca se ejecuta tampoco.1167Claude Code aplica la misma regla a un servidor declarado en línea en un [archivo de agente](/docs/es/sub-agents#scope-mcp-servers-to-a-subagent), verificando de dónde vino ese archivo de agente: tu proyecto, para un archivo en su directorio `.claude/agents/`, o un directorio `--add-dir`. Hasta que [confíes en ese proyecto o directorio en sí](/docs/es/permissions#what-runs-before-you-trust-a-folder), Claude Code no carga el servidor en absoluto, por lo que su helper tampoco se ejecuta nunca.

1157 1168 

1158<h2 id="add-mcp-servers-from-json-configuration">1169<h2 id="add-mcp-servers-from-json-configuration">

1159 Agregar servidores MCP desde configuración JSON1170 Agregar servidores MCP desde configuración JSON


1218 </Step>1229 </Step>

1219</Steps>1230</Steps>

1220 1231 

1221Los nombres de servidores agregados a través de comandos `claude mcp` pueden contener solo letras, números, guiones y guiones bajos. Claude Desktop no aplica esa restricción, por lo que un servidor de Claude Desktop cuyo nombre contiene cualquier otro carácter, como un espacio, no puede ser importado. La importación reporta cada nombre que rechaza e importa los otros servidores que seleccionó. Antes de v2.1.205, el primer nombre inválido detenía la importación y ninguno de los servidores seleccionados se agregaba.1232Los nombres de servidores agregados a través de comandos `claude mcp` pueden contener solo letras, números, guiones y guiones bajos. Claude Desktop no aplica esa restricción, por lo que un servidor de Claude Desktop cuyo nombre contiene cualquier otro carácter, como un espacio, no puede ser importado. La importación reporta cada nombre que rechaza e importa los otros servidores que seleccionaste.

1222 1233 

1223<Tip>1234<Tip>

1224 Consejos:1235 Consejos:


1340 Usar Claude Code como servidor MCP1351 Usar Claude Code como servidor MCP

1341</h2>1352</h2>

1342 1353 

1343Puede usar Claude Code como servidor MCP que otras aplicaciones pueden conectar:1354Puedes usar Claude Code como servidor MCP que otras aplicaciones pueden conectar:

1344 1355 

1345```bash theme={null}1356```bash theme={null}

1346# Inicia Claude como servidor MCP stdio1357# Inicia Claude como servidor MCP stdio


1349 1360 

1350El comando no imprime nada cuando se inicia. Un servidor MCP stdio se comunica a través de stdin y stdout, por lo que una terminal silenciosa y bloqueada significa que el servidor está ejecutándose y esperando que un cliente se conecte.1361El comando no imprime nada cuando se inicia. Un servidor MCP stdio se comunica a través de stdin y stdout, por lo que una terminal silenciosa y bloqueada significa que el servidor está ejecutándose y esperando que un cliente se conecte.

1351 1362 

1352Puede usar esto en Claude Desktop agregando esta configuración a claude\_desktop\_config.json:1363Puedes usar esto en Claude Desktop agregando esta configuración a claude\_desktop\_config.json:

1353 1364 

1354```json theme={null}1365```json theme={null}

1355{1366{


1365```1376```

1366 1377 

1367<Warning>1378<Warning>

1368 **Configuración de la ruta del ejecutable**: el campo `command` debe hacer referencia al ejecutable de Claude Code. Si el comando `claude` no está en la ruta del sistema, deberá especificar la ruta completa al ejecutable.1379 **Configuración de la ruta del ejecutable**: el campo `command` debe hacer referencia al ejecutable de Claude Code. Si el comando `claude` no está en la ruta del sistema, deberás especificar la ruta completa al ejecutable.

1369 1380 

1370 Para encontrar la ruta completa:1381 Para encontrar la ruta completa:

1371 1382 


1373 which claude1384 which claude

1374 ```1385 ```

1375 1386 

1376 Luego use la ruta completa en su configuración:1387 Luego usa la ruta completa en tu configuración:

1377 1388 

1378 ```json theme={null}1389 ```json theme={null}

1379 {1390 {


1388 }1399 }

1389 ```1400 ```

1390 1401 

1391 Sin la ruta correcta del ejecutable, encontrará errores como `spawn claude ENOENT`.1402 Sin la ruta correcta del ejecutable, encontrarás errores como `spawn claude ENOENT`.

1392</Warning>1403</Warning>

1393 1404 

1394<Tip>1405<Tip>

1395 Consejos:1406 Consejos:

1396 1407 

1397 * En Claude Desktop, intente pedirle a Claude que lea archivos en un directorio, realice ediciones y más.1408 * En Claude Desktop, intenta pedirle a Claude que lea archivos en un directorio, realice ediciones y más.

1398 * Este servidor MCP solo expone las herramientas de Claude Code a su cliente MCP, por lo que su propio cliente es responsable de implementar la confirmación del usuario para llamadas de herramientas individuales.1409 * Este servidor MCP solo expone las herramientas de Claude Code a tu cliente MCP, por lo que tu propio cliente es responsable de implementar la confirmación del usuario para llamadas a herramientas individuales.

1399</Tip>1410</Tip>

1400 1411 

1412Cuando el texto JSON del resultado de una llamada a la herramienta Bash o PowerShell incluye un campo `backgroundOutputPath`, la llamada dejó su comando ejecutándose [en segundo plano](/docs/es/tools-reference#background-commands), por ejemplo cuando la llamada estableció `run_in_background: true` o cuando se agotó el tiempo de espera del comando. El campo indica la ruta del archivo de salida del comando. Nada notifica a tu cliente cuando el comando termina, y el archivo no recibe una línea de cierre cuando eso ocurre, por lo que leer el archivo muestra la salida escrita hasta ese momento. Para detectar el final, agrega un marcador al comando, como `npm test; echo DONE`, y búscalo en el archivo. El campo `backgroundOutputPath` requiere Claude Code v2.1.295 o posterior.

1413 

1401<h2 id="mcp-output-limits-and-warnings">1414<h2 id="mcp-output-limits-and-warnings">

1402 Límites de salida de MCP y advertencias1415 Límites de salida de MCP y advertencias

1403</h2>1416</h2>


1409* **Límite predeterminado**: el máximo predeterminado es 25,000 tokens1422* **Límite predeterminado**: el máximo predeterminado es 25,000 tokens

1410* **Alcance**: la variable de entorno se aplica a herramientas que no declaran su propio límite. Las herramientas que establecen [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) usan ese valor en su lugar para contenido de texto, independientemente del valor en que esté configurado `MAX_MCP_OUTPUT_TOKENS`. Las herramientas que devuelven datos de imagen siguen estando sujetas a `MAX_MCP_OUTPUT_TOKENS`1423* **Alcance**: la variable de entorno se aplica a herramientas que no declaran su propio límite. Las herramientas que establecen [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) usan ese valor en su lugar para contenido de texto, independientemente del valor en que esté configurado `MAX_MCP_OUTPUT_TOKENS`. Las herramientas que devuelven datos de imagen siguen estando sujetas a `MAX_MCP_OUTPUT_TOKENS`

1411* **Superando el límite**: cuando un resultado exitoso sin contenido de imagen excede el límite de tokens, Claude Code lo guarda en un archivo y lo reemplaza en la conversación con un mensaje que nombra la ruta del archivo, para que Claude lea el archivo cuando necesite el contenido. El archivo se encuentra en el directorio `tool-results` de la sesión bajo [`~/.claude/projects/`](/docs/es/claude-directory#cleaned-up-automatically).1424* **Superando el límite**: cuando un resultado exitoso sin contenido de imagen excede el límite de tokens, Claude Code lo guarda en un archivo y lo reemplaza en la conversación con un mensaje que nombra la ruta del archivo, para que Claude lea el archivo cuando necesite el contenido. El archivo se encuentra en el directorio `tool-results` de la sesión bajo [`~/.claude/projects/`](/docs/es/claude-directory#cleaned-up-automatically).

1412* **Tamaño de respuesta de servidores HTTP y SSE**: Claude Code deja de leer una respuesta de un servidor [HTTP](#option-1-add-a-remote-http-server) o [SSE](#option-2-add-a-remote-sse-server) una vez que un cuerpo de respuesta JSON, o un evento de un flujo de eventos, supera los 16 MB después de la descompresión. La solicitud a la que corresponde esa respuesta falla. Si mantienes el servidor, devuelve menos datos por respuesta para mantenerte por debajo del límite, por ejemplo, paginando los resultados1425* **Tamaño de respuesta de servidores HTTP y SSE**: cuando una respuesta de un servidor [HTTP](#option-1-add-a-remote-http-server) o [SSE](#option-2-add-a-remote-sse-server) supera los 16 MiB, Claude Code deja de leerla y la solicitud falla. El límite se aplica después de la descompresión a un cuerpo de respuesta JSON o a un evento de un flujo de eventos. Si mantienes el servidor, devuelve menos datos por respuesta para mantenerte por debajo del límite, por ejemplo, paginando los resultados

1426* **Tamaño de mensaje de servidores WebSocket**: cuando un servidor [WebSocket](#option-4-add-a-remote-websocket-server) envía un mensaje de más de 16 MiB, Claude Code [cierra la conexión](#mid-session-drops-of-a-remote-server) y las llamadas en curso en ese servidor fallan. Si mantienes el servidor, devuelve menos datos por mensaje para mantenerte por debajo del límite

1413 1427 

1414Una llamada que Claude Code ha [movido a una tarea en segundo plano](#automatic-backgrounding-of-long-tool-calls) informa su resultado a través de la notificación de la tarea. Se aplican dos límites más a una llamada que se completa en primer plano:1428Una llamada que Claude Code ha [movido a una tarea en segundo plano](#automatic-backgrounding-of-long-tool-calls) informa su resultado a través de la notificación de la tarea. Se aplican dos límites más a una llamada que se completa en primer plano:

1415 1429 


1483 1497 

1484El [manejo de combinador de nivel raíz](#tool-input-schemas-with-a-root-level-combinator) es independiente y mantiene su propio comportamiento cuando la obtención de banderas está desactivada o las banderas nunca han llegado.1498El [manejo de combinador de nivel raíz](#tool-input-schemas-with-a-root-level-combinator) es independiente y mantiene su propio comportamiento cuando la obtención de banderas está desactivada o las banderas nunca han llegado.

1485 1499 

1500<h2 id="tools-with-names-longer-than-128-characters">

1501 Herramientas con nombres de más de 128 caracteres

1502</h2>

1503 

1504Si `/mcp` muestra una herramienta que Claude no puede llamar, verifica si el nombre completo de la herramienta tiene más de 128 caracteres. Ejecuta `/mcp` en tu sesión y selecciona la herramienta para ver su nombre completo, como `mcp__<server>__<tool>`. Claude Code omite una herramienta MCP de las herramientas que envía a Claude cuando su nombre completo supera los 128 caracteres. La API de Claude rechaza una solicitud que incluya una herramienta así, por lo que omitir la herramienta permite que las demás herramientas del servidor sigan funcionando.

1505 

1506Para ver el mensaje que nombra la herramienta y las formas de acortar su nombre completo, consulta [Nombre de herramienta MCP de más de 128 caracteres](/docs/es/errors#mcp-tool-name-over-128-characters).

1507 

1486<h2 id="require-approval-for-a-specific-tool">1508<h2 id="require-approval-for-a-specific-tool">

1487 Requerir aprobación para una herramienta específica1509 Requerir aprobación para una herramienta específica

1488</h2>1510</h2>


1601* Cuándo Claude debe buscar tus herramientas1623* Cuándo Claude debe buscar tus herramientas

1602* Capacidades clave que proporciona tu servidor1624* Capacidades clave que proporciona tu servidor

1603 1625 

1604Claude Code trunca cada descripción de herramienta y las instrucciones de cada servidor en 2.048 caracteres de forma predeterminada. Mantenlas concisas y coloca los detalles críticos cerca del inicio.1626Claude Code corta una descripción de herramienta o las instrucciones del servidor que superen estos límites predeterminados, y Claude solo ve el texto anterior al corte:

1627 

1628* **Instrucciones del servidor y la descripción de una herramienta que se carga por adelantado**: 4.096 caracteres

1629* **La descripción de una herramienta que Claude carga a través de la búsqueda de herramientas**: 16.384 caracteres

1630 

1631Mantén concisas las descripciones y las instrucciones, y coloca los detalles críticos cerca del inicio. Cuando la búsqueda de herramientas compara la consulta de Claude con la descripción de una herramienta, solo lee la parte que está dentro del límite más corto, así que coloca también cerca del inicio las palabras que Claude buscaría. Una herramienta se carga por adelantado y mantiene el límite más corto siempre que no esté diferida, por ejemplo cuando [la búsqueda de herramientas está desactivada](#configure-tool-search), cuando la herramienta está [marcada para cargarse por adelantado](#per-tool-alwaysload) o cuando su servidor está [exento del diferimiento](#exempt-a-server-from-deferral).

1632 

1633Antes de v2.1.296, el límite más corto era de 2.048 caracteres, y antes de v2.1.295 se aplicaba a todas las descripciones de herramientas, incluidas las que se cargan a través de la búsqueda de herramientas.

1605 1634 

1606Para cambiar el límite para cada servidor MCP en tu sesión, establece [`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`](/docs/es/env-vars#variables) en un número de caracteres. Esta variable requiere Claude Code v2.1.280 o posterior.1635Para cambiar los límites para cada servidor MCP en tu sesión, establece [`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`](/docs/es/env-vars#variables) en un número de caracteres. El número que establezcas reemplaza ambos límites: `8192`, por ejemplo, aumenta el límite más corto y reduce el más largo. Esta variable requiere Claude Code v2.1.280 o posterior.

1607 1636 

1608<h4 id="per-tool-alwaysload">1637<h4 id="per-tool-alwaysload">

1609 Marcar una herramienta para que se cargue por adelantado o permanezca diferida1638 Marcar una herramienta para que se cargue por adelantado o permanezca diferida


1634 1663 

1635La búsqueda de herramientas está habilitada de forma predeterminada: las herramientas MCP se difieren y se descubren bajo demanda. Claude Code la deshabilita cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte, ya que la mayoría de los proxies no reenvían bloques `tool_reference`. Establece `ENABLE_TOOL_SEARCH` explícitamente para sobrescribir ese comportamiento de respaldo.1664La búsqueda de herramientas está habilitada de forma predeterminada: las herramientas MCP se difieren y se descubren bajo demanda. Claude Code la deshabilita cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte, ya que la mayoría de los proxies no reenvían bloques `tool_reference`. Establece `ENABLE_TOOL_SEARCH` explícitamente para sobrescribir ese comportamiento de respaldo.

1636 1665 

1637Configurar [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/es/env-vars) mantiene la búsqueda de herramientas desactivada. No puedes sobrescribirlo configurando `ENABLE_TOOL_SEARCH` tú mismo. Tu organización puede mantener la búsqueda de herramientas activada a través de la [configuración administrada](/docs/es/managed-settings), en Claude Code v2.1.227 o posterior. [Deshabilitar capacidades de pre-lanzamiento](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities) cubre dónde se aplica la sobrescritura y qué elimina la variable.1666Configurar [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/es/env-vars) mantiene la búsqueda de herramientas desactivada. No puedes sobrescribirlo configurando `ENABLE_TOOL_SEARCH` tú mismo. En Claude Code v2.1.227 o posterior, tu organización puede mantener la búsqueda de herramientas activada bajo esta variable a través de la [configuración administrada](/docs/es/managed-settings). En una sesión que [obtiene la configuración HIPAA](/docs/es/hipaa-setup#check-how-developers-sign-in-and-connect), la búsqueda de herramientas está desactivada, y ni `ENABLE_TOOL_SEARCH` ni la configuración administrada la vuelven a activar. [Deshabilitar capacidades de pre-lanzamiento](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities) cubre dónde se aplica la sobrescritura y qué elimina la variable.

1638 1667 

1639La búsqueda de herramientas requiere un modelo que admita bloques `tool_reference`: Claude Sonnet 4.5, Claude Haiku 4.5, Claude Opus 4.5 y modelos posteriores. Consulta [compatibilidad de modelos en la documentación de la API](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool#model-compatibility) para ver la lista actual.1668Claude Code usa la búsqueda de herramientas en Claude Opus 4, Claude Sonnet 4, Claude Haiku 4.5 y modelos posteriores, o en Opus 4.5, Sonnet 4.5, Haiku 4.5 y modelos posteriores en Agent Platform de Google Cloud. En modelos anteriores, Claude Code carga todas las herramientas MCP por adelantado, y `ENABLE_TOOL_SEARCH=true` no sobrescribe esto.

1640 1669 

1641En Agent Platform de Google Cloud, Claude Code decide según la generación del modelo:1670En Agent Platform de Google Cloud, Claude Code decide según la generación del modelo:

1642 1671 


1649 1678 

1650| Valor | Comportamiento |1679| Valor | Comportamiento |

1651| :- | :- |1680| :- | :- |

1652| (sin establecer) | Todas las herramientas MCP diferidas y cargadas bajo demanda. Recurre a la carga por adelantado en modelos de Agent Platform de Google Cloud anteriores a la generación Claude 4.5, cuando `ANTHROPIC_BASE_URL` es un host que no es de primera parte, o en un despliegue de Microsoft Foundry alojado en Azure |1681| (sin establecer) | Todas las herramientas MCP diferidas y cargadas bajo demanda. Recurre a la carga por adelantado en modelos anteriores a Opus 4 y Sonnet 4, en modelos de Agent Platform de Google Cloud anteriores a Opus 4.5, Sonnet 4.5 y Haiku 4.5, cuando `ANTHROPIC_BASE_URL` es un host que no es de primera parte, o en un despliegue de Microsoft Foundry alojado en Azure |

1653| `true` | Todas las herramientas MCP diferidas, excepto en un despliegue de Microsoft Foundry alojado en Azure, donde el rechazo del lado del servidor aún fuerza la carga por adelantado, y en modelos de Agent Platform de Google Cloud anteriores a la generación Claude 4.5, donde Claude Code sigue cargando las herramientas por adelantado. Claude Code envía el encabezado beta a través de proxies, y las solicitudes fallan en proxies que no admiten bloques `tool_reference` |1682| `true` | Las herramientas MCP permanecen diferidas cuando `ANTHROPIC_BASE_URL` es un host que no es de primera parte. Los demás casos de respaldo de (sin establecer) siguen aplicándose. Claude Code envía el encabezado beta a través de proxies, y las solicitudes fallan en proxies que no admiten bloques `tool_reference` |

1654| `auto` | Modo de umbral: Claude Code carga por adelantado las herramientas que de otro modo diferiría mientras sus definiciones totalizan menos del 10% de la ventana de contexto, y las difiere todas una vez que las definiciones alcanzan el 10% |1683| `auto` | Modo de umbral: Claude Code carga por adelantado las herramientas que de otro modo diferiría mientras sus definiciones totalizan menos del 10% de la ventana de contexto, y las difiere todas una vez que las definiciones alcanzan el 10% |

1655| `auto:N` | Modo de umbral con un porcentaje personalizado, donde `N` es 0-100. Por ejemplo, `auto:5` para 5% |1684| `auto:N` | Modo de umbral con un porcentaje personalizado, donde `N` es 0-100. Por ejemplo, `auto:5` para 5% |

1656| `false` | Todas las herramientas MCP cargadas por adelantado, sin diferimiento |1685| `false` | Todas las herramientas MCP cargadas por adelantado, sin diferimiento |

memory.md +3 −3

Details

258 258 

259Claude Code usa sin expandir cualquier patrón que excedería el presupuesto, y sus llaves literales no coinciden con ningún archivo. Antes de v2.1.217, un valor `paths` con muchos grupos de llaves detenía o bloqueaba la CLI al iniciar.259Claude Code usa sin expandir cualquier patrón que excedería el presupuesto, y sus llaves literales no coinciden con ningún archivo. Antes de v2.1.217, un valor `paths` con muchos grupos de llaves detenía o bloqueaba la CLI al iniciar.

260 260 

261La sintaxis glob trata `[` como el inicio de una expresión de corchetes como `[abc]`. Un patrón con un `[` que no se puede leer como expresión de corchetes, como `photos [2024/**`, es inválido: no coincide con nada, y los demás patrones de la regla siguen funcionando. Para hacer coincidir un `[` literal en un nombre de archivo, escápalo como `photos \[2024/**`. Antes de v2.1.207, un patrón inválido hacía que la herramienta Read fallara para cada archivo contra el que se evaluaba la regla, en lugar de no coincidir con nada.261La sintaxis glob trata `[` como el inicio de una expresión de corchetes como `[abc]`. Un patrón con un `[` que no se puede leer como expresión de corchetes, como `photos [2024/**`, es inválido: no coincide con nada, y los demás patrones de la regla siguen funcionando. Para hacer coincidir un `[` literal en un nombre de archivo, escápalo como `photos \[2024/**`.

262 262 

263<h4 id="rules-frontmatter-reference">263<h4 id="rules-frontmatter-reference">

264 Referencia de frontmatter de reglas264 Referencia de frontmatter de reglas


413 413 

414* **Al inicio de la sesión**: cada `AGENTS.md` y `.claude/AGENTS.md` en su directorio de trabajo y los directorios superiores. En una sesión interactiva verá una línea como `no CLAUDE.md found; AGENTS.md loaded: /home/you/repo/AGENTS.md` en la conversación414* **Al inicio de la sesión**: cada `AGENTS.md` y `.claude/AGENTS.md` en su directorio de trabajo y los directorios superiores. En una sesión interactiva verá una línea como `no CLAUDE.md found; AGENTS.md loaded: /home/you/repo/AGENTS.md` en la conversación

415* **Mientras Claude trabaja en subdirectorios**: el `AGENTS.md` de un subdirectorio, cuando Claude abre un archivo allí con la herramienta Read y ese subdirectorio no tiene ninguno de los tres archivos `CLAUDE.md` propios415* **Mientras Claude trabaja en subdirectorios**: el `AGENTS.md` de un subdirectorio, cuando Claude abre un archivo allí con la herramienta Read y ese subdirectorio no tiene ninguno de los tres archivos `CLAUDE.md` propios

416* **Dentro de cada `AGENTS.md`**: las importaciones [`@path`](#import-additional-files) se expanden, los patrones [`claudeMdExcludes`](#exclude-specific-claude-md-files) se aplican, y los subagentes que [omiten instrucciones de proyecto](/docs/es/sub-agents#what-loads-at-startup) también omiten estos archivos416* **Dentro de cada `AGENTS.md`**: las importaciones [`@path`](#import-additional-files) se expanden, los patrones [`claudeMdExcludes`](#exclude-specific-claude-md-files) se aplican, y los subagentes que [se inician sin instrucciones de proyecto](/docs/es/sub-agents#what-loads-at-startup) también se inician sin estos archivos

417* **No se lee**: `AGENTS.local.md`, `AGENTS.override.md`, o cualquier cosa bajo un directorio `.agents/`417* **No se lee**: `AGENTS.local.md`, `AGENTS.override.md`, o cualquier cosa bajo un directorio `.agents/`

418 418 

419<Note>419<Note>


692 692 

693Si uno de tus archivos de instrucciones supera la longitud recomendada, verás una advertencia al iniciar y cuando ejecutes `/status`. También verás una advertencia cuando archivos que están cada uno dentro de esa longitud se suman más allá de un límite combinado al inicio de la sesión. Cada CLAUDE.md, archivo de reglas e importación `@path` cuenta como un archivo separado.693Si uno de tus archivos de instrucciones supera la longitud recomendada, verás una advertencia al iniciar y cuando ejecutes `/status`. También verás una advertencia cuando archivos que están cada uno dentro de esa longitud se suman más allá de un límite combinado al inicio de la sesión. Cada CLAUDE.md, archivo de reglas e importación `@path` cuenta como un archivo separado.

694 694 

695La revisión [`/doctor`](/docs/es/commands#all-commands) propone recortes para un CLAUDE.md registrado: elimina contenido que Claude puede derivar de la base de código, como diseños de directorios, listas de dependencias y descripción general de la arquitectura, y mantiene trampas, justificación y convenciones que difieren de los valores predeterminados de las herramientas. La verificación de recorte requiere Claude Code v2.1.206 o posterior.695La revisión [`/doctor`](/docs/es/commands#all-commands) propone recortes para un CLAUDE.md registrado: elimina contenido que Claude puede derivar de la base de código, como diseños de directorios, listas de dependencias y descripción general de la arquitectura, y mantiene trampas, justificación y convenciones que difieren de los valores predeterminados de las herramientas.

696 696 

697<h3 id="instructions-seem-lost-after-/compact">697<h3 id="instructions-seem-lost-after-/compact">

698 Las instrucciones parecen perdidas después de `/compact`698 Las instrucciones parecen perdidas después de `/compact`

Details

160 Usar un token portador160 Usar un token portador

161</h4>161</h4>

162 162 

163Claude Code envía el valor de `ANTHROPIC_FOUNDRY_AUTH_TOKEN` en cada solicitud como el encabezado `Authorization: Bearer`. Usa esta opción cuando otro proceso, como una aplicación host o un script de inicio de sesión, ya haya obtenido un token de acceso para ti. Requiere Claude Code v2.1.203 o posterior.163Claude Code envía el valor de `ANTHROPIC_FOUNDRY_AUTH_TOKEN` en cada solicitud como el encabezado `Authorization: Bearer`. Usa esta opción cuando otro proceso, como una aplicación host o un script de inicio de sesión, ya haya obtenido un token de acceso para ti.

164 164 

165Establece la variable en un token portador que Microsoft Entra ID emitió para tu recurso:165Establece la variable en un token portador que Microsoft Entra ID emitió para tu recurso:

166 166 

model-config.md +3 −0

Details

867* **Para todos los modelos**: establece [`autoCompactWindow`](/docs/es/settings-reference#autocompactwindow) en un archivo de configuración, como `"autoCompactWindow": 200000` en `~/.claude/settings.json`. Una ventana que hayas guardado para un modelo con `/autocompact` tiene precedencia sobre esta clave en el mismo archivo para ese modelo.867* **Para todos los modelos**: establece [`autoCompactWindow`](/docs/es/settings-reference#autocompactwindow) en un archivo de configuración, como `"autoCompactWindow": 200000` en `~/.claude/settings.json`. Una ventana que hayas guardado para un modelo con `/autocompact` tiene precedencia sobre esta clave en el mismo archivo para ese modelo.

868* **Para un lanzamiento**: pasa [`--autocompact`](/docs/es/cli-reference#cli-flags) al iniciar Claude Code. El flag sobrescribe tu configuración guardada para ese lanzamiento sin cambiarla, y `claude --autocompact auto` ejecuta la sesión con la ventana ajustada incluso si tu configuración guardada tiene un valor. A diferencia de `/autocompact`, un alcance de configuración de mayor prioridad, como la configuración administrada, no se impone sobre el flag.868* **Para un lanzamiento**: pasa [`--autocompact`](/docs/es/cli-reference#cli-flags) al iniciar Claude Code. El flag sobrescribe tu configuración guardada para ese lanzamiento sin cambiarla, y `claude --autocompact auto` ejecuta la sesión con la ventana ajustada incluso si tu configuración guardada tiene un valor. A diferencia de `/autocompact`, un alcance de configuración de mayor prioridad, como la configuración administrada, no se impone sobre el flag.

869* **En scripts y entornos en la nube**: establece [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/es/env-vars). Mientras esté establecida, tiene precedencia sobre el comando, el flag y el ajuste, y `/autocompact` informa de la sobrescritura en lugar de cambiar la ventana.869* **En scripts y entornos en la nube**: establece [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/es/env-vars). Mientras esté establecida, tiene precedencia sobre el comando, el flag y el ajuste, y `/autocompact` informa de la sobrescritura en lugar de cambiar la ventana.

870* **Para un subagente**: consulta [Establecer la ventana de compactación automática para un subagente](/docs/es/sub-agents#subagent-auto-compact-window).

870 871 

871El comando y el flag aceptan un tamaño de ventana de 100K a 1M de tokens, en cualquiera de estas formas:872El comando y el flag aceptan un tamaño de ventana de 100K a 1M de tokens, en cualquiera de estas formas:

872 873 


888* Los modelos que se ejecutan con una ventana nativa de 1M se compactan antes de que la ventana se llene, a aproximadamente 967K tokens de forma predeterminada. Estos incluyen los modelos Fable, Sonnet 5 y posteriores, Haiku 5.5, y Opus 4.7 y posteriores. Detrás de un `ANTHROPIC_BASE_URL` personalizado, consulta [la ventana de contexto detrás de un gateway](#context-window-behind-a-gateway)889* Los modelos que se ejecutan con una ventana nativa de 1M se compactan antes de que la ventana se llene, a aproximadamente 967K tokens de forma predeterminada. Estos incluyen los modelos Fable, Sonnet 5 y posteriores, Haiku 5.5, y Opus 4.7 y posteriores. Detrás de un `ANTHROPIC_BASE_URL` personalizado, consulta [la ventana de contexto detrás de un gateway](#context-window-behind-a-gateway)

889* Las sesiones en un ID de modelo que Claude Code no reconoce, como un alias de [gateway LLM](/docs/es/llm-gateway), se compactan en la ventana de contexto que Claude Code asume para el ID; consulta [Corregir la ventana para un gateway o ID de modelo personalizado](#correct-the-window-for-a-gateway-or-custom-model-id)890* Las sesiones en un ID de modelo que Claude Code no reconoce, como un alias de [gateway LLM](/docs/es/llm-gateway), se compactan en la ventana de contexto que Claude Code asume para el ID; consulta [Corregir la ventana para un gateway o ID de modelo personalizado](#correct-the-window-for-a-gateway-or-custom-model-id)

890 891 

892Consulta el ajuste [`idleCompaction`](/docs/es/settings-reference#idlecompaction) para saber cuándo Claude Code también compacta una conversación que dejas inactiva.

893 

891<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">894<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">

892 Corregir la ventana para un gateway o ID de modelo personalizado895 Corregir la ventana para un gateway o ID de modelo personalizado

893</h3>896</h3>

Details

635 Los eventos que Claude Code registra antes de que un desarrollador inicie sesión no incluyen la identidad del gateway. Cuando Claude Code abre una sesión sin haber iniciado sesión en el gateway, por ejemplo después de que [el gateway finaliza el inicio de sesión](/docs/es/errors#cloud-gateway-session-expired), los eventos de inicio registrados antes del inicio de sesión incluyen el `user.id` anónimo y ningún `identity.source`. Entre ellos se encuentran [`managed_settings_resolved`](#managed-settings-resolved-event), [`plugin_loaded`](#plugin-loaded-event) y [`mcp_server_connection`](#mcp-server-connection-event).635 Los eventos que Claude Code registra antes de que un desarrollador inicie sesión no incluyen la identidad del gateway. Cuando Claude Code abre una sesión sin haber iniciado sesión en el gateway, por ejemplo después de que [el gateway finaliza el inicio de sesión](/docs/es/errors#cloud-gateway-session-expired), los eventos de inicio registrados antes del inicio de sesión incluyen el `user.id` anónimo y ningún `identity.source`. Entre ellos se encuentran [`managed_settings_resolved`](#managed-settings-resolved-event), [`plugin_loaded`](#plugin-loaded-event) y [`mcp_server_connection`](#mcp-server-connection-event).

636</Note>636</Note>

637 637 

638Para los atributos de identidad en sesiones de Claude Desktop y Cowork que se conectan a través de una puerta de enlace, consulte la [referencia de telemetría de la puerta de enlace](/docs/es/claude-apps-gateway-config#telemetry).638Para conocer los atributos de identidad en las sesiones de Claude Desktop y Cowork que se conectan a través de un gateway, consulta la [referencia de `telemetry` del gateway](/docs/es/claude-apps-gateway-config#telemetry).

639 639 

640Los eventos incluyen además los siguientes atributos. Estos nunca se adjuntan a las métricas porque causarían cardinalidad ilimitada:640Los eventos incluyen además los siguientes atributos. Estos nunca se adjuntan a las métricas porque causarían cardinalidad ilimitada:

641 641 

642* `prompt.id`: UUID que correlaciona un mensaje del usuario con todos los eventos posteriores hasta el siguiente mensaje. Consulte [Atributos de correlación de eventos](#event-correlation-attributes).642* `prompt.id`: UUID que correlaciona un mensaje del usuario con todos los eventos posteriores hasta el siguiente mensaje. Consulte [Atributos de correlación de eventos](#event-correlation-attributes).

643* `workspace.host_paths`: directorios del espacio de trabajo del host seleccionados en la aplicación de escritorio, como una matriz de cadenas643* `workspace.host_paths`: directorios del espacio de trabajo del host seleccionados en la aplicación de escritorio, como una matriz de cadenas

644* `workflow.run_id`: identificador de ejecución, con prefijo `wf_`, en los eventos de API y herramienta emitidos por agentes que pertenecen a una ejecución de herramienta [Workflow](/docs/es/workflows). Filtrar eventos por un `workflow.run_id` reconstruye las solicitudes de API y resultados de herramientas de esa ejecución. El identificador cubre los agentes que genera el script del flujo de trabajo y cualquier agente que esos generen a su vez, como invocaciones de habilidades. Coincide con el identificador de ejecución reportado en el resultado de la herramienta Workflow. Ausente en todos los demás eventos. Requiere Claude Code v2.1.202 o posterior644* `workflow.run_id`: identificador de ejecución, con el prefijo `wf_`, en los eventos de API y de herramientas emitidos por agentes que pertenecen a una ejecución de la herramienta [Workflow](/docs/es/workflows). Filtrar los eventos por un `workflow.run_id` reconstruye las solicitudes a la API y los resultados de herramientas de esa ejecución. El identificador abarca los agentes que genera el script del workflow y cualquier agente que estos generen a su vez, como las invocaciones de skills. Coincide con el identificador de ejecución informado en el resultado de la herramienta Workflow. Ausente en todos los demás eventos.

645* `workflow.name`: nombre del flujo de trabajo, el `meta.name` de su script, emitido junto con `workflow.run_id`. Los nombres de flujo de trabajo integrados aparecen literalmente cuando la ejecución ejecuta el script integrado sin modificar. Los nombres creados por el usuario, incluidas las copias editadas de scripts integrados, se reemplazan con `custom` a menos que se establezca `OTEL_LOG_TOOL_DETAILS=1`. Requiere Claude Code v2.1.202 o posterior645* `workflow.name`: nombre del workflow, el `meta.name` de su script, emitido junto con `workflow.run_id`. Los nombres de workflows integrados aparecen textualmente cuando la ejecución usa el script integrado sin modificar. Los nombres creados por el usuario, incluidas las copias editadas de scripts integrados, se reemplazan por `custom` a menos que se configure `OTEL_LOG_TOOL_DETAILS=1`.

646 646 

647<h4 id="repository-attributes">647<h4 id="repository-attributes">

648 Atributos del repositorio648 Atributos del repositorio


1075 Evento de cambio de modo de permiso1075 Evento de cambio de modo de permiso

1076</h4>1076</h4>

1077 1077 

1078Se registra cuando el modo de permiso cambia, por ejemplo al ciclar con Shift+Tab, salir del modo de plan, o una verificación de puerta de modo automático.1078Se registra cuando cambia el modo de permisos, por ejemplo al alternar con `Shift+Tab`, al salir del modo plan o por una comprobación de control del modo automático.

1079 1079 

1080**Nombre del evento**: `claude_code.permission_mode_changed`1080**Nombre del evento**: `claude_code.permission_mode_changed`

1081 1081 


1374* `pre_tokens`: Conteo de tokens aproximado antes de la compactación1374* `pre_tokens`: Conteo de tokens aproximado antes de la compactación

1375* `post_tokens`: Conteo de tokens aproximado después de la compactación1375* `post_tokens`: Conteo de tokens aproximado después de la compactación

1376* `error`: Mensaje de error cuando la compactación falló1376* `error`: Mensaje de error cuando la compactación falló

1377* `precompute_reuse`: Solo se define cuando `trigger` es `"manual"`. La compactación automática puede preparar un resumen en segundo plano antes de que se llene la ventana de contexto, y este atributo registra si `/compact` reutilizó ese resumen preparado. `"hit"` significa que se reutilizó; `"miss_custom_instructions"`, `"miss_hook"` y `"miss_not_ready"` indican el motivo por el que, en su lugar, se calculó un resumen nuevo1377* `precompute_reuse`: Solo se establece cuando `trigger` es `"manual"` o en una [compactación por inactividad](/docs/es/settings-reference#idlecompaction), que informa `trigger` como `"auto"`. La compactación automática puede preparar un resumen en segundo plano antes de que se llene la ventana de contexto, y este atributo registra si la compactación reutilizó ese resumen preparado. `"hit"` significa que se reutilizó; `"miss_custom_instructions"`, `"miss_hook"` y `"miss_not_ready"` indican el motivo por el que, en cambio, se calculó un resumen nuevo

1378 1378 

1379<h4 id="subagent-completed-event">1379<h4 id="subagent-completed-event">

1380 Evento de subagente completado1380 Evento de subagente completado

Details

209| :- | :- | :- | :- |209| :- | :- | :- | :- |

210| Plazo de primer byte | No llegan encabezados de respuesta después de que Claude Code envía la solicitud | API de Anthropic directa y [Claude Platform on AWS](/docs/es/claude-platform-on-aws), incluyendo a través de un proxy HTTPS, pero no cuando `ANTHROPIC_BASE_URL` o `ANTHROPIC_AWS_BASE_URL` los enrutan a través de una [gateway](/docs/es/gateways). Opt-in en Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; no se ejecuta en Agent Platform de Google Cloud o Microsoft Foundry | 180 segundos en la API de Anthropic directa, 300 segundos en otros lugares, más un segundo por cada 32KB del cuerpo de la solicitud |210| Plazo de primer byte | No llegan encabezados de respuesta después de que Claude Code envía la solicitud | API de Anthropic directa y [Claude Platform on AWS](/docs/es/claude-platform-on-aws), incluyendo a través de un proxy HTTPS, pero no cuando `ANTHROPIC_BASE_URL` o `ANTHROPIC_AWS_BASE_URL` los enrutan a través de una [gateway](/docs/es/gateways). Opt-in en Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; no se ejecuta en Agent Platform de Google Cloud o Microsoft Foundry | 180 segundos en la API de Anthropic directa, 300 segundos en otros lugares, más un segundo por cada 32KB del cuerpo de la solicitud |

211| Perro guardián a nivel de evento | No se analizan eventos de respuesta. En conexiones donde se ejecuta el perro guardián a nivel de byte, los bytes que llegan, incluyendo pings de keep-alive, también reinician este perro guardián, durante aproximadamente cinco minutos sin un evento analizado | Cada proveedor | 300 segundos |211| Perro guardián a nivel de evento | No se analizan eventos de respuesta. En conexiones donde se ejecuta el perro guardián a nivel de byte, los bytes que llegan, incluyendo pings de keep-alive, también reinician este perro guardián, durante aproximadamente cinco minutos sin un evento analizado | Cada proveedor | 300 segundos |

212| Perro guardián a nivel de byte | No llegan bytes en el cable, incluyendo pings de keep-alive de SSE | API de Anthropic directa, [Claude Platform on AWS](/docs/es/claude-platform-on-aws), y conexiones de [gateway](/docs/es/gateways), incluyendo un `ANTHROPIC_BASE_URL` personalizado. Opt-in en respuestas `vnd.amazon.eventstream` de Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; no se ejecuta en Agent Platform de Google Cloud o Microsoft Foundry | 180 segundos en la API de Anthropic directa. A través de un `ANTHROPIC_BASE_URL` personalizado, 180 segundos cuando Claude Code ha [obtenido los feature flags](/docs/es/env-vars#features-that-need-feature-flag-fetching) y 300 segundos cuando no los ha obtenido. 300 segundos en otros lugares |212| Perro guardián a nivel de byte | No llegan bytes en el cable, incluyendo pings de keep-alive de SSE | API de Anthropic directa, [Claude Platform on AWS](/docs/es/claude-platform-on-aws), y conexiones de [gateway](/docs/es/gateways), incluyendo un `ANTHROPIC_BASE_URL` personalizado. Opt-in en respuestas `vnd.amazon.eventstream` de Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; no se ejecuta en Agent Platform de Google Cloud o Microsoft Foundry | 180 segundos en la API de Anthropic directa. 300 segundos en Claude Platform on AWS, en Amazon Bedrock, en una sesión de [Claude apps gateway](/docs/es/claude-apps-gateway) y a través de un `ANTHROPIC_BASE_URL` personalizado |

213| Tiempo de espera de inactividad del cuerpo | No llegan bytes durante 5 minutos | Proveedores distintos de la API de Anthropic directa, Claude Platform on AWS, y Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` establecido, a menos que [`API_FORCE_IDLE_TIMEOUT`](/docs/es/env-vars) cambie eso | 5 minutos |213| Tiempo de espera de inactividad del cuerpo | No llegan bytes durante 5 minutos | Proveedores distintos de la API de Anthropic directa, Claude Platform on AWS, y Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` establecido, a menos que [`API_FORCE_IDLE_TIMEOUT`](/docs/es/env-vars) cambie eso | 5 minutos |

214 214 

215Si establece `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, el perro guardián a nivel de byte reemplaza el tiempo de espera de inactividad del cuerpo en Bedrock en lugar de ejecutarse junto a él. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` entonces también rige cuánto tiempo un stream de Bedrock puede permanecer en silencio antes de que Claude Code trate la conexión como muerta, dentro de los límites enumerados a continuación. Los bytes que llegan aún no reinician el perro guardián a nivel de evento en Bedrock. Con el registro de depuración activado, cada stream de Bedrock entonces registra un mensaje de depuración que comienza con `wire-heartbeat: _chunkTimes absent`.215Si establece `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, el perro guardián a nivel de byte reemplaza el tiempo de espera de inactividad del cuerpo en Bedrock en lugar de ejecutarse junto a él. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` entonces también rige cuánto tiempo un stream de Bedrock puede permanecer en silencio antes de que Claude Code trate la conexión como muerta, dentro de los límites enumerados a continuación. Los bytes que llegan aún no reinician el perro guardián a nivel de evento en Bedrock. Con el registro de depuración activado, cada stream de Bedrock entonces registra un mensaje de depuración que comienza con `wire-heartbeat: _chunkTimes absent`.

Details

239 * **Sesiones de [Remote Control](/docs/es/remote-control)** en tu máquina local: Manual, Aceptar ediciones, Plan y Auto para una sesión que iniciaste tú mismo, y no puedes seleccionar Omitir permisos desde la aplicación. Para usar Auto, la sesión tiene que cumplir los [requisitos de disponibilidad](#eliminate-prompts-with-auto-mode) del modo automático. Para un hilo de proyecto que se ejecuta en tu computadora, consulta [Ejecutar un hilo en tu propia computadora](/docs/es/claude-projects#run-a-thread-on-your-own-computer).239 * **Sesiones de [Remote Control](/docs/es/remote-control)** en tu máquina local: Manual, Aceptar ediciones, Plan y Auto para una sesión que iniciaste tú mismo, y no puedes seleccionar Omitir permisos desde la aplicación. Para usar Auto, la sesión tiene que cumplir los [requisitos de disponibilidad](#eliminate-prompts-with-auto-mode) del modo automático. Para un hilo de proyecto que se ejecuta en tu computadora, consulta [Ejecutar un hilo en tu propia computadora](/docs/es/claude-projects#run-a-thread-on-your-own-computer).

240 * Excepto por Omitir permisos, el menú desplegable muestra el modo de permisos en el que se encuentra la sesión local, incluido uno establecido desde la terminal. Se actualiza cuando el modo de permisos cambia en la aplicación o en la terminal.240 * Excepto por Omitir permisos, el menú desplegable muestra el modo de permisos en el que se encuentra la sesión local, incluido uno establecido desde la terminal. Se actualiza cuando el modo de permisos cambia en la aplicación o en la terminal.

241 * Las sesiones alojadas por la [aplicación de desktop](/docs/es/desktop) o la [extensión de VS Code](/docs/es/vs-code) informan los cambios de modo de permisos a claude.ai a medida que suceden, igual que las sesiones alojadas en una terminal.241 * Las sesiones alojadas por la [aplicación de desktop](/docs/es/desktop) o la [extensión de VS Code](/docs/es/vs-code) informan los cambios de modo de permisos a claude.ai a medida que suceden, igual que las sesiones alojadas en una terminal.

242 * Antes de v2.1.202, las sesiones conectadas con `/remote-control` o `claude --remote-control` no informaban su modo de permisos en absoluto, por lo que claude.ai y la aplicación móvil podían mostrar un modo de permisos en el que la sesión no estaba. La discrepancia afectaba solo a la etiqueta. Claude Code generaba las solicitudes de permiso a partir del modo de permisos real de la sesión, y estas seguían apareciendo en la aplicación para su aprobación.

243 242 

244 Para Control Remoto, la máquina local que ejecuta la sesión debe estar conectada con su cuenta de claude.ai; las claves API no son compatibles. También puede establecer el modo de permisos inicial al iniciar esa sesión local:243 Para Control Remoto, la máquina local que ejecuta la sesión debe estar conectada con su cuenta de claude.ai; las claves API no son compatibles. También puede establecer el modo de permisos inicial al iniciar esa sesión local:

245 244 


352 351 

353Para evitar que los desarrolladores usen el modo automático, establece `disableAutoMode` en `"disable"` en la [configuración administrada](/docs/es/managed-settings). Esto elimina `auto` del ciclo de `Shift+Tab`, y una sesión iniciada con `--permission-mode auto` comienza en Manual. Una sesión que ya se ejecuta en modo automático lo abandona cuando el ajuste llega a esa sesión desde una [fuente implementada por un administrador](/docs/es/managed-settings#which-managed-source-claude-code-uses), y muestra `auto mode disabled by settings`. Antes de v2.1.251, una sesión en ejecución mantenía el modo automático hasta que finalizaba.352Para evitar que los desarrolladores usen el modo automático, establece `disableAutoMode` en `"disable"` en la [configuración administrada](/docs/es/managed-settings). Esto elimina `auto` del ciclo de `Shift+Tab`, y una sesión iniciada con `--permission-mode auto` comienza en Manual. Una sesión que ya se ejecuta en modo automático lo abandona cuando el ajuste llega a esa sesión desde una [fuente implementada por un administrador](/docs/es/managed-settings#which-managed-source-claude-code-uses), y muestra `auto mode disabled by settings`. Antes de v2.1.251, una sesión en ejecución mantenía el modo automático hasta que finalizaba.

354 353 

355De v2.1.158 a v2.1.206, el modo automático estaba desactivado en estos proveedores hasta que establecieras `CLAUDE_CODE_ENABLE_AUTO_MODE=1`, y Claude Code ignoraba `defaultMode: "auto"` en estos proveedores a menos que la variable también estuviera establecida. La variable aún se acepta por compatibilidad y no tiene efecto a partir de v2.1.207.

356 

357<h3 id="server-side-classifier-review">354<h3 id="server-side-classifier-review">

358 Revisión del clasificador del lado del servidor355 Revisión del clasificador del lado del servidor

359</h3>356</h3>


408* Lanzar un bucle de agente autónomo que se ejecuta sin aprobación humana ni sandbox, como uno iniciado con `--dangerously-skip-permissions` o `--no-sandbox`. Esto incluye ejecutar un agente de terceros o un arnés de evaluación con el aislamiento y la aprobación por acción deshabilitados, como un ejecutor iniciado con `--yes-always`405* Lanzar un bucle de agente autónomo que se ejecuta sin aprobación humana ni sandbox, como uno iniciado con `--dangerously-skip-permissions` o `--no-sandbox`. Esto incluye ejecutar un agente de terceros o un arnés de evaluación con el aislamiento y la aprobación por acción deshabilitados, como un ejecutor iniciado con `--yes-always`

409* Acciones del navegador de [Claude in Chrome](/docs/es/chrome) que podrían enviar contenido de la página, cookies o credenciales fuera del origen406* Acciones del navegador de [Claude in Chrome](/docs/es/chrome) que podrían enviar contenido de la página, cookies o credenciales fuera del origen

410* Eliminar archivos en `/tmp`, `$TMPDIR` u otro directorio compartido temporal o de caché mediante comodín, glob o filtro de antigüedad, en lugar de mediante una ruta nombrada específica407* Eliminar archivos en `/tmp`, `$TMPDIR` u otro directorio compartido temporal o de caché mediante comodín, glob o filtro de antigüedad, en lugar de mediante una ruta nombrada específica

411* Incluir detalles sensibles en contenido enviado, cargado, publicado o escrito para otras personas o sistemas compartidos, cuando tu propio mensaje no autorizó esos detalles para ese destinatario. Los cuerpos de PR e issues, los mensajes de commit y los comentarios cuentan como este tipo de contenido saliente cuando el repositorio está fuera del límite de confianza o es público, incluidos los repositorios públicos de tu propia organización; las rutas de archivo internas, los nombres en clave, los datos vigentes de respuestas de API, como correos electrónicos o identificadores de cuenta, y los identificadores de infraestructura cuentan como detalles sensibles. Los datos personales vigentes de una respuesta de API en el cuerpo de un PR o issue, como una dirección de correo electrónico, un identificador de cuenta u organización o una métrica de uso, requieren que nombres esos detalles y el destinatario, independientemente de la visibilidad del repositorio o del límite de confianza. Esa verificación requiere Claude Code v2.1.203 o posterior408* Incluir detalles sensibles en contenido enviado, cargado, publicado o escrito para otras personas o sistemas compartidos, cuando tu propio mensaje no autorizó esos detalles para ese destinatario. Los cuerpos de PR e issues, los mensajes de commit y los comentarios cuentan como este tipo de contenido saliente cuando el repositorio está fuera del límite de confianza o es público, incluidos los repositorios públicos de tu propia organización; las rutas de archivo internas, los nombres en clave, los datos vigentes de respuestas de API, como correos electrónicos o identificadores de cuenta, y los identificadores de infraestructura cuentan como detalles sensibles. Los datos personales vigentes de una respuesta de API en el cuerpo de un PR o issue, como una dirección de correo electrónico, un identificador de cuenta u organización o una métrica de uso, requieren que nombres esos detalles y el destinatario, independientemente de la visibilidad del repositorio o del límite de confianza

412* Enviar pulsaciones de teclas al propio panel de tmux de Claude Code para controlar su propia interfaz, lo que el clasificador trata como si Claude cambiara sus propios permisos o su supervisión409* Enviar pulsaciones de teclas al propio panel de tmux de Claude Code para controlar su propia interfaz, lo que el clasificador trata como si Claude cambiara sus propios permisos o su supervisión

413* Comentar, eliminar o forzar el éxito de una prueba o aserción que protege un comportamiento de seguridad, como autenticación, control de acceso, validación de entradas o sandboxing410* Comentar, eliminar o forzar el éxito de una prueba o aserción que protege un comportamiento de seguridad, como autenticación, control de acceso, validación de entradas o sandboxing

414* Eliminar o desmantelar un recurso con estado que Claude no creó en la sesión, cuando no se aplica ninguna regla de eliminación más específica y no nombraste ese recurso411* Eliminar o desmantelar un recurso con estado que Claude no creó en la sesión, cuando no se aplica ninguna regla de eliminación más específica y no nombraste ese recurso

415* Reapuntar una URL base de API, un endpoint de proxy, un receptor de webhooks o un mirror de registro a un host de terceros que no corresponde a la tarea, incluso en archivos de ejemplo como `.env.example`412* Reapuntar una URL base de API, un endpoint de proxy, un receptor de webhooks o un mirror de registro a un host de terceros que no corresponde a la tarea, incluso en archivos de ejemplo como `.env.example`

416* Cambiar a dónde van los push con `git remote set-url` o `git remote add`, a menos que hayas nombrado el nuevo remoto413* Cambiar a dónde van los push con `git remote set-url` o `git remote add`, a menos que hayas nombrado el nuevo remoto

417* Hacer push de secretos o de datos personales o confiados a un repositorio que se sabe que es público, o hacer push allí de material confidencial que no forma parte del trabajo propio de ese repositorio. El tema propio de un repositorio de dotfiles es la única excepción para los datos personales o confiados, y el contenido de un repositorio privado que llega a cualquier superficie pública se bloquea de la misma manera; ambos refinamientos requieren Claude Code v2.1.203 o posterior. Antes de v2.1.203, los datos personales se agrupaban con el material confidencial y se bloqueaban solo cuando no formaban parte del trabajo propio de ese repositorio. Cuando no se ha establecido la visibilidad de un repositorio, el clasificador no bloquea solo por eso; en su lugar, juzga el contenido según las demás reglas414* Hacer push de secretos o de datos personales o confiados a un repositorio que se sabe que es público, o hacer push allí de material confidencial que no forma parte del trabajo propio de ese repositorio. El tema propio de un repositorio de dotfiles es la única excepción para los datos personales o confiados, y el contenido de un repositorio privado que llega a cualquier superficie pública se bloquea de la misma manera. Cuando no se ha establecido la visibilidad de un repositorio, el clasificador no bloquea solo por eso; en su lugar, juzga el contenido según las demás reglas

418* Abrir un pull request contra un repositorio u organización diferente, hacer un fork con `gh repo fork` o hacer push a un repositorio de terceros, a menos que hayas nombrado ese destino externo415* Abrir un pull request contra un repositorio u organización diferente, hacer un fork con `gh repo fork` o hacer push a un repositorio de terceros, a menos que hayas nombrado ese destino externo

419 

420Varias de estas categorías dependen de entradas del [entorno](/docs/es/auto-mode-config#define-trusted-infrastructure), como los destinos remotos sensibles y los alcances de IaC protegidos, que puedes restringir a nombres concretos.

421 

422Claude Code v2.1.203 y posterior también bloquean lo siguiente de forma predeterminada:

423 

424* Contenido de un almacén local sensible, o de un archivo cuyo nombre, ruta o tipo lo marca como sensible, que entre en un commit, un push, el texto de un PR o issue, un gist o paste, o la publicación de un paquete, a menos que hayas nombrado tanto el origen como el destino. Cuentan las transcripciones de sesión y los registros de conversación, las carpetas ocultas de credenciales y configuración, como claves SSH, credenciales de la nube, perfiles de navegador e historial del shell, y las exportaciones de datos de usuarios, y que el repositorio sea privado no lo exime416* Contenido de un almacén local sensible, o de un archivo cuyo nombre, ruta o tipo lo marca como sensible, que entre en un commit, un push, el texto de un PR o issue, un gist o paste, o la publicación de un paquete, a menos que hayas nombrado tanto el origen como el destino. Cuentan las transcripciones de sesión y los registros de conversación, las carpetas ocultas de credenciales y configuración, como claves SSH, credenciales de la nube, perfiles de navegador e historial del shell, y las exportaciones de datos de usuarios, y que el repositorio sea privado no lo exime

425 

426Claude Code v2.1.205 y posterior también bloquean lo siguiente de forma predeterminada:

427 

428* Escribir en las transcripciones de sesión de Claude Code, los archivos de historial `.jsonl` en `~/.claude/projects/` o en tu directorio de configuración configurado, ya sea directamente o mediante un comando de shell. La regla también cubre las líneas de metadatos que Claude Code agrega a cada entrada de la transcripción para sus propias verificaciones. Leer una transcripción no se bloquea417* Escribir en las transcripciones de sesión de Claude Code, los archivos de historial `.jsonl` en `~/.claude/projects/` o en tu directorio de configuración configurado, ya sea directamente o mediante un comando de shell. La regla también cubre las líneas de metadatos que Claude Code agrega a cada entrada de la transcripción para sus propias verificaciones. Leer una transcripción no se bloquea

429* Una eliminación forzada recursiva como `rm -rf "$VAR"` o `Remove-Item -Recurse -Force $dir` cuyo destino es una variable de shell que no se asigna en ninguna parte de la conversación que ve el clasificador, o un glob que parte de esa variable. El valor provino solo de la salida de un comando anterior, que el clasificador nunca recibe, por lo que el clasificador no puede verificar el destino de la eliminación según las demás reglas de eliminación. El bloqueo se levanta cuando nombras la ruta exacta que se elimina, o cuando Claude vuelve a ejecutar la eliminación con la ruta literal resuelta escrita en el comando. Las eliminaciones cuyo destino el clasificador puede resolver no se ven afectadas.418* Una eliminación forzada recursiva como `rm -rf "$VAR"` o `Remove-Item -Recurse -Force $dir` cuyo destino es una variable de shell que no se asigna en ninguna parte de la conversación que ve el clasificador, o un glob que parte de esa variable. El valor provino solo de la salida de un comando anterior, que el clasificador nunca recibe, por lo que el clasificador no puede verificar el destino de la eliminación según las demás reglas de eliminación. El bloqueo se levanta cuando nombras la ruta exacta que se elimina, o cuando Claude vuelve a ejecutar la eliminación con la ruta literal resuelta escrita en el comando. Las eliminaciones cuyo destino el clasificador puede resolver no se ven afectadas.

430 419 

431 Un glob directamente bajo la variable, como en `rm -rf "$VAR"/*`, es en cambio una [ruta crítica](#critical-paths). Los destinos de `Remove-Item` que son un `*` solo o que terminan en `/*` o `\*` nunca llegan al clasificador: Claude Code [los deniega directamente](#remove-item-in-powershell).420 Un glob directamente bajo la variable, como en `rm -rf "$VAR"/*`, es en cambio una [ruta crítica](#critical-paths). Los destinos de `Remove-Item` que son un `*` solo o que terminan en `/*` o `\*` nunca llegan al clasificador: Claude Code [los deniega directamente](#remove-item-in-powershell).

432 421 

422Varias de estas categorías dependen de entradas del [entorno](/docs/es/auto-mode-config#define-trusted-infrastructure), como los destinos remotos sensibles y los alcances de IaC protegidos, que puedes restringir a nombres concretos.

423 

433Claude Code v2.1.257 y posterior también bloquean lo siguiente de forma predeterminada:424Claude Code v2.1.257 y posterior también bloquean lo siguiente de forma predeterminada:

434 425 

435* Solicitar credenciales al endpoint de metadatos de instancias de la nube, como `169.254.169.254`, o autenticar explícitamente una llamada a la nube, a un clúster o a un registro con la identidad de cuenta de servicio o de nodo de la propia máquina426* Solicitar credenciales al endpoint de metadatos de instancias de la nube, como `169.254.169.254`, o autenticar explícitamente una llamada a la nube, a un clúster o a un registro con la identidad de cuenta de servicio o de nodo de la propia máquina


449* Instalar dependencias declaradas en tus archivos de bloqueo o manifiestos440* Instalar dependencias declaradas en tus archivos de bloqueo o manifiestos

450* Leer `.env` y enviar credenciales a su API correspondiente441* Leer `.env` y enviar credenciales a su API correspondiente

451* Solicitudes HTTP de solo lectura442* Solicitudes HTTP de solo lectura

452* Hacer push a cualquier rama del repositorio en el que estás trabajando, incluida la rama predeterminada. Una rama no predeterminada cuyo nombre la marca como destino de implementación o publicación, como `production` o `gh-pages`, no está cubierta: el clasificador juzga un push allí según sus propios méritos. El contenido del push se sigue verificando según las demás reglas, las [reglas `permissions.deny`](/docs/es/permissions#manage-permissions) aún pueden bloquear comandos de push [tal como están escritos](/docs/es/permissions#bash-rule-limits) en todos los modos, y la protección de ramas propia del remoto sigue aplicándose. Antes de v2.1.211, solo se permitían de forma predeterminada los push a la rama en la que comenzaste, a las ramas que creó Claude y los push habituales a la rama predeterminada, y antes de v2.1.203 se bloqueaba cualquier push directo a la rama predeterminada443* Hacer push a cualquier rama del repositorio en el que estás trabajando, incluida la rama predeterminada. Una rama no predeterminada cuyo nombre la marca como destino de implementación o publicación, como `production` o `gh-pages`, no está cubierta: el clasificador juzga un push allí según sus propios méritos. El contenido del push se sigue verificando según las demás reglas, las [reglas `permissions.deny`](/docs/es/permissions#manage-permissions) aún pueden bloquear comandos de push [tal como están escritos](/docs/es/permissions#bash-rule-limits) en todos los modos, y la protección de ramas propia del remoto sigue aplicándose. Antes de v2.1.211, solo se permitían de forma predeterminada los push a la rama en la que comenzaste, a las ramas que creó Claude y los push habituales a la rama predeterminada

453* Eliminar exactamente los trabajos que Claude creó antes en la misma sesión444* Eliminar exactamente los trabajos que Claude creó antes en la misma sesión

454* Leer, revisar o escribir código, configuraciones y modelos de amenazas relacionados con la seguridad como parte de tu tarea445* Leer, revisar o escribir código, configuraciones y modelos de amenazas relacionados con la seguridad como parte de tu tarea

455* Mensajes entre agentes que trabajan juntos en la misma sesión multiagente446* Mensajes entre agentes que trabajan juntos en la misma sesión multiagente

permissions.md +8 −3

Details

384 384 

385Las reglas `Edit` se aplican a todas las herramientas integradas que editan archivos. Claude hace un esfuerzo razonable por aplicar las reglas `Read` a todas las herramientas integradas que leen archivos, como Grep y Glob, a las menciones `@file` en tus prompts y a la selección y el contexto de archivos abiertos que un [IDE](/docs/es/vs-code#the-built-in-ide-mcp-server) conectado comparte con Claude.385Las reglas `Edit` se aplican a todas las herramientas integradas que editan archivos. Claude hace un esfuerzo razonable por aplicar las reglas `Read` a todas las herramientas integradas que leen archivos, como Grep y Glob, a las menciones `@file` en tus prompts y a la selección y el contexto de archivos abiertos que un [IDE](/docs/es/vs-code#the-built-in-ide-mcp-server) conectado comparte con Claude.

386 386 

387Una regla de negación `Read(path)` también se aplica a las rutas de imágenes que pegas en un prompt y a los directorios que mencionas con @:

388 

389* **Ruta de imagen**: cuando pegas la ruta de una imagen o arrastras un archivo de imagen a tu prompt en la terminal y la regla coincide con esa ruta, Claude Code no adjunta la imagen. Si lo que pegaste no contiene ninguna otra imagen, la ruta permanece en tu prompt como texto.

390* **Directorio**: el [listado que recibe Claude](/docs/es/common-workflows#reference-files-and-directories) omite los nombres de archivos y directorios con los que coincide la regla.

391 

392Claude Code verifica las rutas de imágenes pegadas y los listados de directorios en v2.1.290 y posteriores.

393 

387Una regla de negación `Read` también bloquea las [herramientas Edit y Write](/docs/es/errors#file-is-covered-by-a-read-deny-rule) en la misma ruta, incluida la creación de un archivo nuevo allí. NotebookEdit no está cubierta, así que agrega una regla de negación `Edit` para las rutas que ninguna herramienta debe modificar. La verificación requiere Claude Code v2.1.208 o posterior para ediciones, y v2.1.228 o posterior para escrituras.394Una regla de negación `Read` también bloquea las [herramientas Edit y Write](/docs/es/errors#file-is-covered-by-a-read-deny-rule) en la misma ruta, incluida la creación de un archivo nuevo allí. NotebookEdit no está cubierta, así que agrega una regla de negación `Edit` para las rutas que ninguna herramienta debe modificar. La verificación requiere Claude Code v2.1.208 o posterior para ediciones, y v2.1.228 o posterior para escrituras.

388 395 

389Claude Code verifica los permisos de archivos solo contra las reglas `Edit(path)` y `Read(path)`. Si escribes en su lugar una regla de ruta para `Write`, `NotebookEdit`, `Glob` o la herramienta heredada `MultiEdit`, Claude Code acepta la regla pero nunca la consulta, y [muestra una advertencia al iniciar](/docs/es/errors#is-not-matched-by-file-permission-checks), excepto para una regla `Glob` pasada en `--allowedTools`. Usa `Edit(docs/**)` en lugar de `Write(docs/**)`, `NotebookEdit(docs/**)` o `MultiEdit(docs/**)`, y `Read(docs/**)` en lugar de `Glob(docs/**)`. Claude Code no muestra advertencias para una regla de nombre de herramienta sin ruta, como una regla de negación para `Write`; aplica esa regla a nivel de herramienta en todas partes. Requiere Claude Code v2.1.210 o posterior.396Claude Code verifica los permisos de archivos solo contra las reglas `Edit(path)` y `Read(path)`. Si escribes en su lugar una regla de ruta para `Write`, `NotebookEdit`, `Glob` o la herramienta heredada `MultiEdit`, Claude Code acepta la regla pero nunca la consulta, y [muestra una advertencia al iniciar](/docs/es/errors#is-not-matched-by-file-permission-checks), excepto para una regla `Glob` pasada en `--allowedTools`. Usa `Edit(docs/**)` en lugar de `Write(docs/**)`, `NotebookEdit(docs/**)` o `MultiEdit(docs/**)`, y `Read(docs/**)` en lugar de `Glob(docs/**)`. Claude Code no muestra advertencias para una regla de nombre de herramienta sin ruta, como una regla de negación para `Write`; aplica esa regla a nivel de herramienta en todas partes. Requiere Claude Code v2.1.210 o posterior.


467 En los patrones de gitignore, `*` coincide dentro de un único segmento de ruta y puede aparecer en cualquier posición del patrón, mientras que `**` coincide a través de directorios.474 En los patrones de gitignore, `*` coincide dentro de un único segmento de ruta y puede aparecer en cualquier posición del patrón, mientras que `**` coincide a través de directorios.

468</Note>475</Note>

469 476 

470Cuando apruebas una ruta de archivo con "Sí, y no vuelvas a preguntar", Claude Code escapa los caracteres de patrón de gitignore de esa ruta, como `[`, `]` y `*`, para que la regla generada coincida solo con la ruta literal que aprobaste. Las reglas que escribes tú mismo no se escapan. Antes de v2.1.202, Claude Code guardaba la ruta sin escapar, por lo que una regla generada para un directorio llamado `[2024-06] Reports` podía no coincidir con su propia ruta o coincidir con directorios hermanos no deseados.477Cuando apruebas una ruta de archivo con "Sí, y no vuelvas a preguntar", Claude Code escapa los caracteres de patrón de gitignore de esa ruta, como `[`, `]` y `*`, para que la regla generada coincida solo con la ruta literal que aprobaste. Las reglas que escribes tú mismo no se escapan.

471 478 

472No necesitas escapar los paréntesis en una ruta, así que `Edit(./Finance (2024)/**)` coincide con la carpeta `Finance (2024)` tal como está escrita.479No necesitas escapar los paréntesis en una ruta, así que `Edit(./Finance (2024)/**)` coincide con la carpeta `Finance (2024)` tal como está escrita.

473 480 


805 La excepción del directorio de configuración omite solo el paso de confianza. `~/.claude/settings.local.json` sigue siendo [alcance local](/docs/es/settings#compare-the-scope-of-each-settings-file), por lo que Claude Code lo lee solo en sesiones que inicia en su directorio de inicio mismo, no en cada proyecto. Para aplicar reglas de permiso en todos sus proyectos, agréguelas a su configuración de usuario en su lugar: `~/.claude/settings.json`, o `$CLAUDE_CONFIG_DIR/settings.json` cuando `CLAUDE_CONFIG_DIR` está establecido.812 La excepción del directorio de configuración omite solo el paso de confianza. `~/.claude/settings.local.json` sigue siendo [alcance local](/docs/es/settings#compare-the-scope-of-each-settings-file), por lo que Claude Code lo lee solo en sesiones que inicia en su directorio de inicio mismo, no en cada proyecto. Para aplicar reglas de permiso en todos sus proyectos, agréguelas a su configuración de usuario en su lugar: `~/.claude/settings.json`, o `$CLAUDE_CONFIG_DIR/settings.json` cuando `CLAUDE_CONFIG_DIR` está establecido.

806</Note>813</Note>

807 814 

808Antes de v2.1.207, Claude Code aplicaba las reglas de un archivo sin rastrear antes de que aceptaras el diálogo.

809 

810<h3 id="what-runs-before-you-trust-a-folder">815<h3 id="what-runs-before-you-trust-a-folder">

811 Lo que se ejecuta antes de confiar en una carpeta816 Lo que se ejecuta antes de confiar en una carpeta

812</h3>817</h3>

plugin-evals.md +36 −5

Details

443 443 

444| Código de salida | Significado |444| Código de salida | Significado |

445| :- | :- |445| :- | :- |

446| 0 | Cada caso puntuó en o por encima de `--threshold` y cada archivo de caso cargó |446| 0 | El conjunto aprobó: cada caso obtuvo una puntuación igual o superior a `--threshold` y nada más hizo fallar la ejecución |

447| 1 | Un caso puntuó por debajo del umbral, un archivo de caso falló al cargar, no se encontraron casos, una ejecución no pudo iniciarse, el directorio del plugin no es confiable y `--trust-plugin` no se pasó, o una opción fue inválida |447| 1 | Un caso obtuvo una puntuación por debajo del umbral, un archivo de caso no se pudo cargar, no se encontraron casos, una ejecución no se pudo iniciar o una ejecución [terminó con un error de API](#runs-ended-on-an-api-error). También se devuelve cuando el directorio del plugin no es de confianza y no se pasó `--trust-plugin`, una opción no era válida o no se pudo escribir el resultado de `--json` |

448| 2 | Ejecución parcial: se alcanzó el techo `--max-cost-usd`, o su credencial fue rechazada antes o en la primera ejecución. `results.json` aún se escribe con `partial: true` y la razón |448| 2 | Ejecución parcial: se alcanzó el techo `--max-cost-usd`, o su credencial fue rechazada antes o en la primera ejecución. `results.json` aún se escribe con `partial: true` y la razón |

449| 130 | Interrumpido. Los resultados parciales se escriben |449| 130 | Interrumpido. Los resultados parciales se escriben |

450| 143 | Terminado, como por un timeout de CI |450| 143 | Terminado, como por un timeout de CI |


503| `cases[].name` | Nombre del caso |503| `cases[].name` | Nombre del caso |

504| `cases[].aggregates.score` | Puntuación de ejecución de brazo con promedio para el caso |504| `cases[].aggregates.score` | Puntuación de ejecución de brazo con promedio para el caso |

505| `cases[].aggregates.delta` | Puntuación de brazo con menos puntuación de brazo sin. Omitido cuando los brazos no son comparables |505| `cases[].aggregates.delta` | Puntuación de brazo con menos puntuación de brazo sin. Omitido cuando los brazos no son comparables |

506| `cases[].arms.with[].error` | `null`, o por qué una ejecución terminó anormalmente, como `timed out after 300s`. Una ejecución que comenzó pero terminó mal aún se califica en lo que produjo, así que un error no nulo no implica puntuación 0 |506| `cases[].arms.with[].error` | `null`, o por qué una ejecución terminó anormalmente, como `timed out after 300s`. Algunas de estas ejecuciones aún se califican según lo que produjeron, así que un error no nulo no implica puntuación 0. Una ejecución que [terminó con un error de API](#runs-ended-on-an-api-error) puntúa 0 sin calificarse |

507| `cases[].arms.with[].aborted` | Presente cuando un [mock](#mock-mcp-servers) detuvo la ejecución mediante `expect:`, `abort_when` o el [presupuesto de llamadas de agent-mock](#mock-call-budget-exceeded), con `server`, `tool`, y `reason`. La ejecución puntúa 0 y `error` permanece `null` |507| `cases[].arms.with[].aborted` | Presente cuando un [mock](#mock-mcp-servers) detuvo la ejecución mediante `expect:`, `abort_when` o el [presupuesto de llamadas de agent-mock](#mock-call-budget-exceeded), con `server`, `tool`, y `reason`. La ejecución puntúa 0 y `error` permanece `null` |

508| `cases[].arms.with[].skippedPaidGraders` | `true` cuando el techo de costo omitió los calificadores de juez de esta ejecución, así que su puntuación no es comparable |508| `cases[].arms.with[].skippedPaidGraders` | `true` cuando el techo de costo omitió los calificadores de juez de esta ejecución, así que su puntuación no es comparable |

509| `costUsd`, `durationSeconds`, `claudeVersion` | Costo estimado a precio de lista incluyendo llamadas de juez, segundos de reloj de pared, y la versión de Claude Code que ejecutó el conjunto |509| `costUsd`, `durationSeconds`, `claudeVersion` | Costo estimado a precio de lista incluyendo llamadas de juez, segundos de reloj de pared, y la versión de Claude Code que ejecutó el conjunto |


724 724 

725Antes de v2.1.283, `claude plugin eval` no verificaba la versión de git, y en un git más antiguo el conjunto se ejecutaba con esos programas activados.725Antes de v2.1.283, `claude plugin eval` no verificaba la versión de git, y en un git más antiguo el conjunto se ejecutaba con esos programas activados.

726 726 

727<h3 id="cannot-be-evaluated-where-sessions-load-it">

728 "cannot be evaluated where sessions load it"

729</h3>

730 

731Ejecutaste `claude plugin eval` en tu shell con el nombre de un plugin instalado desde un marketplace que [agregaste desde una ruta local](/docs/es/plugins/loading#in-place-and-copied-plugins). Ninguna sesión podría cargar el plugin desde ese marketplace en este momento, así que el comando se niega con este mensaje y sale con el código 1.

732 

733```text theme={null}

734Error: formatter@my-marketplace cannot be evaluated where sessions load it: no session could load it now. Its marketplace is a folder whose catalog could not be read, or lists it no more. Check the marketplace with `claude plugin marketplace list`, or pass ./<dir> to evaluate a directory.

735```

736 

737La oración que sigue a `no session could load it now.` indica qué falló.

738 

739Ejecuta `claude plugin marketplace list` en tu shell y corrige lo que indica el mensaje. Por ejemplo, restaura el directorio del marketplace o vuelve a poner la entrada del plugin en su catálogo. Para evaluar el código fuente del plugin sin el marketplace, pasa su directorio como destino, como `claude plugin eval ./plugins/formatter`.

740 

727<h3 id="no-eval-cases-found">741<h3 id="no-eval-cases-found">

728 "No eval cases found"742 "No eval cases found"

729</h3>743</h3>


774 La ejecución sale con 1 pero los resultados se ven bien788 La ejecución sale con 1 pero los resultados se ven bien

775</h3>789</h3>

776 790 

777El `--threshold` predeterminado es 1.0, así que el comando sale con 1 cuando cualquier caso puntúa por debajo de perfecto. Establece un umbral que coincida con la puntuación que requieres. La salida 1 también cubre un archivo de caso que no se pudo cargar, lo cual se reporta en stderr por encima de la tabla.791Cuando todos los casos puntuaron igual o por encima de `--threshold` y el comando aun así sale con 1, una línea en stderr indica la causa, incluso con `--json`. Por ejemplo, un archivo de caso no se pudo cargar, o las ejecuciones [terminaron con un error de la API](#runs-ended-on-an-api-error). Para las demás causas, consulta los [códigos de salida](#run-evals-in-ci).

792 

793El `--threshold` predeterminado es 1.0, así que el comando sale con 1 cuando cualquier caso puntúa por debajo de perfecto. Establece un umbral que coincida con la puntuación que requieres.

778 794 

779<h3 id="json-output-path-must-end-in-json">795<h3 id="json-output-path-must-end-in-json">

780 `--json output path must end in .json`796 `--json output path must end in .json`


788 804 

789Ese calificador se excluye de la puntuación por diseño en una ejecución de dos brazos, y su campo `scored` es `false`. Consulta [Comparar con una línea base sin plugin](#compare-against-a-no-plugin-baseline).805Ese calificador se excluye de la puntuación por diseño en una ejecución de dos brazos, y su campo `scored` es `false`. Consulta [Comparar con una línea base sin plugin](#compare-against-a-no-plugin-baseline).

790 806 

807<h3 id="runs-ended-on-an-api-error">

808 "ended on an API error and scored 0 without grading"

809</h3>

810 

811Esta advertencia en stderr significa que la API respondió a la última solicitud de al menos una ejecución con un error HTTP, como un rate limit o un límite de uso del plan. Esa ejecución puntúa 0 sin resultados de calificadores, y el comando sale con un código distinto de cero sin importar las puntuaciones ni el `--threshold`.

812 

813Para solucionarlo, encuentra el error de cada ejecución afectada y resuelve la causa que informa; luego ejecuta el conjunto nuevamente:

814 

815* **Sin `--json`**: el error está al final de la línea de progreso de la ejecución, después de `error:`

816* **Con `--json`**: el error está en el [resultado JSON](#json-result), en `cases[].arms.with[].error` o `cases[].arms.without[].error`

817 

818El recuento también incluye las ejecuciones de [línea base](#the-no-plugin-baseline). Sus puntuaciones nunca deciden si un caso pasa, así que todos los casos pueden pasar mientras el comando aun así falla. En una ejecución de dos brazos, `W/OUT` y `Δ` del caso afectado se imprimen como `—`. Para un límite de uso o un rate limit, consulta [Las ejecuciones fallan a mitad de camino con un error de límite de uso o de rate limit](#runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through).

819 

820Antes de v2.1.299, esa ejecución se calificaba según lo que había producido.

821 

791<h3 id="runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through">822<h3 id="runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through">

792 Las ejecuciones fallan a mitad de camino con un error de límite de uso o de rate limit823 Las ejecuciones fallan a mitad de camino con un error de límite de uso o de rate limit

793</h3>824</h3>

794 825 

795Si tu cuenta alcanza el límite de uso de tu plan o un rate limit de la API mientras se ejecuta un conjunto, cada ejecución posterior termina con ese error, se califica según lo que produjo y generalmente puntúa 0. El conjunto aun así termina y no se marca como `partial`, así que el resultado puede parecer una regresión. Revisa la columna `NOTES` o `cases[].arms.with[].error` en el JSON para ver el mensaje de límite antes de confiar en las puntuaciones, y luego vuelve a ejecutar después de que el límite se reinicie, con `--runs 1` o un filtro `--case` si necesitas mantenerte por debajo de él.826Las ejecuciones que terminan con un error de límite de uso o de rate limit [puntúan 0 sin calificación](#runs-ended-on-an-api-error), y el comando sale con un código distinto de cero. El conjunto aun así termina y no se marca como `partial`. Vuelve a ejecutar después de que el límite se reinicie, con `--runs 1` o un filtro `--case` si necesitas mantenerte por debajo de él.

796 827 

797<h3 id="mock-call-budget-exceeded">828<h3 id="mock-call-budget-exceeded">

798 "mock call budget exceeded"829 "mock call budget exceeded"

Details

523 523 

524| Código de salida | Significado |524| Código de salida | Significado |

525| :- | :- |525| :- | :- |

526| `0` | Cada caso cumple el umbral |526| `0` | La suite pasó: cada caso cumple el umbral y nada más hizo fallar la ejecución |

527| `1` | Un caso fallido, un error de carga, o un directorio de plugin no confiable |527| `1` | Un caso fallido, un error de carga, un directorio de plugin no confiable, una ejecución que [terminó con un error de API](/docs/es/plugin-evals#runs-ended-on-an-api-error), u otra causa listada en [Ejecutar evals en CI](/docs/es/plugin-evals#run-evals-in-ci) |

528| `2` | Una ejecución parcial |528| `2` | Una ejecución parcial |

529| `130` | Interrumpido |529| `130` | Interrumpido |

530| `143` | Terminado |530| `143` | Terminado |

Details

752 752 

753El frontmatter de un agente de plugin sigue estas reglas:753El frontmatter de un agente de plugin sigue estas reglas:

754 754 

755* **Campos admitidos**: `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background`, `omitClaudeMd`, `isolation`, `color`, y la clave `cacheTtl` de `experimental`. El único valor válido de `isolation` es `"worktree"`. Consulte [campos de frontmatter admitidos](/docs/es/sub-agents#supported-frontmatter-fields) para ver qué hace cada uno755* **Campos admitidos**: `name`, `description`, `model`, `effort`, `maxTurns`, `autoCompactWindow`, `tools`, `disallowedTools`, `skills`, `memory`, `background`, `omitClaudeMd`, `isolation`, `color`, y la clave `cacheTtl` de `experimental`. El único valor válido de `isolation` es `"worktree"`. Consulta [campos de frontmatter admitidos](/docs/es/sub-agents#supported-frontmatter-fields) para ver qué hace cada uno

756* **Campos ignorados**: `permissionMode`, `hooks`, `mcpServers`, e `initialPrompt`. Un archivo de agente no puede agregar hooks o servidores MCP por su cuenta, así que agregue esos como plugin [hooks](#hooks) y [servidores MCP](#mcp-servers) en su lugar756* **Campos ignorados**: `permissionMode`, `hooks`, `mcpServers`, e `initialPrompt`. Un archivo de agente no puede agregar hooks o servidores MCP por su cuenta, así que agregue esos como plugin [hooks](#hooks) y [servidores MCP](#mcp-servers) en su lugar

757* **Frontmatter que no se analiza**: el agente aún se carga con cada campo ignorado. Se nombra después del archivo, y su descripción dice `Agent from my-plugin plugin`. Ejecute [`claude plugin validate`](/docs/es/plugins/cli-reference#plugin-validate) en su shell para encontrar estos archivos757* **Frontmatter que no se analiza**: el agente aún se carga con cada campo ignorado. Se nombra después del archivo, y su descripción dice `Agent from my-plugin plugin`. Ejecute [`claude plugin validate`](/docs/es/plugins/cli-reference#plugin-validate) en su shell para encontrar estos archivos

758 758 

Details

237 237 

238Cuando un usuario desinstala el último plugin que restringe una dependencia, la dependencia ya no está restringida a un rango de versión y reanuda el seguimiento de su entrada de marketplace en la próxima actualización.238Cuando un usuario desinstala el último plugin que restringe una dependencia, la dependencia ya no está restringida a un rango de versión y reanuda el seguimiento de su entrada de marketplace en la próxima actualización.

239 239 

240<h3 id="dependencies-when-your-plugin-loads-from-claude-ai">

241 Dependencias cuando tu plugin se carga desde claude.ai

242</h3>

243 

244Cuando un usuario activa tu plugin para su cuenta de claude.ai, Claude Code lo carga como `<name>@synced`, [sin marketplace](/docs/es/plugins/loading#synced-plugins). Para esa copia de tu plugin, Claude Code considera satisfecha una entrada de dependencia que nombra un marketplace cuando el usuario tiene cualquiera de estos:

245 

246* **La dependencia desde su marketplace**: instalada desde el marketplace que nombra tu entrada, y habilitada. Claude Code verifica un rango `version` de tu entrada contra la versión de la copia instalada.

247* **Un plugin de claude.ai con el mismo nombre**: habilitado desde su cuenta de claude.ai. Claude Code verifica un rango `version` de tu entrada contra la `version` de ese plugin, y un plugin que no declara ninguna `version` pasa la verificación.

248 

249Si les indicas a los usuarios que activen tu plugin desde claude.ai, indícales que también activen allí la dependencia, o que la instalen desde su marketplace.

250 

251Un plugin de claude.ai satisface la entrada solo cuando tu plugin también se carga desde claude.ai.

252 

240<h2 id="see-also">253<h2 id="see-also">

241 Véase también254 Véase también

242</h2>255</h2>

Details

48* **Nombres de marketplace comunitario**: `claude-community`, `claude-plugins-community` y `healthcare`. Reservado bajo la misma regla que los nombres oficiales.48* **Nombres de marketplace comunitario**: `claude-community`, `claude-plugins-community` y `healthcare`. Reservado bajo la misma regla que los nombres oficiales.

49* **Nombres de directorio de plugins**: `anthropic-plugin-directory` y `claude-plugin-directory`. Reservado bajo la misma regla que los nombres oficiales.49* **Nombres de directorio de plugins**: `anthropic-plugin-directory` y `claude-plugin-directory`. Reservado bajo la misma regla que los nombres oficiales.

50* **Nombres que suplanten un marketplace oficial**: nombres como `official-claude-plugins` o `claude-plugins-v2`, y cualquier nombre que contenga un carácter no ASCII. El error es `Marketplace name impersonates an official Anthropic/Claude marketplace`. Un carácter de control o de formato bidireccional en un nombre también reporta `Marketplace name cannot contain control or bidirectional-formatting characters`. Un marketplace ya registrado bajo tal nombre deja de cargarse, junto con sus plugins.50* **Nombres que suplanten un marketplace oficial**: nombres como `official-claude-plugins` o `claude-plugins-v2`, y cualquier nombre que contenga un carácter no ASCII. El error es `Marketplace name impersonates an official Anthropic/Claude marketplace`. Un carácter de control o de formato bidireccional en un nombre también reporta `Marketplace name cannot contain control or bidirectional-formatting characters`. Un marketplace ya registrado bajo tal nombre deja de cargarse, junto con sus plugins.

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 bajo 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 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.

Details

252 252 

253Para detener un prompt, devuelve `{ drop: 'the reason' }` sin llamar a `next`. El texto vuelve al campo de entrada de prompts del usuario, y este ve `Prompt dropped by a hook:` seguido de tu motivo, así que dirígele el motivo a él. Si tu hook devuelve un `drop` después de que su llamada a `next(e)` dejó pasar el prompt, el turno se ejecuta de todos modos, y el hook [falla](#handle-a-hook-that-fails) con un mensaje que incluye `a drop after its next() was answered`.253Para detener un prompt, devuelve `{ drop: 'the reason' }` sin llamar a `next`. El texto vuelve al campo de entrada de prompts del usuario, y este ve `Prompt dropped by a hook:` seguido de tu motivo, así que dirígele el motivo a él. Si tu hook devuelve un `drop` después de que su llamada a `next(e)` dejó pasar el prompt, el turno se ejecuta de todos modos, y el hook [falla](#handle-a-hook-that-fails) con un mensaje que incluye `a drop after its next() was answered`.

254 254 

255[Otros eventos](/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) cubren el resto de lo que Claude lee: `prompt.section` para cada sección del prompt del sistema, `prompt.context` para el contexto enviado con el primer mensaje y `skill.prompt` para el texto de un skill. El texto de estos hooks que cambia entre solicitudes [invalida la caché de prompts](/docs/es/prompt-caching).255[Otros eventos](/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) cubren el resto de lo que Claude lee: `prompt.section` para cada sección del prompt del sistema, `prompt.context` para el contexto enviado con el primer mensaje y `skill.prompt` para el texto de un skill. El texto de estos hooks que cambia entre solicitudes [invalida la caché de prompts](/docs/es/prompt-caching). En un hook `skill.prompt`, también puedes leer [de qué plugin o archivo proviene el skill](/docs/es/plugins/mods/reference#skill-prompt-fields).

256 256 

257<h3 id="follow-a-turn">257<h3 id="follow-a-turn">

258 Seguir un turno258 Seguir un turno

Details

212 Dónde se ejecutan los mods212 Dónde se ejecutan los mods

213</h3>213</h3>

214 214 

215Los hooks de un mod se ejecutan en todo tipo de sesión que cargue el plugin. El dibujo es más limitado: solo la terminal y la app de escritorio muestran los paneles, las bandas y las filas reemplazadas de un mod. Esta tabla lista cada lugar donde podrías ejecutar Claude Code:215Los hooks de un mod se ejecutan en todo tipo de sesión que cargue el plugin, sea cual sea el proveedor que sirva el modelo, incluidos Amazon Bedrock, Agent Platform de Google Cloud y Microsoft Foundry. El dibujo es más limitado: solo la terminal y la app de escritorio muestran los paneles, las bandas y las filas reemplazadas de un mod. Esta tabla lista cada lugar donde podrías ejecutar Claude Code:

216 216 

217| Dónde ejecutas Claude Code | Los hooks se ejecutan | Lo que dibuja el mod aparece |217| Dónde ejecutas Claude Code | Los hooks se ejecutan | Lo que dibuja el mod aparece |

218| :- | :- | :- |218| :- | :- | :- |


263| `cc-plugin-plugin-authoring` | Le da a Claude el [skill `plugin-authoring`](/docs/es/plugins/mods/create#ask-claude-for-a-mod) para escribir mods. Contiene un skill y nada de código de mod. | A menos que Anthropic haya desactivado los mods instalados de forma remota | Deshabilítalo en `/plugin` |263| `cc-plugin-plugin-authoring` | Le da a Claude el [skill `plugin-authoring`](/docs/es/plugins/mods/create#ask-claude-for-a-mod) para escribir mods. Contiene un skill y nada de código de mod. | A menos que Anthropic haya desactivado los mods instalados de forma remota | Deshabilítalo en `/plugin` |

264| `cc-plugin-sec-default` | Protege lo que administra tu organización frente a los mods que instala un usuario | [Dónde se carga la protección](/docs/es/plugins/mods/admin#know-what-happens-by-default) | No puedes. Un administrador [establece el orden](/docs/es/plugins/mods/admin#install-your-organizations-mods) en la configuración administrada |264| `cc-plugin-sec-default` | Protege lo que administra tu organización frente a los mods que instala un usuario | [Dónde se carga la protección](/docs/es/plugins/mods/admin#know-what-happens-by-default) | No puedes. Un administrador [establece el orden](/docs/es/plugins/mods/admin#install-your-organizations-mods) en la configuración administrada |

265| `cc-plugin-telemetry` | Envía los registros de analíticas que registran Claude Code y sus mods integrados | Dondequiera que las analíticas propias de Claude Code estén activadas | Deshabilítalo en `/plugin`, o desactiva las analíticas, por ejemplo con [`DISABLE_TELEMETRY`](/docs/es/env-vars) |265| `cc-plugin-telemetry` | Envía los registros de analíticas que registran Claude Code y sus mods integrados | Dondequiera que las analíticas propias de Claude Code estén activadas | Deshabilítalo en `/plugin`, o desactiva las analíticas, por ejemplo con [`DISABLE_TELEMETRY`](/docs/es/env-vars) |

266| `cc-plugin-you-should-know` | Ejecuta un agente secundario que te cubre las espaldas mientras Claude trabaja en tareas más largas. Cuando encuentra algo que vale la pena saber y que podrías pasar por alto, te muestra una nota encima del prompt. | Deshabilitado de forma predeterminada. Aparece en `/plugin` -> **Installed** -> **Show disabled** si está disponible para tu organización. Habilítalo con [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/es/plugins/cli-reference#plugin-in-a-session). | Deshabilítalo en `/plugin` |266| `cc-plugin-you-should-know` | [You should know](/docs/es/interactive-mode#you-should-know-suggestions): un agente secundario muestra una nota encima del prompt cuando encuentra algo que podrías haber pasado por alto | Desactivado hasta que [lo actives](/docs/es/interactive-mode#you-should-know-suggestions) | Deshabilítalo en `/plugin` |

267 267 

268Los ajustes y flags que detienen los mods instalados, como `disableAllHooks`, `--bare` y `--safe-mode`, no detienen los mods integrados.268Los ajustes y flags que detienen los mods instalados, como `disableAllHooks`, `--bare` y `--safe-mode`, no detienen los mods integrados.

269 269 

Details

43| `next.origin` | `{ plugin, tier }` de quien disparó el evento. El propio Claude Code es `{ plugin: 'engine', tier: 'core' }`. El `tier` de un mod es su grupo de prioridad en el [orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in): `prepend`, `user`, `append` o `builtin`. |43| `next.origin` | `{ plugin, tier }` de quien disparó el evento. El propio Claude Code es `{ plugin: 'engine', tier: 'core' }`. El `tier` de un mod es su grupo de prioridad en el [orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in): `prepend`, `user`, `append` o `builtin`. |

44| `next.budget` | El límite de tiempo del hook en milisegundos: `next.budget.ms` es el límite completo y `next.budget.remainingMs` es lo que queda en este momento |44| `next.budget` | El límite de tiempo del hook en milisegundos: `next.budget.ms` es el límite completo y `next.budget.remainingMs` es lo que queda en este momento |

45| `next.to(e, tier)` | Salta a un tier posterior, que es `append`, `builtin` o `core`. `next.to(e, 'append')` omite los mods que instaló un usuario. Solo un mod en `prependPlugins` o `appendPlugins` puede llamarlo. |45| `next.to(e, tier)` | Salta a un tier posterior, que es `append`, `builtin` o `core`. `next.to(e, 'append')` omite los mods que instaló un usuario. Solo un mod en `prependPlugins` o `appendPlugins` puede llamarlo. |

46| `next.error` | Solo en un controlador `.catch`. `kind` es `throw` o `timeout` cuando el hook falló, y `message` es el texto del error. `kind` es `re-entry` cuando el hook se omitió porque el evento provino de una de sus propias llamadas a la API de mods, y `cause` es `lent` si un método que otro mod agrega a la API de mods disparó ese evento. `re-entry` y `cause` requieren Claude Code v2.1.292 o posterior. |46| `next.error` | Solo en un controlador `.catch`. `kind` es `throw` o `timeout` cuando el hook falló, y `message` es el texto del error. `kind` es `re-entry` cuando el hook se omitió porque el evento provino de una llamada a la API de mods hecha por ese hook o por el código de tu mod fuera de sus hooks. `re-entry` requiere Claude Code v2.1.292 o posterior. |

47| `next.error.cause` | Solo se establece cuando `kind` es `re-entry`. `rewritten` si un hook `tool.call` o [`PreToolUse`](/docs/es/hooks#pretooluse) cambió la llamada a la API de mods de la que provino el evento, o si un hook `agent.spawn` cambió un agente iniciado por esa llamada. `lent` cuando un método que otro mod agrega a la API de mods disparó ese evento, a menos que también aplique `rewritten`. `lent` requiere Claude Code v2.1.292 o posterior y `rewritten`, v2.1.300 o posterior. |

47| `next.called` | Solo en un controlador `.catch`. `true` cuando el hook había llamado a `next`. |48| `next.called` | Solo en un controlador `.catch`. `true` cuando el hook había llamado a `next`. |

48 49 

49<h2 id="events">50<h2 id="events">


97| [`skill.prompt`](/docs/es/plugins/mods/events#rewrite-or-add-to-a-prompt) | El texto de un skill se expande para Claude | `{ text }` |98| [`skill.prompt`](/docs/es/plugins/mods/events#rewrite-or-add-to-a-prompt) | El texto de un skill se expande para Claude | `{ text }` |

98| `attribution.text` | Claude Code compone el texto de atribución de un commit o pull request | `{ text }` |99| `attribution.text` | Claude Code compone el texto de atribución de un commit o pull request | `{ text }` |

99 100 

101<h4 id="skill-prompt-fields">

102 Campos de origen y frontmatter en `skill.prompt`

103</h4>

104 

105En un hook de `skill.prompt`, puedes leer estos campos junto con el nombre del skill en `e.skill` y el texto que lee Claude en `e.text`:

106 

107| Campo | Tipo | Qué contiene |

108| :- | :- | :- |

109| `e.source` | string | Quién proporciona el skill: `policySettings`, `userSettings` o `projectSettings` para un skill en la [ubicación](/docs/es/skills#where-skills-live) empresarial, personal o de proyecto, respectivamente. Otros orígenes dan una palabra como `plugin`, `mcp`, `syncedSkills` o `built-in`. |

110| `e.pluginName` | string | El nombre del plugin, para un skill cuyo `e.source` es `plugin` |

111| `e.path` | string | La ruta absoluta del archivo `SKILL.md` del skill, o de su archivo `.md` para un skill escrito como [archivo de comando](/docs/es/skills#where-skills-live). Está ausente cuando el skill no tiene ningún archivo en esta máquina, como ocurre con un skill integrado. |

112| `e.frontmatter` | object | El frontmatter del archivo del skill, como datos simples |

113| `e.frontmatterProblem` | string | El motivo por el que a `e.frontmatter` le falta el frontmatter del archivo o una de sus claves, como en `is a list or a single value, not a table`. Está ausente cuando `e.frontmatter` contiene todo el frontmatter o el skill no tiene ninguno. |

114 

115Un hook puede pasar un `text` o `frontmatter` cambiado a `next`: los hooks posteriores leen ambos, y Claude lee el `text` final. Un hook que cambia cualquier otro campo [falla](/docs/es/plugins/mods/events#handle-a-hook-that-fails).

116 

117En `skill.prompt`, `e.source`, `e.pluginName`, `e.path`, `e.frontmatter` y `e.frontmatterProblem` requieren Claude Code v2.1.299 o posterior.

118 

100<h3 id="commands-and-configuration">119<h3 id="commands-and-configuration">

101 Comandos y configuración120 Comandos y configuración

102</h3>121</h3>

Details

31* [**Skills**](/docs/es/plugins/components#skills): instrucciones `SKILL.md` que Claude carga cuando es relevante, y que también puede ejecutar como un comando31* [**Skills**](/docs/es/plugins/components#skills): instrucciones `SKILL.md` que Claude carga cuando es relevante, y que también puede ejecutar como un comando

32* [**Agentes**](/docs/es/plugins/components#agents): definiciones de subagentes a las que Claude puede delegar32* [**Agentes**](/docs/es/plugins/components#agents): definiciones de subagentes a las que Claude puede delegar

33* [**Hooks**](/docs/es/plugins/components#hooks): comandos que Claude Code ejecuta en puntos de su ciclo de vida, como después de cada edición33* [**Hooks**](/docs/es/plugins/components#hooks): comandos que Claude Code ejecuta en puntos de su ciclo de vida, como después de cada edición

34* [**Un módulo de hooks**](/docs/es/plugins/mods/overview): hooks escritos como funciones JavaScript, que también pueden dibujar paneles y agregar comandos. Un plugin que tiene uno se llama mod34* [**Un módulo de hooks**](/docs/es/plugins/mods/overview): hooks escritos como funciones JavaScript, que también pueden dibujar paneles y agregar comandos. Un plugin que tiene uno se llama mod. Algunos mods están [integrados en Claude Code](/docs/es/plugins/mods/overview#mods-built-into-claude-code).

35* [**Servidores MCP**](/docs/es/plugins/components#mcp-servers): servidores de herramientas a los que Claude Code se conecta mientras el plugin está habilitado35* [**Servidores MCP**](/docs/es/plugins/components#mcp-servers): servidores de herramientas a los que Claude Code se conecta mientras el plugin está habilitado

36 36 

37Este diagrama muestra un plugin llamado `my-plugin` que contiene una skill, un agente, hooks y un servidor MCP, y lo que obtiene de cada archivo una vez que se carga el plugin.37Este diagrama muestra un plugin llamado `my-plugin` que contiene una skill, un agente, hooks y un servidor MCP, y lo que obtiene de cada archivo una vez que se carga el plugin.

Details

693| Mensaje | Significado | Cómo resolverlo |693| Mensaje | Significado | Cómo resolverlo |

694| :- | :- | :- |694| :- | :- | :- |

695| `Dependency "<dep>" is not installed` | Una dependencia declarada no está instalada. | Instálala en tu shell con `claude plugin install <dep>@<marketplace>`, o desinstala el plugin. Si el marketplace de la dependencia aún no está registrado, agrégalo y ejecuta `/reload-plugins` en tu sesión, lo que instala las dependencias faltantes que puede resolver. |695| `Dependency "<dep>" is not installed` | Una dependencia declarada no está instalada. | Instálala en tu shell con `claude plugin install <dep>@<marketplace>`, o desinstala el plugin. Si el marketplace de la dependencia aún no está registrado, agrégalo y ejecuta `/reload-plugins` en tu sesión, lo que instala las dependencias faltantes que puede resolver. |

696| `"<name>@synced" is loaded from your claude.ai account but meets a marketplace dependency only for other claude.ai plugins`, dentro del mensaje `is not installed` | La dependencia indica un marketplace, y un plugin con ese nombre se carga desde tu cuenta de claude.ai. El plugin que declara la dependencia no se carga desde claude.ai, así que el plugin de claude.ai no la satisface. | En tu shell, ejecuta `claude plugin install <dep>@<marketplace>` para instalar la dependencia desde su marketplace. Entonces se carga la copia del marketplace en lugar de la de claude.ai. |

696| `Dependency "<dep>" is disabled` | La dependencia está instalada pero desactivada. | Habilita la dependencia, o desinstala el plugin que la necesita. |697| `Dependency "<dep>" is disabled` | La dependencia está instalada pero desactivada. | Habilita la dependencia, o desinstala el plugin que la necesita. |

697| `Requires "<dep>" <range>, installed <version>` | La versión de la dependencia instalada está fuera del rango declarado por el plugin. | Actualiza la dependencia a una versión dentro del rango, o desinstala el plugin. |698| `Requires "<dep>" <range>, installed <version>` | La versión de la dependencia instalada está fuera del rango declarado por el plugin. | Actualiza la dependencia a una versión dentro del rango, o desinstala el plugin. |

698| `<Plugin or Dependency> "<name>" has conflicting version requirements` | Ninguna versión satisface todos los rangos que la fijan. El mensaje enumera los rangos. | Desinstala o actualiza uno de los plugins en conflicto, o pide al autor original que amplíe su restricción. |699| `<Plugin or Dependency> "<name>" has conflicting version requirements` | Ninguna versión satisface todos los rangos que la fijan. El mensaje enumera los rangos. | Desinstala o actualiza uno de los plugins en conflicto, o pide al autor original que amplíe su restricción. |


700| `... has no git tag satisfying <range>` | El repositorio de la dependencia no tiene ninguna etiqueta `<name>--v*` dentro del rango. | Comprueba que el proyecto original etiquete sus versiones con esa convención, o flexibiliza el rango. |701| `... has no git tag satisfying <range>` | El repositorio de la dependencia no tiene ninguna etiqueta `<name>--v*` dentro del rango. | Comprueba que el proyecto original etiquete sus versiones con esa convención, o flexibiliza el rango. |

701| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | La dependencia está en un marketplace diferente, y la resolución entre marketplaces está desactivada de forma predeterminada. | Instala tú mismo la dependencia en el mismo alcance, en tu shell con `claude plugin install <dep>@<marketplace>` más el `--scope` en el que estás instalando el plugin, y luego reintenta. |702| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | La dependencia está en un marketplace diferente, y la resolución entre marketplaces está desactivada de forma predeterminada. | Instala tú mismo la dependencia en el mismo alcance, en tu shell con `claude plugin install <dep>@<marketplace>` más el `--scope` en el que estás instalando el plugin, y luego reintenta. |

702 703 

703Para verlos de forma programática, ejecuta `claude plugin list --json` en tu shell. Los plugins con problemas incluyen un campo `errors` con los mensajes y un campo `errorDetails` con un `type` para cada uno: las dos primeras filas son `dependency-unsatisfied` y la tercera es `dependency-version-unsatisfied`.704Para verlos de forma programática, ejecuta `claude plugin list --json` en tu shell. Los plugins con problemas incluyen un campo `errors` con los mensajes y un campo `errorDetails` con un `type` para cada uno: las tres primeras filas son `dependency-unsatisfied` y la cuarta es `dependency-version-unsatisfied`.

704 705 

705<h2 id="plugin-installed-but-not-working">706<h2 id="plugin-installed-but-not-working">

706 Plugin installed but not working707 Plugin installed but not working

Details

211 La compactación funciona a tu favor cuando el contexto que descartas es contenido que ya no necesitas. Para elegir cuándo ocurre su sobrecarga, ejecuta `/compact` en una pausa natural de tu trabajo, como entre tareas, en lugar de esperar a que la compactación automática se active a mitad de tarea. Si has seguido un camino que quieres abandonar por completo, usa [`/rewind`](#rewinding-the-conversation) en su lugar para volver a un turno anterior. Retroceder trunca hasta un prefijo que ya está almacenado en caché, en lugar de crear uno nuevo como lo hace la compactación.211 La compactación funciona a tu favor cuando el contexto que descartas es contenido que ya no necesitas. Para elegir cuándo ocurre su sobrecarga, ejecuta `/compact` en una pausa natural de tu trabajo, como entre tareas, en lugar de esperar a que la compactación automática se active a mitad de tarea. Si has seguido un camino que quieres abandonar por completo, usa [`/rewind`](#rewinding-the-conversation) en su lugar para volver a un turno anterior. Retroceder trunca hasta un prefijo que ya está almacenado en caché, en lugar de crear uno nuevo como lo hace la compactación.

212</Tip>212</Tip>

213 213 

214Si dejas una conversación larga inactiva en una sesión de terminal mientras está en el [TTL de una hora](#which-ttl-each-request-gets), Claude Code puede compactarla poco antes de que expire la caché. Para desactivar la compactación por inactividad, establece [`idleCompaction`](/docs/es/settings-reference#idlecompaction) en `false`, lo que requiere Claude Code v2.1.290 o posterior.

215 

214<h3 id="accumulating-many-images">216<h3 id="accumulating-many-images">

215 Acumular muchas imágenes217 Acumular muchas imágenes

216</h3>218</h3>

Details

261 261 

262Las verificaciones biométricas se ejecutan en el dispositivo a través del sistema operativo o navegador, el mismo mecanismo que el inicio de sesión con passkey. Anthropic nunca recibe ni almacena huellas dactilares, datos faciales ni ninguna otra información biométrica. Solo se almacenan la clave pública del dispositivo y metadatos básicos como nombre de pantalla, plataforma y hora de inscripción.262Las verificaciones biométricas se ejecutan en el dispositivo a través del sistema operativo o navegador, el mismo mecanismo que el inicio de sesión con passkey. Anthropic nunca recibe ni almacena huellas dactilares, datos faciales ni ninguna otra información biométrica. Solo se almacenan la clave pública del dispositivo y metadatos básicos como nombre de pantalla, plataforma y hora de inscripción.

263 263 

264El ajuste se aplica a Remote Control tanto en Claude Code como en [Cowork](https://claude.com/docs/cowork/overview). Esta página cubre la parte de Claude Code. El chat regular de Claude, Claude Code en la terminal y el uso de API no se ven afectados.264El ajuste se aplica a Remote Control en Claude Code y al acceso a Computer en [Cowork](https://claude.com/docs/cowork/overview). Esta página cubre la parte de Claude Code. El chat regular de Claude, Claude Code en la terminal y el uso de API no se ven afectados.

265 265 

266<h3 id="enable-trusted-devices-for-your-organization">266<h3 id="enable-trusted-devices-for-your-organization">

267 Habilite Trusted Devices para una organización Team o Enterprise267 Habilite Trusted Devices para una organización Team o Enterprise

routines.md +28 −15

Details

52 52 

53El formulario de creación configura el prompt de la rutina, repositorios, entorno, conectores y disparadores.53El formulario de creación configura el prompt de la rutina, repositorios, entorno, conectores y disparadores.

54 54 

55Las rutinas se ejecutan de forma autónoma como sesiones completas de Claude Code en la nube: no hay selector de modo de permiso, y la sesión ejecuta comandos de shell, usa [skills](/docs/es/skills) comprometidas con el repositorio clonado y llama a cualquier conector que incluya, todo sin detenerse para obtener aprobación aparte de algunas acciones de [artefactos](/docs/es/artifacts).55Las rutinas se ejecutan de forma autónoma como sesiones completas de Claude Code en la nube: no hay selector de modo de permisos, y la sesión ejecuta comandos de shell, usa los [skills](/docs/es/skills) incluidos en commits del repositorio clonado y llama a cualquier conector que incluyas, todo sin detenerse para obtener aprobación, salvo en algunas [acciones de artefactos](#when-a-run-publishes-an-artifact-without-asking).

56 56 

57Lo que una rutina puede alcanzar está determinado por los repositorios que seleccione, el [acceso a la red del entorno](/docs/es/cloud-environments) y variables, y los conectores que incluya. Delimite cada uno de esos a lo que la rutina realmente necesita.57Lo que una rutina puede alcanzar está determinado por los repositorios que seleccione, el [acceso a la red del entorno](/docs/es/cloud-environments) y variables, y los conectores que incluya. Delimite cada uno de esos a lo que la rutina realmente necesita.

58 58 

59Cuando el cronograma de la rutina o **Run now** inicia una ejecución, Claude republica un artefacto existente sin preguntar solo cuando se cumplen todas estas condiciones:

60 

61* Puede editar el artefacto y pertenece a su propia organización

62* El artefacto no se comparte públicamente

63* Si el artefacto se comparte con personas específicas u su organización, sus espectadores no ven automáticamente cada nueva versión

64* La publicación lleva solo la página, sin archivos de apoyo ni nada más agregado, y no fuerza una versión más nueva

65* La página no contiene una concesión que vaya más allá de la página, como [llamadas de conectores](/docs/es/artifacts#pull-live-data-with-mcp-connectors)

66 

67En todos los demás casos, incluida la publicación de un nuevo artefacto, Claude pregunta primero. Cuando el trabajo de una rutina es mantener una página actual, déle un artefacto que ya haya publicado.

68 

69Las rutinas pertenecen a su cuenta individual de claude.ai. No se comparten con compañeros de equipo y sus ejecuciones cuentan contra los [límites y uso](#usage-and-limits) de su cuenta. Cualquier cosa que una rutina haga a través de su identidad de GitHub conectada o conectores aparece como usted: los commits y las solicitudes de extracción llevan su usuario de GitHub, y los mensajes de Slack, tickets de Linear u otras acciones de conectores utilizan sus cuentas vinculadas para esos servicios.59Las rutinas pertenecen a su cuenta individual de claude.ai. No se comparten con compañeros de equipo y sus ejecuciones cuentan contra los [límites y uso](#usage-and-limits) de su cuenta. Cualquier cosa que una rutina haga a través de su identidad de GitHub conectada o conectores aparece como usted: los commits y las solicitudes de extracción llevan su usuario de GitHub, y los mensajes de Slack, tickets de Linear u otras acciones de conectores utilizan sus cuentas vinculadas para esos servicios.

70 60 

71<h3 id="create-from-the-web">61<h3 id="create-from-the-web">


93 Elija un [entorno en la nube](/docs/es/cloud-environments) para la rutina. Los entornos controlan a qué tiene acceso la sesión en la nube:83 Elija un [entorno en la nube](/docs/es/cloud-environments) para la rutina. Los entornos controlan a qué tiene acceso la sesión en la nube:

94 84 

95 * **Network access**: establezca el nivel de acceso a Internet disponible durante cada ejecución85 * **Network access**: establezca el nivel de acceso a Internet disponible durante cada ejecución

96 * **Environment variables**: proporciona valores que Claude pueda usar durante cada ejecución. Son [visibles para cualquiera que use el entorno](/docs/es/cloud-environments#what-carries-over-from-your-setup), por lo que en los planes Pro y Max, almacena las claves de las API que Claude llama durante una ejecución como [secretos de red](/docs/es/cloud-environments#add-network-secrets) en su lugar. Esa sección también enumera las solicitudes que nunca reciben un secreto86 * **Environment variables**: proporciona valores que Claude pueda usar durante cada ejecución. Son [visibles para cualquiera que use el entorno](/docs/es/cloud-environments#what-carries-over-from-your-setup), por lo que en un entorno alojado por Anthropic, almacena las claves de las API que Claude llama durante una ejecución como [secretos de red](/docs/es/cloud-environments#add-network-secrets) en su lugar. Esa sección también enumera las solicitudes que nunca reciben un secreto

97 * **Setup script**: instale dependencias y herramientas que la rutina necesita. El resultado se [almacena en caché](/docs/es/cloud-environments#environment-caching), por lo que el script no se vuelve a ejecutar en cada sesión87 * **Setup script**: instale dependencias y herramientas que la rutina necesita. El resultado se [almacena en caché](/docs/es/cloud-environments#environment-caching), por lo que el script no se vuelve a ejecutar en cada sesión

98 88 

99 Se proporciona un entorno **Default** con acceso a la red **Trusted**, que permite solo el [conjunto predeterminado](/docs/es/cloud-environments#default-allowed-domains) de registros de paquetes, API de proveedores de nube, registros de contenedores y dominios de desarrollo comunes a través de la red de la sesión. Los conectores que agregue a la rutina alcanzan sus servicios a través de los servidores de Anthropic, por lo que no necesitan cambios en la lista de permitidos. Si su rutina necesita alcanzar sus propios servicios directamente o un dominio fuera de esa lista, edite el [acceso a la red](/docs/es/cloud-environments#network-access) del entorno antes de ejecutar. Para usar un entorno separado, [cree uno](/docs/es/cloud-environments#configure-your-environment) primero.89 Se proporciona un entorno **Default** con acceso a la red **Trusted**, que permite solo el [conjunto predeterminado](/docs/es/cloud-environments#default-allowed-domains) de registros de paquetes, API de proveedores de nube, registros de contenedores y dominios de desarrollo comunes a través de la red de la sesión. Los conectores que agregue a la rutina alcanzan sus servicios a través de los servidores de Anthropic, por lo que no necesitan cambios en la lista de permitidos. Si su rutina necesita alcanzar sus propios servicios directamente o un dominio fuera de esa lista, edite el [acceso a la red](/docs/es/cloud-environments#network-access) del entorno antes de ejecutar. Para usar un entorno separado, [cree uno](/docs/es/cloud-environments#configure-your-environment) primero.


182 172 

183Un disparador de API proporciona a una rutina un punto final HTTP dedicado. POSTear al punto final con el token de portador de la rutina inicia una nueva sesión y devuelve una URL de sesión. Úselo para conectar Claude Code en sistemas de alertas, canalizaciones de implementación, herramientas internas o en cualquier lugar donde pueda hacer una solicitud HTTP autenticada.173Un disparador de API proporciona a una rutina un punto final HTTP dedicado. POSTear al punto final con el token de portador de la rutina inicia una nueva sesión y devuelve una URL de sesión. Úselo para conectar Claude Code en sistemas de alertas, canalizaciones de implementación, herramientas internas o en cualquier lugar donde pueda hacer una solicitud HTTP autenticada.

184 174 

185Los disparadores de API se agregan a una rutina existente desde la web. La CLI actualmente no puede crear ni revocar tokens.175Los disparadores de API se agregan a una rutina existente desde la web. La CLI actualmente no puede crear, regenerar ni eliminar tokens.

186 176 

187<Steps>177<Steps>

188 <Step title="Abrir la rutina para editar">178 <Step title="Abrir la rutina para editar">


202 </Step>192 </Step>

203</Steps>193</Steps>

204 194 

205Cada rutina tiene su propio token, limitado a activar solo esa rutina. Para rotarlo o revocarlo, vuelva al mismo modal y haga clic en **Regenerate** o **Revoke**.195Cada rutina tiene su propio token, limitado a activar solo esa rutina. Para desactivar el acceso por API o rotar el token, vuelve al mismo modal:

196 

197* **Desactivar el acceso por API**: haz clic en **Delete token**, el icono de papelera junto a **Regenerate**

198* **Rotar el token**: haz clic en **Regenerate**

206 199 

207<h4 id="trigger-a-routine">200<h4 id="trigger-a-routine">

208 Activar una rutina201 Activar una rutina


379 372 

380Para administrar o agregar conectores fuera del formulario de rutina, visite [claude.ai/customize/connectors](https://claude.ai/customize/connectors) o use `/schedule update` en la CLI.373Para administrar o agregar conectores fuera del formulario de rutina, visite [claude.ai/customize/connectors](https://claude.ai/customize/connectors) o use `/schedule update` en la CLI.

381 374 

375<h3 id="when-a-run-publishes-an-artifact-without-asking">

376 Cuando una ejecución publica un artefacto sin preguntar

377</h3>

378 

379Cuando el horario de una rutina o **Run now** inicia una ejecución, Claude puede publicar un nuevo [artefacto](/docs/es/artifacts) sin preguntar. El nuevo artefacto solo es visible para ti hasta que lo [compartas](/docs/es/artifacts#share-an-artifact). Si la publicación declara capacidades de tiempo de ejecución para la página, como [llamadas a conectores](/docs/es/artifacts#pull-live-data-with-mcp-connectors) o [descargas de archivos](/docs/es/artifacts#offer-a-file-download), Claude pregunta primero.

380 

381En esas ejecuciones, Claude vuelve a publicar un artefacto existente sin preguntar solo cuando se cumplen todas estas condiciones:

382 

383* Puedes editar el artefacto y pertenece a tu propia organización

384* Si la publicación incluye más que la página, como archivos de soporte, eres propietario del artefacto

385* El artefacto no está compartido públicamente

386* Si el artefacto está compartido con personas específicas o con tu organización, sus lectores no ven automáticamente cada nueva versión

387* La publicación no sobrescribe forzosamente una versión más reciente

388* La publicación no declara capacidades de tiempo de ejecución para la página

389* La página existente no tiene ningún permiso concedido que vaya más allá de la página, como [llamadas a conectores](/docs/es/artifacts#pull-live-data-with-mcp-connectors)

390 

391En cualquier otro caso, incluida una ejecución iniciada por un disparador de API o de GitHub, Claude pregunta primero.

392 

393Cuando el trabajo de una rutina es mantener una página actualizada, dale un artefacto que ya hayas publicado.

394 

382<h3 id="environments-and-network-access">395<h3 id="environments-and-network-access">

383 Entornos y acceso a la red396 Entornos y acceso a la red

384</h3>397</h3>


403 </Step>416 </Step>

404 417 

405 <Step title="Cambia el nivel de acceso a la red">418 <Step title="Cambia el nivel de acceso a la red">

406 En el diálogo **Edit environment**, cambia **Network access** a **Custom** e ingresa tus dominios en **Allowed domains**. Marca **Also include default list of common package managers** para mantener la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) junto con tus dominios personalizados. Selecciona **Full** en su lugar para tener acceso sin restricciones.419 En el diálogo **Edit cloud environment**, cambia **Network access** a **Custom** e ingresa tus dominios en **Allowed domains**. Marca **Also include default list of common package managers** para mantener la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) junto con tus dominios personalizados. Selecciona **Full** en su lugar para tener acceso sin restricciones.

407 </Step>420 </Step>

408 421 

409 <Step title="Guardar">422 <Step title="Guardar">

Details

79 79 

80En una sesión donde la [herramienta Monitor está disponible](/docs/es/tools-reference#monitor-tool), Claude puede usarla directamente cuando solicita un horario `/loop` dinámico. Monitor ejecuta un script de fondo y transmite cada línea de salida, lo que evita el sondeo por completo y a menudo es más eficiente en tokens y más receptivo que volver a ejecutar un prompt en un intervalo.80En una sesión donde la [herramienta Monitor está disponible](/docs/es/tools-reference#monitor-tool), Claude puede usarla directamente cuando solicita un horario `/loop` dinámico. Monitor ejecuta un script de fondo y transmite cada línea de salida, lo que evita el sondeo por completo y a menudo es más eficiente en tokens y más receptivo que volver a ejecutar un prompt en un intervalo.

81 81 

82Un bucle programado dinámicamente aparece en su [lista de tareas programadas](#manage-scheduled-tasks) como cualquier otra tarea, por lo que puede enumerarla o cancelarla de la misma manera. Las [reglas de jitter](#jitter) no se aplican a ella, pero el [vencimiento de siete días](#seven-day-expiry) sí.82Un bucle programado dinámicamente aparece en tu [lista de tareas programadas](#manage-scheduled-tasks) como cualquier otra tarea, por lo que puedes enumerarlo o cancelarlo de la misma manera. La lista muestra su despertar pendiente como una tarea de una sola ejecución, por lo que un despertar programado para `:00` o `:30` puede [ejecutarse un poco antes](#when-a-one-shot-task-runs-early). El [vencimiento de siete días](#seven-day-expiry) también se aplica al bucle.

83 83 

84<span id="loop-provider-differences" />84<span id="loop-provider-differences" />

85 85 


174| Herramienta | Propósito |174| Herramienta | Propósito |

175| :- | :- |175| :- | :- |

176| `CronCreate` | Programar una nueva tarea. Acepta una expresión cron de 5 campos, el prompt a ejecutar y si se repite o se ejecuta una sola vez. |176| `CronCreate` | Programar una nueva tarea. Acepta una expresión cron de 5 campos, el prompt a ejecutar y si se repite o se ejecuta una sola vez. |

177| `CronList` | Enumerar todas las tareas programadas con sus IDs, horarios y prompts. |177| `CronList` | Enumerar las tareas programadas con sus IDs, horarios, [próximas horas de ejecución](#jitter) y prompts. |

178| `CronDelete` | Cancelar una tarea por ID. |178| `CronDelete` | Cancelar una tarea por ID. |

179 179 

180Cada tarea programada tiene un ID de 8 caracteres que puede pasar a `CronDelete`. Una sesión puede contener hasta 50 tareas programadas a la vez.180Cada tarea programada tiene un ID de 8 caracteres que puede pasar a `CronDelete`. Una sesión puede contener hasta 50 tareas programadas a la vez.


193 193 

194Una tarea programada puede ejecutarse en un momento distinto al que indica su programación. Si las tareas de cada sesión se ejecutaran exactamente según lo programado, muchas de ellas llamarían a la API en el mismo momento, por lo que Claude Code desplaza la hora de ejecución de cada tarea. Las tareas recurrentes se ejecutan con retraso, excepto una tarea que se ejecuta cada cinco minutos, escrita como `*/5 * * * *`. Las tareas únicas programadas en punto o a la media hora se ejecutan un poco antes.194Una tarea programada puede ejecutarse en un momento distinto al que indica su programación. Si las tareas de cada sesión se ejecutaran exactamente según lo programado, muchas de ellas llamarían a la API en el mismo momento, por lo que Claude Code desplaza la hora de ejecución de cada tarea. Las tareas recurrentes se ejecutan con retraso, excepto una tarea que se ejecuta cada cinco minutos, escrita como `*/5 * * * *`. Las tareas únicas programadas en punto o a la media hora se ejecutan un poco antes.

195 195 

196Para ver cuándo le toca a una tarea su próxima ejecución, lee la fila debajo de la llamada `CronCreate` de Claude en tu terminal. La fila muestra esa hora después de la programación, por ejemplo `next run 10:21 AM`. Para volver a comprobarlo más tarde, [pídele a Claude que liste tus tareas](#manage-scheduled-tasks) y busca `next run` en las filas debajo de la llamada `CronList`. Las horas de próxima ejecución en estas filas requieren Claude Code v2.1.299 o posterior.

197 

196<h4 id="how-late-a-recurring-task-runs">198<h4 id="how-late-a-recurring-task-runs">

197 Cuánto se retrasa una tarea recurrente199 Cuánto se retrasa una tarea recurrente

198</h4>200</h4>

Details

1001. Un ejecutor con capacidad libre reclama la sesión y mantiene un arrendamiento en ella.1001. Un ejecutor con capacidad libre reclama la sesión y mantiene un arrendamiento en ella.

1012. El ejecutor clona el repositorio en su directorio de trabajo e genera un proceso secundario de Claude Code.1012. El ejecutor clona el repositorio en su directorio de trabajo e genera un proceso secundario de Claude Code.

1023. El secundario transmite eventos de vuelta sobre HTTPS mientras el ejecutor sigue sondeando; cada sondeo actualiza el arrendamiento y funciona como el latido del corazón.1023. El secundario transmite eventos de vuelta sobre HTTPS mientras el ejecutor sigue sondeando; cada sondeo actualiza el arrendamiento y funciona como el latido del corazón.

1034. Si el ejecutor deja de sondear, su arrendamiento caduca después de aproximadamente 60 segundos, y el servidor vuelve a encolar la sesión para otro ejecutor en unos pocos minutos.1034. Si el ejecutor deja de sondear, su arrendamiento caduca después de aproximadamente 60 segundos. Luego, el servidor puede tardar unos minutos, y a veces más, en volver a encolar la sesión para otro ejecutor.

104 104 

105El ejecutor da a cada solicitud de sondeo 10 segundos. Cuando una solicitud agota el tiempo de espera, se pierde o recibe una respuesta que el ejecutor no puede analizar, el ejecutor sigue sirviendo sus sesiones activas y reintenta después de un segundo o dos en lugar de esperar al siguiente sondeo programado. Por ejemplo, un proxy de interceptación que responde al sondeo con su propia página produce una respuesta que el ejecutor no puede analizar. Cada vez que otra solicitud falla de una de esas maneras, el ejecutor duplica la brecha antes del siguiente reintento, hasta 20 segundos, y acorta la brecha siempre que el arrendamiento esté cerca de expirar.105El ejecutor da a cada solicitud de sondeo 10 segundos. Cuando una solicitud agota el tiempo de espera, se pierde o recibe una respuesta que el ejecutor no puede analizar, el ejecutor sigue sirviendo sus sesiones activas y reintenta después de un segundo o dos en lugar de esperar al siguiente sondeo programado. Por ejemplo, un proxy de interceptación que responde al sondeo con su propia página produce una respuesta que el ejecutor no puede analizar. Cada vez que otra solicitud falla de una de esas maneras, el ejecutor duplica la brecha antes del siguiente reintento, hasta 20 segundos, y acorta la brecha siempre que el arrendamiento esté cerca de expirar.

106 106 

Details

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. |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. |

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. |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. |

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). |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). |

43| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Ruta a un archivo en `CLAUDE_CONFIG_DIR` que contiene las definiciones de servidores MCP que el plano de control de Anthropic entregó para esta sesión. Si tu contenedor reconstruye el entorno del hijo, conserva esta variable. Sin ella, cuando el plano de control actualiza los servidores entregados, el hijo cierra cualquier servidor stdio, HTTP o SSE que tu contenedor agregue con [`--mcp-config`](/docs/es/cli-reference#cli-flags) y que no esté en la actualización. Requiere Claude Code v2.1.299 o posterior. |

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. |44| `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. |

44| `CLAUDE_CODE_OAUTH_TOKEN` | El token de acceso OAuth de corta duración que el hijo usa para inferencia de modelo, limitado a inferencia de modelo y carga de archivos solamente, con una vida útil de aproximadamente 30 minutos. El ejecutor lo vuelve a emitir antes del vencimiento y entrega la rotación a través del stdin del hijo, por lo que un contenedor que no [mantiene stdin adjunto](#keep-stdin-and-file-descriptor-3-attached) solo ve el valor inicial. No confíes en la lista de IP permitidas de tu organización para limitar el uso de este token: trátalo como una credencial de portador que permanece utilizable durante aproximadamente 30 minutos si se filtra, y no lo registres, no lo escribas en disco ni lo reenvíes fuera del contenedor de sesión. |45| `CLAUDE_CODE_OAUTH_TOKEN` | El token de acceso OAuth de corta duración que el hijo usa para inferencia de modelo, limitado a inferencia de modelo y carga de archivos solamente, con una vida útil de aproximadamente 30 minutos. El ejecutor lo vuelve a emitir antes del vencimiento y entrega la rotación a través del stdin del hijo, por lo que un contenedor que no [mantiene stdin adjunto](#keep-stdin-and-file-descriptor-3-attached) solo ve el valor inicial. No confíes en la lista de IP permitidas de tu organización para limitar el uso de este token: trátalo como una credencial de portador que permanece utilizable durante aproximadamente 30 minutos si se filtra, y no lo registres, no lo escribas en disco ni lo reenvíes fuera del contenedor de sesión. |

45 46 


51 Dar un valor predeterminado a las variables que pueden no estar establecidas52 Dar un valor predeterminado a las variables que pueden no estar establecidas

52</h3>53</h3>

53 54 

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`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 56 

56Dondequiera que un shell expanda el enlace del hilo de Slack, toma estas precauciones:57<h3 id="quote-the-arguments-and-variables-your-script-expands">

58 Poner entre comillas los argumentos y las variables que expande tu script

59</h3>

60 

61Pon entre comillas cada argumento y cada variable que el ejecutor pasa a tu contenedor o [hook `command`](#command). Algunos valores contienen caracteres que un shell interpreta, porque contienen JSON, oraciones completas o una [regla de permisos](/docs/es/permissions#permission-rule-syntax) como `Bash(npm run test *)`.

57 62 

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:-}"`.63* **Argumentos**: pásalos como `"$@"`

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.64* **Variables**: pon cada una entre comillas, como en `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`. El enlace del hilo de Slack, por ejemplo, puede contener `?` y `&`.

65* **Cadenas de `eval` y `sh -c`**: no sustituyas un 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 66 

61<h3 id="keep-stdin-and-file-descriptor-3-attached">67<h3 id="keep-stdin-and-file-descriptor-3-attached">

62 Mantener stdin y descriptor de archivo 3 adjuntos68 Mantener stdin y descriptor de archivo 3 adjuntos


136| `CLAUDE_RUNNER_SESSION_ID` | ID de sesión en forma etiquetada `session_...`, para registro y correlación |142| `CLAUDE_RUNNER_SESSION_ID` | ID de sesión en forma etiquetada `session_...`, para registro y correlación |

137| `CLAUDE_RUNNER_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica |143| `CLAUDE_RUNNER_SESSION_UUID` | El mismo ID de sesión en forma UUID canónica |

138| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |144| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |

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. |145| `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. |

140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |146| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |

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. |147| `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. |

142 148 


159 165 

160El hook falla cuando sale con código distinto de cero, o sale con 0 sin dejar un checkout utilizable:166El hook falla cuando sale con código distinto de cero, o sale con 0 sin dejar un checkout utilizable:

161 167 

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.168* **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. Escribe el motivo en stderr como una sola línea breve, escríbelo al final y luego sal con un código distinto de cero. No imprimas secretos en stderr, y quita `set -x` antes de desplegar el hook.

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.169* **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 170 

165Cuando el hook tiene éxito, el ejecutor elimina la ruta de checkout después de que la sesión termina.171Cuando el hook tiene éxito, el ejecutor elimina la ruta de checkout después de que la sesión termina.


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. |186| `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. |

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 |187| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Ruta al registro de depuración de la sesión, aún en disco mientras se ejecuta el hook |

182| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |188| `CLAUDE_RUNNER_API_BASE_URL` | URL base de API de Anthropic para llamadas limitadas a sesión |

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. |189| `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. |

184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |190| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | El token de acceso de sesión, para llamadas de API limitadas a sesión |

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. |191| `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. |

186 192 


3293. **Usa el contrato de código de salida.** Sal con el estado que corresponda al resultado:3353. **Usa el contrato de código de salida.** Sal con el estado que corresponda al resultado:

330 336 

331 * **Salida 0**: enviado.337 * **Salida 0**: enviado.

332 * **Salida 1**: fallo reintentable. La sesión espera un tiempo y se vuelve a ofrecer.338 * **Salida 1, o si sigue en ejecución cuando termina `--hook-timeout`**: 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.339 * **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 340 

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).341 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).


341 347 

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.348Una 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.

343 349 

350<h4 id="make-on-demand-runners-exit-when-idle">

351 Haz que los ejecutores bajo demanda salgan cuando estén inactivos

352</h4>

353 

354De forma predeterminada, un ejecutor que inicia tu hook no sale cuando termina el turno de su sesión, por lo que la carga de trabajo que enviaste sigue en ejecución. Para que los ejecutores salgan, haz que tu hook pase estos [flags del ejecutor](/docs/es/self-hosted-environments-reference#runner-cli-flags):

355 

356| Flag, con un valor de ejemplo | A quién pasarlo | Qué hace |

357| :- | :- | :- |

358| `--release-idle-session-min 30` | Cada ejecutor que inicia tu hook | El ejecutor libera su sesión después de esa cantidad de minutos de inactividad y luego sale con 0. La sesión se reanuda cuando su usuario envía su siguiente mensaje, pero [el trabajo que no había enviado con push se pierde](/docs/es/self-hosted-environments-deploy#additional-limitations). |

359| `--kill-session-after-min 480` | Cada ejecutor que inicia tu hook | Limita cada sesión a esa cantidad de minutos, como respaldo para las [sesiones que no cuentan como inactivas](/docs/es/self-hosted-environments-deploy#some-sessions-don’t-count-as-idle), así que establécelo por encima de tu sesión más larga esperada |

360| `--exit-if-unused-min 60` | Ejecutores en espera, que tu hook inicia para solicitudes de precalentamiento | Un ejecutor en espera que nunca toma una sesión sale después de esa cantidad de minutos. Si estableces [`--min-idle`](/docs/es/self-hosted-environments-reference#orchestrator-cli-flags), obtienes un reemplazo a menos que el ejecutor en espera fuera excedente, así que usa un valor muy superior a tu tiempo de arranque. |

361 

362Elimina la carga de trabajo cuando el ejecutor salga, por ejemplo, estableciendo `ttlSecondsAfterFinished` en un Job de Kubernetes o haciendo que el script de inicio de la VM elimine la VM después.

363 

344<h4 id="keep-transient-failures-retryable-in-a-shell-hook">364<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

345 Mantén los fallos transitorios reintentables en un hook de shell365 Mantén los fallos transitorios reintentables en un hook de shell

346</h4>366</h4>


484* El [archivo MCP administrado](/docs/es/managed-mcp) de alcance empresarial en su ruta estándar del sistema: `/etc/claude-code/managed-mcp.json` en hosts de runner Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` en hosts macOS. Úsalo para flotas restringidas donde solo pueden cargarse los servidores que indica el administrador. Consulta [control exclusivo con managed-mcp.json](/docs/es/managed-mcp#exclusive-control-with-managed-mcp-json) para conocer las reglas de precedencia. Cuando este archivo está en el host del runner, Claude Code omite los servidores MCP que el plano de control de Anthropic entrega a una sesión, incluidos los conectores de claude.ai, y los nombra en una advertencia en el stderr del proceso hijo de la sesión, que el runner registra en el nivel de registro `debug`. Antes de la v2.1.229, esas sesiones terminaban al iniciar con `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.504* El [archivo MCP administrado](/docs/es/managed-mcp) de alcance empresarial en su ruta estándar del sistema: `/etc/claude-code/managed-mcp.json` en hosts de runner Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` en hosts macOS. Úsalo para flotas restringidas donde solo pueden cargarse los servidores que indica el administrador. Consulta [control exclusivo con managed-mcp.json](/docs/es/managed-mcp#exclusive-control-with-managed-mcp-json) para conocer las reglas de precedencia. Cuando este archivo está en el host del runner, Claude Code omite los servidores MCP que el plano de control de Anthropic entrega a una sesión, incluidos los conectores de claude.ai, y los nombra en una advertencia en el stderr del proceso hijo de la sesión, que el runner registra en el nivel de registro `debug`. Antes de la v2.1.229, esas sesiones terminaban al iniciar con `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.

485* La clave [`managedMcpServers`](/docs/es/settings-reference#managedmcpservers) en la [configuración administrada](/docs/es/managed-settings) del host del runner: proporciona servidores HTTP y SSE sin tomar el control exclusivo, por lo que los servidores de las demás fuentes se siguen cargando. Requiere Claude Code v2.1.259 o posterior.505* La clave [`managedMcpServers`](/docs/es/settings-reference#managedmcpservers) en la [configuración administrada](/docs/es/managed-settings) del host del runner: proporciona servidores HTTP y SSE sin tomar el control exclusivo, por lo que los servidores de las demás fuentes se siguen cargando. Requiere Claude Code v2.1.259 o posterior.

486* `<repo>/.mcp.json`: alcance de proyecto. Haz commit del archivo en el repositorio; sus servidores se aprueban automáticamente en las sesiones en la nube. En una sesión con varios repositorios, [se carga como máximo el archivo de un repositorio](#repository-settings-in-sessions-with-several-repositories).506* `<repo>/.mcp.json`: alcance de proyecto. Haz commit del archivo en el repositorio; sus servidores se aprueban automáticamente en las sesiones en la nube. En una sesión con varios repositorios, [se carga como máximo el archivo de un repositorio](#repository-settings-in-sessions-with-several-repositories).

507* Un archivo [`--mcp-config`](/docs/es/cli-reference#cli-flags) desde tu script contenedor: agrega el flag después de `"$@"`, como en `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --mcp-config /etc/claude/mcp.json`. Para que los servidores de ese archivo sigan ejecutándose cuando los servidores entregados a la sesión se actualicen a mitad de la sesión, haz que tu script contenedor pase el [entorno completo](#wrapper-scripts) al proceso hijo, como hace `exec`. Antes de la v2.1.299, los servidores stdio, HTTP y SSE de ese archivo se cerraban en la primera actualización de ese tipo que no los nombraba.

487 508 

488Cuando la entrega de conectores está habilitada para tu organización, el plano de control de Anthropic entrega los conectores que configuraste en claude.ai a las sesiones creadas de forma interactiva mediante configuración MCP proporcionada por el servidor, enrutada a través de `api.anthropic.com`. Las sesiones creadas de forma programática, como los [envíos desde la CLI](/docs/es/self-hosted-environments-testing#run-the-test-loop), no reciben la entrega de conectores; en su lugar, proporciónales servidores MCP mediante cualquiera de las otras fuentes que enumera esta sección. El token OAuth del proceso hijo no incluye un alcance para obtener conectores directamente, así que el proceso hijo no intenta obtenerlos por sí mismo; la entrega la gestiona el servidor.509Cuando la entrega de conectores está habilitada para tu organización, el plano de control de Anthropic entrega los conectores que configuraste en claude.ai a las sesiones creadas de forma interactiva mediante configuración MCP proporcionada por el servidor, enrutada a través de `api.anthropic.com`. Las sesiones creadas de forma programática, como los [envíos desde la CLI](/docs/es/self-hosted-environments-testing#run-the-test-loop), no reciben la entrega de conectores; en su lugar, proporciónales servidores MCP mediante cualquiera de las otras fuentes que enumera esta sección. El token OAuth del proceso hijo no incluye un alcance para obtener conectores directamente, así que el proceso hijo no intenta obtenerlos por sí mismo; la entrega la gestiona el servidor.

489 510 

Details

182* Un `credential.helper` que devuelve un token de alcance mínimo182* Un `credential.helper` que devuelve un token de alcance mínimo

183* `GIT_SSH_COMMAND` apuntando a una clave de alcance estrecho183* `GIT_SSH_COMMAND` apuntando a una clave de alcance estrecho

184 184 

185Cualquier mecanismo que configure debe funcionar sin un aviso, porque el clon integrado del runner y la obtención desactivan los avisos que git, SSH, y Git Credential Manager mostrarían de otra manera:185<span id="git-must-work-without-a-prompt" />Cualquier mecanismo que configures debe funcionar sin pedir nada, porque el clon y el fetch integrados del runner desactivan las solicitudes que git, SSH y Git Credential Manager mostrarían de otro modo:

186 186 

187* El runner establece `GIT_TERMINAL_PROMPT=0`, por lo que git no pide un nombre de usuario o contraseña.187* El runner establece `GIT_TERMINAL_PROMPT=0`, por lo que git no pide un nombre de usuario o contraseña.

188* El runner ejecuta SSH con `BatchMode=yes`, añadido a su `GIT_SSH_COMMAND` si establece uno, por lo que SSH no pide una frase de contraseña o confirmación de host.188* El runner ejecuta SSH con `BatchMode=yes`, añadido a su `GIT_SSH_COMMAND` si establece uno, por lo que SSH no pide una frase de contraseña o confirmación de host.


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).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.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).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).215* **Cuentas de GitHub conectadas**: pide a cada persona que crea sesiones de usuario con un repositorio que [conecte GitHub](/docs/es/web-quickstart#connect-github). Sin su propia conexión, esas sesiones [no se inician](#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.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.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).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). Mantén esas credenciales fuera de la [configuración global de git](#git-proxy-replaces-global-git-config), y consulta [Incluye la configuración de git en tu imagen](#ship-git-config-in-your-image) para conocer formas de proporcionarlas.

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.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 220 

221<span id="git-proxy-replaces-global-git-config" />221<span id="git-proxy-replaces-global-git-config" />


356Las URLs de repositorio llegan desde el plano de control como HTTPS, con el nombre de host de tu host de git; para GitHub Enterprise, es el nombre de host que configuraste para la [integración de GitHub Enterprise](/docs/es/github-enterprise-server) en claude.ai. Dos flags repetibles reescriben esas URLs antes del clon:356Las URLs de repositorio llegan desde el plano de control como HTTPS, con el nombre de host de tu host de git; para GitHub Enterprise, es el nombre de host que configuraste para la [integración de GitHub Enterprise](/docs/es/github-enterprise-server) en claude.ai. Dos flags repetibles reescriben esas URLs antes del clon:

357 357 

358* `--git-host-rewrite <from>=<to>`: para DNS de horizonte dividido, donde Anthropic alcanza su host de git a través de un nombre de host externo pero los runners deben usar uno interno358* `--git-host-rewrite <from>=<to>`: para DNS de horizonte dividido, donde Anthropic alcanza su host de git a través de un nombre de host externo pero los runners deben usar uno interno

359* `--git-ssh-rewrite <host>`: para hosts de git que solo aceptan SSH, reescribiendo `https://<host>/owner/repo` a `git@<host>:owner/repo`359* `--git-ssh-rewrite <host>`: para hosts de git que solo aceptan SSH, o un host de runner que solo tiene una clave SSH. Por ejemplo, para clonar repositorios de github.com por SSH, agrega `--git-ssh-rewrite github.com` al comando del runner. El runner entonces reescribe `https://github.com/owner/repo` a `git@github.com:owner/repo`. SSH debe [conectarse sin pedir nada](#git-must-work-without-a-prompt).

360 360 

361La reescritura de host se ejecuta primero, así que enumere el nombre de host interno en `--git-ssh-rewrite` si necesita ambos. Para control total sobre el checkout, use un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout).361La reescritura de host se ejecuta primero, así que enumere el nombre de host interno en `--git-ssh-rewrite` si necesita ambos. Para control total sobre el checkout, use un [hook de ciclo de vida `checkout`](/docs/es/self-hosted-environments-configuration#checkout).

362 362 


578 578 

579Dale al tiempo de parada de tu host al menos la suma de tres partes: los `n` minutos que configuras, la gracia posterior a la liberación, y el drenaje que describe [Tiempo de apagado](#shutdown-timing). Con la configuración predeterminada, la gracia posterior a la liberación es 75 segundos y el drenaje tarda hasta 80 segundos, así que deja `n` minutos más 155 segundos. El runner imprime esta suma al inicio siempre que `--defer-shutdown-max-min` está establecido.579Dale al tiempo de parada de tu host al menos la suma de tres partes: los `n` minutos que configuras, la gracia posterior a la liberación, y el drenaje que describe [Tiempo de apagado](#shutdown-timing). Con la configuración predeterminada, la gracia posterior a la liberación es 75 segundos y el drenaje tarda hasta 80 segundos, así que deja `n` minutos más 155 segundos. El runner imprime esta suma al inicio siempre que `--defer-shutdown-max-min` está establecido.

580 580 

581Si el tiempo de parada se agota antes de que el runner termine, el host mata el runner. Las sesiones que aún mantiene no obtienen ningún hook `post-session`. El runner no se desregistra, y el plano de control reencola las sesiones en unos pocos minutos. Si no puedes dar al tiempo de parada esa suma, deja `--defer-shutdown-max-min` sin establecer para que el runner drene en la primera señal en su lugar.581Si el tiempo de parada se agota antes de que el runner termine, las sesiones que aún mantiene no obtienen ningún hook `post-session`. El runner no se desregistra, así que el plano de control puede tardar unos minutos, y a veces más, en reencolar esas sesiones. Si no puedes dar al tiempo de parada esa suma, deja `--defer-shutdown-max-min` sin establecer para que el runner drene en la primera señal en su lugar.

582 582 

583<h3 id="what-reaches-a-running-post-session-hook">583<h3 id="what-reaches-a-running-post-session-hook">

584 Lo que alcanza un hook post-session en ejecución584 Lo que alcanza un hook post-session en ejecución


720 720 

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.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.

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.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.

723* **El runner se cierra al inicio con `RegisterRunner failed:` y un error de certificado TLS**: el error puede ser `self signed certificate in certificate chain`, por ejemplo. El runner no confía en la autoridad de certificación (CA) detrás del certificado que recibió, como ocurre detrás de un proxy que inspecciona TLS. Establece [`NODE_EXTRA_CA_CERTS`](/docs/es/network-config#custom-ca-certificates) en el entorno del runner con un archivo PEM que contenga la CA raíz del proxy.

724 

725 No necesitas establecerla de nuevo para las sesiones, que la heredan. Git no la lee: para clonar a través de ese proxy, establece también [`GIT_SSL_CAINFO`](#trust-a-private-certificate-authority-with-anthropic-managed-git).

726* **El orquestador registra `poll failed:` con un error de certificado TLS y sigue reintentando**: el orquestador no confía en la CA detrás del certificado que recibió, como ocurre detrás de un proxy que inspecciona TLS. Establece [`NODE_EXTRA_CA_CERTS`](/docs/es/network-config#custom-ca-certificates) en el entorno del orquestador con un archivo PEM que contenga la CA raíz del proxy. Establécela también para los runners que inicia tu hook `spawn-runner`.

727 

728 Por ejemplo, una línea puede terminar en `poll failed: self signed certificate in certificate chain — retrying in 1s`, con las palabras de la biblioteca TLS entre los dos puntos y el guion. Para confirmar la corrección, comprueba que `connected` sea `true` en el cuerpo de [`/healthz`](/docs/es/self-hosted-environments-reference#health-endpoint) del orquestador.

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).729* **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).

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.730* **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).731* **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).


741 Antes de v2.1.274, el runner dejaba de reintentar una obtención fallida después de algunos intentos y esperaba la siguiente programada. Un turno fallido no desencadenaba una obtención, por lo que cada turno fallaba con un 401 hasta la siguiente obtención programada.747 Antes de v2.1.274, el runner dejaba de reintentar una obtención fallida después de algunos intentos y esperaba la siguiente programada. Un turno fallido no desencadenaba una obtención, por lo que cada turno fallaba con un 401 hasta la siguiente obtención programada.

742* **El pod se mata a mitad del drenaje**: aumente `terminationGracePeriodSeconds` al menos al valor que el runner registra al inicio. Consulte [Shutdown timing](#shutdown-timing).748* **El pod se mata a mitad del drenaje**: aumente `terminationGracePeriodSeconds` al menos al valor que el runner registra al inicio. Consulte [Shutdown timing](#shutdown-timing).

743 749 

744Una vez que se inicializa el registro, el runner escribe su registro de ciclo de vida, incluidas las líneas `[runner:fatal]`, en stdout, y la salida de depuración en stderr, todo como líneas de texto sin formato en lugar de JSON. Las fallas de inicio descritas en las entradas de solución de problemas anteriores se imprimen en stderr antes de ese punto. Capture ambas secuencias con `--log-file`, que también permite que `self-hosted-runner doctor` las siga, o con la recopilación de registros de su plataforma.750Una vez que se inicializa el registro, el runner escribe su registro de ciclo de vida, incluidas las líneas `[runner:fatal]`, en stdout, y la salida de depuración en stderr, todo como líneas de texto sin formato en lugar de JSON. Las fallas del directorio base descritas en las entradas de solución de problemas anteriores se imprimen en stderr antes de ese punto. Captura ambas secuencias con `--log-file`, que también permite que `self-hosted-runner doctor` las siga, o con la recopilación de registros de tu plataforma.

745 751 

746Cada proceso secundario de sesión escribe un registro de depuración separado. En caso de fallo, el runner expone la cola del registro junto con la sesión en claude.ai/code. A menos que haya iniciado el runner con [`--remove-session-state`](/docs/es/self-hosted-environments-reference#runner-cli-flags), también mantiene el registro de una sesión fallida en el disco e imprime su ruta en el registro del runner.752Cada proceso secundario de sesión escribe un registro de depuración separado. En caso de fallo, el runner expone la cola del registro junto con la sesión en claude.ai/code. A menos que haya iniciado el runner con [`--remove-session-state`](/docs/es/self-hosted-environments-reference#runner-cli-flags), también mantiene el registro de una sesión fallida en el disco e imprime su ruta en el registro del runner.

747 753 

Details

25El lado de claude.ai necesita:25El lado de claude.ai necesita:

26 26 

27* **Allow self-hosted environments** activado por un [Owner](/docs/es/cloud-environments#organization-shared-environments) en la [página de administración **Cloud environments**](https://claude.ai/admin-settings/cloud-environments); el botón **New** no aparece hasta que esté activado. Si no tiene el rol, alguien que lo tenga puede crear el entorno y entregarle su secreto; los pasos de runner y terminal en esta página no necesitan ningún rol de claude.ai, y donde un paso verifica el estado en la interfaz de administración, las propias líneas de registro del runner le dan la misma señal.27* **Allow self-hosted environments** activado por un [Owner](/docs/es/cloud-environments#organization-shared-environments) en la [página de administración **Cloud environments**](https://claude.ai/admin-settings/cloud-environments); el botón **New** no aparece hasta que esté activado. Si no tiene el rol, alguien que lo tenga puede crear el entorno y entregarle su secreto; los pasos de runner y terminal en esta página no necesitan ningún rol de claude.ai, y donde un paso verifica el estado en la interfaz de administración, las propias líneas de registro del runner le dan la misma señal.

28* Una [conexión de GitHub](/docs/es/claude-code-on-the-web#github-authentication-options) para su organización, para que los desarrolladores puedan seleccionar repositorios cuando inicien sesiones.28* El [conector de GitHub](https://claude.ai/admin-settings/connectors) activado por un Owner, y la propia [conexión de GitHub](/docs/es/web-quickstart#connect-github) de cada desarrollador, para que puedan seleccionar repositorios de github.com cuando inicien sesiones.

29 29 

30<h3 id="host-and-network">30<h3 id="host-and-network">

31 Host y red31 Host y red


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 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. Una clave SSH por sí sola no es suficiente, porque el runner clona la URL `https://` del repositorio. Para clonar mediante SSH en su lugar, consulta [Reescribir URLs de git para redes privadas](/docs/es/self-hosted-environments-deploy#rewrite-git-urls-for-private-networks).

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* 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).

39 39 

40<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


105 105 

106 Elija un directorio base, reemplazando `<writable-dir>` en el comando runner a continuación con una ruta absoluta que el runner pueda escribir o crear. El runner crea el directorio al inicio, luego verifica repositorios y crea directorios por sesión bajo él. Sin `--base-dir` usa `/workspace`, que solo funciona si ese directorio ya existe y es escribible o inicia el runner como root.106 Elija un directorio base, reemplazando `<writable-dir>` en el comando runner a continuación con una ruta absoluta que el runner pueda escribir o crear. El runner crea el directorio al inicio, luego verifica repositorios y crea directorios por sesión bajo él. Sin `--base-dir` usa `/workspace`, que solo funciona si ese directorio ya existe y es escribible o inicia el runner como root.

107 107 

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).108 <Warning>

109 Usa un directorio dedicado al runner, no tu directorio home ni un directorio con tus propios clones. El runner trata lo que encuentre en `<writable-dir>/<repo-owner>/<repo>` como su propio clon, y puede restablecerlo y sobrescribir o eliminar archivos en él.

110 </Warning>

111 

112 Si el runner no puede crear el directorio base o escribir en él, sale al iniciarse con un error que nombra el directorio en lugar de registrarse. Consulta [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).

109 113 

110 Luego inicia el runner con `--environment-secret-file` y `--base-dir`:114 Luego inicia el runner con `--environment-secret-file` y `--base-dir`:

111 115 


113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'117 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

114 ```118 ```

115 119 

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.120 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. Iniciado con este comando, sale por diseño después de atender una sesión, no después de cada turno. Para atender más sesiones, vuelve a iniciar el runner cada vez que salga. Consulta [Si el runner sale](#if-the-runner-exits) para saber cuándo ocurre eso y qué registra el runner.

117 </Step>121 </Step>

118 122 

119 <Step title="Verificar que el runner aparece">123 <Step title="Verificar que el runner aparece">


121 </Step>125 </Step>

122 126 

123 <Step title="Enrutar una sesión al entorno">127 <Step title="Enrutar una sesión al entorno">

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.128 <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 mediante su URL HTTPS sin que se le pidan credenciales.

125 129 

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).130 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 131 

128 Si la sesión no empieza a trabajar, identifica lo que ves:132 <span id="session-doesnt-start" />Si la sesión no empieza a trabajar, identifica lo que ves:

129 133 

130 * **La sesión permanece en cola**: consulta [Troubleshooting](/docs/es/self-hosted-environments-deploy#troubleshooting).134 * **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.135 * **La sesión no se inicia por un error de git**: si el error 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.

136 * **Proporcionar credenciales HTTPS**: consulta [Configurar git](/docs/es/self-hosted-environments-deploy#configure-git)

137 * **Clonar por SSH en su lugar**: si el host del runner ya tiene una clave SSH, consulta [Reescribir URLs de git para redes privadas](/docs/es/self-hosted-environments-deploy#rewrite-git-urls-for-private-networks)

132 </Step>138 </Step>

133</Steps>139</Steps>

134 140 


136 Si el runner sale142 Si el runner sale

137</h3>143</h3>

138 144 

139Si el runner sale durante este inicio rápido, vuelve a iniciarlo con el mismo comando. El runner puede salir por sí solo:145Si el runner sale durante este inicio rápido, vuelve a iniciarlo. El runner puede salir por sí solo:

140 146 

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).147* **Nada en ejecución**: el registro muestra `[runner:exit] account workload drained — exiting`. El runner [sale por diseño](/docs/es/self-hosted-environments#runner-lifecycle) una vez que ya no está ejecutando ninguna sesión, por ejemplo:

148 * **Archivaste o eliminaste la sesión**: vuelve a iniciar el runner

149 * **La sesión no se pudo iniciar**: [corrige la causa](#session-doesnt-start) y luego vuelve a iniciar el runner

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.150* **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 151 

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.152Un 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.

Details

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| `--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. |

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| `--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. |

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| `--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 en el [canal de actividad](/docs/es/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached) que se inicializó dentro de N minutos. Los N minutos comienzan al generarse el proceso, después de la clonación, y vuelven a empezar con cada mensaje `user` o `assistant` que el proceso hijo emite antes de haberse inicializado o de haber informado su estado. Antes de v2.1.299, este tiempo de espera dejaba de aplicarse con el primer mensaje de ese tipo de la sesión. Para la liberación después de la señal de inicialización, consulta `--release-idle-session-min`. `0` lo desactiva. |

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| `--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. |

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| `--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. |

60 60 


160 160 

161Use `last_poll_age_ms` como una señal de vivacidad en sondeos personalizados; un valor que crece sin límites indica que el bucle de sondeo está atascado. Tanto `last_poll_at` como `last_poll_age_ms` son `null` hasta que se completa el primer sondeo.161Use `last_poll_age_ms` como una señal de vivacidad en sondeos personalizados; un valor que crece sin límites indica que el bucle de sondeo está atascado. Tanto `last_poll_at` como `last_poll_age_ms` son `null` hasta que se completa el primer sondeo.

162 162 

163El orquestador sirve su propio `/healthz` en su puerto de salud. Su punto final siempre devuelve `200`, y el cuerpo lleva un campo `connected` reportando si el sondeo más reciente tuvo éxito, más conteos de cola de generación por estado en `queue_counts`. Cierre la preparación y alertas en `connected` en lugar del código de estado.163El `/healthz` propio del orquestador, en su puerto de salud, siempre devuelve `200`. El cuerpo lleva un campo `connected` que reporta si el sondeo más reciente tuvo éxito, más conteos de cola de generación por estado en `queue_counts`. Para ver por qué `connected` es `false`, lee el campo de nivel superior `last_error`, que cada sondeo exitoso restablece a `null`. Basa la preparación y las alertas en `connected` en lugar del código de estado.

164 164 

165Cuando el [conector SCM](#scm-connector-flags) está configurado, el cuerpo `/healthz` del orquestador también lleva `scm_connector_connected` y un objeto `scm_connector` con `connected`, `last_connected_at`, `last_error`, `reconnects`, y `requests_forwarded`. Ambos campos son `null` cuando `--scm-connector-host` no está establecido.165Cuando el [conector SCM](#scm-connector-flags) está configurado, el cuerpo `/healthz` del orquestador también lleva `scm_connector_connected` y un objeto `scm_connector` con `connected`, `last_connected_at`, `last_error`, `reconnects`, y `requests_forwarded`. Ambos campos son `null` cuando `--scm-connector-host` no está establecido.

166 166 

Details

692| [`gcpAuthRefresh`](#gcpauthrefresh) | Actualiza las [credenciales de Google Cloud](/docs/es/google-vertex-ai#advanced-credential-configuration) con tu propio comando | Autenticación y proveedores | Any file |692| [`gcpAuthRefresh`](#gcpauthrefresh) | Actualiza las [credenciales de Google Cloud](/docs/es/google-vertex-ai#advanced-credential-configuration) con tu propio comando | Autenticación y proveedores | Any file |

693| [`hooks`](#hooks) | Ejecuta tus propios comandos como [hooks](/docs/es/hooks) en distintos puntos del ciclo de vida de Claude Code | Hooks y automatización | Any file |693| [`hooks`](#hooks) | Ejecuta tus propios comandos como [hooks](/docs/es/hooks) en distintos puntos del ciclo de vida de Claude Code | Hooks y automatización | Any file |

694| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | Limita qué variables de entorno pueden poner los [hooks HTTP](/docs/es/hooks) en los encabezados | Hooks y automatización | Any file |694| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | Limita qué variables de entorno pueden poner los [hooks HTTP](/docs/es/hooks) en los encabezados | Hooks y automatización | Any file |

695| [`idleCompaction`](#idlecompaction) | Impide que Claude Code compacte una conversación larga mientras tu sesión de terminal está inactiva | Memoria y contexto | Any file |

695| [`includeCoAuthoredBy`](#includecoauthoredby) | Obsoleto; usa `attribution` para ocultar o cambiar la atribución de commits y PR | Git y atribución | Any file |696| [`includeCoAuthoredBy`](#includecoauthoredby) | Obsoleto; usa `attribution` para ocultar o cambiar la atribución de commits y PR | Git y atribución | Any file |

696| [`includeGitInstructions`](#includegitinstructions) | Elimina del contexto de Claude las instrucciones integradas de commits y PR | Git y atribución | Any file |697| [`includeGitInstructions`](#includegitinstructions) | Elimina del contexto de Claude las instrucciones integradas de commits y PR | Git y atribución | Any file |

697| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | Recibe una [notificación push](/docs/es/remote-control#mobile-push-notifications) cuando Claude esté esperándote | Remoto, escritorio y notificaciones | Any file |698| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | Recibe una [notificación push](/docs/es/remote-control#mobile-push-notifications) cuando Claude esté esperándote | Remoto, escritorio y notificaciones | Any file |


1425 * `true`: las sesiones comienzan con ultracode activado cuando flujos de trabajo dinámicos están habilitados para usted y su modelo admite `xhigh`1426 * `true`: las sesiones comienzan con ultracode activado cuando flujos de trabajo dinámicos están habilitados para usted y su modelo admite `xhigh`

1426 * `false`: las sesiones comienzan con ultracode desactivado1427 * `false`: las sesiones comienzan con ultracode desactivado

1427* **Predeterminado**: sin establecer, por lo que ultracode está desactivado1428* **Predeterminado**: sin establecer, por lo que ultracode está desactivado

1428* **Anulaciones por sesión**: `/effort ultracode` activa ultracode para una sesión sin esta clave, y `/effort ultracode off` lo desactiva para una sesión cuando esta clave es `true`. La bandera `--effort ultracode` también lo activa para una sesión, en esfuerzo `xhigh`, y requiere Claude Code v2.1.203 o posterior1429* **Sobrescrituras por sesión**: `/effort ultracode` activa ultracode para una sesión sin esta clave, y `/effort ultracode off` lo desactiva para una sesión cuando esta clave es `true`. El flag `--effort ultracode` también lo activa para una sesión, con esfuerzo `xhigh`

1429 1430 

1430```json settings.json theme={null}1431```json settings.json theme={null}

1431{1432{


2952}2953}

2953```2954```

2954 2955 

2955El comando manual `/compact` sigue funcionando mientras la auto-compactación está desactivada.2956El comando manual `/compact` sigue funcionando mientras la compactación automática está desactivada. Si desactivas la compactación automática, la [compactación en inactividad](#idlecompaction) también se desactiva.

2956 2957 

2957<h3 id="autocompactwindow">2958<h3 id="autocompactwindow">

2958 `autoCompactWindow`2959 `autoCompactWindow`


3133 * Variables que cambian cómo Claude Code se inicia o se sincroniza, como `CLAUDE_CODE_PROCESS_WRAPPER`, `CLAUDE_CODE_SYNC_SKILLS`, `CLAUDE_CODE_SYNC_PLUGINS`, `CLAUDE_CODE_PLUGIN_CACHE_DIR` y `CLAUDE_CODE_PLUGIN_SEED_DIR`.3134 * Variables que cambian cómo Claude Code se inicia o se sincroniza, como `CLAUDE_CODE_PROCESS_WRAPPER`, `CLAUDE_CODE_SYNC_SKILLS`, `CLAUDE_CODE_SYNC_PLUGINS`, `CLAUDE_CODE_PLUGIN_CACHE_DIR` y `CLAUDE_CODE_PLUGIN_SEED_DIR`.

3134 * Variables que establecen los temporizadores de un diálogo sin respuesta: [`CLAUDE_CODE_USER_DIALOG_TIMEOUT_MS`, `CLAUDE_AFK_TIMEOUT_MS` y `CLAUDE_AFK_COUNTDOWN_MS`](/docs/es/env-vars#variables).3135 * Variables que establecen los temporizadores de un diálogo sin respuesta: [`CLAUDE_CODE_USER_DIALOG_TIMEOUT_MS`, `CLAUDE_AFK_TIMEOUT_MS` y `CLAUDE_AFK_COUNTDOWN_MS`](/docs/es/env-vars#variables).

3135 * [`CLAUDE_CODE_DISABLE_ATTACHMENTS`](/docs/es/env-vars#variables), que desactiva el procesamiento de archivos adjuntos.3136 * [`CLAUDE_CODE_DISABLE_ATTACHMENTS`](/docs/es/env-vars#variables), que desactiva el procesamiento de archivos adjuntos.

3137 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](/docs/es/env-vars#variables), que impide que Claude Code expanda las menciones con `@` de archivos y directorios.

3136 3138 

3137 Antes de v2.1.251, la configuración del proyecto y local también podía establecer las variables de esta lista que eligen dónde Claude Code escribe sus archivos o que exportan contenido de la sesión, excepto `HOME` y `XDG_CONFIG_HOME`. Antes de v2.1.290, también podía establecer las variables de temporizador de diálogo y `CLAUDE_CODE_DISABLE_ATTACHMENTS`.3139 Antes de v2.1.251, la configuración del proyecto y local también podía establecer las variables de esta lista que eligen dónde Claude Code escribe sus archivos o que exportan contenido de la sesión, excepto `HOME` y `XDG_CONFIG_HOME`. Antes de v2.1.290, también podía establecer las variables de temporizador de diálogo y `CLAUDE_CODE_DISABLE_ATTACHMENTS`.

3138* Variables de identidad que los entornos de alojamiento de Claude Code poseen, como `CLAUDE_CODE_REMOTE` y `CLAUDE_CODE_ACCOUNT_UUID`, se ignoran de cada archivo.3140* Variables de identidad que los entornos de alojamiento de Claude Code poseen, como `CLAUDE_CODE_REMOTE` y `CLAUDE_CODE_ACCOUNT_UUID`, se ignoran de cada archivo.


3163 3165 

3164En una ejecución `-p` o una sesión del Agent SDK, Claude Code ignora esta clave. El SDK activa el checkpointing con su opción `enableFileCheckpointing`, y una ejecución `-p` simple necesita `CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING=true`. Consulte [File checkpointing in the Agent SDK](/docs/es/agent-sdk/file-checkpointing).3166En una ejecución `-p` o una sesión del Agent SDK, Claude Code ignora esta clave. El SDK activa el checkpointing con su opción `enableFileCheckpointing`, y una ejecución `-p` simple necesita `CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING=true`. Consulte [File checkpointing in the Agent SDK](/docs/es/agent-sdk/file-checkpointing).

3165 3167 

3168<h3 id="idlecompaction">

3169 `idleCompaction`

3170</h3>

3171 

3172La compactación en inactividad [compacta](/docs/es/context-window#what-survives-compaction) una conversación larga de la que te has alejado, poco antes de que expire su caché de prompts. Así, tu siguiente mensaje envía un resumen en lugar de la conversación completa. Cuando regresas, la conversación muestra `Compacted while idle, before the prompt cache expired`.

3173 

3174La compactación en inactividad está activada de forma predeterminada para las conversaciones que cumplen todas estas condiciones:

3175 

3176* **Sesión**: estás en una sesión interactiva de terminal

3177* **Caché de prompts**: la conversación usa el [TTL de una hora de la caché de prompts](/docs/es/prompt-caching#which-ttl-each-request-gets)

3178* **Flags de funciones**: Claude Code puede [obtener flags de funciones de Anthropic](/docs/es/env-vars#features-that-need-feature-flag-fetching)

3179* **Tamaño**: el contexto de la conversación ha alcanzado el umbral de tokens, que puedes [cambiar](#change-the-idle-compaction-threshold) respecto a su valor predeterminado de 200.000

3180* **Tiempo de inactividad**: han pasado unos 54 minutos desde la última solicitud, y tu computadora está activa en ese momento

3181 

3182Para desactivar la compactación en inactividad, establece esta clave en `false`.

3183 

3184* **Scope**: [`Any file`](#scopes)

3185* **Type**: Boolean

3186 * `true`: Claude Code compacta las conversaciones inactivas que cumplen las condiciones

3187 * `false`: Claude Code no compacta mientras tu sesión está inactiva

3188* **Default**: `true`

3189* **Per-session overrides**: [`DISABLE_AUTO_COMPACT`](/docs/es/env-vars) desactiva la compactación en inactividad junto con la compactación automática

3190 

3191```json settings.json theme={null}

3192{

3193 "idleCompaction": false

3194}

3195```

3196 

3197La clave requiere Claude Code v2.1.290 o posterior. En una versión anterior, que ignora esta clave, desactiva [`autoCompactEnabled`](#autocompactenabled) para detener la compactación en inactividad.

3198 

3199<h4 id="change-the-idle-compaction-threshold">

3200 Cambiar el umbral de compactación en inactividad

3201</h4>

3202 

3203Establece [`CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS`](/docs/es/env-vars) en el número de tokens que debe alcanzar el contexto de una conversación antes de que se le aplique la compactación en inactividad. Usa un número entero positivo. Los valores inferiores a `100000` se elevan a `100000`, el umbral más bajo.

3204 

3205Con el valor predeterminado, una conversación en una ventana de contexto de 200K se compacta automáticamente antes de alcanzar los 200.000 tokens. Este ejemplo baja el umbral a 150.000 para que esas conversaciones cumplan la condición:

3206 

3207```json settings.json theme={null}

3208{

3209 "env": {

3210 "CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": "150000"

3211 }

3212}

3213```

3214 

3166<h3 id="plansdirectory">3215<h3 id="plansdirectory">

3167 `plansDirectory`3216 `plansDirectory`

3168</h3>3217</h3>


4209}4258}

4210```4259```

4211 4260 

4261Si reemplazas el prompt del sistema en [modo no interactivo](/docs/es/headless) o en el Agent SDK, la sesión comienza sin la instantánea incluso cuando esta clave es `true`:

4262 

4263* **Ejecuciones con `-p`**: reemplazas el prompt cuando pasas [`--system-prompt`](/docs/es/cli-reference#system-prompt-flags) o `--system-prompt-file`. También lo reemplazas cuando ejecutas un agente personalizado con su propio prompt, seleccionado con [`--agent`](/docs/es/sub-agents#invoke-subagents-explicitly) o con el ajuste [`agent`](#agent). Fuera del [modo bare](/docs/es/headless#start-faster-with-bare-mode), para conservar la instantánea, ejecuta sin un agente personalizado y agrega tus instrucciones con [`--append-system-prompt`](/docs/es/cli-reference#system-prompt-flags) en lugar de reemplazar el prompt.

4264* **[Agent SDK](/docs/es/agent-sdk/modifying-system-prompts)**: reemplazas el prompt con un prompt del sistema personalizado o con un agente de hilo principal personalizado. Si no estableces ningún prompt del sistema, el SDK usa su valor predeterminado mínimo y la sesión también comienza sin la instantánea. Fuera del [modo bare](/docs/es/headless#start-faster-with-bare-mode), para conservar la instantánea, usa el preset `claude_code` sin un `agent` personalizado.

4265 

4212<h3 id="prurltemplate">4266<h3 id="prurltemplate">

4213 `prUrlTemplate`4267 `prUrlTemplate`

4214</h3>4268</h3>


5175 5229 

5176Los plugins integrados almacenan sus opciones en la misma clave con el sufijo `@builtin`. Por ejemplo, el ajuste [**Project instructions**](/docs/es/memory#choose-which-instruction-files-load) que controla si Claude Code lee los archivos `AGENTS.md` es `pluginConfigs["cc-plugin-agents-md@builtin"].options.instructionFiles`. Antes de v2.1.285, el ID del plugin era `agents-md@builtin`. Las versiones posteriores leen una entrada con cualquiera de los dos ID.5230Los plugins integrados almacenan sus opciones en la misma clave con el sufijo `@builtin`. Por ejemplo, el ajuste [**Project instructions**](/docs/es/memory#choose-which-instruction-files-load) que controla si Claude Code lee los archivos `AGENTS.md` es `pluginConfigs["cc-plugin-agents-md@builtin"].options.instructionFiles`. Antes de v2.1.285, el ID del plugin era `agents-md@builtin`. Las versiones posteriores leen una entrada con cualquiera de los dos ID.

5177 5231 

5178Claude Code ignora entradas de proyecto y local porque sustituye estos valores en configuraciones de hook, MCP y LSP de plugin, y un repositorio clonado no debe poder suministrarlos. Antes de v2.1.207, la configuración de proyecto y local también se leía.5232Claude Code ignora las entradas de proyecto y locales porque sustituye estos valores en las configuraciones de hooks, MCP y LSP de los plugins, y un repositorio clonado no debe poder aportarlos.

5179 5233 

5180<h3 id="prependplugins">5234<h3 id="prependplugins">

5181 `prependPlugins`5235 `prependPlugins`


5680}5734}

5681```5735```

5682 5736 

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.5737Fuera 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.

5684 5738 

5685<h3 id="worktree-location">5739<h3 id="worktree-location">

5686 `worktree.location`5740 `worktree.location`

setup.md +1 −1

Details

226 226 

227Ejecute `claude doctor` para ver el resultado del intento de actualización más reciente.227Ejecute `claude doctor` para ver el resultado del intento de actualización más reciente.

228 228 

229En macOS y Linux, el instalador nativo gestiona el lanzador en `~/.local/bin/claude` como un enlace simbólico en `~/.local/share/claude/versions/`. Si reemplaza ese lanzador con su propio script o enlace simbólico, la actualización automática y `claude update` lo dejan en su lugar: las nuevas versiones aún se instalan en el directorio `versions/`, y su lanzador decide qué versión se ejecuta. Antes de v2.1.207, el actualizador automático reemplazaba un lanzador personalizado en esa ruta con su propio enlace simbólico en cada actualización.229En macOS y Linux, el instalador nativo gestiona el lanzador en `~/.local/bin/claude` como un enlace simbólico en `~/.local/share/claude/versions/`. Si reemplazas ese lanzador con tu propio script o enlace simbólico, la actualización automática y `claude update` lo dejan en su lugar: las nuevas versiones aún se instalan en el directorio `versions/`, y tu lanzador decide qué versión se ejecuta.

230 230 

231Con un lanzador personalizado, Claude Code también mantiene todas las versiones instaladas en el disco porque no puede determinar qué versión necesita el lanzador. `claude doctor` informa de un lanzador que el instalador nativo no creó.231Con un lanzador personalizado, Claude Code también mantiene todas las versiones instaladas en el disco porque no puede determinar qué versión necesita el lanzador. `claude doctor` informa de un lanzador que el instalador nativo no creó.

232 232 

skills.md +26 −3

Details

31Para desactivar las skills incluidas, use la configuración [`disableBundledSkills`](/docs/es/settings-reference#disablebundledskills).31Para desactivar las skills incluidas, use la configuración [`disableBundledSkills`](/docs/es/settings-reference#disablebundledskills).

32 32 

33<Note>33<Note>

34 La comprobación de configuración [`/doctor`](/docs/es/commands#all-commands) permanece escribible cuando `disableBundledSkills` está activado, en Claude Code v2.1.205 y posterior. Para ocultarla, establezca la variable de entorno `DISABLE_DOCTOR_COMMAND` o una entrada de [`skillOverrides`](#override-skill-visibility-from-settings) de `"doctor": "off"`. Antes de v2.1.205, `/doctor` era un comando integrado en lugar de una skill incluida.34 La comprobación de configuración [`/doctor`](/docs/es/commands#all-commands) se puede seguir escribiendo cuando `disableBundledSkills` está activado. Para ocultarla, establece la variable de entorno `DISABLE_DOCTOR_COMMAND` o una entrada de [`skillOverrides`](#override-skill-visibility-from-settings) de `"doctor": "off"`.

35</Note>35</Note>

36 36 

37Las skills incluidas se enumeran junto con los comandos integrados en la [referencia de comandos](/docs/es/commands), marcadas como **Skill** en la columna Propósito.37Las skills incluidas se enumeran junto con los comandos integrados en la [referencia de comandos](/docs/es/commands), marcadas como **Skill** en la columna Propósito.


69 69 

70`/verify` también puede registrar su propia receta. Cuando tiene que compilar y manejar tu aplicación sin una receta registrada, escribe lo que funcionó en `.claude/skills/verify/SKILL.md` en la raíz del repositorio, o en el directorio del paquete modificado en un monorepo, para que las ejecuciones posteriores y otros agentes sigan los mismos pasos. En la raíz del repositorio, el skill registrado reemplaza al `/verify` incluido.70`/verify` también puede registrar su propia receta. Cuando tiene que compilar y manejar tu aplicación sin una receta registrada, escribe lo que funcionó en `.claude/skills/verify/SKILL.md` en la raíz del repositorio, o en el directorio del paquete modificado en un monorepo, para que las ejecuciones posteriores y otros agentes sigan los mismos pasos. En la raíz del repositorio, el skill registrado reemplaza al `/verify` incluido.

71 71 

72Claude edita el archivo registrado solo cuando dirigió una ejecución incorrectamente, como un comando que falló o un paso faltante, para que pueda confirmar el archivo sin diffs por sesión. Antes de v2.1.205, la skill incluida le indicaba a Claude que incorporara cualquier cosa que una ejecución aprendiera, lo que causaba conflictos de fusión frecuentes.72Claude edita el archivo registrado solo cuando dirigió una ejecución incorrectamente, como un comando que falló o un paso faltante, para que puedas hacer commit del archivo sin diffs por sesión.

73 73 

74<h3 id="run-your-checks-before-each-commit">74<h3 id="run-your-checks-before-each-commit">

75 Ejecuta tus comprobaciones antes de cada commit75 Ejecuta tus comprobaciones antes de cada commit


183* **Carpetas con enlaces simbólicos**: una entrada `<skill-name>` en la ubicación enterprise, personal o de proyecto puede ser un enlace simbólico a un directorio en otro lugar del disco. Claude Code lee `SKILL.md` del destino y carga la skill una sola vez incluso si varias ubicaciones apuntan al mismo destino. Las skills de plugin [manejan los enlaces simbólicos de manera diferente](/docs/es/plugins/host-marketplace#share-files-within-a-marketplace-with-symlinks).183* **Carpetas con enlaces simbólicos**: una entrada `<skill-name>` en la ubicación enterprise, personal o de proyecto puede ser un enlace simbólico a un directorio en otro lugar del disco. Claude Code lee `SKILL.md` del destino y carga la skill una sola vez incluso si varias ubicaciones apuntan al mismo destino. Las skills de plugin [manejan los enlaces simbólicos de manera diferente](/docs/es/plugins/host-marketplace#share-files-within-a-marketplace-with-symlinks).

184* **Nombre reservado `synced`**: no nombres una carpeta de skill `synced`, en ninguna capitalización. Claude Code usa `~/.claude/skills/synced/` para [skills descargadas desde claude.ai](#where-synced-skills-load) y omite una skill que crees con ese nombre en las ubicaciones enterprise, personal y de proyecto.184* **Nombre reservado `synced`**: no nombres una carpeta de skill `synced`, en ninguna capitalización. Claude Code usa `~/.claude/skills/synced/` para [skills descargadas desde claude.ai](#where-synced-skills-load) y omite una skill que crees con ese nombre en las ubicaciones enterprise, personal y de proyecto.

185* **Nombre reservado `anthropic-skills`**: fuera de un plugin, una carpeta de skill o archivo de comando cuyo nombre es `anthropic-skills` o comienza con `anthropic-skills:` no carga. Consulta [Nombres reservados para skills sincronizadas](#names-reserved-for-synced-skills).185* **Nombre reservado `anthropic-skills`**: fuera de un plugin, una carpeta de skill o archivo de comando cuyo nombre es `anthropic-skills` o comienza con `anthropic-skills:` no carga. Consulta [Nombres reservados para skills sincronizadas](#names-reserved-for-synced-skills).

186* **Caracteres en el nombre**: fuera de un plugin, una carpeta de skill no carga cuando su nombre contiene un carácter como un espacio de ancho cero o `<`. Consulta [Caracteres que un nombre de skill no puede contener](#characters-a-skill-name-cant-hold).

186* **Archivos de comando**: un archivo Markdown en `.claude/commands/` es el formato más antiguo y aún funciona. Admite el mismo [frontmatter](#frontmatter-reference) excepto `name` y `paths`. Para encontrar el nombre que escribes para invocarlo, consulta [Cómo una skill obtiene su nombre de comando](#how-a-skill-gets-its-command-name). Prefiere una skill para trabajo nuevo, ya que las skills también admiten [archivos de apoyo](#add-supporting-files).187* **Archivos de comando**: un archivo Markdown en `.claude/commands/` es el formato más antiguo y aún funciona. Admite el mismo [frontmatter](#frontmatter-reference) excepto `name` y `paths`. Para encontrar el nombre que escribes para invocarlo, consulta [Cómo una skill obtiene su nombre de comando](#how-a-skill-gets-its-command-name). Prefiere una skill para trabajo nuevo, ya que las skills también admiten [archivos de apoyo](#add-supporting-files).

187* **Carpeta de skill como plugin**: añade un `.claude-plugin/plugin.json` a una carpeta de skill y carga como un [plugin](/docs/es/plugins/loading#plugins-shared-through-a-repository) nombrado `<name>@skills-dir`, para que pueda agrupar agentes, hooks y servidores MCP. En un `.claude/skills/` de proyecto, esto requiere aceptar primero el diálogo de confianza del espacio de trabajo.188* **Carpeta de skill como plugin**: añade un `.claude-plugin/plugin.json` a una carpeta de skill y carga como un [plugin](/docs/es/plugins/loading#plugins-shared-through-a-repository) nombrado `<name>@skills-dir`, para que pueda agrupar agentes, hooks y servidores MCP. En un `.claude/skills/` de proyecto, esto requiere aceptar primero el diálogo de confianza del espacio de trabajo.

188 189 


495 496 

496Para un `SKILL.md` raíz de plugin, no hay directorio de skill del que tomar el nombre, por lo que `name` proporciona el segmento final completo. Sin un campo `name`, Claude Code recurre al nombre del directorio del plugin.497Para un `SKILL.md` raíz de plugin, no hay directorio de skill del que tomar el nombre, por lo que `name` proporciona el segmento final completo. Sin un campo `name`, Claude Code recurre al nombre del directorio del plugin.

497 498 

499<h4 id="characters-a-skill-name-cant-hold">

500 Caracteres que no puede contener el nombre de un skill

501</h4>

502 

503Si falta un skill o un comando personalizado en el menú `/`, o el menú no muestra el `name` del frontmatter de un skill, revisa el nombre. Claude Code rechaza un nombre de comando o un `name` de frontmatter que contenga caracteres como estos:

504 

505* Un espacio de ancho cero o un carácter de control

506* Un carácter de uso privado o sin asignar, como un glifo de una fuente de íconos

507* Un carácter que cambia la dirección del texto que lo rodea

508* Un espacio en blanco distinto de un único espacio simple entre palabras, como un espacio de no separación, dos espacios seguidos o un espacio al inicio o al final

509* `<` o `>`

510 

511Un comando personalizado o un skill no se carga cuando Claude Code rechaza el nombre de su directorio o archivo. Cambia el nombre de esa carpeta o archivo para quitar los caracteres. Un skill sigue cargándose cuando estos caracteres están solo en el nombre de la carpeta de un skill de plugin o en su `name` de frontmatter:

512 

513* **Carpeta en el directorio `skills/` de un plugin o en las [rutas `skills`](/docs/es/plugins/components#skills) de su manifiesto**: no necesitas cambiar el nombre de la carpeta. Estos caracteres se convierten en guiones en el nombre del comando del skill, así que escribe el comando con los guiones.

514* **`name` de frontmatter**: el menú `/` no muestra el valor de `name` y escribirlo no invoca el skill. Edita la línea `name:` para quitar los caracteres.

515 

516Para averiguar qué nombre rechazó Claude Code, inícialo con [`claude --debug`](/docs/es/cli-reference#cli-flags) desde tu shell y busca `[names]` en el [registro de depuración](/docs/es/debug-your-config). En una sesión interactiva, un [aviso de inicio](/docs/es/errors#skill-or-command-name-refused) también te indica que se rechazaron nombres. Después de cambiar un nombre o editar la línea `name:`, reinicia la sesión, a menos que el archivo esté en un directorio que Claude Code [vigila en busca de cambios](#live-change-detection).

517 

498<h4 id="available-string-substitutions">518<h4 id="available-string-substitutions">

499 Sustituciones de cadena disponibles519 Sustituciones de cadena disponibles

500</h4>520</h4>


858| Skill con `context: fork` | Del tipo de agente | Contenido de SKILL.md | CLAUDE.md, per the agent's [startup context](/docs/es/sub-agents#what-loads-at-startup) |878| Skill con `context: fork` | Del tipo de agente | Contenido de SKILL.md | CLAUDE.md, per the agent's [startup context](/docs/es/sub-agents#what-loads-at-startup) |

859| Subagente con campo `skills` | Cuerpo markdown del subagente | Mensaje de delegación de Claude | Skills precargadas + CLAUDE.md, per the subagent's [startup context](/docs/es/sub-agents#what-loads-at-startup) |879| Subagente con campo `skills` | Cuerpo markdown del subagente | Mensaje de delegación de Claude | Skills precargadas + CLAUDE.md, per the subagent's [startup context](/docs/es/sub-agents#what-loads-at-startup) |

860 880 

861Con `context: fork`, escribe la tarea en su skill y elige un tipo de agente para ejecutarla. Los agentes Explore y Plan integrados [omiten CLAUDE.md y el estado de git](/docs/es/sub-agents#what-loads-at-startup) para mantener su contexto pequeño, por lo que una skill bifurcada que usa `agent: Explore` solo ve el contenido de SKILL.md y el prompt del sistema del agente. Para lo inverso, donde define un subagente personalizado que usa skills como material de referencia, consulte [Subagentes](/docs/es/sub-agents#preload-skills-into-subagents).881Con `context: fork`, escribes la tarea en tu skill y eliges un tipo de agente para ejecutarla. Los agentes integrados Explore y Plan [se inician sin CLAUDE.md ni el estado de git](/docs/es/sub-agents#what-loads-at-startup) para mantener su contexto pequeño. Pon todo lo que la tarea necesita en tu SKILL.md. Un skill bifurcado que usa `agent: Explore` se inicia con ese contenido y el prompt del sistema propio del agente, y ninguno de tus archivos CLAUDE.md.

882 

883Para el caso inverso, en el que defines un subagente personalizado que usa skills como material de referencia, consulta [Subagentes](/docs/es/sub-agents#preload-skills-into-subagents).

862 884 

863<h4 id="example-research-skill-using-explore-agent">885<h4 id="example-research-skill-using-explore-agent">

864 Ejemplo: Skill de investigación usando agente Explore886 Ejemplo: Skill de investigación usando agente Explore


12472. Confirme que el skill aparece en `¿Qué skills están disponibles?`12692. Confirme que el skill aparece en `¿Qué skills están disponibles?`

12483. Intente reformular su solicitud para que coincida más estrechamente con la descripción12703. Intente reformular su solicitud para que coincida más estrechamente con la descripción

12494. Invóquelo directamente con `/skill-name` si el skill es invocable por el usuario12714. Invóquelo directamente con `/skill-name` si el skill es invocable por el usuario

12725. Si `/skill-name` tampoco se reconoce, verifica si Claude Code [rechazó el nombre del skill](#characters-a-skill-name-cant-hold)

1250 1273 

1251Si el YAML del frontmatter está mal formado, Claude Code carga el cuerpo del skill con metadatos vacíos, por lo que `/skill-name` sigue funcionando pero Claude no puede comparar contra su `description`. Ejecute con `--debug` para ver el error de análisis.1274Si el YAML del frontmatter está mal formado, Claude Code carga el cuerpo del skill con metadatos vacíos, por lo que `/skill-name` sigue funcionando pero Claude no puede comparar contra su `description`. Ejecute con `--debug` para ver el error de análisis.

1252 1275 

statusline.md +2 −2

Details

1198| `description` | string | Descripción breve de la tarea, como la que Claude dio al generar el subagente |1198| `description` | string | Descripción breve de la tarea, como la que Claude dio al generar el subagente |

1199| `label` | string | Resumen breve del progreso de la tarea cuando Claude Code tiene uno; de lo contrario, el mismo texto que `description` |1199| `label` | string | Resumen breve del progreso de la tarea cuando Claude Code tiene uno; de lo contrario, el mismo texto que `description` |

1200| `startTime` | number | Momento en que comenzó la tarea, en milisegundos desde la época Unix |1200| `startTime` | number | Momento en que comenzó la tarea, en milisegundos desde la época Unix |

1201| `model` | string, opcional | ID del modelo resuelto en el que se ejecuta la tarea. Se omite hasta que el modelo se resuelve. Requiere Claude Code v2.1.205 o posterior |1201| `model` | string, opcional | ID del modelo resuelto en el que se ejecuta la tarea. Se omite hasta que el modelo se resuelve |

1202| `effort` | string o number, opcional | Esfuerzo de razonamiento establecido para el subagente en su [frontmatter de definición](/docs/es/sub-agents#supported-frontmatter-fields) o en la invocación individual: `low`, `medium`, `high`, `xhigh`, `max` o un presupuesto de tokens numérico. Es el valor configurado, y el esfuerzo que Claude Code aplica puede diferir cuando el modelo no admite ese nivel. Se omite cuando no se establece ningún esfuerzo. Requiere Claude Code v2.1.213 o posterior |1202| `effort` | string o number, opcional | Esfuerzo de razonamiento establecido para el subagente en su [frontmatter de definición](/docs/es/sub-agents#supported-frontmatter-fields) o en la invocación individual: `low`, `medium`, `high`, `xhigh`, `max` o un presupuesto de tokens numérico. Es el valor configurado, y el esfuerzo que Claude Code aplica puede diferir cuando el modelo no admite ese nivel. Se omite cuando no se establece ningún esfuerzo. Requiere Claude Code v2.1.213 o posterior |

1203| `contextWindowSize` | number, opcional | Ventana de contexto de `model` en tokens, calculada de la misma manera que [`context_window.context_window_size`](#context-window-fields) de la línea de estado principal, por lo que puedes renderizar un porcentaje por fila desde `tokenCount`. Se omite cuando se omite `model`. Requiere Claude Code v2.1.205 o posterior |1203| `contextWindowSize` | number, opcional | Ventana de contexto de `model` en tokens, calculada de la misma manera que [`context_window.context_window_size`](#context-window-fields) de la línea de estado principal, por lo que puedes renderizar un porcentaje por fila desde `tokenCount`. Se omite cuando se omite `model` |

1204| `tokenCount` | number | Recuento acumulado de tokens del subagente, la cifra que muestra la fila predeterminada |1204| `tokenCount` | number | Recuento acumulado de tokens del subagente, la cifra que muestra la fila predeterminada |

1205| `tokenSamples` | array de numbers | Hasta las últimas 16 lecturas de `tokenCount`, una por tick de actualización, de la más antigua a la más reciente y terminando con la actual |1205| `tokenSamples` | array de numbers | Hasta las últimas 16 lecturas de `tokenCount`, una por tick de actualización, de la más antigua a la más reciente y terminando con la actual |

1206| `cwd` | string | Directorio de trabajo del subagente: su propio directorio cuando se ejecuta en uno, como un worktree aislado; de lo contrario, el directorio de trabajo de la sesión |1206| `cwd` | string | Directorio de trabajo del subagente: su propio directorio cuando se ejecuta en uno, como un worktree aislado; de lo contrario, el directorio de trabajo de la sesión |

sub-agents.md +40 −11

Details

32 32 

33Claude Code incluye subagentes integrados que Claude utiliza automáticamente cuando es apropiado. Cada uno hereda los permisos de la conversación principal; la mayoría se ejecuta con un conjunto de herramientas restringido.33Claude Code incluye subagentes integrados que Claude utiliza automáticamente cuando es apropiado. Cada uno hereda los permisos de la conversación principal; la mayoría se ejecuta con un conjunto de herramientas restringido.

34 34 

35Explore y Plan omiten sus archivos CLAUDE.md y la instantánea del estado de git para mantener la investigación rápida y económica. Todos los demás subagentes integrados y [subagentes personalizados](#configure-subagents) cargan ambos, a menos que su definición establezca el campo [`omitClaudeMd`](#supported-frontmatter-fields) para omitir los archivos CLAUDE.md del usuario, proyecto y local. Para obtener el desglose completo de lo que llega a un subagente, consulte [qué se carga al iniciar](#what-loads-at-startup).35Explore y Plan se inician sin tus archivos CLAUDE.md ni la instantánea del estado de git para mantener la investigación rápida y económica. Los demás subagentes integrados y los [subagentes personalizados](#configure-subagents) cargan ambos, a menos que establezcas [`omitClaudeMd`](#supported-frontmatter-fields) en la definición de un subagente personalizado para iniciarlo sin los archivos CLAUDE.md del usuario, del proyecto y locales. Para obtener el desglose completo de lo que llega a un subagente, consulta [qué se carga al iniciar](#what-loads-at-startup).

36 36 

37<Tabs>37<Tabs>

38 <Tab title="Explore">38 <Tab title="Explore">


185 185 

186Claude Code escanea `.claude/agents/` y `~/.claude/agents/` recursivamente, por lo que puede organizar definiciones en subcarpetas como `agents/review/` o `agents/research/`. La ruta del subdirectorio no afecta cómo se identifica o invoca un subagente, porque la identidad proviene solo del campo `name` del frontmatter.186Claude Code escanea `.claude/agents/` y `~/.claude/agents/` recursivamente, por lo que puede organizar definiciones en subcarpetas como `agents/review/` o `agents/research/`. La ruta del subdirectorio no afecta cómo se identifica o invoca un subagente, porque la identidad proviene solo del campo `name` del frontmatter.

187 187 

188Mantenga los valores de `name` únicos en todo el árbol: si dos archivos bajo el mismo directorio `.claude/agents/`, incluyendo sus subcarpetas, declaran el mismo nombre, Claude Code carga solo uno de ellos, elegido por orden de lectura del sistema de archivos en lugar de una precedencia documentada. En directorios de proyecto anidados, la definición más cercana al directorio de trabajo gana, como se describe arriba. El chequeo de configuración [`/doctor`](/docs/es/commands#all-commands) reporta archivos en el mismo directorio que comparten un nombre y propone renombrar o eliminar todos excepto uno. Antes de v2.1.205, `/doctor` abría una pantalla de diagnósticos que listaba duplicados y mostraba qué definición estaba activa.188Mantén los valores de `name` únicos en todo el árbol: si dos archivos bajo el mismo directorio `.claude/agents/`, incluyendo sus subcarpetas, declaran el mismo nombre, Claude Code carga solo uno de ellos, elegido por orden de lectura del sistema de archivos en lugar de una precedencia documentada. En directorios de proyecto anidados, la definición más cercana al directorio de trabajo gana, como se describe arriba. El chequeo de configuración [`/doctor`](/docs/es/commands#all-commands) reporta archivos en el mismo directorio que comparten un nombre y propone renombrar o eliminar todos excepto uno.

189 189 

190Los directorios `agents/` de plugins también se escanean recursivamente. A diferencia de los alcances de proyecto y usuario, una subcarpeta dentro del directorio `agents/` de un plugin se convierte en parte del [identificador con alcance](#invoke-subagents-explicitly): un archivo en `agents/review/security.md` en el plugin `my-plugin` se registra como `my-plugin:review:security`.190Los directorios `agents/` de plugins también se escanean recursivamente. A diferencia de los alcances de proyecto y usuario, una subcarpeta dentro del directorio `agents/` de un plugin se convierte en parte del [identificador con alcance](#invoke-subagents-explicitly): un archivo en `agents/review/security.md` en el plugin `my-plugin` se registra como `my-plugin:review:security`.

191 191 


234Cada clave de nivel superior en el JSON es el nombre de un agente, y su valor es la definición de ese agente. No comience un nombre con `-`. Una definición toma estos campos:234Cada clave de nivel superior en el JSON es el nombre de un agente, y su valor es la definición de ese agente. No comience un nombre con `-`. Una definición toma estos campos:

235 235 

236* **`prompt`**: el mensaje del sistema del agente, equivalente al cuerpo markdown en subagentes basados en archivos. `prompt` puede estar vacío. Si selecciona un agente con un `prompt` vacío y sin campo `memory` como el agente de la sesión con `--agent`, el mensaje del sistema de la sesión se deja sin cambios. Un `prompt` vacío requiere Claude Code v2.1.281 o posterior.236* **`prompt`**: el mensaje del sistema del agente, equivalente al cuerpo markdown en subagentes basados en archivos. `prompt` puede estar vacío. Si selecciona un agente con un `prompt` vacío y sin campo `memory` como el agente de la sesión con `--agent`, el mensaje del sistema de la sesión se deja sin cambios. Un `prompt` vacío requiere Claude Code v2.1.281 o posterior.

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`, `autoCompactWindow`, `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 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).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).


285 285 

286Un subagente comienza en el directorio de trabajo actual de la conversación principal. Dentro de un subagente, los comandos `cd` no persisten entre llamadas de herramientas Bash o PowerShell y no afectan el directorio de trabajo de la conversación principal. Para dar al subagente una copia aislada del repositorio en su lugar, establezca [`isolation: worktree`](#supported-frontmatter-fields).286Un subagente comienza en el directorio de trabajo actual de la conversación principal. Dentro de un subagente, los comandos `cd` no persisten entre llamadas de herramientas Bash o PowerShell y no afectan el directorio de trabajo de la conversación principal. Para dar al subagente una copia aislada del repositorio en su lugar, establezca [`isolation: worktree`](#supported-frontmatter-fields).

287 287 

288Un subagente con `isolation: worktree` ejecuta sus comandos Bash y PowerShell dentro de su worktree. Un comando cuyo directorio de trabajo se resuelve a su checkout principal en su lugar, por ejemplo porque el directorio worktree fue eliminado mientras el subagente estaba ejecutándose, falla con un error. Antes de v2.1.203, tal comando podría ejecutarse en el checkout principal.288Un subagente con `isolation: worktree` ejecuta sus comandos Bash y PowerShell dentro de su worktree. Un comando cuyo directorio de trabajo se resuelve a tu checkout principal en su lugar, por ejemplo porque el directorio del worktree fue eliminado mientras el subagente estaba ejecutándose, falla con un error.

289 289 

290Esta verificación de directorio de trabajo cubre todo el repositorio que contiene el directorio desde el que lanzó Claude Code. Cuando su sesión se ejecuta en un [worktree](/docs/es/worktrees) vinculado de su propiedad, la verificación también cubre el checkout principal desde el que ese worktree está vinculado. Antes de v2.1.210, la verificación cubría solo el directorio de lanzamiento en sí. Un comando cuyo directorio de trabajo se resolvía en otro lugar en el mismo repositorio, como la raíz del repositorio cuando lanzó Claude Code desde un subdirectorio de monorepo, se ejecutaba allí en lugar de fallar.290Esta verificación de directorio de trabajo cubre todo el repositorio que contiene el directorio desde el que lanzó Claude Code. Cuando su sesión se ejecuta en un [worktree](/docs/es/worktrees) vinculado de su propiedad, la verificación también cubre el checkout principal desde el que ese worktree está vinculado. Antes de v2.1.210, la verificación cubría solo el directorio de lanzamiento en sí. Un comando cuyo directorio de trabajo se resolvía en otro lugar en el mismo repositorio, como la raíz del repositorio cuando lanzó Claude Code desde un subdirectorio de monorepo, se ejecutaba allí en lugar de fallar.

291 291 


306 306 

307Configure un subagente con [frontmatter](/docs/es/glossary#frontmatter) YAML entre marcadores `---` en la parte superior de su archivo, y escriba su mensaje del sistema como Markdown después del `---` de cierre. Solo `name` y `description` son requeridos.307Configure un subagente con [frontmatter](/docs/es/glossary#frontmatter) YAML entre marcadores `---` en la parte superior de su archivo, y escriba su mensaje del sistema como Markdown después del `---` de cierre. Solo `name` y `description` son requeridos.

308 308 

309Los nombres de campo de varias palabras usan camelCase, como `maxTurns` y `disallowedTools`, y deben coincidir exactamente con la tabla: Claude Code ignora un campo que no reconoce sin reportar un error. Para averiguar por qué un archivo de subagente no se cargó, consulte [Archivos de subagente que Claude Code omite](#subagent-files-claude-code-skips).309Los nombres de campo de varias palabras usan camelCase, como `maxTurns` y `disallowedTools`, y deben coincidir exactamente con la tabla: Claude Code ignora un campo que no reconoce sin reportar un error.

310 

311* Para encontrar un campo mal escrito en un subagente que se cargó, ejecuta [`claude --debug`](/docs/es/cli-reference#cli-flags) en tu shell y busca `does not recognize or apply` en el registro de depuración en `~/.claude/debug/<session-id>.txt`. El registro de depuración nombra hasta cinco campos de nivel superior del archivo del subagente que Claude Code no reconoce, junto con el nombre que probablemente querías usar cuando un campo admitido es similar. Requiere Claude Code v2.1.296 o posterior.

312* Para averiguar por qué un archivo de subagente no se cargó, consulta [Archivos de subagente que Claude Code omite](#subagent-files-claude-code-skips).

310 313 

311| Campo | Requerido | Descripción |314| Campo | Requerido | Descripción |

312| :- | :- | :- |315| :- | :- | :- |


317| `model` | No | [Modelo](#choose-a-model) a usar: `sonnet`, `opus`, `haiku`, `fable`, un ID de modelo completo como `claude-opus-5-5`, o `inherit`. Cuando lo omite, Claude Code elige el modelo en el [orden de modelo de subagente](#choose-a-model) |320| `model` | No | [Modelo](#choose-a-model) a usar: `sonnet`, `opus`, `haiku`, `fable`, un ID de modelo completo como `claude-opus-5-5`, o `inherit`. Cuando lo omite, Claude Code elige el modelo en el [orden de modelo de subagente](#choose-a-model) |

318| `permissionMode` | No | [Modo de permisos](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, o `manual` como alias de `default`. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |321| `permissionMode` | No | [Modo de permisos](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, o `manual` como alias de `default`. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |

319| `maxTurns` | No | Número máximo de turnos de agente antes de que el subagente se detenga. Cuando el subagente alcanza el límite, Claude Code devuelve su salida marcada como parcial, y Claude puede [reanudarlo](#resume-subagents) para continuar. La marca parcial requiere Claude Code v2.1.246 o posterior |322| `maxTurns` | No | Número máximo de turnos de agente antes de que el subagente se detenga. Cuando el subagente alcanza el límite, Claude Code devuelve su salida marcada como parcial, y Claude puede [reanudarlo](#resume-subagents) para continuar. La marca parcial requiere Claude Code v2.1.246 o posterior |

323| `autoCompactWindow` | No | Reduce la [ventana de compactación automática](#subagent-auto-compact-window) de este subagente a un número de tokens entre `100000` y `1000000`. Requiere Claude Code v2.1.296 o posterior |

320| `skills` | No | [Skills](/docs/es/skills) a precargar en el contexto del subagente al inicio. El contenido completo de la skill se inyecta, no solo la descripción. Los subagentes aún pueden invocar skills de proyecto, usuario y plugin no listadas a través de la herramienta Skill |324| `skills` | No | [Skills](/docs/es/skills) a precargar en el contexto del subagente al inicio. El contenido completo de la skill se inyecta, no solo la descripción. Los subagentes aún pueden invocar skills de proyecto, usuario y plugin no listadas a través de la herramienta Skill |

321| `mcpServers` | No | [Servidores MCP](/docs/es/mcp) disponibles para este subagente. Cada entrada es un nombre de servidor que hace referencia a un servidor ya configurado (por ejemplo, `"slack"`) o una definición en línea con el nombre del servidor como clave y una [configuración completa del servidor MCP](/docs/es/mcp#installing-mcp-servers) como valor. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |325| `mcpServers` | No | [Servidores MCP](/docs/es/mcp) disponibles para este subagente. Cada entrada es un nombre de servidor que hace referencia a un servidor ya configurado (por ejemplo, `"slack"`) o una definición en línea con el nombre del servidor como clave y una [configuración completa del servidor MCP](/docs/es/mcp#installing-mcp-servers) como valor. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |

322| `hooks` | No | [Hooks de ciclo de vida](#define-hooks-for-subagents) limitados a este subagente. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |326| `hooks` | No | [Hooks de ciclo de vida](#define-hooks-for-subagents) limitados a este subagente. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |

323| `memory` | No | [Alcance de memoria persistente](#enable-persistent-memory): `user`, `project`, o `local`. Habilita aprendizaje entre sesiones |327| `memory` | No | [Alcance de memoria persistente](#enable-persistent-memory): `user`, `project`, o `local`. Habilita aprendizaje entre sesiones |

324| `background` | No | Establecer en `true` para mantener este subagente en segundo plano incluso cuando Claude pide ejecutarlo en primer plano. Donde [fork mode](#turn-fork-mode-on-or-off) está activado, Claude Code ya ejecuta los subagentes que Claude genera [en segundo plano](#run-subagents-in-foreground-or-background) |328| `background` | No | Establecer en `true` para mantener este subagente en segundo plano incluso cuando Claude pide ejecutarlo en primer plano. Donde [fork mode](#turn-fork-mode-on-or-off) está activado, Claude Code ya ejecuta los subagentes que Claude genera [en segundo plano](#run-subagents-in-foreground-or-background) |

325| `omitClaudeMd` | No | Establecer en `true` para lanzar este subagente sin los archivos CLAUDE.md de usuario, proyecto y local; [archivos de política administrada](/docs/es/memory#how-claude-md-files-load) aún se cargan, excepto para [subagentes administrados](#choose-the-subagent-scope). Úselo para subagentes que toman todo lo que necesitan del [mensaje de delegación](#what-loads-at-startup). Se ignora cuando el agente se ejecuta como el agente de sesión principal a través de `--agent` o la configuración `agent`. Requiere Claude Code v2.1.271 o posterior |329| `omitClaudeMd` | No | Establecer en `true` para iniciar este subagente sin los archivos CLAUDE.md de usuario, proyecto y local en su [contexto inicial](#what-loads-at-startup); los [archivos de política administrada](/docs/es/memory#how-claude-md-files-load) aún se cargan, excepto para [subagentes administrados](#choose-the-subagent-scope). Úsalo para subagentes que toman todo lo que necesitan del prompt de delegación. Se ignora cuando el agente se ejecuta como el agente de sesión principal a través de `--agent` o el ajuste `agent`. Requiere Claude Code v2.1.271 o posterior |

326| `effort` | No | Nivel de esfuerzo cuando este subagente está activo. Sobrescribe el nivel de esfuerzo de la sesión, pero no la variable de entorno [`CLAUDE_CODE_EFFORT_LEVEL`](/docs/es/env-vars#variables). Opciones: `low`, `medium`, `high`, `xhigh`, `max`; los niveles disponibles dependen del modelo. Consulta [Elegir un nivel de esfuerzo](#choose-an-effort-level) |330| `effort` | No | Nivel de esfuerzo cuando este subagente está activo. Sobrescribe el nivel de esfuerzo de la sesión, pero no la variable de entorno [`CLAUDE_CODE_EFFORT_LEVEL`](/docs/es/env-vars#variables). Opciones: `low`, `medium`, `high`, `xhigh`, `max`; los niveles disponibles dependen del modelo. Consulta [Elegir un nivel de esfuerzo](#choose-an-effort-level) |

327| `isolation` | No | Establecer en `worktree` para ejecutar el subagente en un [git worktree](/docs/es/worktrees) temporal, dándole una copia aislada del repositorio ramificada por defecto desde su [rama predeterminada](/docs/es/worktrees#choose-the-base-branch) en lugar del `HEAD` de la sesión principal. El worktree se limpia automáticamente si el subagente no realiza cambios |331| `isolation` | No | Establecer en `worktree` para ejecutar el subagente en un [git worktree](/docs/es/worktrees) temporal, dándole una copia aislada del repositorio ramificada por defecto desde su [rama predeterminada](/docs/es/worktrees#choose-the-base-branch) en lugar del `HEAD` de la sesión principal. El worktree se limpia automáticamente si el subagente no realiza cambios |

328| `color` | No | Color de visualización para el subagente en la lista de tareas y transcripción. Acepta `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, o `cyan` |332| `color` | No | Color de visualización para el subagente en la lista de tareas y transcripción. Acepta `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, o `cyan` |


914claude --agent code-reviewer918claude --agent code-reviewer

915```919```

916 920 

917A menos que el prompt del agente esté [vacío](#choose-the-subagent-scope), el prompt del sistema de un subagente personalizado reemplaza completamente el prompt del sistema predeterminado de Claude Code, de la misma manera que lo hace [`--system-prompt`](/docs/es/cli-reference). Los archivos `CLAUDE.md` y la memoria del proyecto aún se cargan a través del flujo de mensajes normal, incluso cuando la definición del agente establece [`omitClaudeMd`](#supported-frontmatter-fields).921A menos que el prompt del agente esté [vacío](#choose-the-subagent-scope), el prompt del sistema de un subagente personalizado reemplaza completamente el prompt del sistema predeterminado de Claude Code, de la misma manera que lo hace [`--system-prompt`](/docs/es/cli-reference). Los archivos `CLAUDE.md` y la memoria del proyecto aún se cargan a través del flujo de mensajes normal, incluso cuando la definición del agente establece [`omitClaudeMd`](#supported-frontmatter-fields). Si ejecutas la sesión con `-p` como un agente personalizado que tiene su propio prompt, también se inicia sin la [instantánea del estado de git](/docs/es/settings-reference#includegitinstructions).

918 922 

919El nombre del agente aparece como `@<name>` en el encabezado de inicio para que puedas confirmar que está activo.923El nombre del agente aparece como `@<name>` en el encabezado de inicio para que puedas confirmar que está activo.

920 924 


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).1154* **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).

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.1155* **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.

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.1156* **Skills precargados**: contenido completo de cualquier skill nombrado en el campo [`skills`](#preload-skills-into-subagents) del agente. Los agentes integrados no precargan skills.

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.1157* **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). 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.

1154 1158 

1155Para lanzar uno de tus propios subagentes sin los archivos CLAUDE.md del usuario, proyecto y local, establece [`omitClaudeMd: true`](#supported-frontmatter-fields) en su frontmatter o `--agents` JSON.1159Para lanzar uno de tus propios subagentes sin los archivos CLAUDE.md del usuario, proyecto y local, establece [`omitClaudeMd: true`](#supported-frontmatter-fields) en su frontmatter o `--agents` JSON. Para Explore, Plan y los subagentes con `omitClaudeMd`, el `CLAUDE.md` de un subdirectorio y las [reglas con alcance de ruta](/docs/es/memory#path-specific-rules) coincidentes aún [se cargan](/docs/es/memory#how-claude-md-files-load) cuando el subagente trabaja con archivos allí.

1156 1160 

1157La conversación principal aún tiene tu CLAUDE.md completo cuando lee los resultados de estos subagentes, por lo que la mayoría de reglas no necesitan llegar al subagente mismo. Si una regla debe llegar, como "ignora el directorio `vendor/`," reafírmala en el prompt que das a Claude cuando delegas.1161La conversación principal aún tiene tu CLAUDE.md completo cuando lee los resultados de estos subagentes, por lo que la mayoría de reglas no necesitan llegar al subagente mismo. Si una regla debe llegar, como "ignora el directorio `vendor/`," reafírmala en el prompt que das a Claude cuando delegas.

1158 1162 


1196 1200 

1197Mientras [la fila de ese subagente aún esté en el panel de subagentes](#run-subagents-in-foreground-or-background), escribe en su transcripción para reanudarlo tú mismo. Después de eso, un mensaje de Claude puede reanudarlo automáticamente de nuevo.1201Mientras [la fila de ese subagente aún esté en el panel de subagentes](#run-subagents-in-foreground-or-background), escribe en su transcripción para reanudarlo tú mismo. Después de eso, un mensaje de Claude puede reanudarlo automáticamente de nuevo.

1198 1202 

1199Reanudar inicia una nueva ejecución del agente bajo el mismo ID, por lo que un subagente que ya había fallado o se completó se muestra como en ejecución de nuevo en la lista de tareas y en los eventos de tarea del Agent SDK. Antes de v2.1.205, mantenía su estado anterior fallido o completado mientras la ejecución reanudada estaba trabajando.1203Reanudar inicia una nueva ejecución del agente bajo el mismo ID, por lo que un subagente que ya había fallado o se completó se muestra como en ejecución de nuevo en la lista de tareas y en los eventos de tarea del Agent SDK.

1200 1204 

1201`SendMessage` verifica que un nombre aún se refiera al mismo agente que alcanzó anteriormente en la conversación. Si un agente más nuevo ha tomado el nombre, como un agente en segundo plano re-generado que lo reutilizó, Claude Code rechaza el envío en lugar de entregarlo al agente incorrecto, y el error reporta qué agente alcanza ahora el nombre para que Claude pueda redirigirse. Para alcanzar el agente anterior mientras aún se está ejecutando, Claude lo dirige por el ID de agente que recibió cuando generó ese agente. La verificación está limitada a la conversación actual y se reinicia en `/clear`.1205`SendMessage` verifica que un nombre aún se refiera al mismo agente que alcanzó anteriormente en la conversación. Si un agente más nuevo ha tomado el nombre, como un agente en segundo plano re-generado que lo reutilizó, Claude Code rechaza el envío en lugar de entregarlo al agente incorrecto, y el error reporta qué agente alcanza ahora el nombre para que Claude pueda redirigirse. Para alcanzar el agente anterior mientras aún se está ejecutando, Claude lo dirige por el ID de agente que recibió cuando generó ese agente. La verificación está limitada a la conversación actual y se reinicia en `/clear`.

1202 1206 


1214 Compactación automática1218 Compactación automática

1215</h4>1219</h4>

1216 1220 

1217Los subagentes soportan compactación automática usando la misma lógica que la conversación principal. La compactación se dispara bajo las mismas condiciones, y `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` se aplica a subagentes también. Consulta [variables de entorno](/docs/es/env-vars) para saber cuándo entra en vigor la sobrescritura.1221Los subagentes soportan compactación automática. La compactación se dispara a medida que se llena la propia ventana de contexto del subagente, y `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` se aplica a subagentes también. Consulta [variables de entorno](/docs/es/env-vars) para saber cuándo entra en vigor la sobrescritura.

1218 1222 

1219Los eventos de compactación se registran en archivos de transcripción de subagentes:1223Los eventos de compactación se registran en archivos de transcripción de subagentes:

1220 1224 


1231 1235 

1232El valor `preTokens` muestra cuántos tokens se usaron antes de que ocurriera la compactación.1236El valor `preTokens` muestra cuántos tokens se usaron antes de que ocurriera la compactación.

1233 1237 

1238<a id="subagent-auto-compact-window" />

1239 

1240<h5 id="set-the-auto-compact-window-for-one-subagent">

1241 Establecer la ventana de compactación automática para un subagente

1242</h5>

1243 

1244Para que un subagente se compacte antes de lo que lo haría normalmente, establece `autoCompactWindow` en su [frontmatter](#supported-frontmatter-fields) a un número de tokens entre `100000` y `1000000`. Si estableces [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/es/env-vars#variables) en un entero positivo, el subagente usa la ventana de esa variable en su lugar y el campo no tiene efecto. Requiere Claude Code v2.1.296 o posterior.

1245 

1246Este frontmatter establece `autoCompactWindow` en 200,000 tokens para un subagente que lee archivos de registro largos:

1247 

1248```yaml theme={null}

1249---

1250name: log-reader

1251description: Reads long log files and reports the errors it finds

1252autoCompactWindow: 200000

1253---

1254```

1255 

1256Escribe el valor como un entero simple como `200000`, porque en el frontmatter Claude Code lee `200k` como 200, que está fuera del rango permitido. El subagente aún se carga y se compacta como si el campo no existiera. Para verificar si Claude Code ignoró tu valor, ejecuta `claude --debug` en tu shell y busca `invalid autoCompactWindow` en el [registro de depuración](#supported-frontmatter-fields).

1257 

1258Si el valor está dentro del rango y aún no ves ningún cambio, verifica estas causas:

1259 

1260* **El valor no es inferior a la [ventana de compactación automática](/docs/es/model-config#context-window-and-auto-compaction) que el subagente heredaría de otro modo**: para compactar antes, establece un valor inferior a esa ventana.

1261* **Ejecutas toda la sesión como este subagente con `--agent` o el ajuste `agent`**: el campo no tiene efecto allí. Para establecer la ventana de la sesión, consulta [Establecer la ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window).

1262 

1234<h2 id="fork-the-current-conversation">1263<h2 id="fork-the-current-conversation">

1235 Bifurcar la conversación actual1264 Bifurcar la conversación actual

1236</h2>1265</h2>

Details

44| `ReadMcpResourceTool` | Lee un recurso MCP específico por URI | No |44| `ReadMcpResourceTool` | Lee un recurso MCP específico por URI | No |

45| `RemoteTrigger` | Crea, actualiza, ejecuta y lista [Routines](/docs/es/routines) en claude.ai. Respalda el comando `/schedule`. La [referencia de entrada de `RemoteTrigger`](/docs/es/agent-sdk/typescript#remotetrigger) documenta cada acción y las políticas de organización que eliminan la herramienta. Las Routines viven en claude.ai y requieren un plan Pro, Max, Team o Enterprise, por lo que esta herramienta no es accesible desde Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud, o Microsoft Foundry | No |45| `RemoteTrigger` | Crea, actualiza, ejecuta y lista [Routines](/docs/es/routines) en claude.ai. Respalda el comando `/schedule`. La [referencia de entrada de `RemoteTrigger`](/docs/es/agent-sdk/typescript#remotetrigger) documenta cada acción y las políticas de organización que eliminan la herramienta. Las Routines viven en claude.ai y requieren un plan Pro, Max, Team o Enterprise, por lo que esta herramienta no es accesible desde Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud, o Microsoft Foundry | No |

46| `ReportFindings` | Reporta hallazgos de revisión de código como una lista estructurada, con un archivo, resumen y escenario de fallo por hallazgo, para que Claude Code pueda renderizarlos en lugar de imprimirlos como texto. Claude lo llama cuando las instrucciones activas de revisión de código le indican que lo haga. Un hallazgo también puede llevar un slug `category` opcional, como `correctness` o `test-coverage`, mostrado junto a la ubicación del archivo en la lista renderizada | No |46| `ReportFindings` | Reporta hallazgos de revisión de código como una lista estructurada, con un archivo, resumen y escenario de fallo por hallazgo, para que Claude Code pueda renderizarlos en lugar de imprimirlos como texto. Claude lo llama cuando las instrucciones activas de revisión de código le indican que lo haga. Un hallazgo también puede llevar un slug `category` opcional, como `correctness` o `test-coverage`, mostrado junto a la ubicación del archivo en la lista renderizada | No |

47| `ScheduleWakeup` | Reprograma la siguiente iteración de un [`/loop` autónomo](/docs/es/scheduled-tasks#let-claude-choose-the-interval). Claude lo llama al final de cada iteración para elegir cuándo se ejecuta la siguiente, entre uno y sesenta minutos; no lo llamas directamente. Para terminar el bucle en su lugar, Claude lo llama con `stop: true`, que cancela el wakeup pendiente. El campo `stop` requiere Claude Code v2.1.202 o posterior. El wakeup pendiente aparece en `session_crons` en [Entrada de Stop hook](/docs/es/hooks#stop-input) | No |47| `ScheduleWakeup` | Reprograma la siguiente iteración de un [`/loop` autónomo](/docs/es/scheduled-tasks#let-claude-choose-the-interval). Claude lo llama al final de cada iteración para elegir cuándo se ejecuta la siguiente, entre un minuto y una hora después; no lo llamas directamente. Para terminar el bucle en su lugar, Claude lo llama con `stop: true`, que cancela el wakeup pendiente. El wakeup pendiente aparece en `session_crons` en [Entrada de Stop hook](/docs/es/hooks#stop-input) | No |

48| `SendFeedback` | Redacta un informe de retroalimentación sobre Claude Code, cubriendo un problema del producto o el comportamiento de Claude en la sesión, y lo pone en cola en tu máquina para que lo revises. Claude Code no envía nada hasta que elijas enviar el borrador. Consulta [Comportamiento de la herramienta SendFeedback](#sendfeedback-tool-behavior). Requiere Claude Code v2.1.238 o posterior | No |48| `SendFeedback` | Redacta un informe de retroalimentación sobre Claude Code, cubriendo un problema del producto o el comportamiento de Claude en la sesión, y lo pone en cola en tu máquina para que lo revises. Claude Code no envía nada hasta que elijas enviar el borrador. Consulta [Comportamiento de la herramienta SendFeedback](#sendfeedback-tool-behavior). Requiere Claude Code v2.1.238 o posterior | No |

49| `SendMessage` | Envía un mensaje a otro agente: un compañero de [equipo de agentes](/docs/es/agent-teams), un [subagente que reanuda](/docs/es/sub-agents#resume-subagents) por ID o nombre de agente, o una de tus otras sesiones de Claude Code, en esta máquina o más allá. La mensajería de otras sesiones requiere Claude Code v2.1.224 o posterior. [Mensajería entre sesiones](/docs/es/cross-session-messaging) cubre qué sesiones puede alcanzar Claude, [cómo se ve un mensaje cuando llega](/docs/es/cross-session-messaging#what-a-message-looks-like), y [cómo Claude recibe un aviso cuando otra sesión se queda inactiva](/docs/es/cross-session-messaging#get-a-notice-when-another-session-goes-idle). Claude puede incluir una entrada `summary` opcional, típicamente de 5-10 palabras, que Claude Code muestra como una vista previa de una línea. Cuando Claude la omite en un [mensaje de texto plano](/docs/es/cross-session-messaging#limitations), Claude Code usa la primera línea del mensaje como resumen. Claude Code trunca un resumen más largo que 200 caracteres con puntos suspensivos | No |49| `SendMessage` | Envía un mensaje a otro agente: un compañero de [equipo de agentes](/docs/es/agent-teams), un [subagente que reanuda](/docs/es/sub-agents#resume-subagents) por ID o nombre de agente, o una de tus otras sesiones de Claude Code, en esta máquina o más allá. La mensajería de otras sesiones requiere Claude Code v2.1.224 o posterior. [Mensajería entre sesiones](/docs/es/cross-session-messaging) cubre qué sesiones puede alcanzar Claude, [cómo se ve un mensaje cuando llega](/docs/es/cross-session-messaging#what-a-message-looks-like), y [cómo Claude recibe un aviso cuando otra sesión se queda inactiva](/docs/es/cross-session-messaging#get-a-notice-when-another-session-goes-idle). Claude puede incluir una entrada `summary` opcional, típicamente de 5-10 palabras, que Claude Code muestra como una vista previa de una línea. Cuando Claude la omite en un [mensaje de texto plano](/docs/es/cross-session-messaging#limitations), Claude Code usa la primera línea del mensaje como resumen. Claude Code trunca un resumen más largo que 200 caracteres con puntos suspensivos | No |

50| `SendUserFile` | Envía archivos de la sesión a ti con un título opcional, para que un informe generado, diagrama, captura de pantalla o artefacto construido llegue a tu dispositivo en lugar de solo ser mencionado en la transcripción. La entrada `display` opcional controla la presentación: `render` abre el archivo en línea en el cliente, `attach` muestra solo una tarjeta de descarga, y cuando no está establecida el cliente decide por tipo de archivo. Disponible cuando un cliente [Remote Control](/docs/es/remote-control) está conectado o en una [sesión en la nube](/docs/es/claude-code-on-the-web). La entrega se ejecuta a través de infraestructura alojada por Anthropic, por lo que la herramienta no está disponible en Amazon Bedrock, Agent Platform de Google Cloud, o Microsoft Foundry | No |50| `SendUserFile` | Envía archivos de la sesión a ti con un título opcional, para que un informe generado, diagrama, captura de pantalla o artefacto construido llegue a tu dispositivo en lugar de solo ser mencionado en la transcripción. La entrada `display` opcional controla la presentación: `render` abre el archivo en línea en el cliente, `attach` muestra solo una tarjeta de descarga, y cuando no está establecida el cliente decide por tipo de archivo. Disponible cuando un cliente [Remote Control](/docs/es/remote-control) está conectado o en una [sesión en la nube](/docs/es/claude-code-on-the-web). La entrega se ejecuta a través de infraestructura alojada por Anthropic, por lo que la herramienta no está disponible en Amazon Bedrock, Agent Platform de Google Cloud, o Microsoft Foundry | No |


54| `TaskCreate` | Crea una nueva tarea en la lista de tareas. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |54| `TaskCreate` | Crea una nueva tarea en la lista de tareas. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |

55| `TaskGet` | Recupera detalles completos para una tarea específica. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |55| `TaskGet` | Recupera detalles completos para una tarea específica. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |

56| `TaskList` | Lista todas las tareas con su estado actual. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |56| `TaskList` | Lista todas las tareas con su estado actual. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |

57| `TaskOutput` | Recupera la salida de una tarea en segundo plano. Deprecado a favor de `Read` en la ruta del archivo de salida de la tarea. Cuando ninguna tarea coincide con el ID, el error lista los agentes en segundo plano en ejecución por ID y descripción. Antes de v2.1.203, el error solo nombraba el ID faltante | No |57| `TaskOutput` | Eliminado en v2.1.277. Anteriormente recuperaba la salida de una tarea en segundo plano; ahora Claude lee el [archivo de salida](/docs/es/interactive-mode#how-backgrounding-works) de una tarea en segundo plano con `Read` | No |

58| `TaskStop` | Detiene una tarea en segundo plano en ejecución por ID. También acepta un compañero de [equipo de agentes](/docs/es/agent-teams) o un agente en segundo plano nombrado por ID o nombre de agente. Cuando ninguna tarea coincide con el ID, el error lista los agentes en segundo plano en ejecución por ID y descripción, incluidos los agentes que otro agente generó. Antes de v2.1.203, el error listaba compañeros de equipo en ejecución y agentes nombrados pero no agentes en segundo plano que otro agente generó, por lo que no podían ser identificados o detenidos desde la conversación principal | No |58| `TaskStop` | Detiene una tarea en segundo plano en ejecución por ID. También acepta un [compañero de un equipo de agentes](/docs/es/agent-teams) o un agente en segundo plano nombrado por ID o nombre de agente. Cuando ninguna tarea coincide con el ID, el error lista los agentes en segundo plano en ejecución por ID y descripción, incluidos los agentes que otro agente generó | No |

59| `TaskUpdate` | Actualiza el estado de la tarea, dependencias, detalles, o elimina tareas. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |59| `TaskUpdate` | Actualiza el estado de la tarea, dependencias, detalles, o elimina tareas. Proporcionado de forma predeterminada solo en los modelos enumerados en [Disponibilidad de la herramienta Task](#task-tool-availability), y en otros modelos cuando optas por participar | No |

60| `TodoWrite` | Gestiona la lista de verificación de tareas de la sesión. Deshabilitado de forma predeterminada a favor de `TaskCreate`, `TaskGet`, `TaskList` y `TaskUpdate`. Establece `CLAUDE_CODE_ENABLE_TASKS=0` para habilitarlo nuevamente en [sesiones que tienen las herramientas de seguimiento de tareas](#task-tool-availability) | No |60| `TodoWrite` | Gestiona la lista de verificación de tareas de la sesión. Deshabilitado de forma predeterminada a favor de `TaskCreate`, `TaskGet`, `TaskList` y `TaskUpdate`. Establece `CLAUDE_CODE_ENABLE_TASKS=0` para habilitarlo nuevamente en [sesiones que tienen las herramientas de seguimiento de tareas](#task-tool-availability) | No |

61| `ToolSearch` | Busca y carga herramientas diferidas cuando [búsqueda de herramientas](/docs/es/mcp#scale-with-mcp-tool-search) está habilitada | No |61| `ToolSearch` | Busca y carga herramientas diferidas cuando [búsqueda de herramientas](/docs/es/mcp#scale-with-mcp-tool-search) está habilitada | No |

ultrareview.md +2 −2

Details

149 Rastrear una revisión en ejecución149 Rastrear una revisión en ejecución

150</h2>150</h2>

151 151 

152Una revisión típicamente toma de 5 a 10 minutos. La revisión se ejecuta como una tarea en segundo plano, por lo que puedes seguir trabajando en tu sesión o iniciar otros comandos. Si elegiste [publicar los hallazgos en el pull request](#post-findings-to-the-pull-request), mantén la sesión abierta hasta que finalice la revisión; si la sesión termina primero, Claude Code no publica nada.152Una revisión típicamente toma de 15 a 25 minutos. La revisión se ejecuta como una tarea en segundo plano, por lo que puedes seguir trabajando en tu sesión o iniciar otros comandos. Si elegiste [publicar los hallazgos en el pull request](#post-findings-to-the-pull-request), mantén la sesión abierta hasta que finalice la revisión; si la sesión termina primero, Claude Code no publica nada.

153 153 

154Utilice `/tasks` para ver revisiones en ejecución y completadas, abra la vista de detalle para una revisión o detenga una revisión que está en progreso. Si detiene una revisión, Claude Code archiva la sesión en la nube y no devuelve hallazgos parciales.154Utilice `/tasks` para ver revisiones en ejecución y completadas, abra la vista de detalle para una revisión o detenga una revisión que está en progreso. Si detiene una revisión, Claude Code archiva la sesión en la nube y no devuelve hallazgos parciales.

155 155 


216| Objetivo | su diff de trabajo, una solicitud de extracción, una rama o una ruta | su diff de trabajo o una solicitud de extracción |216| Objetivo | su diff de trabajo, una solicitud de extracción, una rama o una ruta | su diff de trabajo o una solicitud de extracción |

217| Se ejecuta | localmente en su sesión | en un sandbox en la nube |217| Se ejecuta | localmente en su sesión | en un sandbox en la nube |

218| Profundidad | se escala con el argumento de esfuerzo | flota multiagente con verificación independiente |218| Profundidad | se escala con el argumento de esfuerzo | flota multiagente con verificación independiente |

219| Duración | segundos a pocos minutos | aproximadamente 5 a 10 minutos |219| Duración | segundos a pocos minutos | aproximadamente 15 a 25 minutos |

220| Costo | cuenta hacia el uso normal | ejecuciones gratuitas, luego aproximadamente \$5 a \$25 por revisión como créditos de uso |220| Costo | cuenta hacia el uso normal | ejecuciones gratuitas, luego aproximadamente \$5 a \$25 por revisión como créditos de uso |

221| Mejor para | retroalimentación rápida mientras itera | confianza previa a la fusión en cambios sustanciales |221| Mejor para | retroalimentación rápida mientras itera | confianza previa a la fusión en cambios sustanciales |

222 222 

Details

146 146 

147<Steps>147<Steps>

148 <Step title="Selecciona un repositorio y rama">148 <Step title="Selecciona un repositorio y rama">

149 Desde [claude.ai/code](https://claude.ai/code) o la pestaña Code en la aplicación móvil de Claude, haz clic en el selector de repositorio debajo del cuadro de entrada y elige un repositorio en el que Claude pueda trabajar. Cada repositorio muestra un selector de rama. Cámbialo para que Claude comience desde una rama de función en lugar de la predeterminada. Puedes agregar múltiples repositorios para trabajar en ellos en una sesión.149 Desde [claude.ai/code](https://claude.ai/code) o la pestaña Code en la aplicación móvil de Claude, haz clic en el selector de repositorio debajo del cuadro de entrada y elige un repositorio en el que Claude pueda trabajar. Puedes agregar múltiples repositorios para trabajar en ellos en una sesión.

150 

151 En claude.ai/code, para que Claude comience desde una rama de función en lugar de la predeterminada, cambia la rama en el control que aparece después del selector de repositorio.

150 </Step>152 </Step>

151 153 

152 <Step title="Elige un modo de permisos">154 <Step title="Elige un modo de permisos">

workflows.md +4 −4

Details

99| :- | :- |99| :- | :- |

100| `↑` / `↓` | Seleccionar una fase o agente |100| `↑` / `↓` | Seleccionar una fase o agente |

101| `Enter` o `→` | Profundizar en la fase seleccionada y luego en el detalle de un agente. En el detalle, `Enter` expande o contrae |101| `Enter` o `→` | Profundizar en la fase seleccionada y luego en el detalle de un agente. En el detalle, `Enter` expande o contrae |

102| `Esc` o `←` | Retroceder un nivel. En v2.1.203 a v2.1.205, `←` no retrocedió de una fase o agente; use `Esc` en esas versiones |102| `Esc` o `←` | Retroceder un nivel |

103| `j` / `k` | Desplazarse dentro del detalle del agente cuando se desborda |103| `j` / `k` | Desplazarse dentro del detalle del agente cuando se desborda |

104| `f` | Filtrar la lista de agentes en la fase seleccionada por estado. Presione nuevamente para ciclar |104| `f` | Filtrar la lista de agentes en la fase seleccionada por estado. Presione nuevamente para ciclar |

105| `p` | Pausar o reanudar la ejecución |105| `p` | Pausar o reanudar la ejecución |


167/effort ultracode167/effort ultracode

168```168```

169 169 

170Para iniciar una sesión con ultracode ya activado, lance con `claude --effort ultracode`, que también establece el nivel de esfuerzo en `xhigh`. Requiere Claude Code v2.1.203 o posterior.170Para iniciar una sesión con ultracode ya activado, lanza con `claude --effort ultracode`, que también establece el nivel de esfuerzo en `xhigh`.

171 171 

172Para activarlo desde el control deslizante `/effort`, presione `Tab` para cambiar el botón **Ultracode**, luego `Enter` para aplicarlo. [Ajustar nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) enumera las rutas que activan ultracode.172Para activarlo desde el control deslizante `/effort`, presione `Tab` para cambiar el botón **Ultracode**, luego `Enter` para aplicarlo. [Ajustar nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) enumera las rutas que activan ultracode.

173 173 


505 505 

506Un workflow genera muchos agentes, por lo que una sola ejecución puede usar significativamente más tokens que trabajar a través de la misma tarea en conversación. Las ejecuciones cuentan hacia el uso de su plan y los límites de velocidad.506Un workflow genera muchos agentes, por lo que una sola ejecución puede usar significativamente más tokens que trabajar a través de la misma tarea en conversación. Las ejecuciones cuentan hacia el uso de su plan y los límites de velocidad.

507 507 

508Para evaluar el gasto antes de comprometerse con una tarea grande, ejecute el workflow en un segmento pequeño primero: un directorio en lugar de todo el repositorio, o una pregunta estrecha en lugar de una amplia. La vista `/workflows` muestra el uso de tokens de cada agente a medida que avanza la ejecución, y puede detener la ejecución allí en cualquier momento, generalmente sin perder el trabajo completado. [Reanudar después de una pausa](#resume-after-a-pause) cubre lo que una ejecución detenida conserva. Los límites de agente del runtime [limitan cuántos agentes puede generar una sola ejecución](#behavior-and-limits), lo que limita el costo de un script descontrolado. Para mantener las ejecuciones con menos agentes, elija la directriz de tamaño `small` [](#set-a-size-guideline).508Para evaluar el gasto antes de comprometerse con una tarea grande, ejecute el workflow en un segmento pequeño primero: un directorio en lugar de todo el repositorio, o una pregunta estrecha en lugar de una amplia. La vista `/workflows` muestra el uso de tokens de cada agente a medida que avanza la ejecución, y puede detener la ejecución allí en cualquier momento, generalmente sin perder el trabajo completado. [Reanudar después de una pausa](#resume-after-a-pause) cubre lo que una ejecución detenida conserva. Los límites de agente del runtime [limitan cuántos agentes puede generar una sola ejecución](#behavior-and-limits), lo que limita el costo de un script descontrolado. Para mantener las ejecuciones con menos agentes, elija la [directriz de tamaño](#set-a-size-guideline) `small`.

509 509 

510Claude Code también marca una ejecución que crece inusualmente grande. Cuando un workflow programa más de 25 agentes, o su total de tokens proyectado supera 1,5 millones, su línea de progreso en el panel de tareas debajo del cuadro de entrada muestra una advertencia de `Large workflow`. La advertencia lo dirige a [`/workflows`](#watch-the-run), donde puede detener la ejecución.510Claude Code también marca una ejecución que crece inusualmente grande. Cuando un workflow programa más de 25 agentes, o su total de tokens proyectado supera 1,5 millones, su línea de progreso en el panel de tareas debajo del cuadro de entrada muestra una advertencia de `Large workflow`. La advertencia lo dirige a [`/workflows`](#watch-the-run), donde puede detener la ejecución.

511 511 


527 Establecer una directriz de tamaño527 Establecer una directriz de tamaño

528</h3>528</h3>

529 529 

530Una directriz de tamaño le dice a Claude cuántos agentes debe apuntar cuando escribe un workflow dinámico. Claude Code envía la directriz a Claude como consejo, no como un límite, por lo que un prompt que requiere una escala diferente aún la anula. Requiere Claude Code v2.1.202 o posterior.530Una directriz de tamaño le dice a Claude a cuántos agentes debe apuntar cuando escribe un workflow dinámico. Claude Code envía la directriz a Claude como consejo, no como un límite, por lo que un prompt que requiere una escala diferente aún la sobrescribe.

531 531 

532Cada valor se asigna a un recuento de agentes:532Cada valor se asigna a un recuento de agentes:

533 533