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