SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +184 −72. 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

165 Llamar a una herramienta personalizada165 Llamar a una herramienta personalizada

166</h3>166</h3>

167 167 

168Pase el servidor MCP que creó a `query` a través de la opción `mcpServers`. La clave en `mcpServers` se convierte en el segmento `{server_name}` en el nombre completamente calificado de cada herramienta: `mcp__{server_name}__{tool_name}`. Liste ese nombre en `allowedTools` para que la herramienta se ejecute sin un aviso de permiso.168Pasa el servidor MCP que creaste a `query` a través de la opción `mcpServers`. El [nombre completamente calificado](/docs/es/agent-sdk/mcp#tool-naming-convention) de cada herramienta es `mcp__{server_name}__{tool_name}`, donde `{server_name}` es la clave que le asignas al servidor en `mcpServers`. Si la clave contiene caracteres como `.` o espacios, reemplázalos por `_` cuando escribas `{server_name}`. Lista el nombre completamente calificado en `allowedTools` para que la herramienta se ejecute sin una solicitud de permiso.

169 169 

170Estos fragmentos reutilizan el `weatherServer` del [ejemplo de herramienta meteorológica](#weather-tool-example) para preguntarle a Claude cuál es el clima en una ubicación específica.170Estos fragmentos reutilizan el `weatherServer` del [ejemplo de herramienta meteorológica](#weather-tool-example) para preguntarle a Claude cuál es el clima en una ubicación específica.

171 171 

Details

235 235 

236| Opción | Tipo | Predeterminado | Descripción |236| Opción | Tipo | Predeterminado | Descripción |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | Patrón coincidido contra el campo de filtro del evento, siguiendo las [reglas para matchers en archivos de configuración](/docs/es/hooks#matcher-patterns). Para hooks de herramientas, este es el nombre de la herramienta. Las herramientas integradas incluyen `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` y otros (consulta [Tipos de entrada de herramienta](/docs/es/agent-sdk/typescript#tool-input-types) para la lista completa). Las herramientas MCP usan el patrón `mcp__<server>__<action>`, donde `<server>` es la clave que usas en la configuración `mcpServers`. |238| `matcher` | `string` | `undefined` | Patrón coincidido contra el campo de filtro del evento, siguiendo las [reglas para matchers en archivos de configuración](/docs/es/hooks#matcher-patterns). Para hooks de herramientas, ese campo es el nombre de la herramienta. Las herramientas integradas incluyen `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` y otras. Consulta [Tipos de entrada de herramienta](/docs/es/agent-sdk/typescript#tool-input-types) para la lista completa. Las herramientas MCP usan el patrón `mcp__<server>__<action>`, donde `<server>` es la clave que usas en la configuración `mcpServers`, escrita como describe la [convención de nomenclatura de herramientas](/docs/es/agent-sdk/mcp#tool-naming-convention). |

239| `hooks` | `HookCallback[]` | - | Requerido. Matriz de funciones de devolución de llamada a ejecutar cuando el patrón coincide |239| `hooks` | `HookCallback[]` | - | Requerido. Matriz de funciones de devolución de llamada a ejecutar cuando el patrón coincide |

240| `timeout` | `number` | `undefined` | Tiempo de espera en segundos. Cuando se omite, Claude Code aplica el [tiempo de espera predeterminado del evento](#hook-timeout). Tus devoluciones de llamada del SDK siguen los valores predeterminados del hook `command` |240| `timeout` | `number` | `undefined` | Tiempo de espera en segundos. Cuando se omite, Claude Code aplica el [tiempo de espera predeterminado del evento](#hook-timeout). Tus devoluciones de llamada del SDK siguen los valores predeterminados del hook `command` |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 Convención de nomenclatura de herramientas196 Convención de nomenclatura de herramientas

197</h3>197</h3>

198 198 

199Las herramientas MCP siguen el patrón de nomenclatura `mcp__<server-name>__<tool-name>`. Por ejemplo, un servidor GitHub llamado `"github"` con una herramienta `list_issues` se convierte en `mcp__github__list_issues`.199Las herramientas MCP se nombran `mcp__<server-name>__<tool-name>`, donde `<server-name>` es el nombre con el que registras el servidor, como su clave en `mcpServers`.

200 

201Los caracteres del nombre del servidor como `.` y los espacios se reemplazan por `_`. Esta tabla muestra el nombre completo de una herramienta `list_issues` para dos claves de servidor:

202 

203| Clave en `mcpServers` | Nombre completo de la herramienta |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208Usa los nombres completos de las herramientas en `allowedTools` y en las [reglas de permisos de MCP](/docs/es/permissions#mcp). Para un servidor que proporciona un [plugin](/docs/es/agent-sdk/plugins), `<server-name>` adopta la [forma con ámbito de plugin](/docs/es/mcp#plugin-provided-mcp-servers) y comienza con `plugin_`.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 Aprobación automática con allowedTools211 Aprobación automática con allowedTools

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 Ejecutar [hooks](/docs/es/agent-sdk/hooks) primero. Un hook puede denegar la llamada directamente o dejarla pasar. Un hook que devuelve `allow` no omite las reglas de denegación y pregunta a continuación; esas se evalúan independientemente del resultado del hook. Un hook `PreToolUse` allow tampoco puede aprobar una eliminación `rm` o `rmdir` dirigida a una [ruta crítica](/docs/es/permission-modes#critical-paths).19 Ejecutar [hooks](/docs/es/agent-sdk/hooks) primero. Un hook puede denegar la llamada directamente o dejarla pasar. Un hook que devuelve `allow` no omite las reglas de denegación y pregunta a continuación; esas se evalúan independientemente del resultado del hook. Un hook `PreToolUse` que devuelve `allow` tampoco puede aprobar una eliminación `rm` o `rmdir` dirigida a una [ruta crítica](/docs/es/permission-modes#critical-paths). Para saber qué hace ese `allow` en modo plan, consulta [Aprobaciones de hooks en modo plan](/docs/es/permissions#hook-approvals-in-plan-mode).

20 </Step>20 </Step>

21 21 

22 <Step title="Reglas de denegación">22 <Step title="Reglas de denegación">


24 </Step>24 </Step>

25 25 

26 <Step title="Reglas de pregunta">26 <Step title="Reglas de pregunta">

27 Comprobar reglas `ask` de [settings.json](/docs/es/settings-reference#permission-settings). Si una regla de pregunta coincide, la llamada se pasa a su devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para confirmación, incluso en modo `bypassPermissions`.27 Comprobar reglas `ask` de [settings.json](/docs/es/settings-reference#permission-settings). Si una regla de pregunta coincide, la llamada se pasa a tu devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para confirmación, incluso en modo `bypassPermissions`.

28 28 

29 Las herramientas que requieren interacción del usuario se comportan de la misma manera: `AskUserQuestion` y herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) siempre se pasan a la devolución de llamada, incluso cuando una regla de permiso coincide. En modo `dontAsk` ambos casos se deniegan en su lugar, porque ese modo nunca solicita. La anotación MCP requiere Claude Code v2.1.199 o posterior.29 Las herramientas que requieren interacción del usuario se comportan de la misma manera: `AskUserQuestion` y herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) siempre se pasan a la devolución de llamada, incluso cuando una regla de permiso coincide. En modo `dontAsk` ambos casos se deniegan en su lugar, porque ese modo nunca solicita. La anotación MCP requiere Claude Code v2.1.199 o posterior.

30 30 


161 161 

162<Tabs>162<Tabs>

163 <Tab title="En el momento de la consulta">163 <Tab title="En el momento de la consulta">

164 Pase `permission_mode` (Python) o `permissionMode` (TypeScript) al crear una consulta. Este modo se aplica durante toda la sesión a menos que se cambie dinámicamente.164 Pasa `permission_mode` (Python) o `permissionMode` (TypeScript) al crear una consulta.

165 165 

166 <CodeGroup>166 <CodeGroup>

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


314 314 

315Claude explora la base de código y produce un plan sin editar sus archivos fuente. Las herramientas de solo lectura se ejecutan como lo hacen en el modo de permisos `default`.315Claude explora la base de código y produce un plan sin editar sus archivos fuente. Las herramientas de solo lectura se ejecutan como lo hacen en el modo de permisos `default`.

316 316 

317Las ediciones de archivos nunca se aprueban automáticamente en modo de planificación, incluso cuando una regla de permiso coincide. En su lugar, se solicitan a través de su devolución de llamada `canUseTool`. En Claude Code v2.1.212 o posterior, los comandos de shell que modifican archivos, como `touch` y `rm`, llegan a su devolución de llamada `canUseTool` de la misma manera.317Las ediciones de archivos nunca se aprueban automáticamente en modo plan, incluso cuando una regla de permiso coincide o un hook `PreToolUse` devuelve `allow`. En su lugar, se solicitan a través de tu devolución de llamada `canUseTool`. En Claude Code v2.1.212 o posterior, los comandos de shell que modifican archivos, como `touch` y `rm`, llegan a tu devolución de llamada `canUseTool` de la misma manera.

318 318 

319Si establece `allowDangerouslySkipPermissions: true` junto con `permissionMode: 'plan'`, las ediciones de archivos y los comandos de shell que modifican archivos aún llegan a su devolución de llamada `canUseTool`. La opción le permite cambiar a `bypassPermissions` más tarde con `setPermissionMode()`.319Si establece `allowDangerouslySkipPermissions: true` junto con `permissionMode: 'plan'`, las ediciones de archivos y los comandos de shell que modifican archivos aún llegan a su devolución de llamada `canUseTool`. La opción le permite cambiar a `bypassPermissions` más tarde con `setPermissionMode()`.

320 320 


322 322 

323**Úselo cuando:** desee que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen.323**Úselo cuando:** desee que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen.

324 324 

325<h4 id="auto-mode-auto">

326 Modo automático (`auto`)

327</h4>

328 

329Un modelo clasificador revisa acciones como comandos de shell y solicitudes de red antes de que se ejecuten, y permite o bloquea cada una que revisa. Para conocer los modelos y proveedores que requiere el modo automático y el orden en que evalúa las acciones, consulta [Eliminar las solicitudes de permiso con el modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode).

330 

331Si cambias una sesión que está en modo automático a un modelo que el modo automático no admite, usando [`set_model()`](/docs/es/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/es/agent-sdk/typescript#query-object) o [`applyFlagSettings()`](/docs/es/agent-sdk/typescript#applyflagsettings), la sesión cambia al modo `default`:

332 

333* **Lo que ves**: un mensaje `system` con subtipo `status` y `permissionMode` establecido en `"default"`, que el SDK de TypeScript tipa como [`SDKStatusMessage`](/docs/es/agent-sdk/typescript#sdkstatusmessage). A partir de ese momento, las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso llegan a tu devolución de llamada `canUseTool`.

334* **Para volver al modo automático**: cambia a un modelo compatible y luego llama a `set_permission_mode("auto")` o `setPermissionMode("auto")`. Si vuelves a cambiar el modelo sin hacer esa llamada, la sesión permanece en modo `default`. Mientras el modelo no compatible esté activo, la llamada falla con `Cannot set permission mode to auto: auto mode unavailable for this model`.

335 

336El cambio al modo `default` después de una llamada a `set_model()`, `setModel()` o `applyFlagSettings()` requiere Claude Code v2.1.299 o posterior.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 Recursos relacionados339 Recursos relacionados

327</h2>340</h2>

Details

610| `receive_response()` | Recibir mensajes hasta e incluyendo un ResultMessage |610| `receive_response()` | Recibir mensajes hasta e incluyendo un ResultMessage |

611| `interrupt()` | Enviar señal de interrupción (solo funciona en modo de streaming) |611| `interrupt()` | Enviar señal de interrupción (solo funciona en modo de streaming) |

612| `set_permission_mode(mode)` | Cambiar el modo de permiso para la sesión actual |612| `set_permission_mode(mode)` | Cambiar el modo de permiso para la sesión actual |

613| `set_model(model)` | Cambiar el modelo para la sesión actual. Pase `None` para restablecer al [modelo predeterminado de Claude Code](/docs/es/model-config) |613| `set_model(model)` | Cambiar el modelo para la sesión actual. Pasa `None` para restablecer al [modelo predeterminado de Claude Code](/docs/es/model-config). Una sesión en modo `auto` [cambia al modo `default`](/docs/es/agent-sdk/permissions#auto-mode-auto) si el nuevo modelo no admite el modo automático |

614| `rewind_files(user_message_id)` | Restaurar archivos a su estado en el mensaje de usuario especificado. Requiere `enable_file_checkpointing=True`. Ver [File checkpointing](/docs/es/agent-sdk/file-checkpointing) |614| `rewind_files(user_message_id)` | Restaurar archivos a su estado en el mensaje de usuario especificado. Requiere `enable_file_checkpointing=True`. Ver [File checkpointing](/docs/es/agent-sdk/file-checkpointing) |

615| `get_mcp_status()` | Obtener el estado de todos los servidores MCP configurados. Devuelve [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | Obtener el estado de todos los servidores MCP configurados. Devuelve [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | Obtener un desglose del uso de la ventana de contexto por categoría, skill y herramienta. Los mismos datos que `/context` muestra en una sesión interactiva. Devuelve [`ContextUsageResponse`](#contextusageresponse). Para calcular el desglose, Claude Code realiza varias solicitudes de API de conteo de tokens que no aparecen en el flujo de mensajes; ver [cómo se manejan estas solicitudes](#contextusageresponse) |616| `get_context_usage()` | Obtener un desglose del uso de la ventana de contexto por categoría, skill y herramienta. Los mismos datos que `/context` muestra en una sesión interactiva. Devuelve [`ContextUsageResponse`](#contextusageresponse). Para calcular el desglose, Claude Code realiza varias solicitudes de API de conteo de tokens que no aparecen en el flujo de mensajes; ver [cómo se manejan estas solicitudes](#contextusageresponse) |


3884 Establece `"failIfUnavailable": True` en tu configuración de sandbox para detener en su lugar. El SDK reenvía `failIfUnavailable` a Claude Code junto con los campos declarados de `SandboxSettings`. `query()` luego reporta un `ResultMessage` con `subtype="error_during_execution"` y la razón en `errors`. Debido a que se trata de una llamada única a `query()`, el SDK lanza después de ceder ese resultado de error, así que envuelve el bucle en un bloque try para continuar pasado él. Consulta [Manejar el resultado](/docs/es/agent-sdk/agent-loop#handle-the-result) para el contrato de error.3884 Establece `"failIfUnavailable": True` en tu configuración de sandbox para detener en su lugar. El SDK reenvía `failIfUnavailable` a Claude Code junto con los campos declarados de `SandboxSettings`. `query()` luego reporta un `ResultMessage` con `subtype="error_during_execution"` y la razón en `errors`. Debido a que se trata de una llamada única a `query()`, el SDK lanza después de ceder ese resultado de error, así que envuelve el bucle en un bloque try para continuar pasado él. Consulta [Manejar el resultado](/docs/es/agent-sdk/agent-loop#handle-the-result) para el contrato de error.

3885</Note>3885</Note>

3886 3886 

3887Para evitar que los comandos en sandbox escriban en un archivo, agrega su ruta absoluta en [`denyWrite`](/docs/es/settings-reference#sandbox-filesystem-denywrite) en tu configuración de sandbox, como `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. El SDK reenvía `filesystem` a Claude Code junto con los campos declarados de `SandboxSettings`. Una vez que el sandbox se inicia, bloquea las escrituras en cada ruta listada. Si agregas `.env` o `./.env`, los comandos en sandbox pueden escribir en el archivo `.env` del directorio de trabajo de la sesión.3887Para evitar que los comandos en sandbox escriban en un archivo, agrega su ruta absoluta en [`denyWrite`](/docs/es/settings-reference#sandbox-filesystem-denywrite) en tu configuración de sandbox, como `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. El SDK reenvía `filesystem` a Claude Code junto con los campos declarados de `SandboxSettings`. Una vez que el sandbox se inicia, bloquea las escrituras en cada ruta absoluta que listaste.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 Ejemplo de uso3890 Ejemplo de uso

Details

736| `interrupt()` | Interrumpe la consulta. Solo está disponible en el modo de entrada en streaming. Cuando la CLI anuncia la capacidad `interrupt_receipt_v1` en [`SDKSystemMessage.capabilities`](#sdksystemmessage), se resuelve con un [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) que enumera los mensajes que estaban pendientes cuando llegó la interrupción. Se resuelve con `undefined` en CLI anteriores a v2.1.205 |736| `interrupt()` | Interrumpe la consulta. Solo está disponible en el modo de entrada en streaming. Cuando la CLI anuncia la capacidad `interrupt_receipt_v1` en [`SDKSystemMessage.capabilities`](#sdksystemmessage), se resuelve con un [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) que enumera los mensajes que estaban pendientes cuando llegó la interrupción. Se resuelve con `undefined` en CLI anteriores a v2.1.205 |

737| `rewindFiles(userMessageId, options?)` | Restaura los archivos al estado que tenían en el mensaje de usuario especificado. Pasa `{ dryRun: true }` para previsualizar los cambios. Requiere `enableFileCheckpointing: true`. Consulta [Checkpointing de archivos](/docs/es/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | Restaura los archivos al estado que tenían en el mensaje de usuario especificado. Pasa `{ dryRun: true }` para previsualizar los cambios. Requiere `enableFileCheckpointing: true`. Consulta [Checkpointing de archivos](/docs/es/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | Cambia el modo de permisos (solo disponible en el modo de entrada en streaming) |738| `setPermissionMode()` | Cambia el modo de permisos (solo disponible en el modo de entrada en streaming) |

739| `setModel()` | Cambia el modelo (solo disponible en el modo de entrada en streaming). Pasar `undefined` o la cadena `"default"` restablece el [modelo predeterminado de Claude Code](/docs/es/model-config) |739| `setModel()` | Cambia el modelo (solo disponible en el modo de entrada en streaming). Pasar `undefined` o la cadena `"default"` restablece el [modelo predeterminado de Claude Code](/docs/es/model-config). Una sesión en modo `auto` [cambia al modo `default`](/docs/es/agent-sdk/permissions#auto-mode-auto) si el nuevo modelo no admite el modo automático |

740| `setMaxThinkingTokens()` | *Obsoleto:* usa la opción `thinking` en su lugar. Cambia el máximo de tokens de pensamiento. Pasar `null` restablece el pensamiento al valor predeterminado de la sesión: se borra cualquier sobrescritura hecha durante la sesión, y el pensamiento permanece desactivado en las sesiones que lo tienen deshabilitado |740| `setMaxThinkingTokens()` | *Obsoleto:* usa la opción `thinking` en su lugar. Cambia el máximo de tokens de pensamiento. Pasar `null` restablece el pensamiento al valor predeterminado de la sesión: se borra cualquier sobrescritura hecha durante la sesión, y el pensamiento permanece desactivado en las sesiones que lo tienen deshabilitado |

741| `applyFlagSettings(settings)` | Combina configuración en la capa de configuración de flags de la sesión en tiempo de ejecución (solo disponible en el modo de entrada en streaming). Consulta [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | Combina configuración en la capa de configuración de flags de la sesión en tiempo de ejecución (solo disponible en el modo de entrada en streaming). Consulta [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | Escribe una clave de la lista permitida en el archivo de configuración local del proyecto o en tu archivo de configuración de usuario, para que el valor persista en sesiones posteriores. Consulta [`updateSettings()`](#updatesettings). Requiere TypeScript SDK v0.3.257 o posterior, que incluye Claude Code v2.1.257 |742| `updateSettings(source, settings)` | Escribe una clave de la lista permitida en el archivo de configuración local del proyecto o en tu archivo de configuración de usuario, para que el valor persista en sesiones posteriores. Consulta [`updateSettings()`](#updatesettings). Requiere TypeScript SDK v0.3.257 o posterior, que incluye Claude Code v2.1.257 |


6367| Propiedad | Tipo | Predeterminado | Descripción |6367| Propiedad | Tipo | Predeterminado | Descripción |

6368| :- | :- | :- | :- |6368| :- | :- | :- | :- |

6369| `allowWrite` | `string[]` | `[]` | Patrones de ruta de archivo para permitir acceso de escritura a |6369| `allowWrite` | `string[]` | `[]` | Patrones de ruta de archivo para permitir acceso de escritura a |

6370| `denyWrite` | `string[]` | `[]` | Patrones de ruta de archivo a los que se niega el acceso de escritura. Para bloquear las escrituras en sandbox a un archivo en el directorio de trabajo de la sesión, indica su ruta absoluta. Si indicas `.env` o `./.env`, los comandos en sandbox pueden escribir en el archivo `.env` del directorio de trabajo de la sesión |6370| `denyWrite` | `string[]` | `[]` | Patrones de ruta de archivo a los que se niega el acceso de escritura. Para bloquear las escrituras en sandbox a un archivo en el directorio de trabajo de la sesión, indica su ruta absoluta. |

6371| `denyRead` | `string[]` | `[]` | Patrones de ruta de archivo para negar acceso de lectura a |6371| `denyRead` | `string[]` | `[]` | Patrones de ruta de archivo para negar acceso de lectura a |

6372 6372 

6373<h3 id="permissions-fallback-for-unsandboxed-commands">6373<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738El [modo de permisos](/docs/es/permissions) depende de cómo iniciaste la sesión:738El [modo de permisos](/docs/es/permissions) depende de cómo iniciaste la sesión:

739 739 

740* **Enviada al segundo plano con `/bg` o `←`**: Claude Code conserva el modo de permisos en el que estaba la sesión, por lo que una que cambiaste a `acceptEdits` o `auto` se mantiene así después de desasociarte740* **Enviada al segundo plano con `/bg` o `←`**: Claude Code conserva el modo de permisos en el que estaba la sesión, por lo que una que cambiaste a `acceptEdits` o `auto` se mantiene así después de desasociarte

741* **Enviada desde una vista de agentes que abriste con `←`**: la configuración propia del destino tiene prioridad, y el modo de permisos de la sesión de la que viniste se aplica cuando nada más establece uno741* **Enviada desde una vista de agentes que abriste con `←`**: Claude Code toma el modo de permisos de la nueva sesión primero de la configuración del directorio de destino y luego de la sesión de la que viniste

742* **Enviada desde `claude agents` iniciado en un shell, o con `claude --bg`**: la nueva sesión comienza como lo haría una nueva sesión de `claude` en ese directorio, a menos que la hayas enviado desde una vista de agentes que abriste con [predeterminados de envío](#dispatch-defaults). [En qué modo de permisos comienza una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in) enumera el orden742* **Enviada desde `claude agents` iniciado en un shell, o con `claude --bg`**: la nueva sesión comienza como lo haría una nueva sesión de `claude` en ese directorio, a menos que la hayas enviado desde una vista de agentes que abriste con [predeterminados de envío](#dispatch-defaults). [En qué modo de permisos comienza una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in) enumera el orden

743 743 

744Para una sesión que envías desde una vista de agentes abierta con `←`, Claude Code toma el modo de permisos de la primera de estas fuentes que se aplique:744Para una sesión que envías desde una vista de agentes abierta con `←`, Claude Code toma el modo de permisos de la primera de estas fuentes que se aplique:


7461. El [`permissions.defaultMode`](/docs/es/settings-reference#permissions-defaultmode) del directorio de destino. Se aplican dos reglas sobre la fuente:7461. El [`permissions.defaultMode`](/docs/es/settings-reference#permissions-defaultmode) del directorio de destino. Se aplican dos reglas sobre la fuente:

747 * `auto` y `bypassPermissions` [solo surten efecto desde la configuración administrada, un archivo `--settings` o `~/.claude/settings.json`](/docs/es/settings-reference#permissions-defaultmode).747 * `auto` y `bypassPermissions` [solo surten efecto desde la configuración administrada, un archivo `--settings` o `~/.claude/settings.json`](/docs/es/settings-reference#permissions-defaultmode).

748 * Claude Code rechaza un `defaultMode` del `.claude/settings.json` o `.claude/settings.local.json` del proyecto que seleccione un modo más permisivo que el modo en el que estaba la sesión de la que viniste.748 * Claude Code rechaza un `defaultMode` del `.claude/settings.json` o `.claude/settings.local.json` del proyecto que seleccione un modo más permisivo que el modo en el que estaba la sesión de la que viniste.

7492. El modo de permisos de la sesión de la que viniste7492. El modo de permisos de la sesión de la que viniste. Si esa sesión estaba en modo `bypassPermissions`, la nueva sesión puede comenzar en su lugar en modo Manual, con el aviso `Bypass permissions was requested at launch and ignored`. Eso sucede cuando tu aceptación del descargo de responsabilidad de omisión consta solo en `.claude/settings.local.json` o en un archivo `--settings`. Continúa en modo Manual, o [agrega esa aceptación a `~/.claude/settings.json`](/docs/es/permission-modes#bypass-permissions-acceptance).

750 750 

751Cuando Claude Code rechaza el modo de una fuente por ser demasiado permisivo, decide la siguiente fuente de la lista. Por ejemplo, si haces el envío desde una sesión en modo plan a un directorio cuya configuración registrada en el repositorio pide `acceptEdits`, la nueva sesión comienza en modo plan. Si mueves ese `defaultMode` a `~/.claude/settings.json`, se aplica sin importar el modo de permisos de la sesión de la que viniste.751Cuando Claude Code rechaza el modo de una fuente por ser demasiado permisivo, decide la siguiente fuente de la lista. Por ejemplo, si haces el envío desde una sesión en modo plan a un directorio cuya configuración registrada en el repositorio pide `acceptEdits`, la nueva sesión comienza en modo plan. Si mueves ese `defaultMode` a `~/.claude/settings.json`, se aplica sin importar el modo de permisos de la sesión de la que viniste.

752 752 

Details

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

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

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

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

88| `--debug-file <path>` | Escribe registros de depuración en una ruta de archivo específica. Habilita implícitamente el modo de depuración. Tiene prioridad sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | Escribe registros de depuración en una ruta de archivo específica. Habilita implícitamente el modo de depuración. Tiene prioridad sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | Abre la [aplicación Claude Desktop](/docs/es/desktop) en el directorio actual y sale sin iniciar una sesión en la terminal. Añade `--continue`, o `--resume` con un ID de sesión, para [abrir esa sesión en Desktop](/docs/es/desktop#coming-from-the-cli) en su lugar. `--resume` aquí toma solo un ID de sesión, no un nombre o ruta de transcripción. No toma indicador ni otras banderas excepto `--verbose` y las banderas `--debug`, ya que la aplicación inicia la sesión por sí misma. Disponible en macOS y Windows x64 cuando estés conectado con una suscripción de Claude. Requiere Claude Code v2.1.285 o posterior | `claude --desktop` |89| `--desktop` | Abre la [aplicación Claude Desktop](/docs/es/desktop) en el directorio actual y sale sin iniciar una sesión en la terminal. Añade `--continue`, o `--resume` con un ID de sesión, para [abrir esa sesión en Desktop](/docs/es/desktop#coming-from-the-cli) en su lugar. `--resume` aquí toma solo un ID de sesión, no un nombre o ruta de transcripción. No toma indicador ni otras banderas excepto `--verbose` y las banderas `--debug`, ya que la aplicación inicia la sesión por sí misma. Disponible en macOS y Windows x64 cuando estés conectado con una suscripción de Claude. Requiere Claude Code v2.1.285 o posterior | `claude --desktop` |

90| `--disable-slash-commands` | Deshabilita todos los skills y comandos para esta sesión | `claude --disable-slash-commands` |90| `--disable-slash-commands` | Deshabilita todos los skills y comandos para esta sesión | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429Una sesión que ha estado abierta durante horas puede usar mucho más de los límites de su plan de lo que su actividad sugiere, generalmente por una de estas razones:429Una sesión que ha estado abierta durante horas puede usar mucho más de los límites de su plan de lo que su actividad sugiere, generalmente por una de estas razones:

430 430 

431* **Contexto largo**: Claude Code envía su conversación completa con cada solicitud, y cada vez que Claude utiliza herramientas envía otra solicitud que lleva ese lote de resultados de herramientas. Con [almacenamiento en caché de solicitudes](/docs/es/prompt-caching), Claude Code relee ese historial a la [tasa de token almacenado en caché](https://platform.claude.com/docs/en/about-claude/pricing), por lo que una pregunta de una línea en una sesión que ha estado abierta todo el día sigue consumiendo uso para toda la conversación. Consulte [Gestionar el contexto de forma proactiva](#manage-context-proactively) para conocer formas de mantener su contexto pequeño431* **Contexto largo**: Claude Code envía su conversación completa con cada solicitud, y cada vez que Claude utiliza herramientas envía otra solicitud que lleva ese lote de resultados de herramientas. Con [almacenamiento en caché de solicitudes](/docs/es/prompt-caching), Claude Code relee ese historial a la [tasa de token almacenado en caché](https://platform.claude.com/docs/en/about-claude/pricing), por lo que una pregunta de una línea en una sesión que ha estado abierta todo el día sigue consumiendo uso para toda la conversación. Consulte [Gestionar el contexto de forma proactiva](#manage-context-proactively) para conocer formas de mantener su contexto pequeño

432* **Fallos de caché**: su primer mensaje después de una pausa más larga que la [duración del caché](/docs/es/prompt-caching#cache-lifetime) falla en el caché y reprocesa su contexto completo. La duración es de una hora en una suscripción y se reduce a cinco minutos una vez que está utilizando [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); en una clave API o proveedor de nube, es de cinco minutos por defecto. Para mantener la duración de una hora mientras utiliza créditos de uso, [elija el TTL usted mismo](/docs/es/prompt-caching#choose-the-ttl-yourself). En los planes Pro y Max, cuando reanuda una sesión grande después de una pausa larga, Claude Code [ofrece reanudar desde un resumen](/docs/es/sessions#resume-from-a-summary) para que las solicitudes posteriores no lleven el historial completo432* **Fallos de caché**: tu primer mensaje después de una pausa más larga que la [duración de la caché](/docs/es/prompt-caching#cache-lifetime) falla en la caché y reprocesa tu contexto completo. La duración es de una hora en una suscripción y se reduce a cinco minutos una vez que estás utilizando [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); con una clave de API o un proveedor de nube, es de cinco minutos por defecto. Para mantener la duración de una hora mientras utilizas créditos de uso, [elige el TTL tú mismo](/docs/es/prompt-caching#choose-the-ttl-yourself)

433* **Tareas programadas**: una [tarea programada](/docs/es/scheduled-tasks) se ejecuta en su intervalo incluso mientras la sesión está inactiva, enviando su contexto completo cada vez433* **Tareas programadas**: una [tarea programada](/docs/es/scheduled-tasks) se ejecuta en su intervalo incluso mientras la sesión está inactiva, enviando su contexto completo cada vez

434* **Mensajes entre sesiones**: Claude Code entrega un [mensaje de otra de sus sesiones](/docs/es/cross-session-messaging) como un nuevo turno cuando esta sesión está inactiva, enviando su contexto completo cada vez. Para retener los mensajes entrantes en lugar de entregarlos, establezca [`crossSessionInbound`](/docs/es/settings-reference#crosssessioninbound) en `hold`434* **Mensajes entre sesiones**: Claude Code entrega un [mensaje de otra de sus sesiones](/docs/es/cross-session-messaging) como un nuevo turno cuando esta sesión está inactiva, enviando su contexto completo cada vez. Para retener los mensajes entrantes en lugar de entregarlos, establezca [`crossSessionInbound`](/docs/es/settings-reference#crosssessioninbound) en `hold`

435* **Verificaciones de objetivos**: mientras el trabajo en segundo plano mantiene un [objetivo](/docs/es/goal) activo en espera, Claude Code [le pide a Claude que verifique ese trabajo](/docs/es/goal#background-work-defers-evaluation) incluso cuando la sesión está inactiva, iniciando un nuevo turno que envía su contexto completo. Claude Code inicia como máximo tres verificaciones inactivas por objetivo entre sus solicitudes. Antes de v2.1.246, las verificaciones inactivas eran ilimitadas. Para desactivar las verificaciones, establezca [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/es/env-vars) en `0`. Las verificaciones inactivas requieren Claude Code v2.1.236 o posterior435* **Verificaciones de objetivos**: mientras el trabajo en segundo plano mantiene un [objetivo](/docs/es/goal) activo en espera, Claude Code [le pide a Claude que verifique ese trabajo](/docs/es/goal#background-work-defers-evaluation) incluso cuando la sesión está inactiva, iniciando un nuevo turno que envía su contexto completo. Claude Code inicia como máximo tres verificaciones inactivas por objetivo entre sus solicitudes. Antes de v2.1.246, las verificaciones inactivas eran ilimitadas. Para desactivar las verificaciones, establezca [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/es/env-vars) en `0`. Las verificaciones inactivas requieren Claude Code v2.1.236 o posterior

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID del proyecto de GCP al que se dirigen las solicitudes de Google Cloud's Agent Platform. Consulta [Configurar las credenciales de GCP](/docs/es/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID del proyecto de GCP al que se dirigen las solicitudes de Google Cloud's Agent Platform. Consulta [Configurar las credenciales de GCP](/docs/es/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | ID del espacio de trabajo para [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Establécela cuando tu regla de federación abarque más de un espacio de trabajo, para que el intercambio de tokens sepa a qué espacio de trabajo dirigirse |197| `ANTHROPIC_WORKSPACE_ID` | ID del espacio de trabajo para [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Establécela cuando tu regla de federación abarque más de un espacio de trabajo, para que el intercambio de tokens sepa a qué espacio de trabajo dirigirse |

198| `API_FORCE_IDLE_TIMEOUT` | Sobrescribe el tiempo de espera de inactividad del cuerpo de 5 minutos que aborta una respuesta del modelo en streaming cuando no llegan bytes. Establécela en `0` para desactivar el tiempo de espera, por ejemplo cuando un [gateway](/docs/es/llm-gateway) lento o un modelo local hace pausas de más de 5 minutos entre fragmentos, o en `1` para mantenerlo activo con todos los proveedores. Si no se establece, el tiempo de espera está activo en proveedores distintos de la API directa de Anthropic, [Claude Platform on AWS](/docs/es/claude-platform-on-aws) y Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` establecida. Los [watchdogs de streaming](/docs/es/network-config#streaming-idle-watchdogs) se ejecutan de forma independiente y abortan una pausa silenciosa prolongada incluso si estableces `0` aquí |198| `API_FORCE_IDLE_TIMEOUT` | Sobrescribe el tiempo de espera de inactividad del cuerpo de 5 minutos que aborta una respuesta del modelo en streaming cuando no llegan bytes. Establécela en `0` para desactivar el tiempo de espera, por ejemplo cuando un [gateway](/docs/es/llm-gateway) lento o un modelo local hace pausas de más de 5 minutos entre fragmentos, o en `1` para mantenerlo activo con todos los proveedores. Si no se establece, el tiempo de espera está activo en proveedores distintos de la API directa de Anthropic, [Claude Platform on AWS](/docs/es/claude-platform-on-aws) y Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` establecida. Los [watchdogs de streaming](/docs/es/network-config#streaming-idle-watchdogs) se ejecutan de forma independiente y abortan una pausa silenciosa prolongada incluso si estableces `0` aquí |

199| `API_TIMEOUT_MS` | Tiempo de espera para las solicitudes a la API en milisegundos (predeterminado: 600000, o 10 minutos; máximo: 2147483647). Auméntalo cuando las solicitudes agoten el tiempo de espera en redes lentas o al enrutar a través de un proxy. Los valores por encima del máximo desbordan el temporizador subyacente y hacen que las solicitudes fallen de inmediato |199| `API_TIMEOUT_MS` | Tiempo de espera para las solicitudes a la API en milisegundos (predeterminado: 600000, o 10 minutos; máximo: 2147483647). Una solicitud en streaming tiene que recibir sus encabezados de respuesta dentro de ese plazo. Auméntalo cuando se agote el tiempo de espera de las solicitudes en redes lentas o al enrutar a través de un proxy |

200| `AWS_BEARER_TOKEN_BEDROCK` | Clave de API de Amazon Bedrock para la autenticación (consulta [Claves de API de Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | Clave de API de Amazon Bedrock para la autenticación (consulta [Claves de API de Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | Tiempo de espera predeterminado para un comando en primer plano de la herramienta Bash o PowerShell, en milisegundos (predeterminado: 120000, o 2 minutos). Un valor superior al [límite de tiempo predeterminado para los comandos en segundo plano](/docs/es/tools-reference#time-limit-for-background-commands) reemplaza ese valor predeterminado en las sesiones desatendidas. El límite de tiempo en segundo plano requiere Claude Code v2.1.285 o posterior |201| `BASH_DEFAULT_TIMEOUT_MS` | Tiempo de espera predeterminado para un comando en primer plano de la herramienta Bash o PowerShell, en milisegundos (predeterminado: 120000, o 2 minutos). Un valor superior al [límite de tiempo predeterminado para los comandos en segundo plano](/docs/es/tools-reference#time-limit-for-background-commands) reemplaza ese valor predeterminado en las sesiones desatendidas. El límite de tiempo en segundo plano requiere Claude Code v2.1.285 o posterior |

202| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres de la salida de bash que Claude Code incorpora al resultado de un comando (predeterminado: 30000; máximo: 150000). Si estableces el ajuste [`bashOutputMaxChars`](/docs/es/settings-reference#bashoutputmaxchars), Claude Code ignora esta variable. Consulta [Límites de salida](/docs/es/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres de la salida de bash que Claude Code incorpora al resultado de un comando (predeterminado: 30000; máximo: 150000). Si estableces el ajuste [`bashOutputMaxChars`](/docs/es/settings-reference#bashoutputmaxchars), Claude Code ignora esta variable. Consulta [Límites de salida](/docs/es/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [Errores de sesión en segundo plano](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [Errores de sesión en segundo plano](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [Errores de sesión en segundo plano](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [Errores de sesión en segundo plano](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [Errores de sesión en segundo plano](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [Errores de sesión en segundo plano](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [Omitir todas las comprobaciones con el modo bypassPermissions](/docs/es/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [Errores de sesión en segundo plano](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [Errores de sesión en segundo plano](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [Errores de sesión en segundo plano](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [Errores de sesión en segundo plano](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [Errores de sesión en segundo plano](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [Errores de sesión en segundo plano](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* Conexiones perdidas. Cuando una conexión se cae a mitad de una solicitud antes de que Claude haya completado cualquier parte de su respuesta, incluido su pensamiento, Claude Code reenvía la solicitud con el mismo retroceso y el turno continúa, incluso si algo de texto ya había comenzado a enviarse en streaming. Cuando se cae después de que Claude ha terminado de pensar pero antes de que haya comenzado cualquier texto o llamada a herramienta, Claude Code en su lugar reenvía la solicitud hasta dos veces en rápida sucesión, y termina el turno con `Connection lost before a response was produced` si la conexión sigue cayéndose en ese punto.419* Conexiones perdidas. Cuando una conexión se cae a mitad de una solicitud antes de que Claude haya completado cualquier parte de su respuesta, incluido su pensamiento, Claude Code reenvía la solicitud con el mismo retroceso y el turno continúa, incluso si algo de texto ya había comenzado a enviarse en streaming. Cuando se cae después de que Claude ha terminado de pensar pero antes de que haya comenzado cualquier texto o llamada a herramienta, Claude Code en su lugar reenvía la solicitud hasta dos veces en rápida sucesión, y termina el turno con `Connection lost before a response was produced` si la conexión sigue cayéndose en ese punto.

419* Una conexión que Claude Code detecta que se rompió porque tu computadora entró en suspensión a mitad de una solicitud. Claude Code la cuenta como una conexión perdida según las reglas anteriores; una vez que la etiqueta de reintento nombra la razón específica, dice `Connection lost while your computer was asleep`, y si el turno termina después de que Claude ha terminado de pensar pero antes de cualquier texto o llamada a herramienta, el mensaje dice `Your computer went to sleep before a response was produced`.420* Una conexión que Claude Code detecta que se rompió porque tu computadora entró en suspensión a mitad de una solicitud. Claude Code la cuenta como una conexión perdida según las reglas anteriores; una vez que la etiqueta de reintento nombra la razón específica, dice `Connection lost while your computer was asleep`, y si el turno termina después de que Claude ha terminado de pensar pero antes de cualquier texto o llamada a herramienta, el mensaje dice `Your computer went to sleep before a response was produced`.

420* Un stream de respuesta estancado, cuando los encabezados de respuesta han llegado pero ninguna parte de la respuesta de Claude ha llegado, o cuando Claude ha terminado de pensar pero no ha comenzado ningún texto ni llamada a herramienta: Claude Code aborta la conexión estancada y vuelve a enviar la solicitud en streaming como máximo una vez. Si la respuesta se estanca una segunda vez después de que Claude ha terminado de pensar pero antes de cualquier texto o llamada a herramienta, Claude Code termina el turno con `The response stalled before a response was produced`.421* Un stream de respuesta estancado, cuando los encabezados de respuesta han llegado pero ninguna parte de la respuesta de Claude ha llegado, o cuando Claude ha terminado de pensar pero no ha comenzado ningún texto ni llamada a herramienta: Claude Code aborta la conexión estancada y vuelve a enviar la solicitud en streaming como máximo una vez. Si la respuesta se estanca una segunda vez después de que Claude ha terminado de pensar pero antes de cualquier texto o llamada a herramienta, Claude Code termina el turno con `The response stalled before a response was produced`.

421* Una solicitud en streaming a la que la API nunca responde con encabezados de respuesta, en una conexión donde [se aplica el plazo del primer byte](/docs/es/network-config#streaming-idle-watchdogs): Claude Code la aborta al cumplirse el plazo y la reenvía como máximo una vez por solicitud al modelo, dentro del presupuesto de reintentos, y luego termina el turno con [No response from API](#no-response-from-api) si ese intento también queda sin respuesta. En otras conexiones, la solicitud espera hasta `API_TIMEOUT_MS`. Cuando estableces `CLAUDE_CODE_RETRY_WATCHDOG`, el límite de un reintento no se aplica.422* Una solicitud en streaming a la que la API nunca responde con encabezados de respuesta, en una conexión donde [se aplica el plazo del primer byte](/docs/es/network-config#streaming-idle-watchdogs): Claude Code la aborta al cumplirse el plazo y la reenvía como máximo una vez por solicitud al modelo, dentro del presupuesto de reintentos, y luego termina el turno con [No response from API](#no-response-from-api) si ese intento también queda sin respuesta. Cuando estableces `CLAUDE_CODE_RETRY_WATCHDOG`, el límite de un reintento no se aplica.

422* Una respuesta en streaming que el filtro de contenido de salida de la API detiene antes de que Claude haya terminado de pensar o haya comenzado cualquier texto o llamada a herramienta. Claude Code reenvía la solicitud una vez, dentro del presupuesto de reintentos, y muestra [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) si el filtro también detiene la segunda respuesta.423* Una respuesta en streaming que el filtro de contenido de salida de la API detiene antes de que Claude haya terminado de pensar o haya comenzado cualquier texto o llamada a herramienta. Claude Code reenvía la solicitud una vez, dentro del presupuesto de reintentos, y muestra [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) si el filtro también detiene la segunda respuesta.

423* Limitaciones temporales 429, pero no el `429` de límite de gasto de un gateway, que no es una limitación; consulta [Spend limit reached](#spend-limit-reached).424* Limitaciones temporales 429, pero no el `429` de límite de gasto de un gateway, que no es una limitación; consulta [Spend limit reached](#spend-limit-reached).

424 * Cuando has iniciado sesión con una suscripción de claude.ai, esto incluye limitaciones 429 que no llevan los encabezados de cuota de tu plan. Antes de v2.1.199, Claude Code reintentaba esas limitaciones solo para inicios de sesión con clave de API y Enterprise.425 * Cuando has iniciado sesión con una suscripción de claude.ai, esto incluye limitaciones 429 que no llevan los encabezados de cuota de tu plan. Antes de v2.1.199, Claude Code reintentaba esas limitaciones solo para inicios de sesión con clave de API y Enterprise.


4552 4553 

4553* Corrige cada entrada que el error nombra contra las [herramientas disponibles para subagentes](/docs/es/sub-agents#available-tools)4554* Corrige cada entrada que el error nombra contra las [herramientas disponibles para subagentes](/docs/es/sub-agents#available-tools)

4554* Elimina entradas para herramientas que la sesión no tiene, como herramientas MCP de un servidor que no está conectado4555* Elimina entradas para herramientas que la sesión no tiene, como herramientas MCP de un servidor que no está conectado

4556* Si la entrada nombra un servidor MCP conectado, compara la entrada con el nombre de ese servidor tal como lo escriben los [nombres de herramientas](/docs/es/permissions#mcp) del servidor, como `reports__v2` en `mcp__reports__v2__get_totals`. Para ese servidor, escribe `mcp__reports__v2__*`, que es `mcp__` seguido del nombre completo y `__*`. Con el más corto `mcp__reports`, que nombra un servidor llamado `reports`, el subagente no obtiene ninguna de las herramientas de `reports__v2`

4555* Para una herramienta que [los subagentes en segundo plano descartan](/docs/es/sub-agents#available-tools), como `CronCreate`, elimina la entrada. Para mantener la herramienta, [desactiva el modo fork](/docs/es/sub-agents#turn-fork-mode-on-or-off) y pide a Claude que ejecute el subagente en primer plano4557* Para una herramienta que [los subagentes en segundo plano descartan](/docs/es/sub-agents#available-tools), como `CronCreate`, elimina la entrada. Para mantener la herramienta, [desactiva el modo fork](/docs/es/sub-agents#turn-fork-mode-on-or-off) y pide a Claude que ejecute el subagente en primer plano

4556* Elimina el campo `tools` en lugar de enumerar herramientas para dar al subagente cada [herramienta disponible para subagentes](/docs/es/sub-agents#available-tools)4558* Elimina el campo `tools` en lugar de enumerar herramientas para dar al subagente cada [herramienta disponible para subagentes](/docs/es/sub-agents#available-tools)

4557* Para una lista `tools` que contiene solo `Agent`, aumenta el [límite de profundidad](/docs/es/sub-agents#let-subagents-spawn-their-own-subagents) o da al agente al menos otra herramienta: Claude Code retiene `Agent` en ese límite, por lo que una lista sin nada más en ella se resuelve a ninguna herramienta4559* Para una lista `tools` que contiene solo `Agent`, aumenta el [límite de profundidad](/docs/es/sub-agents#let-subagents-spawn-their-own-subagents) o da al agente al menos otra herramienta: Claude Code retiene `Agent` en ese límite, por lo que una lista sin nada más en ella se resuelve a ninguna herramienta

hooks.md +53 −16

Details

476| `async` | no | Si es `true`, se ejecuta en segundo plano sin bloquear. Consulta [Ejecutar hooks en segundo plano](#run-hooks-in-the-background) |476| `async` | no | Si es `true`, se ejecuta en segundo plano sin bloquear. Consulta [Ejecutar hooks en segundo plano](#run-hooks-in-the-background) |

477| `asyncRewake` | no | Si es `true`, se ejecuta en segundo plano y despierta a Claude en código de salida 2. El stderr del hook, o stdout si stderr está vacío, se muestra a Claude como un [recordatorio del sistema](/docs/es/glossary#system-reminder) para que pueda reaccionar a un fallo de fondo de larga duración |477| `asyncRewake` | no | Si es `true`, se ejecuta en segundo plano y despierta a Claude en código de salida 2. El stderr del hook, o stdout si stderr está vacío, se muestra a Claude como un [recordatorio del sistema](/docs/es/glossary#system-reminder) para que pueda reaccionar a un fallo de fondo de larga duración |

478| `shell` | no | Shell a usar para este hook. Acepta `"bash"` o `"powershell"`. Por defecto es `"bash"`, o `"powershell"` en Windows cuando Git Bash no está instalado. Establecer `"powershell"` ejecuta el comando a través de PowerShell en Windows. No requiere `CLAUDE_CODE_USE_POWERSHELL_TOOL` ya que los hooks generan PowerShell directamente. Se ignora cuando `args` está establecido |478| `shell` | no | Shell a usar para este hook. Acepta `"bash"` o `"powershell"`. Por defecto es `"bash"`, o `"powershell"` en Windows cuando Git Bash no está instalado. Establecer `"powershell"` ejecuta el comando a través de PowerShell en Windows. No requiere `CLAUDE_CODE_USE_POWERSHELL_TOOL` ya que los hooks generan PowerShell directamente. Se ignora cuando `args` está establecido |

479| `onFailure` | no | Qué le sucede a la acción cuando el hook falla: `"continue"`, el valor por defecto, o `"block"`. Consulta [Bloquear la acción cuando un hook falla](#block-the-action-when-a-hook-fails). Requiere Claude Code v2.1.295 o posterior |479| `onFailure` | no | Si la acción que activó el hook sigue adelante cuando el hook falla: `"continue"` o `"block"`. Consulta [Bloquear la acción cuando un hook falla](#block-the-action-when-a-hook-fails) para `"block"` y para dejar el campo sin establecer. Requiere Claude Code v2.1.295 o posterior |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


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. [Hooks que inician un proceso en segundo plano](#hooks-that-start-a-background-process) cubre la excepción.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, excepto en los hooks [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails), por ejemplo un hook con `onFailure` establecido en `"block"`. En eventos como `PreToolUse`, ves un aviso `<hook name> hook error` en la transcripción.

833 833 

834Lo que tu hook imprime en stdout puede cambiar el resultado. Por ejemplo, si un hook `PreToolUse` sale con 1 pero imprime JSON que pasa la validación, la ejecución es un éxito y los campos JSON deciden qué sucede. Para saber el resultado de tu hook en un evento como `PreToolUse`, busca lo que imprimió en stdout en la primera columna y su código de salida en la parte superior:834Lo que tu hook imprime en stdout puede cambiar el resultado. Por ejemplo, cuando un hook `PreToolUse` sale con 1 pero imprime JSON que pasa la validación, ese JSON todavía puede decidir qué sucede. Para saber el resultado de tu hook en un evento como `PreToolUse`, busca lo que imprimió en stdout en la primera columna y su código de salida en la parte superior:

835 835 

836| Stdout | Exit 0 | Exit 2 | Cualquier otro código de salida |836| Stdout | Exit 0 | Exit 2 | Cualquier otro código de salida |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| Objeto JSON que pasa la [validación del esquema](#json-output) | Éxito. Los campos se aplican | Error de bloqueo. Claude Code sigue leyendo los campos, pero no pueden sobrescribir el bloqueo | Éxito. Claude Code ignora el código de salida, y solo los campos deciden. Con [`onFailure: "block"`](#block-the-action-when-a-hook-fails), esto cuenta como un fallo |838| Objeto JSON que pasa la [validación del esquema](#json-output) | Éxito. Los campos se aplican | Error de bloqueo. Claude Code sigue leyendo los campos, pero no pueden sobrescribir el bloqueo | Éxito. Claude Code ignora el código de salida, y solo los campos deciden. En los hooks [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails), la ejecución cuenta en cambio como un fallo |

839| JSON que [no se puede analizar](#exit-code-0) o que falla la validación del esquema | Error sin bloqueo. El aviso incluye el mensaje de análisis o de validación | Error de bloqueo. Tu stderr es la razón | Error sin bloqueo. El aviso incluye el mensaje de análisis o de validación |839| JSON que [no se puede analizar](#exit-code-0) o que falla la validación del esquema | Error sin bloqueo. El aviso incluye el mensaje de análisis o de validación | Error de bloqueo. Tu stderr es la razón | Error sin bloqueo. El aviso incluye el mensaje de análisis o de validación |

840| [Texto plano](#exit-code-0), o nada | Éxito | Error de bloqueo. Tu stderr es la razón | Error sin bloqueo. El aviso incluye la primera línea de tu stderr |840| [Texto plano](#exit-code-0), o nada | Éxito | Error de bloqueo. Tu stderr es la razón | Error sin bloqueo. El aviso incluye la primera línea de tu stderr |

841 841 


864* **Dos o más líneas que se analizan como JSON cada una por su cuenta, la primera comenzando con `{` y la última terminando con `}`**: texto plano cuando ninguna línea es un objeto de salida JSON que establezca un campo, y un fallo de análisis cuando alguna lo es.864* **Dos o más líneas que se analizan como JSON cada una por su cuenta, la primera comenzando con `{` y la última terminando con `}`**: texto plano cuando ninguna línea es un objeto de salida JSON que establezca un campo, y un fallo de análisis cuando alguna lo es.

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

866 866 

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

868 868 

869Claude nunca ve el stderr de un hook que sale con 0. Para leerlo tú mismo en eventos como `PreToolUse`, habilita el [registro de depuración](#debug-hooks). Para mostrarle una advertencia a Claude desde un hook `PostToolUse` o `PostToolUseFailure`, sal con 2 en su lugar para que [Claude vea el stderr](#exit-code-2-behavior-per-event) aunque la herramienta ya se haya ejecutado.869Claude nunca ve el stderr de un hook que sale con 0. Para leerlo tú mismo en eventos como `PreToolUse`, habilita el [registro de depuración](#debug-hooks). Para mostrarle una advertencia a Claude desde un hook `PostToolUse` o `PostToolUseFailure`, sal con 2 en su lugar para que [Claude vea el stderr](#exit-code-2-behavior-per-event) aunque la herramienta ya se haya ejecutado.

870 870 


907 Otros códigos de salida907 Otros códigos de salida

908</h4>908</h4>

909 909 

910Cuando tu hook sale con un código distinto de 0 o 2 e imprime texto plano o nada en stdout, la ejecución es un [error sin bloqueo](#exit-code-output). Ves un aviso `<hook name> hook error` en la transcripción con `Failed with non-blocking status code:` y la primera línea del stderr de tu hook. Por ejemplo, cuando un hook `PreToolUse` en `Bash` imprime `something broke` en stderr y sale con 1, el aviso `PreToolUse:Bash hook error` incluye esta línea:910Salvo que el hook sea uno [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails), un código de salida distinto de 0 o 2 con texto plano o nada en stdout es un [error sin bloqueo](#exit-code-output). Si la acción continúa, ves un aviso `<hook name> hook error` en la transcripción con `Failed with non-blocking status code:` y la primera línea del stderr de tu hook.

911 

912Por ejemplo, cuando un hook `PreToolUse` en `Bash` imprime `something broke` en stderr y sale con 1, el aviso `PreToolUse:Bash hook error` incluye esta línea:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916Para capturar el stderr completo en lugar de su primera línea, habilita el [registro de depuración](#debug-hooks).918Para capturar el stderr completo en lugar de su primera línea, habilita el [registro de depuración](#debug-hooks).

917 919 

918Un hook que no puede iniciarse también es un error sin bloqueo. En la forma de shell, cuando la ruta del script no existe o no es ejecutable, el shell sale con un código como 127 y el aviso incluye el mensaje del intérprete, por ejemplo `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Cuando configures un hook de política, fíjate en este aviso en su primera ejecución, porque una ruta mal escrita en `settings.json` significa que el hook nunca se ejecuta. Para bloquear la acción en su lugar, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).920Salvo que el hook sea uno [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails), un hook que no puede iniciarse también es un error sin bloqueo. En la forma de shell, cuando la ruta del script no existe o no es ejecutable, el shell sale con un código como 127 y el aviso incluye el mensaje del intérprete. Por ejemplo, cuando la ruta del script no existe, el aviso incluye una línea como esta:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926Cuando configures un hook de política, fíjate en este aviso en su primera ejecución, porque una ruta mal escrita en `settings.json` significa que el hook nunca se ejecuta. Para bloquear la acción cuando el hook no puede iniciarse, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

919 927 

920<Warning>928<Warning>

921 Sin JSON válido en stdout, Claude Code trata el código de salida 1 como un error sin bloqueo, aunque 1 es el código de fallo convencional de Unix. Si tu hook está pensado para aplicar una política, usa `exit 2`.929 El código de salida 1 sin salida JSON válida es un error sin bloqueo, salvo que el hook sea uno [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails), aunque 1 es el código de fallo convencional de Unix. Si tu hook está pensado para aplicar una política, usa `exit 2`.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930En [`PreModelSwitch`](#premodelswitch), un hook cancelado al agotarse su tiempo de espera bloquea el cambio de modelo. En `PreToolUse`, las dos familias de hooks difieren:938En [`PreModelSwitch`](#premodelswitch), un hook cancelado al agotarse su tiempo de espera bloquea el cambio de modelo. En `PreToolUse`, las dos familias de hooks difieren:

931 939 

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).940* Un hook `command`, `http` o `mcp_tool` cuyo tiempo de espera se agota no bloquea la llamada a herramienta, excepto en los hooks [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails). 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).941* 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 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 Bloquear la acción cuando un hook falla967 Bloquear la acción cuando un hook falla

960</h4>968</h4>

961 969 

962En la mayoría de los eventos, cuando un hook falla o se agota su tiempo de espera, Claude Code sigue llevando a cabo la acción, por lo que un hook de política con una ruta incorrecta o un script que se bloquea deja pasar todo. Para bloquear la acción en su lugar, establece `"onFailure": "block"` en un hook `command` o `http`. El valor predeterminado es `"continue"`. Requiere Claude Code v2.1.295 o posterior.970En la mayoría de los eventos, cuando un hook falla o se agota su tiempo de espera, Claude Code sigue llevando a cabo la acción. Así, un hook de política con una ruta incorrecta o un script que se bloquea deja pasar todo. Para bloquear la acción en su lugar, establece `"onFailure": "block"` en un hook `command` o `http`. Requiere Claude Code v2.1.295 o posterior.

971 

972<Note>

973 En Windows sin Git Bash, un hook de comando `PreToolUse` o `PermissionRequest` en forma de shell que falla sin `onFailure` establecido puede, en cambio, [bloquear la llamada a herramienta](#failed-hooks-on-windows-without-git-bash).

974</Note>

963 975 

964Este hook `PreToolUse` en `.claude/settings.json` ejecuta un script del proyecto antes de cada comando Bash, y bloquea el comando si el script falla:976Este hook `PreToolUse` en `.claude/settings.json` ejecuta un script del proyecto antes de cada comando Bash, y bloquea el comando si el script falla:

965 977 


1007* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` y `TeammateIdle`**: el código de salida 2 en estos eventos hace que Claude siga trabajando, y Claude no puede reparar un hook que no se ejecuta1019* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` y `TeammateIdle`**: el código de salida 2 en estos eventos hace que Claude siga trabajando, y Claude no puede reparar un hook que no se ejecuta

1008* **Hooks de comando en segundo plano**: hooks de comando que establecen [`async` o `asyncRewake`](#run-hooks-in-the-background)1020* **Hooks de comando en segundo plano**: hooks de comando que establecen [`async` o `asyncRewake`](#run-hooks-in-the-background)

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Hooks fallidos en Windows sin Git Bash

1024</h4>

1025 

1026Si el error de una llamada a herramienta bloqueada incluye este texto, un hook de comando `PreToolUse` o `PermissionRequest` falló o agotó su tiempo de espera y bloqueó la llamada:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032Un hook en forma de shell sin `shell` establecido se ejecuta en PowerShell cuando Git Bash no está instalado, y es posible que un script escrito para Bash no se ejecute tal como está escrito allí. Elige la solución que corresponda a tu hook:

1033 

1034* **El hook está escrito para Bash**: instala [Git for Windows](https://git-scm.com/downloads/win), o establece [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/es/env-vars) si Git Bash está instalado en un lugar donde Claude Code no lo encuentra, y luego inicia una nueva sesión

1035* **El hook ejecuta un único `.exe`, no un archivo `.cmd` o `.bat`**: pon el programa en `command` y sus argumentos en `args` para usar la [forma exec](#exec-form-and-shell-form), y agrega [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Claude Code entonces inicia el programa sin shell. Sin `"onFailure": "block"`, la llamada puede continuar cuando el programa falla, no existe o agota su tiempo de espera

1036* **El hook está escrito para PowerShell**: agrega `"shell": "powershell"` y [`"onFailure": "block"`](#block-the-action-when-a-hook-fails) al hook. Sin `"onFailure": "block"`, la llamada puede continuar cuando el hook sigue fallando o agota su tiempo de espera. Para averiguar por qué falló el hook, revisa el [registro de depuración](#debug-hooks)

1037* **La acción debe continuar cuando el hook falla**: agrega `"onFailure": "continue"` al hook

1038 

1039Para un hook que muestra este error, cualquier código de salida distinto de 0 o 2 cuenta como un [fallo](#block-the-action-when-a-hook-fails), incluso cuando el hook imprime JSON que no deniega la llamada.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 Comportamiento del código de salida 2 por evento1042 Comportamiento del código de salida 2 por evento

1012</h4>1043</h4>


1060* **2xx con un cuerpo vacío**: éxito, equivalente al código de salida 0 sin salida1091* **2xx con un cuerpo vacío**: éxito, equivalente al código de salida 0 sin salida

1061* **2xx con un cuerpo de objeto JSON**: se analiza usando el mismo esquema de [salida JSON](#json-output) que los hooks de comando. Un cuerpo que falla la validación del esquema es un error sin bloqueo1092* **2xx con un cuerpo de objeto JSON**: se analiza usando el mismo esquema de [salida JSON](#json-output) que los hooks de comando. Un cuerpo que falla la validación del esquema es un error sin bloqueo

1062* **2xx con cualquier otro cuerpo, como texto plano**: error sin bloqueo, manejado igual que un estado que no es 2xx. Claude Code no agrega el texto al contexto de Claude1093* **2xx con cualquier otro cuerpo, como texto plano**: error sin bloqueo, manejado igual que un estado que no es 2xx. Claude Code no agrega el texto al contexto de Claude

1063* **Estado que no es 2xx**: error sin bloqueo, la ejecución continúa1094* **Estado que no es 2xx**: error sin bloqueo

1064* **Fallo de conexión**: error sin bloqueo, la ejecución continúa1095* **Fallo de conexión**: error sin bloqueo

1065* **Tiempo de espera agotado**: el hook se cancela, como se describe en [Tiempos de espera](#timeouts)1096* **Tiempo de espera agotado**: el hook se cancela, como se describe en [Tiempos de espera](#timeouts)

1066 1097 

1067Los hooks HTTP no pueden señalar un error de bloqueo solo mediante el código de estado: un estado que no es 2xx o una conexión fallida es un [error sin bloqueo](#exit-code-output). Para bloquear una llamada a herramienta o denegar un permiso, devuelve una respuesta 2xx con un cuerpo JSON que contenga los campos de decisión apropiados. Para bloquear la acción cuando la solicitud falla o devuelve un estado que no es 2xx, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).1098Después de un [error sin bloqueo](#exit-code-output), la acción continúa salvo que el hook sea uno [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails). Para bloquear una llamada a herramienta o denegar un permiso, devuelve una respuesta 2xx con un cuerpo JSON que contenga los [campos de decisión](#decision-control) apropiados. Para bloquear la acción cuando la solicitud falla o devuelve un estado que no es 2xx, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 Salida JSON1101 Salida JSON


1573}1604}

1574```1605```

1575 1606 

1607Cuando el prompt es un [skill](/docs/es/skills) o un comando personalizado que escribiste, como `/deploy staging`, el hook recibe esa línea tal como la escribiste y no el contenido expandido del skill. Si el hook bloquea el prompt, el comando no se ejecuta, así que los comandos de shell que el skill [inyecta con `` !`<command>` ``](/docs/es/skills#inject-dynamic-context) tampoco se ejecutan. Para hacer coincidir por el nombre o los argumentos del comando, usa [UserPromptExpansion](#userpromptexpansion).

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 Control de decisiones de UserPromptSubmit1610 Control de decisiones de UserPromptSubmit

1578</h4>1611</h4>


2076 2109 

2077| Campo | Descripción |2110| Campo | Descripción |

2078| :- | :- |2111| :- | :- |

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 |2112| `permissionDecision` | `"allow"` omite la solicitud de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) y las [lecturas desde rutas de red](/docs/es/permissions#network-paths). `AskUserQuestion` y `ExitPlanMode` necesitan [`updatedInput` junto con `"allow"`](#allow-with-updatedinput). Para el modo plan, consulta [Aprobaciones de hooks en modo plan](/docs/es/permissions#hook-approvals-in-plan-mode). `"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 |

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

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

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


3718 3751 

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

3720 3753 

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.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 Tiempos de espera y otros códigos de salida de PreModelSwitch

3756</h4>

3757 

3758Un hook PreModelSwitch que no responde antes de que se agote su tiempo de espera bloquea el cambio. El tiempo de espera predeterminado para este evento es de 30 segundos.

3722 3759 

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).3760Para saber qué hace un código de salida distinto de 0 o 2, consulta [Otros códigos de salida](#other-exit-codes).

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +17 −4

Details

633 * Para un hook `PreToolUse` esto no aprueba la llamada a herramienta: el [flujo de permiso](/docs/es/permissions) normal aún se aplica.633 * Para un hook `PreToolUse` esto no aprueba la llamada a herramienta: el [flujo de permiso](/docs/es/permissions) normal aún se aplica.

634 * Para hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, y `PostModelSwitch`, Claude Code añade stdout que [trata como texto plano](/docs/es/hooks#exit-code-0) al contexto de Claude.634 * Para hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, y `PostModelSwitch`, Claude Code añade stdout que [trata como texto plano](/docs/es/hooks#exit-code-0) al contexto de Claude.

635* **Exit 2**: Claude Code bloquea la acción. Escribe una razón en stderr. Dónde llega depende del evento: algunos eventos lo alimentan a Claude como retroalimentación para que pueda ajustar, otros lo muestran al usuario, y algunos, como `ConfigChange` y `Elicitation`, no muestran ningún mensaje. Algunos eventos no pueden ser bloqueados: para `SessionStart` y otros, exit 2 muestra stderr al usuario y la ejecución continúa. Consulta [comportamiento del código de salida 2 por evento](/docs/es/hooks#exit-code-2-behavior-per-event) para la lista completa.635* **Exit 2**: Claude Code bloquea la acción. Escribe una razón en stderr. Dónde llega depende del evento: algunos eventos lo alimentan a Claude como retroalimentación para que pueda ajustar, otros lo muestran al usuario, y algunos, como `ConfigChange` y `Elicitation`, no muestran ningún mensaje. Algunos eventos no pueden ser bloqueados: para `SessionStart` y otros, exit 2 muestra stderr al usuario y la ejecución continúa. Consulta [comportamiento del código de salida 2 por evento](/docs/es/hooks#exit-code-2-behavior-per-event) para la lista completa.

636* **Cualquier otro código de salida**: para la mayoría de eventos, el resultado depende de lo que tu hook imprimió en stdout:636* **Cualquier otro código de salida**: para la mayoría de eventos, la acción procede como un [error sin bloqueo](/docs/es/hooks#exit-code-output), a menos que el hook sea uno [cuyo fallo bloquea la acción](/docs/es/hooks#block-the-action-when-a-hook-fails) o que su salida JSON pase la validación:

637 * Un objeto analizado que pasa validación de esquema: Claude Code ignora el código de salida, el JSON solo decide el resultado, y el hook no se reporta como un error. Las excepciones por evento, como `WorktreeCreate` fallando en cualquier salida distinta de cero, se enumeran en la sección [Salida del código de salida](/docs/es/hooks#exit-code-output) de la referencia.637 * Un objeto analizado que pasa validación de esquema: Claude Code ignora el código de salida, el JSON solo decide el resultado, y el hook no se reporta como un error. Las excepciones por evento, como `WorktreeCreate` fallando en cualquier salida distinta de cero, se enumeran en la sección [Salida del código de salida](/docs/es/hooks#exit-code-output) de la referencia.

638 * Un objeto analizado que falla validación de esquema, o stdout que Claude Code [intenta analizar como JSON](/docs/es/hooks#exit-code-0) pero que no es JSON válido: un error sin bloqueo; el aviso lleva el mensaje de validación o análisis.638 * Un objeto analizado que falla validación de esquema, o stdout que Claude Code [intenta analizar como JSON](/docs/es/hooks#exit-code-0) pero que no es JSON válido: un error sin bloqueo; el aviso lleva el mensaje de validación o análisis.

639 * Stdout que Claude Code [trata como texto plano](/docs/es/hooks#exit-code-0), o stdout vacío: la acción procede como un error sin bloqueo. La transcripción muestra un aviso `<hook name> hook error`, luego la primera línea de stderr prefijada con `Failed with non-blocking status code:`. Para capturar el stderr completo, habilita [registro de depuración](/docs/es/hooks#debug-hooks) con `claude --debug` o ejecutando `/debug` en medio de la sesión.639 * Stdout que Claude Code [trata como texto plano](/docs/es/hooks#exit-code-0), o stdout vacío: la acción procede como un error sin bloqueo. La transcripción muestra un aviso `<hook name> hook error`, luego la primera línea de stderr prefijada con `Failed with non-blocking status code:`. Para capturar el stderr completo, habilita [registro de depuración](/docs/es/hooks#debug-hooks) con `claude --debug` o ejecutando `/debug` en medio de la sesión.


664 664 

665En `PreToolUse`, Claude Code maneja cada valor `permissionDecision` de la siguiente manera:665En `PreToolUse`, Claude Code maneja cada valor `permissionDecision` de la siguiente manera:

666 666 

667* `"allow"`: omite la solicitud de permiso interactiva. Las reglas de negación y solicitud, incluyendo listas de negación administradas empresariales, aún se aplican, al igual que las solicitudes para lecturas desde [rutas de red](/docs/es/permissions#network-paths), para herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) y para herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code667* `"allow"`: omite la solicitud de permiso interactiva. Las reglas de negación y solicitud, incluidas las listas de negación administradas empresariales, aún se aplican, al igual que las solicitudes para:

668 

669 * Lecturas desde [rutas de red](/docs/es/permissions#network-paths)

670 * Herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool)

671 * Herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code

672 

673 Para saber qué hace `"allow"` en modo plan, consulta [Aprobaciones de hooks en modo plan](/docs/es/permissions#hook-approvals-in-plan-mode).

668* `"deny"`: cancela la llamada a herramienta y envía la razón a Claude674* `"deny"`: cancela la llamada a herramienta y envía la razón a Claude

669* `"ask"`: muestra el aviso de permiso al usuario como es normal675* `"ask"`: muestra el aviso de permiso al usuario como es normal

670 676 


1015 1021 

1016Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso, en cada [modo de permiso](/docs/es/permission-modes), incluyendo `dontAsk`. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.1022Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso, en cada [modo de permiso](/docs/es/permission-modes), incluyendo `dontAsk`. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.

1017 1023 

1018Lo inverso no es cierto: un hook que devuelve `"allow"` no elude las reglas de denegación de la configuración, y no puede suprimir la solicitud para lecturas desde [rutas de red](/docs/es/permissions#network-paths), para herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) o para herramientas de conectores [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code. Los hooks en archivos de configuración y en `hooks/hooks.json` de un plugin pueden endurecer restricciones pero no relajarlas más allá de lo que las reglas de permisos permiten.1024Lo inverso no es cierto: los hooks en archivos de configuración y en `hooks/hooks.json` de un plugin pueden endurecer restricciones, pero no relajarlas más allá de lo que las reglas de permisos permiten. Un hook que devuelve `"allow"` no elude las reglas de denegación de la configuración, y no puede suprimir la solicitud para:

1025 

1026* Lecturas desde [rutas de red](/docs/es/permissions#network-paths)

1027* Herramientas MCP marcadas con [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool)

1028* Herramientas de conectores [que tu organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code

1029 

1030En [modo plan](/docs/es/permissions#hook-approvals-in-plan-mode), si tu hook `PreToolUse` devuelve `"allow"` para una edición de archivo, obtienes la misma solicitud, bloqueo o aprobación que la edición obtendría sin ningún hook. Para eliminar este límite en las aprobaciones de hooks, [aprueba el plan](/docs/es/permission-modes#review-and-approve-a-plan) o cambia a otro modo de permisos.

1019 1031 

1020Un [mod](/docs/es/plugins/mods/overview) que instales y que gestione `tool.check` puede aprobar una llamada que tu hook `PreToolUse` bloqueó, a menos que el hook esté en la configuración administrada. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera qué reglas prevalecen sobre un mod.1032Un [mod](/docs/es/plugins/mods/overview) que instales y que gestione `tool.check` puede aprobar una llamada que tu hook `PreToolUse` bloqueó, a menos que el hook esté en la configuración administrada. En modo plan, el mod puede aprobar una llamada de ese tipo cuando es de solo lectura, pero no una edición de archivo ni otra llamada que no sea de solo lectura. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera qué reglas prevalecen sobre un mod.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook no se activa1035 Hook no se activa


1042 ```1054 ```

1043* Si ves "command not found", usa rutas absolutas o `${CLAUDE_PROJECT_DIR}` para referenciar scripts. Para evitar entrecomillado de shell por completo, añade `"args": []` para cambiar a [forma exec](/docs/es/hooks#exec-form-and-shell-form), que genera el script directamente sin un shell1055* Si ves "command not found", usa rutas absolutas o `${CLAUDE_PROJECT_DIR}` para referenciar scripts. Para evitar entrecomillado de shell por completo, añade `"args": []` para cambiar a [forma exec](/docs/es/hooks#exec-form-and-shell-form), que genera el script directamente sin un shell

1044* Si ves "jq: command not found", instala `jq` o usa Python/Node.js para análisis JSON1056* Si ves "jq: command not found", instala `jq` o usa Python/Node.js para análisis JSON

1057* Si el mensaje incluye `blocking because Git Bash wasn't found`, estás en Windows, Claude Code no encontró Git Bash y el hook que falló o cuyo tiempo de espera se agotó bloqueó la llamada a herramienta. Consulta [Hooks fallidos en Windows sin Git Bash](/docs/es/hooks#failed-hooks-on-windows-without-git-bash) para ver las soluciones

1045* Si el aviso muestra un mensaje de validación JSON, la salida estándar de su hook se analizó como JSON pero falló la validación del esquema. Si muestra un mensaje de análisis JSON, la salida estándar parecía un objeto JSON pero no era JSON válido. Ambos suceden incluso en salida 0.1058* Si el aviso muestra un mensaje de validación JSON, la salida estándar de su hook se analizó como JSON pero falló la validación del esquema. Si muestra un mensaje de análisis JSON, la salida estándar parecía un objeto JSON pero no era JSON válido. Ambos suceden incluso en salida 0.

1046 1059 

1047 Para corregir una falla de análisis, construya la carga útil con un codificador JSON como `jq` en lugar de concatenación de cadenas, para que las comillas y barras invertidas dentro de los valores se escapen. La sección [Exit code output](/docs/es/hooks#exit-code-output) de la referencia cubre las combinaciones de código de salida y JSON1060 Para corregir una falla de análisis, construya la carga útil con un codificador JSON como `jq` en lugar de concatenación de cadenas, para que las comillas y barras invertidas dentro de los valores se escapen. La sección [Exit code output](/docs/es/hooks#exit-code-output) de la referencia cubre las combinaciones de código de salida y JSON

Details

1091* `event.sequence`: Contador por proceso para ordenar eventos, descrito en [Atributos de correlación de eventos](#event-correlation-attributes)1091* `event.sequence`: Contador por proceso para ordenar eventos, descrito en [Atributos de correlación de eventos](#event-correlation-attributes)

1092* `from_mode`: El modo de permiso anterior, por ejemplo `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, o `"bypassPermissions"`1092* `from_mode`: El modo de permiso anterior, por ejemplo `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, o `"bypassPermissions"`

1093* `to_mode`: El nuevo modo de permiso1093* `to_mode`: El nuevo modo de permiso

1094* `trigger`: Qué causó el cambio. Uno de `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, o `"auto_opt_in"`. Ausente cuando la transición se origina en el SDK o puente1094* `trigger`: Qué causó el cambio. Uno de `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` o `"auto_opt_in"`. Ausente en algunos cambios, como cuando el SDK establece el modo de permisos mediante [`setPermissionMode()`](/docs/es/agent-sdk/typescript#query-object)

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 Evento de autenticación1097 Evento de autenticación

Details

203 Perros guardianes de inactividad en streaming203 Perros guardianes de inactividad en streaming

204</h2>204</h2>

205 205 

206Claude Code ejecuta cuatro temporizadores independientes que abortan una respuesta de modelo en streaming cuando se queda en silencio, de modo que una conexión muerta falla y se reintenta en lugar de quedarse colgada. El plazo de primer byte cubre la espera de encabezados de respuesta, antes de que haya llegado ninguna parte de la respuesta. Cada uno de los otros tres supervisa una respuesta activa para una señal diferente.206Claude Code ejecuta cuatro temporizadores independientes que abortan una respuesta de modelo en streaming cuando se queda en silencio, de modo que una conexión muerta falla y se reintenta en lugar de quedarse colgada. Una solicitud que no recibe ningún encabezado de respuesta termina de una de dos formas:

207 

208* **Donde se ejecuta el plazo de primer byte**: el primer intento termina en ese plazo. Para cambiarlo, establece `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`. Para la espera del reintento, consulta [Sin respuesta de la API](/docs/es/errors#no-response-from-api).

209* **En las demás conexiones**: la solicitud termina después de 5 a 6 minutos, cuando se activa el tiempo de espera de inactividad del cuerpo, a menos que hayas desactivado ese tiempo de espera. Para terminarla antes, reduce `API_TIMEOUT_MS`.

207 210 

208| Temporizador | Aborta cuando | Se ejecuta en | Tiempo de espera predeterminado |211| Temporizador | Aborta cuando | Se ejecuta en | Tiempo de espera predeterminado |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

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 |213| 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 un [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, ni en una sesión de [Claude apps gateway](/docs/es/claude-apps-gateway) | 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 |214| 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. 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 |215| 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 |216| Tiempo de espera de inactividad del cuerpo | No llegan bytes durante 5 minutos, contando la espera de encabezados de respuesta | 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 217 

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

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` establece el tiempo de espera de ambos perros guardianes. Claude Code eleva los valores por debajo de 5 minutos a 5 minutos, y limita el valor a 30 minutos para el perro guardián a nivel de byte.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` establece el tiempo de espera de ambos perros guardianes. Claude Code eleva los valores por debajo de 5 minutos a 5 minutos, y limita el valor a 30 minutos para el perro guardián a nivel de byte.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` establece el tiempo de espera del perro guardián a nivel de byte sin cambiar el del perro guardián a nivel de evento, limitado entre 10 segundos y 30 minutos, y tiene prioridad sobre `CLAUDE_STREAM_IDLE_TIMEOUT_MS` para ese perro guardián.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` establece el tiempo de espera del perro guardián a nivel de byte sin cambiar el del perro guardián a nivel de evento, limitado entre 10 segundos y 30 minutos, y tiene prioridad sobre `CLAUDE_STREAM_IDLE_TIMEOUT_MS` para ese perro guardián.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` establece el plazo de primer byte directamente. Déjelo sin establecer y Claude Code usa el tiempo de espera del perro guardián a nivel de byte, de modo que `CLAUDE_STREAM_IDLE_TIMEOUT_MS` y `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` también cambian el plazo. Para los límites, la asignación de carga, el límite de `API_TIMEOUT_MS` y cuánto tiempo espera el reintento después de un aborto sin respuesta, consulte [Sin respuesta de la API](/docs/es/errors#no-response-from-api).225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` establece el plazo de primer byte directamente. Déjelo sin establecer y Claude Code usa el tiempo de espera del perro guardián a nivel de byte, de modo que `CLAUDE_STREAM_IDLE_TIMEOUT_MS` y `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` también cambian el plazo. Para los límites, la asignación de carga, el límite de `API_TIMEOUT_MS` y cuánto tiempo espera el reintento después de un aborto sin respuesta, consulte [Sin respuesta de la API](/docs/es/errors#no-response-from-api).

226* `API_TIMEOUT_MS` limita la espera de encabezados de respuesta. Donde no se ejecuta el plazo de primer byte, como en una sesión de Claude apps gateway, establécelo por debajo de `300000`, que equivale a 5 minutos, para reintentar antes una solicitud sin respuesta. Mantenlo por encima de la espera de encabezados más larga, y de la [solicitud sin streaming](/docs/es/errors#streaming-response-ended-before-any-complete-data-was-received) más larga, que esperes: en una solicitud que necesite más tiempo se vuelve a agotar el tiempo de espera en cada reintento.

223* `API_FORCE_IDLE_TIMEOUT` establecido en `0` desactiva el tiempo de espera de inactividad del cuerpo, y establecido en `1` lo activa para cada proveedor. Los perros guardianes se ejecutan independientemente de él, por lo que para permitir que un stream se pause más tiempo que sus umbrales, también aumente o desactive los perros guardianes.227* `API_FORCE_IDLE_TIMEOUT` establecido en `0` desactiva el tiempo de espera de inactividad del cuerpo, y establecido en `1` lo activa para cada proveedor. Los perros guardianes se ejecutan independientemente de él, por lo que para permitir que un stream se pause más tiempo que sus umbrales, también aumente o desactive los perros guardianes.

224 228 

225Cuando un perro guardián aborta un stream estancado, Claude Code trata el aborto como una falla a mitad de stream, y lo que ve depende de cuán lejos haya llegado la respuesta. Claude Code reintenta la solicitud o termina el turno con un error, mantiene la salida completada y muestra un [aviso de respuesta incompleta](/docs/es/errors#the-response-above-may-be-incomplete), o termina el turno normalmente. [Reintentos automáticos](/docs/es/errors#automatic-retries) dice dónde se aplica cada resultado.229Cuando un perro guardián aborta un stream estancado, Claude Code trata el aborto como una falla a mitad de stream, y lo que ve depende de cuán lejos haya llegado la respuesta. Claude Code reintenta la solicitud o termina el turno con un error, mantiene la salida completada y muestra un [aviso de respuesta incompleta](/docs/es/errors#the-response-above-may-be-incomplete), o termina el turno normalmente. [Reintentos automáticos](/docs/es/errors#automatic-retries) dice dónde se aplica cada resultado.

Details

627 627 

628Claude Code rechaza `bypassPermissions` en una sesión que inicia con [`--restricted`](/docs/es/cli-reference#cli-flags). `--restricted` requiere Claude Code v2.1.248 o posterior.628Claude Code rechaza `bypassPermissions` en una sesión que inicia con [`--restricted`](/docs/es/cli-reference#cli-flags). `--restricted` requiere Claude Code v2.1.248 o posterior.

629 629 

630La primera vez que inicia una sesión interactiva con este modo habilitado, Claude Code muestra un diálogo de advertencia pidiéndole que acepte la responsabilidad por acciones tomadas sin comprobaciones de permisos:630<span id="bypass-permissions-acceptance" />La primera vez que inicias una sesión interactiva con este modo habilitado, Claude Code muestra un diálogo de advertencia que te pide aceptar la responsabilidad por las acciones realizadas sin comprobaciones de permisos:

631 631 

632* **Si acepta**: Claude Code establece `skipDangerousModePermissionPrompt` en `true` en `~/.claude/settings.json`, por lo que las sesiones posteriores omiten el diálogo. Para ver el diálogo nuevamente, elimine la clave de ese archivo o establézcala en `false`. La [referencia `skipDangerousModePermissionPrompt`](/docs/es/settings-reference#skipdangerousmodepermissionprompt) enumera los otros archivos de configuración donde usted u su organización pueden establecerla.632* **Si acepta**: Claude Code establece `skipDangerousModePermissionPrompt` en `true` en `~/.claude/settings.json`, por lo que las sesiones posteriores omiten el diálogo. Para ver el diálogo nuevamente, elimine la clave de ese archivo o establézcala en `false`. La [referencia `skipDangerousModePermissionPrompt`](/docs/es/settings-reference#skipdangerousmodepermissionprompt) enumera los otros archivos de configuración donde usted u su organización pueden establecerla.

633* **Si rechaza**: Claude Code sale.633* **Si rechaza**: Claude Code sale.


635En [modo no interactivo](/docs/es/headless) no se muestra ningún diálogo. Una [sesión en segundo plano](/docs/es/agent-view) respeta tu aceptación cuando está registrada en la configuración de usuario o en la configuración administrada:635En [modo no interactivo](/docs/es/headless) no se muestra ningún diálogo. Una [sesión en segundo plano](/docs/es/agent-view) respeta tu aceptación cuando está registrada en la configuración de usuario o en la configuración administrada:

636 636 

637* Si no hay ninguna aceptación registrada, `claude --bg --permission-mode bypassPermissions` se rechaza hasta que aceptes el diálogo en una sesión interactiva.637* Si no hay ninguna aceptación registrada, `claude --bg --permission-mode bypassPermissions` se rechaza hasta que aceptes el diálogo en una sesión interactiva.

638* Si `skipDangerousModePermissionPrompt` está establecido solo en `.claude/settings.local.json`, la sesión en segundo plano se inicia ignorando la solicitud de omisión y fija el aviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Para que se respete la omisión, agrega esa clave a `~/.claude/settings.json` y luego inicia una nueva sesión en segundo plano.638* Si `skipDangerousModePermissionPrompt` está establecido solo en `.claude/settings.local.json`, la sesión en segundo plano se inicia ignorando la solicitud de omisión y fija el aviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Agrega esa clave a `~/.claude/settings.json` y luego inicia una nueva sesión en segundo plano. La sesión que muestra el aviso sigue ejecutándose:

639 * Si se ignora `--allow-dangerously-skip-permissions`, `bypassPermissions` queda fuera de su ciclo de `Shift+Tab`.

640 * Si se ignora `--permission-mode bypassPermissions` o `--dangerously-skip-permissions`, la sesión se inicia en modo Manual en su lugar.

639 641 

640En Linux y macOS, Claude Code se niega a iniciarse en este modo cuando se ejecuta como root o bajo `sudo`:642En Linux y macOS, Claude Code se niega a iniciarse en modo `bypassPermissions` cuando se ejecuta como root o bajo `sudo`:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * Los archivos markdown en el directorio de [memoria automática](/docs/es/memory#storage-location) del proyecto, como `~/.claude/projects/<project>/memory/`, en una sesión iniciada sin `--restricted`694 * Los archivos markdown en el directorio de [memoria automática](/docs/es/memory#storage-location) del proyecto, como `~/.claude/projects/<project>/memory/`, en una sesión iniciada sin `--restricted`

693 * Los archivos markdown en un directorio de [memoria de subagente](/docs/es/sub-agents#enable-persistent-memory), como `.claude/agent-memory/`, en una sesión iniciada sin `--restricted`695 * Los archivos markdown en un directorio de [memoria de subagente](/docs/es/sub-agents#enable-persistent-memory), como `.claude/agent-memory/`, en una sesión iniciada sin `--restricted`

694* Un directorio que cargó con [`--plugin-dir`](/docs/es/plugins/mods/create#change-a-mod-with-claude), porque Claude Code recarga y ejecuta el código de un mod desde él cuando un archivo cambia696* Un directorio que cargó con [`--plugin-dir`](/docs/es/plugins/mods/create#change-a-mod-with-claude), porque Claude Code recarga y ejecuta el código de un mod desde él cuando un archivo cambia

697* `~/.claude/dev-mods/`, o `dev-mods/` en el directorio al que apunta [`CLAUDE_CONFIG_DIR`](/docs/es/env-vars), donde Claude guarda los [mods que escribe para ti](/docs/es/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696Archivos protegidos:699Archivos protegidos:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598Las reglas de MCP usan el nombre del servidor tal como está configurado en Claude Code, opcionalmente seguido del nombre de una herramienta de ese servidor.598Para hacer coincidir todas las herramientas de un servidor MCP, escribe `mcp__<server>__*`. Para hacer coincidir una sola herramienta, escribe su nombre completo, `mcp__<server>__<tool>`.

599 599 

600* `mcp__puppeteer` coincide con cualquier herramienta proporcionada por el servidor `puppeteer`600* `mcp__puppeteer` coincide con cualquier herramienta proporcionada por el servidor `puppeteer`

601* `mcp__puppeteer__*` usa sintaxis de comodín y también coincide con todas las herramientas del servidor `puppeteer`601* `mcp__puppeteer__*` usa sintaxis de comodín y también coincide con todas las herramientas del servidor `puppeteer`

602* `mcp__puppeteer__puppeteer_navigate` coincide con la herramienta `puppeteer_navigate` proporcionada por el servidor `puppeteer`602* `mcp__puppeteer__puppeteer_navigate` coincide con la herramienta `puppeteer_navigate` proporcionada por el servidor `puppeteer`

603 603 

604Para `<server>`, escribe el nombre del servidor tal como aparece en los nombres de las herramientas de ese servidor. Estos ejemplos muestran la regla que debes escribir para un nombre con caracteres especiales, un servidor de un plugin y un nombre que contiene `__` o termina en `_`:

605 

606* **Nombres con caracteres como `.` o espacios**: esos caracteres se convierten en `_`, así que para un servidor que configuraste como `my.server`, escribe `mcp__my_server__*`

607* **Servidores que proporciona un plugin**: `<server>` toma la [forma con ámbito de plugin](/docs/es/mcp#plugin-provided-mcp-servers), así que para el servidor `database-tools` de un plugin llamado `my-plugin`, escribe `mcp__plugin_my-plugin_database-tools__*`

608* **Un `<server>` que contiene `__` o termina en `_`**: escribe la forma con comodín, `mcp__<server>__*`, con el nombre completo. Para un servidor llamado `reports__v2`, escribe `mcp__reports__v2__*`. El `mcp__reports__v2` sin comodín y el más corto `mcp__reports` no coinciden con sus herramientas como reglas de permiso, porque Claude Code interpreta ambos como reglas para un servidor llamado `reports`

609 

604Si tu organización ha configurado una herramienta de un [conector de claude.ai](/docs/es/mcp#organization-controls-on-connector-tools) en `ask` y esa configuración llega a Claude Code en tu sesión, las reglas de permiso para esa herramienta no tienen efecto: Claude Code pide confirmación en cada llamada, incluso en los modos `auto` y `bypassPermissions`. En el modo `dontAsk`, que nunca pide confirmación, Claude Code niega la llamada en su lugar. Las herramientas de los conectores que Claude Code obtiene por sí mismo aparecen como `mcp__claude_ai_<server>__<tool>`.610Si tu organización ha configurado una herramienta de un [conector de claude.ai](/docs/es/mcp#organization-controls-on-connector-tools) en `ask` y esa configuración llega a Claude Code en tu sesión, las reglas de permiso para esa herramienta no tienen efecto: Claude Code pide confirmación en cada llamada, incluso en los modos `auto` y `bypassPermissions`. En el modo `dontAsk`, que nunca pide confirmación, Claude Code niega la llamada en su lugar. Las herramientas de los conectores que Claude Code obtiene por sí mismo aparecen como `mcp__claude_ai_<server>__<tool>`.

605 611 

606En una sesión de [Cowork](https://claude.com/docs/cowork/overview) en la aplicación Claude Desktop, Claude ejecuta comandos de shell mediante la herramienta `mcp__workspace__bash` de Cowork en lugar de la herramienta `Bash` integrada, y Cowork también proporciona `mcp__workspace__web_fetch` para obtener páginas web. Claude Code también aplica a estas herramientas de Cowork las reglas de negación que nombran la herramienta `Bash` o `WebFetch` completa, por lo que una regla de negación `Bash` administrada impide que Claude ejecute comandos de shell en Cowork. Cuando Claude Code bloquea una llamada así, el mensaje nombra la herramienta de Cowork: `Permission to use mcp__workspace__bash has been denied.` Las reglas de permiso no se trasladan: Claude Code nunca aplica una regla de permiso `Bash` a `mcp__workspace__bash`.612En una sesión de [Cowork](https://claude.com/docs/cowork/overview) en la aplicación Claude Desktop, Claude ejecuta comandos de shell mediante la herramienta `mcp__workspace__bash` de Cowork en lugar de la herramienta `Bash` integrada, y Cowork también proporciona `mcp__workspace__web_fetch` para obtener páginas web. Claude Code también aplica a estas herramientas de Cowork las reglas de negación que nombran la herramienta `Bash` o `WebFetch` completa, por lo que una regla de negación `Bash` administrada impide que Claude ejecute comandos de shell en Cowork. Cuando Claude Code bloquea una llamada así, el mensaje nombra la herramienta de Cowork: `Permission to use mcp__workspace__bash has been denied.` Las reglas de permiso no se trasladan: Claude Code nunca aplica una regla de permiso `Bash` a `mcp__workspace__bash`.


649 655 

650Los [hooks de Claude Code](/docs/es/hooks-guide) le permiten registrar comandos de shell personalizados que evalúan permisos en tiempo de ejecución. Cuando Claude Code realiza una llamada de herramienta, los hooks PreToolUse se ejecutan antes del aviso de permisos, para cada herramienta excepto [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior). La salida del hook puede denegar la llamada de herramienta, forzar un aviso u omitir el aviso para permitir que la llamada continúe.656Los [hooks de Claude Code](/docs/es/hooks-guide) le permiten registrar comandos de shell personalizados que evalúan permisos en tiempo de ejecución. Cuando Claude Code realiza una llamada de herramienta, los hooks PreToolUse se ejecutan antes del aviso de permisos, para cada herramienta excepto [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior). La salida del hook puede denegar la llamada de herramienta, forzar un aviso u omitir el aviso para permitir que la llamada continúe.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 Precedencia entre reglas, hooks y mods

660</h3>

661 

652Las decisiones del hook PreToolUse no omiten las reglas de permisos. Claude Code evalúa las reglas de negación y solicitud independientemente de lo que devuelva un hook PreToolUse: una regla de negación coincidente bloquea la llamada, y una regla de solicitud coincidente aún solicita incluso cuando el hook devolvió `"allow"` u `"ask"`. Esto preserva la precedencia de negación primero descrita en [Administrar permisos](#manage-permissions), incluyendo reglas de negación establecidas en configuración administrada.662Las decisiones del hook PreToolUse no omiten las reglas de permisos. Claude Code evalúa las reglas de negación y solicitud independientemente de lo que devuelva un hook PreToolUse: una regla de negación coincidente bloquea la llamada, y una regla de solicitud coincidente aún solicita incluso cuando el hook devolvió `"allow"` u `"ask"`. Esto preserva la precedencia de negación primero descrita en [Administrar permisos](#manage-permissions), incluyendo reglas de negación establecidas en configuración administrada.

653 663 

654Esa precedencia cubre los hooks en archivos de configuración y en el archivo `hooks/hooks.json` de un plugin. Un [mod](/docs/es/plugins/mods/overview) que instales y que maneje `tool.check` responde después de que las reglas y los hooks `PreToolUse` hayan decidido, y su respuesta puede reemplazar la de ellos:664Esa precedencia cubre los hooks en archivos de configuración y en el archivo `hooks/hooks.json` de un plugin. Un [mod](/docs/es/plugins/mods/overview) que instales y que maneje `tool.check` responde después de que las reglas y los hooks `PreToolUse` hayan decidido. Fuera del [modo plan](#hook-approvals-in-plan-mode), o para una llamada de solo lectura, su respuesta puede reemplazar la de ellos:

655 665 

656* **Reglas de solicitud**: el mod puede aprobar una llamada que una regla de solicitud solicitaría666* **Reglas de solicitud**: el mod puede aprobar una llamada que una regla de solicitud solicitaría

657* **Un bloqueo de un hook `PreToolUse`**: el mod puede aprobar la llamada, a menos que el hook esté en configuración administrada667* **Un bloqueo de un hook `PreToolUse`**: el mod puede aprobar la llamada, a menos que el hook esté en configuración administrada


664 674 

665Un hook de bloqueo también tiene precedencia sobre las reglas de permiso. Un hook que sale con código 2 detiene la llamada de herramienta antes de que se evalúen las reglas de permisos, por lo que el bloqueo se aplica incluso cuando una regla de permiso permitiría que la llamada continúe. Para ejecutar todos los comandos Bash sin avisos excepto algunos que desea bloquear, agregue `"Bash"` a su lista de permiso y registre un hook PreToolUse que rechace esos comandos específicos. Consulte [Bloquear ediciones a archivos protegidos](/docs/es/hooks-guide#block-edits-to-protected-files) para un script de hook que puede adaptar.675Un hook de bloqueo también tiene precedencia sobre las reglas de permiso. Un hook que sale con código 2 detiene la llamada de herramienta antes de que se evalúen las reglas de permisos, por lo que el bloqueo se aplica incluso cuando una regla de permiso permitiría que la llamada continúe. Para ejecutar todos los comandos Bash sin avisos excepto algunos que desea bloquear, agregue `"Bash"` a su lista de permiso y registre un hook PreToolUse que rechace esos comandos específicos. Consulte [Bloquear ediciones a archivos protegidos](/docs/es/hooks-guide#block-edits-to-protected-files) para un script de hook que puede adaptar.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 Aprobaciones de hooks en modo plan

679</h3>

680 

681En [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), aparte de `ExitPlanMode`, el `"allow"` de tu hook `PreToolUse` no tiene efecto sobre una edición de archivo u otra llamada que no sea de solo lectura. Obtienes la misma solicitud de permiso, bloqueo o aprobación que la llamada obtendría sin ningún hook, y Claude Code sigue aplicando cualquier `updatedInput` que devuelva el hook. Si el hook responde a [`ExitPlanMode`](/docs/es/hooks#allow-with-updatedinput) con `"allow"` y `updatedInput`, esa herramienta sigue ejecutándose sin solicitud de permiso.

682 

683En modo plan, un mod que maneje `tool.check` tampoco puede aprobar una edición de archivo u otra llamada que no sea de solo lectura, aunque sí puede bloquear dicha llamada. Para eliminar este límite sobre las aprobaciones de hooks y mods, [aprueba el plan](/docs/es/permission-modes#review-and-approve-a-plan) o cambia a otro modo de permisos.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 Directorios de trabajo686 Directorios de trabajo

669</h2>687</h2>

Details

30 Pide el mod con tus propias palabras, por ejemplo `make a mod that shows the current git branch above the prompt`. Claude escribe el mod en un directorio propio dentro de la carpeta de mods de la sesión, que es `~/.claude/dev-mods/` seguido del ID de la sesión. La ruta completa de un mod se ve así: `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.30 Pide el mod con tus propias palabras, por ejemplo `make a mod that shows the current git branch above the prompt`. Claude escribe el mod en un directorio propio dentro de la carpeta de mods de la sesión, que es `~/.claude/dev-mods/` seguido del ID de la sesión. La ruta completa de un mod se ve así: `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 31 

32 <Note>32 <Note>

33 En los [modos de permisos](/docs/es/permission-modes#protected-paths) `default` y `acceptEdits`, Claude Code pregunta antes de que Claude cree cada uno de los archivos del mod, porque `~/.claude` es una ruta protegida. Aprueba cada archivo a medida que aparezca.33 En los [modos de permisos](/docs/es/permission-modes) `default` y `acceptEdits`, Claude Code pregunta antes de que Claude cree cada uno de los archivos del mod, porque la carpeta de mods es una [ruta protegida](/docs/es/permission-modes#protected-paths). Aprueba cada archivo a medida que aparezca.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219En `main`, el hook devuelve `deny`, incluso cuando una regla permite `git push`. En otra rama, y para otros comandos, la llamada obtiene la decisión que obtendría sin el mod.219El hook deniega `git push` en `main` y deja pasar todas las demás llamadas:

220 

221* **En `main`**: el hook devuelve `deny`, incluso cuando una regla permite `git push`

222* **En otra rama, y para otros comandos**: la llamada obtiene la decisión que obtendría sin el mod

220 223 

221El hook compara el texto del comando, así que trátalo como un recordatorio para Claude. Para bloquear los pushes a `main` para todos, protege la rama en tu host de Git.224El hook compara el texto del comando, así que trátalo como un recordatorio para Claude. Para bloquear los pushes a `main` para todos, protege la rama en tu host de Git.

222 225 

223Un hook puede devolver `allow`, `ask` o `deny`, así que también puede aprobar una llamada que bloqueó un hook `PreToolUse` fuera de la configuración administrada. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) indica qué decisiones prevalecen sobre un mod.226Un hook puede devolver `allow`, `ask` o `deny`, así que también puede aprobar una llamada que bloqueó un hook `PreToolUse` fuera de la configuración administrada. En [modo plan](/docs/es/permissions#hook-approvals-in-plan-mode), para una llamada que no es de solo lectura, como la edición de un archivo, tu hook puede endurecer la decisión que devuelve `next(e)`, pero no puede flexibilizarla. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) indica qué decisiones prevalecen sobre un mod.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 Reescribir o agregar contenido a un prompt229 Reescribir o agregar contenido a un prompt


337* **Hooks `PreToolUse` de la configuración administrada**: se ejecutan antes del hook `tool.call` del primer mod, y un bloqueo de uno de ellos es definitivo, así que ningún mod ve la llamada.340* **Hooks `PreToolUse` de la configuración administrada**: se ejecutan antes del hook `tool.call` del primer mod, y un bloqueo de uno de ellos es definitivo, así que ningún mod ve la llamada.

338* **Hooks `PreToolUse` de cualquier otro archivo de configuración y del `hooks/hooks.json` de los plugins**: se ejecutan después de que el último mod llama a `next`, como parte del comportamiento propio de Claude Code. Un mod que responde a `tool.call` sin llamar a `next` impide que se ejecuten, y un mod que llama a `next` ve su decisión en el resultado que devuelve.341* **Hooks `PreToolUse` de cualquier otro archivo de configuración y del `hooks/hooks.json` de los plugins**: se ejecutan después de que el último mod llama a `next`, como parte del comportamiento propio de Claude Code. Un mod que responde a `tool.call` sin llamar a `next` impide que se ejecuten, y un mod que llama a `next` ve su decisión en el resultado que devuelve.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) se activa después de que esos hooks y las reglas de permisos hayan decidido, así que un hook en él puede aprobar una llamada que un hook del segundo grupo bloqueó.343Un hook [`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) puede aprobar una llamada que bloqueó un hook `PreToolUse` fuera de la configuración administrada, porque `tool.check` se activa después de que esos hooks y las reglas de permisos hayan decidido. En modo plan, un hook `tool.check` puede aprobar una llamada así cuando es de solo lectura, pero no una edición de archivo ni otra llamada que no sea de solo lectura.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 Manejar un hook que falla346 Manejar un hook que falla

Details

205 205 

206Para producir el resumen, Claude Code envía una solicitud separada con el mismo prompt del sistema, herramientas e historial que tu conversación, más una instrucción de resumen anexada como mensaje final del usuario. Mientras la caché está activa, esa solicitud lee tu prefijo desde la caché, por lo que un `/compact` a mitad de sesión cuesta una fracción de lo que sugiere el tamaño del contexto y pasa la mayor parte de su tiempo generando el resumen.206Para producir el resumen, Claude Code envía una solicitud separada con el mismo prompt del sistema, herramientas e historial que tu conversación, más una instrucción de resumen anexada como mensaje final del usuario. Mientras la caché está activa, esa solicitud lee tu prefijo desde la caché, por lo que un `/compact` a mitad de sesión cuesta una fracción de lo que sugiere el tamaño del contexto y pasa la mayor parte de su tiempo generando el resumen.

207 207 

208Después de una pausa más larga que la [duración de caché](#cache-lifetime), no queda caché para leer, por lo que la solicitud de resumen reprocesa el historial completo como entrada sin caché. Por eso `/compact` cuesta más cuando [reanudas una sesión antigua](/docs/es/sessions#resume-from-a-summary). Tanto con la caché activa como con la caché expirada, el turno después de la compactación reconstruye la caché de conversación solo para el resumen, mucho más corto, por lo que ese turno no es la parte lenta.208Después de una pausa más larga que la [duración de caché](#cache-lifetime), no queda caché para leer, por lo que la solicitud de resumen reprocesa el historial completo como entrada sin caché. Por eso `/compact` cuesta más cuando [reanudas una sesión antigua](/docs/es/sessions#resume-a-session). Tanto con la caché activa como con la caché expirada, el turno después de la compactación reconstruye la caché de conversación solo para el resumen, mucho más corto, por lo que ese turno no es la parte lenta.

209 209 

210<Tip>210<Tip>

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.


310 310 

311Los prefijos en caché expiran después de un período de inactividad. Cada solicitud que acierta el caché reinicia el temporizador, por lo que el caché permanece activo mientras continúe trabajando. Después de una brecha lo suficientemente larga, la siguiente solicitud recalcula la entrada completa y restablece el caché, que es por qué el primer turno después de alejarse puede ser notablemente más lento.311Los prefijos en caché expiran después de un período de inactividad. Cada solicitud que acierta el caché reinicia el temporizador, por lo que el caché permanece activo mientras continúe trabajando. Después de una brecha lo suficientemente larga, la siguiente solicitud recalcula la entrada completa y restablece el caché, que es por qué el primer turno después de alejarse puede ser notablemente más lento.

312 312 

313En un plan Pro o Max, cuando reanuda una sesión grande después de un descanso prolongado, Claude Code [ofrece reanudar desde un resumen](/docs/es/sessions#resume-from-a-summary) para que las solicitudes posteriores no lleven el historial completo.

314 

315El tiempo de vida (TTL) controla cuánto tiempo de pausa sobrevive la caché. La API ofrece dos: un TTL de cinco minutos y un [TTL de una hora](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) que mantiene la caché activa durante descansos más largos, pero [cobra una tarifa más alta por las escrituras en caché](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). El TTL más largo ayuda cuando dejas una sesión inactiva y vuelves a ella, porque te ahorras el reprocesamiento que cuesta un prefijo expirado. Cuesta más en ráfagas cortas de trabajo que nunca permanecen inactivas más de cinco minutos, donde se aplica la tarifa de escritura más alta y la mayor duración de la caché no se aprovecha.313El tiempo de vida (TTL) controla cuánto tiempo de pausa sobrevive la caché. La API ofrece dos: un TTL de cinco minutos y un [TTL de una hora](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) que mantiene la caché activa durante descansos más largos, pero [cobra una tarifa más alta por las escrituras en caché](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). El TTL más largo ayuda cuando dejas una sesión inactiva y vuelves a ella, porque te ahorras el reprocesamiento que cuesta un prefijo expirado. Cuesta más en ráfagas cortas de trabajo que nunca permanecen inactivas más de cinco minutos, donde se aplica la tarifa de escritura más alta y la mayor duración de la caché no se aprovecha.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**: si iniciaste Claude Code con [`--settings`](/docs/es/settings#change-a-setting-for-one-session), comprueba si el archivo o JSON que pasaste establece una de esas claves. Si es así, cambia el valor allí, o inicia Claude Code de nuevo sin esas claves.1080* **`Command line arguments`**: si iniciaste Claude Code con [`--settings`](/docs/es/settings#change-a-setting-for-one-session), comprueba si el archivo o JSON que pasaste establece una de esas claves. Si es así, cambia el valor allí, o inicia Claude Code de nuevo sin esas claves.

1081* **`Enterprise managed settings`**: la configuración administrada de tu organización está cargada. Si establece una de esas claves, no puedes cambiar esa clave desde `/sandbox` ni desde ningún archivo de configuración que controles, así que consulta a tu administrador.1081* **`Enterprise managed settings`**: la configuración administrada de tu organización está cargada. Si establece una de esas claves, no puedes cambiar esa clave desde `/sandbox` ni desde ningún archivo de configuración que controles, así que consulta a tu administrador.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` imprime `Sandbox settings not changed`

1085</h3>

1086 

1087Esta línea significa que `/sandbox` no pudo guardar la elección que hiciste en su panel en el archivo `.claude/settings.local.json` de tu proyecto:

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093Si el motivo entre paréntesis es `EACCES`, `EPERM` o `EROFS`, inicia Claude Code en una carpeta de proyecto en la que puedas escribir y luego ejecuta `/sandbox` de nuevo en esa sesión.

1094 

1095Si el motivo comienza con `Invalid JSON syntax in settings file`, corrige el JSON en el archivo `.claude/settings.local.json` de tu proyecto y luego ejecuta `/sandbox` de nuevo.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 Limitaciones1098 Limitaciones

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* La ejecución no se inicia a través de [canales](/docs/es/channels)102* La ejecución no se inicia a través de [canales](/docs/es/channels)

103* Ninguna [regla de denegación](/docs/es/permissions#manage-permissions) elimina la herramienta `ExitPlanMode`103* Ninguna [regla de denegación](/docs/es/permissions#manage-permissions) elimina la herramienta `ExitPlanMode`

104 104 

105<h3 id="resume-from-a-summary">

106 Reanuda desde un resumen

107</h3>

108 

109En un plan Pro o Max, cuando reanudas una sesión que ha estado inactiva durante más de una hora aproximadamente y tiene más de 100,000 tokens, Claude Code restaura la conversación y luego abre un diálogo antes de que envíes tu primer mensaje. La [caché de prompts](/docs/es/prompt-caching#cache-lifetime) de la sesión habrá expirado para entonces, por lo que la siguiente solicitud procesa el historial completo una vez sin importar cuál de las opciones del diálogo elijas.

110 

111El diálogo ofrece tres formas de continuar la sesión:

112 

113* **Reanudar desde resumen**: ejecuta [`/compact`](/docs/es/context-window#what-survives-compaction) inmediatamente. Las solicitudes posteriores llevan el resumen en lugar del historial completo.

114* **Reanudar la sesión completa tal como está**: carga la conversación sin cambios.

115* **No me preguntes de nuevo**: reanuda la sesión completa y deja de mostrar el diálogo en todas las reanudaciones futuras.

116 

117Reanudar tal como está mantiene cada detalle de la conversación disponible, a un costo por solicitud que escala con el tamaño de la conversación. Reanudar desde el resumen cuesta menos en cada solicitud posterior porque lleva el resumen en lugar del historial completo, pero lo que sea que el resumen deje fuera ya no está en el contexto de Claude. Consulta [por qué el uso aumenta en una sesión larga](/docs/es/costs#why-usage-climbs-in-a-long-session) para saber de dónde proviene ese costo por solicitud.

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 Dónde busca el selector de sesiones106 Dónde busca el selector de sesiones

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | Sí | Identificador único de 256 caracteres como máximo, como `code-reviewer` o `reviewer-v2`. Los [hooks](/docs/es/hooks#subagentstart) reciben este valor como `agent_type`. El nombre del archivo no tiene que coincidir. Los nombres no pueden contener `:`, que está reservado para [identificadores con alcance de plugin](/docs/es/plugins/overview) como `my-plugin:reviewer` |316| `name` | Sí | Identificador único de 256 caracteres como máximo, como `code-reviewer` o `reviewer-v2`. Los [hooks](/docs/es/hooks#subagentstart) reciben este valor como `agent_type`. El nombre del archivo no tiene que coincidir. Los nombres no pueden contener `:`, que está reservado para [identificadores con alcance de plugin](/docs/es/plugins/overview) como `my-plugin:reviewer` |

317| `description` | Sí | Cuándo Claude debe delegar en este subagente |317| `description` | Sí | Cuándo Claude debe delegar en este subagente |

318| `tools` | No | [Herramientas](#available-tools) que el subagente puede usar, como una cadena separada por comas como `Read, Grep, Bash` o una lista YAML. Hereda todas las herramientas disponibles para subagentes si se omite. Si ninguna entrada en la lista se resuelve a una herramienta, el subagente generalmente [falla al lanzarse](/docs/es/errors#agent-would-be-spawned-with-zero-tools) con un error nombrando las entradas. Para precargar Skills en el contexto, use el campo `skills` en lugar de listar `Skill` aquí |318| `tools` | No | [Herramientas](#available-tools) que el subagente puede usar, como una cadena separada por comas como `Read, Grep, Bash` o una lista YAML. Hereda todas las herramientas disponibles para subagentes si se omite. Si ninguna entrada en la lista se resuelve a una herramienta, el subagente generalmente [falla al lanzarse](/docs/es/errors#agent-would-be-spawned-with-zero-tools) con un error nombrando las entradas. Para precargar Skills en el contexto, use el campo `skills` en lugar de listar `Skill` aquí |

319| `disallowedTools` | No | Herramientas a denegar, eliminadas de la lista heredada o especificada. Mismo formato que `tools`. Una entrada con un especificador, como `Bash(git push *)`, aún [elimina la herramienta completa](#available-tools) |319| `disallowedTools` | No | Herramientas a denegar, eliminadas de la lista heredada o especificada. Mismo formato que `tools`. Una entrada con un especificador, como `Bash(git push *)`, aún [elimina la herramienta completa](#restrict-which-tools-a-subagent-can-use) |

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

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

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


475 475 

476En una [sesión sin las herramientas Task](/docs/es/tools-reference#task-tool-availability), Claude Code no proporciona las herramientas de tareas a los subagentes tampoco, incluso cuando el subagente ejecuta un modelo diferente. Un compañero en proceso sigue su sesión de la misma manera, mientras que un compañero en su propio [panel dividido](/docs/es/agent-teams#choose-a-display-mode) se ejecuta como un proceso Claude Code separado, por lo que su propio modelo decide.476En una [sesión sin las herramientas Task](/docs/es/tools-reference#task-tool-availability), Claude Code no proporciona las herramientas de tareas a los subagentes tampoco, incluso cuando el subagente ejecuta un modelo diferente. Un compañero en proceso sigue su sesión de la misma manera, mientras que un compañero en su propio [panel dividido](/docs/es/agent-teams#choose-a-display-mode) se ejecuta como un proceso Claude Code separado, por lo que su propio modelo decide.

477 477 

478Para restringir herramientas, use el campo `tools` como una lista blanca o el campo `disallowedTools` como una lista negra. Este ejemplo usa `tools` para permitir solo Read, Grep, Glob y Bash. El subagente no puede editar archivos, escribir archivos, o usar ninguna herramienta MCP:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 Restringir qué herramientas puede usar un subagente

480</h4>

481 

482Para restringir herramientas, usa el campo `tools` como lista de permitidos o el campo `disallowedTools` como lista de denegados. Si ambos se establecen, `disallowedTools` se aplica primero y luego `tools` se resuelve contra el conjunto restante. Una herramienta listada en ambos se elimina.

483 

484Este ejemplo usa `tools` para permitir solo Read, Grep, Glob y Bash. El subagente no puede editar archivos, escribir archivos ni usar ninguna herramienta MCP:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498Si ambos se establecen, `disallowedTools` se aplica primero, luego `tools` se resuelve contra el grupo restante. Una herramienta listada en ambos se elimina.

499 

500Cuando nada en la lista `tools` se resuelve a una herramienta, por ejemplo porque cada entrada está mal escrita o nombra una herramienta que no está disponible para subagentes, Claude Code generalmente se niega a lanzar el subagente y la herramienta Agent devuelve un error nombrando las entradas no resueltas; consulte [Agent sería generado con cero herramientas](/docs/es/errors#agent-would-be-spawned-with-zero-tools) para el mensaje y cómo corregir cada entrada. Antes de v2.1.208, ese subagente se lanzaba sin herramientas y podría devolver un resultado vacío o confuso.504Cuando nada en la lista `tools` se resuelve a una herramienta, por ejemplo porque cada entrada está mal escrita o nombra una herramienta que no está disponible para subagentes, Claude Code generalmente se niega a lanzar el subagente y la herramienta Agent devuelve un error nombrando las entradas no resueltas; consulte [Agent sería generado con cero herramientas](/docs/es/errors#agent-would-be-spawned-with-zero-tools) para el mensaje y cómo corregir cada entrada. Antes de v2.1.208, ese subagente se lanzaba sin herramientas y podría devolver un resultado vacío o confuso.

501 505 

502Ambos campos aceptan patrones a nivel de servidor MCP además de nombres de herramientas exactos: `mcp__<server>` o `mcp__<server>__*` otorga o elimina todas las herramientas del servidor nombrado. En `disallowedTools`, `mcp__*` también elimina todas las herramientas MCP de cualquier servidor. Este ejemplo elimina todas las herramientas del servidor MCP `github` mientras mantiene herramientas de otros servidores y las herramientas integradas en su grupo:506Los campos `tools` y `disallowedTools` también aceptan entradas para un servidor MCP completo:

507 

508| Objetivo | Campo | Entrada de ejemplo |

509| :- | :- | :- |

510| Dar al subagente todas las herramientas de un servidor | `tools` | `mcp__github__*` |

511| Retener las herramientas de un servidor | `disallowedTools` | `mcp__github` o `mcp__github__*` |

512| Retener todas las herramientas MCP de cualquier servidor | `disallowedTools` | `mcp__*` |

513 

514Este ejemplo elimina todas las herramientas del servidor MCP `github` mientras conserva las herramientas de otros servidores y las herramientas integradas en el conjunto del subagente:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---