35La tabla a continuación resume cuándo se activa cada evento. La sección [Hook events](#hook-events) documenta el esquema de entrada completo y las opciones de control de decisión para cada uno.35La tabla a continuación resume cuándo se activa cada evento. La sección [Hook events](#hook-events) documenta el esquema de entrada completo y las opciones de control de decisión para cada uno.
36 36
37| Evento | Cuándo se dispara |37| Evento | Cuándo se dispara |
38| :-------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |38| :- | :- |
39| `SessionStart` | Cuando una sesión comienza o se reanuda |39| `SessionStart` | Cuando una sesión comienza o se reanuda |
40| `Setup` | Cuando inicia Claude Code con `--init-only`, o con `--init` o `--maintenance` en modo `-p`. Para preparación única en CI o scripts |40| `Setup` | Cuando inicia Claude Code con `--init-only`, o con `--init` o `--maintenance` en modo `-p`. Para preparación única en CI o scripts |
41| `UserPromptSubmit` | Cuando envía un prompt, antes de que Claude lo procese |41| `UserPromptSubmit` | Cuando envía un prompt, antes de que Claude lo procese |
259Dónde definas un hook determina su alcance:259Dónde definas un hook determina su alcance:
260 260
261| Ubicación | Alcance | Compartible |261| Ubicación | Alcance | Compartible |
262| :------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |262| :- | :- | :- |
263| `~/.claude/settings.json` | Todos tus proyectos | No, local en tu máquina |263| `~/.claude/settings.json` | Todos tus proyectos | No, local en tu máquina |
264| `.claude/settings.json` | Proyecto único | Sí, puede confirmarse en el repositorio |264| `.claude/settings.json` | Proyecto único | Sí, puede confirmarse en el repositorio |
265| `.claude/settings.local.json` | Proyecto único | No, ignorado por git cuando Claude Code guarda una configuración en él |265| `.claude/settings.local.json` | Proyecto único | No, ignorado por git cuando Claude Code guarda una configuración en él |
297El campo `matcher` filtra cuándo se activan los hooks. Cómo se evalúa un matcher depende de los caracteres que contiene:297El campo `matcher` filtra cuándo se activan los hooks. Cómo se evalúa un matcher depende de los caracteres que contiene:
298 298
299| Valor de matcher | Evaluado como | Ejemplo |299| Valor de matcher | Evaluado como | Ejemplo |
300| :--------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |300| :- | :- | :- |
301| `"*"`, `""` u omitido | Coincidir con todo | se activa en cada ocurrencia del evento |301| `"*"`, `""` u omitido | Coincidir con todo | se activa en cada ocurrencia del evento |
302| Solo letras, dígitos, `_`, `-`, espacios, `,` y `\|` | Cadena exacta, o lista de cadenas exactas separadas por `\|` o `,` con espacios en blanco opcionales alrededor | `Bash` coincide solo con la herramienta Bash; `Edit\|Write` y `Edit, Write` cada una coincide con cualquiera de las herramientas exactamente; `code-reviewer` coincide solo con ese tipo de agente |302| Solo letras, dígitos, `_`, `-`, espacios, `,` y `\|` | Cadena exacta, o lista de cadenas exactas separadas por `\|` o `,` con espacios en blanco opcionales alrededor | `Bash` coincide solo con la herramienta Bash; `Edit\|Write` y `Edit, Write` cada una coincide con cualquiera de las herramientas exactamente; `code-reviewer` coincide solo con ese tipo de agente |
303| Contiene cualquier otro carácter | Expresión regular de JavaScript, sin anclar | `^Notebook` coincide con cualquier herramienta cuyo nombre comienza con `Notebook`; `mcp__memory__.*` coincide con cada herramienta del servidor `memory` |303| Contiene cualquier otro carácter | Expresión regular de JavaScript, sin anclar | `^Notebook` coincide con cualquier herramienta cuyo nombre comienza con `Notebook`; `mcp__memory__.*` coincide con cada herramienta del servidor `memory` |
313Cada tipo de evento coincide en un campo diferente:313Cada tipo de evento coincide en un campo diferente:
314 314
315| Evento | Qué filtra el matcher | Valores de matcher de ejemplo |315| Evento | Qué filtra el matcher | Valores de matcher de ejemplo |
316| :------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |316| :- | :- | :- |
317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nombre de la herramienta | `Bash`, `Edit\|Write`, `mcp__.*` |317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nombre de la herramienta | `Bash`, `Edit\|Write`, `mcp__.*` |
318| `SessionStart` | cómo comenzó la sesión | `startup`, `resume`, `clear`, `compact`, `fork` |318| `SessionStart` | cómo comenzó la sesión | `startup`, `resume`, `clear`, `compact`, `fork` |
319| `Setup` | qué bandera CLI activó la configuración | `init`, `maintenance` |319| `Setup` | qué bandera CLI activó la configuración | `init`, `maintenance` |
438Estos campos se aplican a todos los tipos de hook:438Estos campos se aplican a todos los tipos de hook:
439 439
440| Campo | Requerido | Descripción |440| Campo | Requerido | Descripción |
441| :-------------- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |441| :- | :- | :- |
442| `type` | sí | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` o `"agent"` |442| `type` | sí | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` o `"agent"` |
443| `if` | no | Sintaxis de regla de permisos para filtrar cuándo se ejecuta este hook, como `"Bash(git *)"` o `"Edit(*.ts)"`. El comando de hook solo se ejecuta si la llamada de herramienta coincide con el patrón. Consulta la tabla [Bash matching](#bash-if-matching) a continuación para saber cómo los patrones de Bash se evalúan contra subcomandos, `$()` y backticks. Solo se evalúa en eventos de herramienta: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` y `PermissionDenied`. En otros eventos, un hook con `if` establecido nunca se ejecuta. Utiliza la misma sintaxis que [reglas de permisos](/docs/es/permissions) |443| `if` | no | Sintaxis de regla de permisos para filtrar cuándo se ejecuta este hook, como `"Bash(git *)"` o `"Edit(*.ts)"`. El comando de hook solo se ejecuta si la llamada de herramienta coincide con el patrón. Consulta la tabla [Bash matching](#bash-if-matching) a continuación para saber cómo los patrones de Bash se evalúan contra subcomandos, `$()` y backticks. Solo se evalúa en eventos de herramienta: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` y `PermissionDenied`. En otros eventos, un hook con `if` establecido nunca se ejecuta. Utiliza la misma sintaxis que [reglas de permisos](/docs/es/permissions) |
444| `timeout` | no | Segundos antes de cancelar. Claude Code no lo aplica en un hook de comando que ejecutas con [`async: true`](#run-hooks-in-the-background). Valores por defecto: 600 para `command`, `http` y `mcp_tool`; 30 para `prompt`; 60 para `agent`. Claude Code reduce el valor por defecto de `command`, `http` y `mcp_tool` a 30 en [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) y [`PostModelSwitch`](#postmodelswitch), y a 10 en [`MessageDisplay`](#messagedisplay). Los hooks de [`SessionEnd`](#sessionend) comparten un presupuesto de 1.5 segundos; si tu configuración establece un `timeout` por hook más largo, Claude Code aumenta el presupuesto para que coincida, hasta 60 segundos |444| `timeout` | no | Segundos antes de cancelar. Claude Code no lo aplica en un hook de comando que ejecutas con [`async: true`](#run-hooks-in-the-background). Valores por defecto: 600 para `command`, `http` y `mcp_tool`; 30 para `prompt`; 60 para `agent`. Claude Code reduce el valor por defecto de `command`, `http` y `mcp_tool` a 30 en [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) y [`PostModelSwitch`](#postmodelswitch), y a 10 en [`MessageDisplay`](#messagedisplay). Los hooks de [`SessionEnd`](#sessionend) comparten un presupuesto de 1.5 segundos; si tu configuración establece un `timeout` por hook más largo, Claude Code aumenta el presupuesto para que coincida, hasta 60 segundos |
452<span id="bash-if-matching" />Para patrones de Bash, si tu comando de hook se ejecuta depende de la forma del patrón y del comando de Bash que Claude está invocando. Las asignaciones `VAR=value` iniciales se eliminan antes de hacer coincidir.452<span id="bash-if-matching" />Para patrones de Bash, si tu comando de hook se ejecuta depende de la forma del patrón y del comando de Bash que Claude está invocando. Las asignaciones `VAR=value` iniciales se eliminan antes de hacer coincidir.
453 453
454| Patrón `if` | Comando de Bash | ¿Se ejecuta el hook? | Por qué |454| Patrón `if` | Comando de Bash | ¿Se ejecuta el hook? | Por qué |
455| :----------------- | :-------------------------- | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |455| :- | :- | :- | :- |
456| `Bash(git *)` | `FOO=bar git push` | sí | las asignaciones iniciales se eliminan; `git push` coincide |456| `Bash(git *)` | `FOO=bar git push` | sí | las asignaciones iniciales se eliminan; `git push` coincide |
457| `Bash(git *)` | `npm test && git push` | sí | cada subcomando se verifica; `git push` coincide |457| `Bash(git *)` | `npm test && git push` | sí | cada subcomando se verifica; `git push` coincide |
458| `Bash(rm *)` | `echo $(rm -rf /)` | sí | los comandos dentro de `$()` y backticks se verifican; `rm -rf /` coincide |458| `Bash(rm *)` | `echo $(rm -rf /)` | sí | los comandos dentro de `$()` y backticks se verifican; `rm -rf /` coincide |
470Además de los [campos comunes](#common-fields), los hooks de comando aceptan estos campos:470Además de los [campos comunes](#common-fields), los hooks de comando aceptan estos campos:
471 471
472| Campo | Requerido | Descripción |472| Campo | Requerido | Descripción |
473| :------------ | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |473| :- | :- | :- |
474| `command` | sí | Comando de shell a ejecutar. Con `args`, el ejecutable a generar directamente. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |474| `command` | sí | Comando de shell a ejecutar. Con `args`, el ejecutable a generar directamente. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |
475| `args` | no | Lista de argumentos. Cuando está presente, `command` se resuelve como un ejecutable y se genera directamente con `args` como el vector de argumentos, sin shell involucrado. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |475| `args` | no | Lista de argumentos. Cuando está presente, `command` se resuelve como un ejecutable y se genera directamente con `args` como el vector de argumentos, sin shell involucrado. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |
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) |
529Además de los [campos comunes](#common-fields), los hooks HTTP aceptan estos campos:529Además de los [campos comunes](#common-fields), los hooks HTTP aceptan estos campos:
530 530
531| Campo | Requerido | Descripción |531| Campo | Requerido | Descripción |
532| :--------------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |532| :- | :- | :- |
533| `url` | sí | URL a la que enviar la solicitud POST |533| `url` | sí | URL a la que enviar la solicitud POST |
534| `headers` | no | Encabezados HTTP adicionales como pares clave-valor. Los valores soportan interpolación de variables de entorno usando sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo se resuelven las variables listadas en `allowedEnvVars` |534| `headers` | no | Encabezados HTTP adicionales como pares clave-valor. Los valores soportan interpolación de variables de entorno usando sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo se resuelven las variables listadas en `allowedEnvVars` |
535| `allowedEnvVars` | no | Lista de nombres de variables de entorno que pueden interpolarse en valores de encabezado. Las referencias a variables no listadas se reemplazan con cadenas vacías. Requerido para que funcione cualquier interpolación de variable de entorno |535| `allowedEnvVars` | no | Lista de nombres de variables de entorno que pueden interpolarse en valores de encabezado. Las referencias a variables no listadas se reemplazan con cadenas vacías. Requerido para que funcione cualquier interpolación de variable de entorno |
570Además de los [campos comunes](#common-fields), los hooks de herramienta MCP aceptan estos campos:570Además de los [campos comunes](#common-fields), los hooks de herramienta MCP aceptan estos campos:
571 571
572| Campo | Requerido | Descripción |572| Campo | Requerido | Descripción |
573| :------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |573| :- | :- | :- |
574| `server` | sí | Nombre de un servidor MCP configurado. Para un [servidor incluido en plugin](/docs/es/mcp#plugin-provided-mcp-servers), este es el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:db`, no la clave del servidor desnuda. El servidor debe estar ya conectado; el hook nunca activa un flujo OAuth o de conexión |574| `server` | sí | Nombre de un servidor MCP configurado. Para un [servidor incluido en plugin](/docs/es/mcp#plugin-provided-mcp-servers), este es el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:db`, no la clave del servidor desnuda. El servidor debe estar ya conectado; el hook nunca activa un flujo OAuth o de conexión |
575| `tool` | sí | Nombre de la herramienta a llamar en ese servidor |575| `tool` | sí | Nombre de la herramienta a llamar en ese servidor |
576| `input` | no | Argumentos pasados a la herramienta. Los valores de cadena soportan sustitución de `${path}` de la [entrada JSON](#hook-input-and-output) del hook, como `"${tool_input.file_path}"` |576| `input` | no | Argumentos pasados a la herramienta. Los valores de cadena soportan sustitución de `${path}` de la [entrada JSON](#hook-input-and-output) del hook, como `"${tool_input.file_path}"` |
634Además de los [campos comunes](#common-fields), los hooks de prompt y agente aceptan estos campos:634Además de los [campos comunes](#common-fields), los hooks de prompt y agente aceptan estos campos:
635 635
636| Campo | Requerido | Descripción |636| Campo | Requerido | Descripción |
637| :------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |637| :- | :- | :- |
638| `prompt` | sí | Texto de prompt a enviar al modelo. Usa `$ARGUMENTS` como marcador de posición para la entrada JSON del hook. Escapa con una barra invertida para incluir texto literal: `\$1.00` se renderiza como `$1.00` |638| `prompt` | sí | Texto de prompt a enviar al modelo. Usa `$ARGUMENTS` como marcador de posición para la entrada JSON del hook. Escapa con una barra invertida para incluir texto literal: `\$1.00` se renderiza como `$1.00` |
639| `model` | no | Modelo a usar para evaluación. Por defecto es un modelo rápido |639| `model` | no | Modelo a usar para evaluación. Por defecto es un modelo rápido |
640 640
786Los eventos de hook reciben estos campos como JSON, además de campos específicos del evento documentados en cada sección [hook event](#hook-events). Para hooks de comando, este JSON llega a través de stdin. Para hooks HTTP, llega como el cuerpo de la solicitud POST.786Los eventos de hook reciben estos campos como JSON, además de campos específicos del evento documentados en cada sección [hook event](#hook-events). Para hooks de comando, este JSON llega a través de stdin. Para hooks HTTP, llega como el cuerpo de la solicitud POST.
787 787
788| Campo | Descripción |788| Campo | Descripción |
789| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |789| :- | :- |
790| `session_id` | Identificador de sesión actual |790| `session_id` | Identificador de sesión actual |
791| `prompt_id` | UUID que identifica el prompt del usuario que se está procesando actualmente. Coincide con el [atributo `prompt.id` en eventos de OpenTelemetry](/docs/es/monitoring-usage#event-correlation-attributes), para que pueda correlacionar la salida del hook con la telemetría de un único prompt. Ausente hasta la primera entrada del usuario. Requiere Claude Code v2.1.196 o posterior |791| `prompt_id` | UUID que identifica el prompt del usuario que se está procesando actualmente. Coincide con el [atributo `prompt.id` en eventos de OpenTelemetry](/docs/es/monitoring-usage#event-correlation-attributes), para que pueda correlacionar la salida del hook con la telemetría de un único prompt. Ausente hasta la primera entrada del usuario. Requiere Claude Code v2.1.196 o posterior |
792| `transcript_path` | Ruta al JSON de conversación. El archivo de transcripción se escribe de forma asincrónica y puede rezagarse con respecto a la conversación en memoria, por lo que es posible que aún no incluya los mensajes más recientes del turno actual cuando se activa un hook. Los hooks que necesitan el texto del asistente final del turno actual deben usar `last_assistant_message` en [Stop](#stop) y [SubagentStop](#subagentstop) en lugar de leer la transcripción |792| `transcript_path` | Ruta al JSON de conversación. El archivo de transcripción se escribe de forma asincrónica y puede rezagarse con respecto a la conversación en memoria, por lo que es posible que aún no incluya los mensajes más recientes del turno actual cuando se activa un hook. Los hooks que necesitan el texto del asistente final del turno actual deben usar `last_assistant_message` en [Stop](#stop) y [SubagentStop](#subagentstop) en lugar de leer la transcripción |
799Cuando se ejecuta con `--agent` o dentro de un subagente, se incluyen dos campos adicionales:799Cuando se ejecuta con `--agent` o dentro de un subagente, se incluyen dos campos adicionales:
800 800
801| Campo | Descripción |801| Campo | Descripción |
802| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |802| :- | :- |
803| `agent_id` | Identificador único para el subagente. Presente solo cuando el hook se activa dentro de una llamada de subagente. Use esto para distinguir llamadas de hook de subagente de llamadas de hilo principal. |803| `agent_id` | Identificador único para el subagente. Presente solo cuando el hook se activa dentro de una llamada de subagente. Use esto para distinguir llamadas de hook de subagente de llamadas de hilo principal. |
804| `agent_type` | Nombre del agente (por ejemplo, `"Explore"` o `"security-reviewer"`). Presente cuando la sesión usa `--agent` o el hook se activa dentro de un subagente. Para subagentes, el tipo del subagente tiene precedencia sobre el valor `--agent` de la sesión. Consulte [SubagentStart](#subagentstart) para los valores que los subagentes personalizados y de plugin reportan y cómo escribir un matcher contra un nombre con alcance de plugin. |804| `agent_type` | Nombre del agente (por ejemplo, `"Explore"` o `"security-reviewer"`). Presente cuando la sesión usa `--agent` o el hook se activa dentro de un subagente. Para subagentes, el tipo del subagente tiene precedencia sobre el valor `--agent` de la sesión. Consulte [SubagentStart](#subagentstart) para los valores que los subagentes personalizados y de plugin reportan y cómo escribir un matcher contra un nombre con alcance de plugin. |
805 805
926Exit code 2 es la forma en que un hook señala "detente, no hagas esto". El efecto depende del evento, porque algunos eventos representan acciones que pueden bloquearse (como una llamada a herramienta que aún no ha sucedido) y otros representan cosas que ya sucedieron o no pueden prevenirse.926Exit code 2 es la forma en que un hook señala "detente, no hagas esto". El efecto depende del evento, porque algunos eventos representan acciones que pueden bloquearse (como una llamada a herramienta que aún no ha sucedido) y otros representan cosas que ya sucedieron o no pueden prevenirse.
927 927
928| Evento de hook | ¿Puede bloquear? | Qué sucede en exit 2 |928| Evento de hook | ¿Puede bloquear? | Qué sucede en exit 2 |
929| :-------------------- | :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |929| :- | :- | :- |
930| `PreToolUse` | Sí | Bloquea la llamada a herramienta |930| `PreToolUse` | Sí | Bloquea la llamada a herramienta |
931| `PermissionRequest` | No | El código de salida 2 no se honra para este evento y el flujo de permiso procede sin cambios. Deniegue a través del objeto [`decision`](#permissionrequest-decision-control) en su lugar |931| `PermissionRequest` | No | El código de salida 2 no se honra para este evento y el flujo de permiso procede sin cambios. Deniegue a través del objeto [`decision`](#permissionrequest-decision-control) en su lugar |
932| `UserPromptSubmit` | Sí | Bloquea el procesamiento del prompt y borra el prompt |932| `UserPromptSubmit` | Sí | Bloquea el procesamiento del prompt y borra el prompt |
1003* **`hookSpecificOutput`** es un objeto anidado para eventos que necesitan control más rico. Requiere un campo `hookEventName` establecido en el nombre del evento.1003* **`hookSpecificOutput`** es un objeto anidado para eventos que necesitan control más rico. Requiere un campo `hookEventName` establecido en el nombre del evento.
1004 1004
1005| Campo | Predeterminado | Descripción |1005| Campo | Predeterminado | Descripción |
1006| :----------------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1006| :- | :- | :- |
1007| `continue` | `true` | Si es `false`, Claude detiene el procesamiento completamente después de que se ejecuta el hook. Tiene precedencia sobre cualquier campo de decisión específico del evento |1007| `continue` | `true` | Si es `false`, Claude detiene el procesamiento completamente después de que se ejecuta el hook. Tiene precedencia sobre cualquier campo de decisión específico del evento |
1008| `stopReason` | ninguno | Mensaje mostrado al usuario cuando `continue` es `false`. Se queda en la conversación, por lo que Claude lo ve si la conversación continúa |1008| `stopReason` | ninguno | Mensaje mostrado al usuario cuando `continue` es `false`. Se queda en la conversación, por lo que Claude lo ve si la conversación continúa |
1009| `suppressOutput` | `false` | No tiene efecto: Claude Code acepta el campo pero no actúa sobre él. El stdout de un hook exitoso nunca se muestra en la transcripción y se registra en el registro de depuración |1009| `suppressOutput` | `false` | No tiene efecto: Claude Code acepta el campo pero no actúa sobre él. El stdout de un hook exitoso nunca se muestra en la transcripción y se registra en el registro de depuración |
1101No todos los eventos admiten bloqueo o control de comportamiento a través de JSON. Los eventos que lo hacen cada uno usan un conjunto diferente de campos para expresar esa decisión. Use esta tabla como referencia rápida antes de escribir un hook:1101No todos los eventos admiten bloqueo o control de comportamiento a través de JSON. Los eventos que lo hacen cada uno usan un conjunto diferente de campos para expresar esa decisión. Use esta tabla como referencia rápida antes de escribir un hook:
1102 1102
1103| Eventos | Patrón de decisión | Campos clave |1103| Eventos | Patrón de decisión | Campos clave |
1104| :---------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1104| :- | :- | :- |
1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | `decision` de nivel superior | `decision: "block"`, `reason`. Stop y SubagentStop también aceptan `hookSpecificOutput.additionalContext` para [retroalimentación sin error que continúa la conversación](#stop-decision-control) |1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | `decision` de nivel superior | `decision: "block"`, `reason`. Stop y SubagentStop también aceptan `hookSpecificOutput.additionalContext` para [retroalimentación sin error que continúa la conversación](#stop-decision-control) |
1106| TeammateIdle, TaskCompleted | Código de salida o `continue: false` | El código de salida 2 bloquea la acción con retroalimentación de stderr. JSON `{"continue": false, "stopReason": "..."}` también detiene al compañero completamente, coincidiendo con el comportamiento del hook `Stop`; [TaskCompleted lo ignora cuando la herramienta `TaskUpdate` activó el evento](#taskcompleted-decision-control) |1106| TeammateIdle, TaskCompleted | Código de salida o `continue: false` | El código de salida 2 bloquea la acción con retroalimentación de stderr. JSON `{"continue": false, "stopReason": "..."}` también detiene al compañero completamente, coincidiendo con el comportamiento del hook `Stop`; [TaskCompleted lo ignora cuando la herramienta `TaskUpdate` activó el evento](#taskcompleted-decision-control) |
1107| TaskCreated | Código de salida o `decision` de nivel superior | El código de salida 2 o `decision: "block"` [cancela la tarea](#taskcreated-decision-control) y devuelve el mensaje a Claude. `continue: false` se ignora |1107| TaskCreated | Código de salida o `decision` de nivel superior | El código de salida 2 o `decision: "block"` [cancela la tarea](#taskcreated-decision-control) y devuelve el mensaje a Claude. `continue: false` se ignora |
1192El valor del matcher corresponde a cómo se inició la sesión:1192El valor del matcher corresponde a cómo se inició la sesión:
1193 1193
1194| Matcher | Cuándo se dispara |1194| Matcher | Cuándo se dispara |
1195| :-------- | :------------------------------------------------------------------------------------------------------------------------------------- |1195| :- | :- |
1196| `startup` | Nueva sesión |1196| `startup` | Nueva sesión |
1197| `resume` | `--resume`, `--continue`, o `/resume` |1197| `resume` | `--resume`, `--continue`, o `/resume` |
1198| `clear` | `/clear` |1198| `clear` | `/clear` |
1216Además de los [campos de entrada comunes](#common-input-fields), los hooks SessionStart reciben `source` y opcionalmente `model`, `agent_type`, y `session_title`:1216Además de los [campos de entrada comunes](#common-input-fields), los hooks SessionStart reciben `source` y opcionalmente `model`, `agent_type`, y `session_title`:
1217 1217
1218| Campo | Descripción |1218| Campo | Descripción |
1219| :-------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1219| :- | :- |
1220| `source` | Cómo se inició la sesión: `"startup"` para nuevas sesiones, `"resume"` para sesiones reanudadas, `"clear"` después de `/clear`, `"compact"` después de compactación, o `"fork"` para una nueva sesión bifurcada desde una existente |1220| `source` | Cómo se inició la sesión: `"startup"` para nuevas sesiones, `"resume"` para sesiones reanudadas, `"clear"` después de `/clear`, `"compact"` después de compactación, o `"fork"` para una nueva sesión bifurcada desde una existente |
1221| `model` | El identificador del modelo activo. Puede omitirse, por ejemplo después de `/clear` o cuando se restaura una sesión a través de recuperación de conversación, así que verifique el campo antes de leerlo |1221| `model` | El identificador del modelo activo. Puede omitirse, por ejemplo después de `/clear` o cuando se restaura una sesión a través de recuperación de conversación, así que verifique el campo antes de leerlo |
1222| `agent_type` | El nombre del agente, presente cuando inicia Claude Code con `claude --agent <name>` |1222| `agent_type` | El nombre del agente, presente cuando inicia Claude Code con `claude --agent <name>` |
1225Cuando `source` es `"resume"` o `"fork"` y la transcripción contiene al menos una respuesta de Claude, los hooks SessionStart también reciben los cuatro campos siguientes. Su hook puede usarlos para reportar qué cuesta reanudar una conversación obsoleta antes de la primera solicitud, por ejemplo en un [`systemMessage`](#json-output). Estos campos requieren Claude Code v2.1.251 o posterior.1225Cuando `source` es `"resume"` o `"fork"` y la transcripción contiene al menos una respuesta de Claude, los hooks SessionStart también reciben los cuatro campos siguientes. Su hook puede usarlos para reportar qué cuesta reanudar una conversación obsoleta antes de la primera solicitud, por ejemplo en un [`systemMessage`](#json-output). Estos campos requieren Claude Code v2.1.251 o posterior.
1226 1226
1227| Campo | Descripción |1227| Campo | Descripción |
1228| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1228| :- | :- |
1229| `seconds_since_last_response` | Segundos de reloj de pared desde la última respuesta en la transcripción reanudada |1229| `seconds_since_last_response` | Segundos de reloj de pared desde la última respuesta en la transcripción reanudada |
1230| `context_tokens` | Tokens que la primera solicitud de la sesión reanudada reenvía como su prompt |1230| `context_tokens` | Tokens que la primera solicitud de la sesión reanudada reenvía como su prompt |
1231| `prompt_cache_likely_expired` | `true` cuando la última respuesta es más antigua que la [duración de vida del caché de prompt](/docs/es/prompt-caching#cache-lifetime) de la sesión o una compactación posterior reemplazó la conversación en caché |1231| `prompt_cache_likely_expired` | `true` cuando la última respuesta es más antigua que la [duración de vida del caché de prompt](/docs/es/prompt-caching#cache-lifetime) de la sesión o una compactación posterior reemplazó la conversación en caché |
1255Claude Code agrega stdout que [trata como texto plano](#exit-code-0) al contexto de Claude. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver estos campos específicos del evento:1255Claude Code agrega stdout que [trata como texto plano](#exit-code-0) al contexto de Claude. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver estos campos específicos del evento:
1256 1256
1257| Campo | Descripción |1257| Campo | Descripción |
1258| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1258| :- | :- |
1259| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué poner en él |1259| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué poner en él |
1260| `initialUserMessage` | Cadena utilizada como el primer mensaje del usuario de la sesión. Se aplica en [modo no interactivo](/docs/es/headless) con la bandera `-p`, donde se convierte en el primer turno incluso si no se proporciona ningún prompt. Si se proporciona un prompt, sigue como el siguiente turno. A diferencia de `additionalContext`, que se adjunta a un turno existente, esto crea el turno |1260| `initialUserMessage` | Cadena utilizada como el primer mensaje del usuario de la sesión. Se aplica en [modo no interactivo](/docs/es/headless) con la bandera `-p`, donde se convierte en el primer turno incluso si no se proporciona ningún prompt. Si se proporciona un prompt, sigue como el siguiente turno. A diferencia de `additionalContext`, que se adjunta a un turno existente, esto crea el turno |
1261| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Úselo para nombrar sesiones automáticamente desde la carpeta de inicio, rama de git o nombre de worktree. Se aplica cuando `source` es `"startup"`, `"resume"`, o `"fork"`; se ignora en `"clear"` y `"compact"` |1261| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Úselo para nombrar sesiones automáticamente desde la carpeta de inicio, rama de git o nombre de worktree. Se aplica cuando `source` es `"startup"`, `"resume"`, o `"fork"`; se ignora en `"clear"` y `"compact"` |
1339El valor del matcher corresponde a la bandera CLI que disparó el hook:1339El valor del matcher corresponde a la bandera CLI que disparó el hook:
1340 1340
1341| Matcher | Cuándo se dispara |1341| Matcher | Cuándo se dispara |
1342| :------------ | :---------------------------------------- |1342| :- | :- |
1343| `init` | `claude --init-only` o `claude -p --init` |1343| `init` | `claude --init-only` o `claude -p --init` |
1344| `maintenance` | `claude -p --maintenance` |1344| `maintenance` | `claude -p --maintenance` |
1345 1345
1392Además de los [campos de entrada comunes](#common-input-fields), los hooks InstructionsLoaded reciben estos campos:1392Además de los [campos de entrada comunes](#common-input-fields), los hooks InstructionsLoaded reciben estos campos:
1393 1393
1394| Campo | Descripción |1394| Campo | Descripción |
1395| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1395| :- | :- |
1396| `file_path` | Ruta absoluta al archivo de instrucciones que se cargó |1396| `file_path` | Ruta absoluta al archivo de instrucciones que se cargó |
1397| `memory_type` | Alcance del archivo: `"User"`, `"Project"`, `"Local"`, o `"Managed"` |1397| `memory_type` | Alcance del archivo: `"User"`, `"Project"`, `"Local"`, o `"Managed"` |
1398| `load_reason` | Por qué se cargó el archivo: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"`, o `"compact"`. El valor `"compact"` se dispara cuando los archivos de instrucciones se recargan después de un evento de compactación |1398| `load_reason` | Por qué se cargó el archivo: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"`, o `"compact"`. El valor `"compact"` se dispara cuando los archivos de instrucciones se recargan después de un evento de compactación |
1463Para bloquear un prompt, devuelva un objeto JSON con `decision` establecido en `"block"`:1463Para bloquear un prompt, devuelva un objeto JSON con `decision` establecido en `"block"`:
1464 1464
1465| Campo | Descripción |1465| Campo | Descripción |
1466| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------- |1466| :- | :- |
1467| `decision` | `"block"` evita que se procese el prompt y lo borra del contexto. Omita para permitir que el prompt continúe |1467| `decision` | `"block"` evita que se procese el prompt y lo borra del contexto. Omita para permitir que el prompt continúe |
1468| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto |1468| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto |
1469| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt enviado. Consulte [Agregar contexto para Claude](#add-context-for-claude) |1469| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt enviado. Consulte [Agregar contexto para Claude](#add-context-for-claude) |
1522Los hooks `UserPromptExpansion` pueden bloquear la expansión o agregar contexto. Todos los [campos de salida JSON](#json-output) están disponibles.1522Los hooks `UserPromptExpansion` pueden bloquear la expansión o agregar contexto. Todos los [campos de salida JSON](#json-output) están disponibles.
1523 1523
1524| Campo | Descripción |1524| Campo | Descripción |
1525| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------ |1525| :- | :- |
1526| `decision` | `"block"` evita que el comando se expanda. Omita para permitir que continúe |1526| `decision` | `"block"` evita que el comando se expanda. Omita para permitir que continúe |
1527| `reason` | Se muestra al usuario cuando `decision` es `"block"` |1527| `reason` | Se muestra al usuario cuando `decision` es `"block"` |
1528| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt expandido. Consulte [Agregar contexto para Claude](#add-context-for-claude) |1528| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt expandido. Consulte [Agregar contexto para Claude](#add-context-for-claude) |
1567Además de los [campos de entrada comunes](#common-input-fields), los hooks MessageDisplay reciben identificadores para el turno y el mensaje, la posición de esta llamada dentro del mensaje y el nuevo texto en `delta`. Los límites de lotes dependen de cómo se transmite el texto, así que use `index` y `final` para rastrear el progreso a través de un mensaje en lugar de esperar que las líneas se agrupen de una manera particular.1567Además de los [campos de entrada comunes](#common-input-fields), los hooks MessageDisplay reciben identificadores para el turno y el mensaje, la posición de esta llamada dentro del mensaje y el nuevo texto en `delta`. Los límites de lotes dependen de cómo se transmite el texto, así que use `index` y `final` para rastrear el progreso a través de un mensaje en lugar de esperar que las líneas se agrupen de una manera particular.
1568 1568
1569| Campo | Descripción |1569| Campo | Descripción |
1570| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1570| :- | :- |
1571| `turn_id` | UUID del turno actual |1571| `turn_id` | UUID del turno actual |
1572| `message_id` | UUID del mensaje del asistente que se muestra. Estable en cada lote del mismo mensaje. Este no es el ID de API `msg_…`, por lo que no se puede correlacionar con IDs de mensaje de transcripción |1572| `message_id` | UUID del mensaje del asistente que se muestra. Estable en cada lote del mismo mensaje. Este no es el ID de API `msg_…`, por lo que no se puede correlacionar con IDs de mensaje de transcripción |
1573| `index` | Índice basado en cero de este lote dentro del mensaje |1573| `index` | Índice basado en cero de este lote dentro del mensaje |
1595Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks MessageDisplay pueden devolver `displayContent` para reemplazar el delta en pantalla:1595Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks MessageDisplay pueden devolver `displayContent` para reemplazar el delta en pantalla:
1596 1596
1597| Campo | Descripción |1597| Campo | Descripción |
1598| :--------------- | :------------------------------------------------------------------ |1598| :- | :- |
1599| `displayContent` | Texto mostrado en lugar del delta. Omítalo para mostrar el original |1599| `displayContent` | Texto mostrado en lugar del delta. Omítalo para mostrar el original |
1600 1600
1601Los hooks MessageDisplay no tienen control de decisión. No pueden bloquear el mensaje o cambiar lo que se almacena en la transcripción o se envía a Claude. Claude Code actúa sobre `displayContent` de su salida JSON y descarta `systemMessage` y `continue`.1601Los hooks MessageDisplay no tienen control de decisión. No pueden bloquear el mensaje o cambiar lo que se almacena en la transcripción o se envía a Claude. Claude Code actúa sobre `displayContent` de su salida JSON y descarta `systemMessage` y `continue`.
1736Ejecuta comandos de shell.1736Ejecuta comandos de shell.
1737 1737
1738| Campo | Tipo | Ejemplo | Descripción |1738| Campo | Tipo | Ejemplo | Descripción |
1739| :------------------ | :------ | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1739| :- | :- | :- | :- |
1740| `command` | string | `"npm test"` | El comando de shell a ejecutar |1740| `command` | string | `"npm test"` | El comando de shell a ejecutar |
1741| `description` | string | `"Run test suite"` | Descripción opcional de lo que hace el comando |1741| `description` | string | `"Run test suite"` | Descripción opcional de lo que hace el comando |
1742| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos. Los valores por encima del [máximo](/docs/es/tools-reference#bash-tool-behavior) se reducen al máximo en lugar de ser rechazados |1742| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos. Los valores por encima del [máximo](/docs/es/tools-reference#bash-tool-behavior) se reducen al máximo en lugar de ser rechazados |
1753`changedFiles` y `files` enumeran qué cambió el comando; los campos restantes dicen qué tan completa y confiable es esa lista.1753`changedFiles` y `files` enumeran qué cambió el comando; los campos restantes dicen qué tan completa y confiable es esa lista.
1754 1754
1755| Campo | Tipo | Ejemplo | Descripción |1755| Campo | Tipo | Ejemplo | Descripción |
1756| :------------- | :------ | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1756| :- | :- | :- | :- |
1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Rutas absolutas de los archivos que el comando cambió, como máximo 200. Presente siempre que `files` contenga un diff o `moreFiles` esté por encima de cero |1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Rutas absolutas de los archivos que el comando cambió, como máximo 200. Presente siempre que `files` contenga un diff o `moreFiles` esté por encima de cero |
1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs de hasta 5 archivos cambiados, para visualización. `created` o `deleted` es `true` para un archivo que el comando agregó o eliminó |1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs de hasta 5 archivos cambiados, para visualización. `created` o `deleted` es `true` para un archivo que el comando agregó o eliminó |
1759| `moreFiles` | number | `2` | Recuento de archivos cambiados sin diff en `files` |1759| `moreFiles` | number | `2` | Recuento de archivos cambiados sin diff en `files` |
1772Los campos coinciden con la herramienta Bash, con la cadena de comando en `command`:1772Los campos coinciden con la herramienta Bash, con la cadena de comando en `command`:
1773 1773
1774| Campo | Tipo | Ejemplo | Descripción |1774| Campo | Tipo | Ejemplo | Descripción |
1775| :------------------ | :------ | :------------------------- | :--------------------------------------------- |1775| :- | :- | :- | :- |
1776| `command` | string | `"Get-ChildItem -Recurse"` | El comando de PowerShell a ejecutar |1776| `command` | string | `"Get-ChildItem -Recurse"` | El comando de PowerShell a ejecutar |
1777| `description` | string | `"List files recursively"` | Descripción opcional de lo que hace el comando |1777| `description` | string | `"List files recursively"` | Descripción opcional de lo que hace el comando |
1778| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos |1778| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos |
1791Crea o sobrescribe un archivo.1791Crea o sobrescribe un archivo.
1792 1792
1793| Campo | Tipo | Ejemplo | Descripción |1793| Campo | Tipo | Ejemplo | Descripción |
1794| :---------- | :----- | :-------------------- | :---------------------------------- |1794| :- | :- | :- | :- |
1795| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a escribir |1795| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a escribir |
1796| `content` | string | `"file content"` | Contenido a escribir en el archivo |1796| `content` | string | `"file content"` | Contenido a escribir en el archivo |
1797 1797
1802Reemplaza una cadena en un archivo existente.1802Reemplaza una cadena en un archivo existente.
1803 1803
1804| Campo | Tipo | Ejemplo | Descripción |1804| Campo | Tipo | Ejemplo | Descripción |
1805| :------------ | :------ | :-------------------- | :---------------------------------- |1805| :- | :- | :- | :- |
1806| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a editar |1806| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a editar |
1807| `old_string` | string | `"original text"` | Texto a encontrar y reemplazar |1807| `old_string` | string | `"original text"` | Texto a encontrar y reemplazar |
1808| `new_string` | string | `"replacement text"` | Texto de reemplazo |1808| `new_string` | string | `"replacement text"` | Texto de reemplazo |
1815Lee contenidos de archivo.1815Lee contenidos de archivo.
1816 1816
1817| Campo | Tipo | Ejemplo | Descripción |1817| Campo | Tipo | Ejemplo | Descripción |
1818| :---------- | :----- | :-------------------- | :-------------------------------------------------- |1818| :- | :- | :- | :- |
1819| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a leer |1819| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a leer |
1820| `offset` | number | `10` | Número de línea opcional para comenzar a leer desde |1820| `offset` | number | `10` | Número de línea opcional para comenzar a leer desde |
1821| `limit` | number | `50` | Número opcional de líneas a leer |1821| `limit` | number | `50` | Número opcional de líneas a leer |
1827Encuentra archivos que coincidan con un patrón glob.1827Encuentra archivos que coincidan con un patrón glob.
1828 1828
1829| Campo | Tipo | Ejemplo | Descripción |1829| Campo | Tipo | Ejemplo | Descripción |
1830| :-------- | :----- | :--------------- | :--------------------------------------------------------------------------------- |1830| :- | :- | :- | :- |
1831| `pattern` | string | `"**/*.ts"` | Patrón glob para hacer coincidir archivos contra |1831| `pattern` | string | `"**/*.ts"` | Patrón glob para hacer coincidir archivos contra |
1832| `path` | string | `"/path/to/dir"` | Directorio opcional para buscar en. Por defecto es el directorio de trabajo actual |1832| `path` | string | `"/path/to/dir"` | Directorio opcional para buscar en. Por defecto es el directorio de trabajo actual |
1833 1833
1838Busca contenidos de archivo con expresiones regulares.1838Busca contenidos de archivo con expresiones regulares.
1839 1839
1840| Campo | Tipo | Ejemplo | Descripción |1840| Campo | Tipo | Ejemplo | Descripción |
1841| :------------ | :------ | :--------------- | :-------------------------------------------------------------------------------------- |1841| :- | :- | :- | :- |
1842| `pattern` | string | `"TODO.*fix"` | Patrón de expresión regular a buscar |1842| `pattern` | string | `"TODO.*fix"` | Patrón de expresión regular a buscar |
1843| `path` | string | `"/path/to/dir"` | Archivo o directorio opcional para buscar en |1843| `path` | string | `"/path/to/dir"` | Archivo o directorio opcional para buscar en |
1844| `glob` | string | `"*.ts"` | Patrón glob opcional para filtrar archivos |1844| `glob` | string | `"*.ts"` | Patrón glob opcional para filtrar archivos |
1853Obtiene y procesa contenido web.1853Obtiene y procesa contenido web.
1854 1854
1855| Campo | Tipo | Ejemplo | Descripción |1855| Campo | Tipo | Ejemplo | Descripción |
1856| :------- | :----- | :---------------------------- | :----------------------------------------- |1856| :- | :- | :- | :- |
1857| `url` | string | `"https://example.com/api"` | URL para obtener contenido de |1857| `url` | string | `"https://example.com/api"` | URL para obtener contenido de |
1858| `prompt` | string | `"Extract the API endpoints"` | Prompt a ejecutar en el contenido obtenido |1858| `prompt` | string | `"Extract the API endpoints"` | Prompt a ejecutar en el contenido obtenido |
1859 1859
1864Busca en la web.1864Busca en la web.
1865 1865
1866| Campo | Tipo | Ejemplo | Descripción |1866| Campo | Tipo | Ejemplo | Descripción |
1867| :---------------- | :----- | :----------------------------- | :-------------------------------------------------- |1867| :- | :- | :- | :- |
1868| `query` | string | `"react hooks best practices"` | Consulta de búsqueda |1868| `query` | string | `"react hooks best practices"` | Consulta de búsqueda |
1869| `allowed_domains` | array | `["docs.example.com"]` | Opcional: incluir solo resultados de estos dominios |1869| `allowed_domains` | array | `["docs.example.com"]` | Opcional: incluir solo resultados de estos dominios |
1870| `blocked_domains` | array | `["spam.example.com"]` | Opcional: excluir resultados de estos dominios |1870| `blocked_domains` | array | `["spam.example.com"]` | Opcional: excluir resultados de estos dominios |
1876Genera un [subagente](/docs/es/sub-agents).1876Genera un [subagente](/docs/es/sub-agents).
1877 1877
1878| Campo | Tipo | Ejemplo | Descripción |1878| Campo | Tipo | Ejemplo | Descripción |
1879| :-------------- | :----- | :------------------------- | :----------------------------------------------------- |1879| :- | :- | :- | :- |
1880| `prompt` | string | `"Find all API endpoints"` | La tarea para que el agente realice |1880| `prompt` | string | `"Find all API endpoints"` | La tarea para que el agente realice |
1881| `description` | string | `"Find API endpoints"` | Descripción breve de la tarea |1881| `description` | string | `"Find API endpoints"` | Descripción breve de la tarea |
1882| `subagent_type` | string | `"Explore"` | Tipo de agente especializado a usar |1882| `subagent_type` | string | `"Explore"` | Tipo de agente especializado a usar |
1885Cuando una llamada de Agent en primer plano se completa, su hook [PostToolUse](#posttooluse) recibe el resultado del subagente y telemetría de ejecución en `tool_response`. Lea estos campos para inspeccionar la ejecución; para resúmenes de tokens y costos en subagentes, use los [contadores de tokens y costos](/docs/es/monitoring-usage#token-counter) filtrados a `query_source` `"subagent"`, ya que `totalTokens` y `usage` cubren solo la solicitud final:1885Cuando una llamada de Agent en primer plano se completa, su hook [PostToolUse](#posttooluse) recibe el resultado del subagente y telemetría de ejecución en `tool_response`. Lea estos campos para inspeccionar la ejecución; para resúmenes de tokens y costos en subagentes, use los [contadores de tokens y costos](/docs/es/monitoring-usage#token-counter) filtrados a `query_source` `"subagent"`, ya que `totalTokens` y `usage` cubren solo la solicitud final:
1886 1886
1887| Campo | Tipo | Ejemplo | Descripción |1887| Campo | Tipo | Ejemplo | Descripción |
1888| :------------------ | :----- | :---------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1888| :- | :- | :- | :- |
1889| `status` | string | `"completed"` | `"completed"` para subagentes en primer plano, `"async_launched"` para subagentes en segundo plano. A partir de v2.1.198, los subagentes se ejecutan en segundo plano de forma predeterminada, por lo que un `run_in_background` omitido también produce `"async_launched"` |1889| `status` | string | `"completed"` | `"completed"` para subagentes en primer plano, `"async_launched"` para subagentes en segundo plano. A partir de v2.1.198, los subagentes se ejecutan en segundo plano de forma predeterminada, por lo que un `run_in_background` omitido también produce `"async_launched"` |
1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identificador para la ejecución del subagente |1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identificador para la ejecución del subagente |
1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Los bloques de texto finales del subagente, o, para un subagente cuyo informe pasa a través de `SubagentHandback`, una nota breve sobre esa entrega en su lugar |1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Los bloques de texto finales del subagente, o, para un subagente cuyo informe pasa a través de `SubagentHandback`, una nota breve sobre esa entrega en su lugar |
1911Hace al usuario una a cuatro preguntas de opción múltiple.1911Hace al usuario una a cuatro preguntas de opción múltiple.
1912 1912
1913| Campo | Tipo | Ejemplo | Descripción |1913| Campo | Tipo | Ejemplo | Descripción |
1914| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1914| :- | :- | :- | :- |
1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Preguntas a presentar, cada una con una cadena `question`, `header` corto, matriz `options`, y bandera `multiSelect` opcional |1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Preguntas a presentar, cada una con una cadena `question`, `header` corto, matriz `options`, y bandera `multiSelect` opcional |
1916| `answers` | object | `{"Which framework?": "React"}` | Opcional. Asigna texto de pregunta a la etiqueta de opción seleccionada. Las respuestas de selección múltiple unen etiquetas con comas. Claude no establece este campo; suministrarlo a través de `updatedInput` para responder programáticamente |1916| `answers` | object | `{"Which framework?": "React"}` | Opcional. Asigna texto de pregunta a la etiqueta de opción seleccionada. Las respuestas de selección múltiple unen etiquetas con comas. Claude no establece este campo; suministrarlo a través de `updatedInput` para responder programáticamente |
1917 1917
1922Presenta un plan y pide al usuario que lo apruebe antes de que Claude salga del [modo de plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude escribe el plan en un archivo en el disco antes de llamar a la herramienta, por lo que la `tool_input` literal del modelo es típicamente vacía. Claude Code inyecta el contenido del plan y la ruta del archivo antes de pasar la entrada a los hooks.1922Presenta un plan y pide al usuario que lo apruebe antes de que Claude salga del [modo de plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude escribe el plan en un archivo en el disco antes de llamar a la herramienta, por lo que la `tool_input` literal del modelo es típicamente vacía. Claude Code inyecta el contenido del plan y la ruta del archivo antes de pasar la entrada a los hooks.
1923 1923
1924| Campo | Tipo | Ejemplo | Descripción |1924| Campo | Tipo | Ejemplo | Descripción |
1925| :--------------- | :----- | :------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |1925| :- | :- | :- | :- |
1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenido del plan en Markdown. Inyectado desde el archivo del plan en el disco |1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenido del plan en Markdown. Inyectado desde el archivo del plan en el disco |
1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Ruta al archivo del plan. Inyectado |1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Ruta al archivo del plan. Inyectado |
1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Deprecado. Claude Code acepta el campo pero lo ignora. Antes de v2.1.205, llevaba permisos basados en prompts que Claude solicitó para implementar el plan |1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Deprecado. Claude Code acepta el campo pero lo ignora. Antes de v2.1.205, llevaba permisos basados en prompts que Claude solicitó para implementar el plan |
1936Los hooks `PreToolUse` pueden controlar si procede una llamada de herramienta. A diferencia de otros hooks que usan un campo `decision` de nivel superior, PreToolUse devuelve su decisión dentro de un objeto `hookSpecificOutput`. Esto le da un control más rico: cuatro resultados (permitir, denegar, preguntar o diferir) más la capacidad de modificar la entrada de herramienta antes de la ejecución.1936Los hooks `PreToolUse` pueden controlar si procede una llamada de herramienta. A diferencia de otros hooks que usan un campo `decision` de nivel superior, PreToolUse devuelve su decisión dentro de un objeto `hookSpecificOutput`. Esto le da un control más rico: cuatro resultados (permitir, denegar, preguntar o diferir) más la capacidad de modificar la entrada de herramienta antes de la ejecución.
1937 1937
1938| Campo | Descripción |1938| Campo | Descripción |
1939| :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1939| :- | :- |
1940| `permissionDecision` | `"allow"` omite el aviso de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) y para `AskUserQuestion` y `ExitPlanMode`, que necesitan [`updatedInput` emparejado con él](#allow-with-updatedinput). `"deny"` evita la llamada de herramienta. `"ask"` solicita al usuario que confirme. `"defer"` sale correctamente para que la herramienta pueda reanudarse más tarde. Las [reglas de denegación y pregunta](/docs/es/permissions#manage-permissions) aún se evalúan independientemente de lo que devuelva el hook |1940| `permissionDecision` | `"allow"` omite el aviso de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) y para `AskUserQuestion` y `ExitPlanMode`, que necesitan [`updatedInput` emparejado con él](#allow-with-updatedinput). `"deny"` evita la llamada de herramienta. `"ask"` solicita al usuario que confirme. `"defer"` sale correctamente para que la herramienta pueda reanudarse más tarde. Las [reglas de denegación y pregunta](/docs/es/permissions#manage-permissions) aún se evalúan independientemente de lo que devuelva el hook |
1941| `permissionDecisionReason` | Para `"allow"` y `"ask"`, se muestra al usuario pero no a Claude. Para `"deny"`, se muestra a Claude. Para `"defer"`, se ignora |1941| `permissionDecisionReason` | Para `"allow"` y `"ask"`, se muestra al usuario pero no a Claude. Para `"deny"`, se muestra a Claude. Para `"defer"`, se ignora |
1942| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. Claude Code evalúa reglas de permiso y la elegibilidad de [segundo plano automático](/docs/es/tools-reference#background-commands) de un comando Bash contra la entrada que devuelve su hook, no la entrada que envió Claude. Combine con `"allow"` para aprobar automáticamente, o `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |1942| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. Claude Code evalúa reglas de permiso y la elegibilidad de [segundo plano automático](/docs/es/tools-reference#background-commands) de un comando Bash contra la entrada que devuelve su hook, no la entrada que envió Claude. Combine con `"allow"` para aprobar automáticamente, o `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |
2069Los hooks `PermissionRequest` pueden permitir o denegar solicitudes de permiso. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver un objeto `decision` con estos campos específicos del evento:2069Los hooks `PermissionRequest` pueden permitir o denegar solicitudes de permiso. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver un objeto `decision` con estos campos específicos del evento:
2070 2070
2071| Campo | Descripción |2071| Campo | Descripción |
2072| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2072| :- | :- |
2073| `behavior` | `"allow"` otorga el permiso, `"deny"` lo deniega. Las [reglas de denegación y pregunta](/docs/es/permissions#manage-permissions) aún se evalúan, por lo que un hook que devuelve `"allow"` no anula una regla de denegación coincidente |2073| `behavior` | `"allow"` otorga el permiso, `"deny"` lo deniega. Las [reglas de denegación y pregunta](/docs/es/permissions#manage-permissions) aún se evalúan, por lo que un hook que devuelve `"allow"` no anula una regla de denegación coincidente |
2074| `updatedInput` | Solo para `"allow"`: modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. La entrada modificada se re-evalúa contra reglas de denegación y pregunta |2074| `updatedInput` | Solo para `"allow"`: modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. La entrada modificada se re-evalúa contra reglas de denegación y pregunta |
2075| `updatedPermissions` | Solo para `"allow"`: matriz de [entradas de actualización de permiso](#permission-update-entries) a aplicar, como agregar una regla de permiso o cambiar el modo de permiso de la sesión |2075| `updatedPermissions` | Solo para `"allow"`: matriz de [entradas de actualización de permiso](#permission-update-entries) a aplicar, como agregar una regla de permiso o cambiar el modo de permiso de la sesión |
2099El campo de salida `updatedPermissions` y el campo de entrada [`permission_suggestions`](#permissionrequest-input) ambos usan la misma matriz de objetos de entrada. Cada entrada tiene un `type` que determina sus otros campos, y un `destination` que controla dónde se escribe el cambio.2099El campo de salida `updatedPermissions` y el campo de entrada [`permission_suggestions`](#permissionrequest-input) ambos usan la misma matriz de objetos de entrada. Cada entrada tiene un `type` que determina sus otros campos, y un `destination` que controla dónde se escribe el cambio.
2100 2100
2101| `type` | Campos | Efecto |2101| `type` | Campos | Efecto |
2102| :------------------ | :--------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2102| :- | :- | :- |
2103| `addRules` | `rules`, `behavior`, `destination` | Agrega reglas de permiso. `rules` es una matriz de objetos `{toolName, ruleContent?}`. Omita `ruleContent` para hacer coincidir toda la herramienta. `behavior` es `"allow"`, `"deny"`, o `"ask"` |2103| `addRules` | `rules`, `behavior`, `destination` | Agrega reglas de permiso. `rules` es una matriz de objetos `{toolName, ruleContent?}`. Omita `ruleContent` para hacer coincidir toda la herramienta. `behavior` es `"allow"`, `"deny"`, o `"ask"` |
2104| `replaceRules` | `rules`, `behavior`, `destination` | Reemplaza todas las reglas del `behavior` dado en el `destination` con las `rules` proporcionadas |2104| `replaceRules` | `rules`, `behavior`, `destination` | Reemplaza todas las reglas del `behavior` dado en el `destination` con las `rules` proporcionadas |
2105| `removeRules` | `rules`, `behavior`, `destination` | Elimina reglas coincidentes del `behavior` dado |2105| `removeRules` | `rules`, `behavior`, `destination` | Elimina reglas coincidentes del `behavior` dado |
2116El campo `destination` en cada entrada determina si el cambio permanece en memoria o persiste en un archivo de configuración.2116El campo `destination` en cada entrada determina si el cambio permanece en memoria o persiste en un archivo de configuración.
2117 2117
2118| `destination` | Escribe en |2118| `destination` | Escribe en |
2119| :---------------- | :--------------------------------------------------- |2119| :- | :- |
2120| `session` | solo en memoria, descartado cuando termina la sesión |2120| `session` | solo en memoria, descartado cuando termina la sesión |
2121| `localSettings` | `.claude/settings.local.json` |2121| `localSettings` | `.claude/settings.local.json` |
2122| `projectSettings` | `.claude/settings.json` |2122| `projectSettings` | `.claude/settings.json` |
2165```2165```
2166 2166
2167| Campo | Descripción |2167| Campo | Descripción |
2168| :------------ | :--------------------------------------------------------------------------------------------------------------------------------- |2168| :- | :- |
2169| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a avisos de permiso y hooks PreToolUse |2169| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a avisos de permiso y hooks PreToolUse |
2170 2170
2171<h4 id="posttooluse-decision-control">2171<h4 id="posttooluse-decision-control">
2175Los hooks `PostToolUse` pueden proporcionar retroalimentación a Claude después de la ejecución de la herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:2175Los hooks `PostToolUse` pueden proporcionar retroalimentación a Claude después de la ejecución de la herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:
2176 2176
2177| Campo | Descripción |2177| Campo | Descripción |
2178| :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2178| :- | :- |
2179| `decision` | `"block"` agrega el `reason` junto al resultado de la herramienta. Claude aún ve la salida original; para reemplazarla, use `updatedToolOutput` |2179| `decision` | `"block"` agrega el `reason` junto al resultado de la herramienta. Claude aún ve la salida original; para reemplazarla, use `updatedToolOutput` |
2180| `reason` | Explicación mostrada a Claude cuando `decision` es `"block"` |2180| `reason` | Explicación mostrada a Claude cuando `decision` es `"block"` |
2181| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Consulte [Agregar contexto para Claude](#add-context-for-claude) |2181| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Consulte [Agregar contexto para Claude](#add-context-for-claude) |
2277```2277```
2278 2278
2279| Campo | Descripción |2279| Campo | Descripción |
2280| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2280| :- | :- |
2281| `error` | Cadena que describe qué salió mal. El formato depende de la herramienta que falló |2281| `error` | Cadena que describe qué salió mal. El formato depende de la herramienta que falló |
2282| `is_interrupt` | Booleano opcional. Verdadero cuando el fallo llegó a Claude Code como una interrupción en lugar de como un error que reportó la herramienta. Cancelar una herramienta en ejecución no dispara este hook; el resultado de la herramienta lleva el mensaje de interrupción en su lugar |2282| `is_interrupt` | Booleano opcional. Verdadero cuando el fallo llegó a Claude Code como una interrupción en lugar de como un error que reportó la herramienta. Cancelar una herramienta en ejecución no dispara este hook; el resultado de la herramienta lleva el mensaje de interrupción en su lugar |
2283| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a avisos de permiso y hooks PreToolUse |2283| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a avisos de permiso y hooks PreToolUse |
2295Los hooks `PostToolUseFailure` pueden proporcionar contexto a Claude después de un fallo de herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:2295Los hooks `PostToolUseFailure` pueden proporcionar contexto a Claude después de un fallo de herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:
2296 2296
2297| Campo | Descripción |2297| Campo | Descripción |
2298| :------------------ | :------------------------------------------------------------------------------------------------------------------------- |2298| :- | :- |
2299| `additionalContext` | Cadena agregada al contexto de Claude junto con el error. Consulte [Agregar contexto para Claude](#add-context-for-claude) |2299| `additionalContext` | Cadena agregada al contexto de Claude junto con el error. Consulte [Agregar contexto para Claude](#add-context-for-claude) |
2300 2300
2301```json theme={null}2301```json theme={null}
2356Los hooks `PostToolBatch` pueden inyectar contexto para Claude. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:2356Los hooks `PostToolBatch` pueden inyectar contexto para Claude. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:
2357 2357
2358| Campo | Descripción |2358| Campo | Descripción |
2359| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2359| :- | :- |
2360| `additionalContext` | Cadena de contexto inyectada una vez antes de la siguiente llamada del modelo. Consulte [Agregar contexto para Claude](#add-context-for-claude) para detalles de entrega, qué poner en él y cómo las sesiones reanudadas manejan valores pasados |2360| `additionalContext` | Cadena de contexto inyectada una vez antes de la siguiente llamada del modelo. Consulte [Agregar contexto para Claude](#add-context-for-claude) para detalles de entrega, qué poner en él y cómo las sesiones reanudadas manejan valores pasados |
2361 2361
2362```json theme={null}2362```json theme={null}
2402```2402```
2403 2403
2404| Campo | Descripción |2404| Campo | Descripción |
2405| :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2405| :- | :- |
2406| `reason` | La razón de la denegación. Para un veredicto del clasificador, en la mayoría de sesiones nombra la regla coincidente entre corchetes, como `[Data Exfiltration]`; consulte [Revisar denegaciones](/docs/es/auto-mode-config#review-denials) para las otras formas. Para una [denegación sin veredicto](#permissiondenied-decision-control), comienza con `Auto mode could not evaluate this action and is blocking it for safety`. Para una denegación porque el modelo del clasificador no estaba disponible, es el texto fijo `Classifier unavailable` |2406| `reason` | La razón de la denegación. Para un veredicto del clasificador, en la mayoría de sesiones nombra la regla coincidente entre corchetes, como `[Data Exfiltration]`; consulte [Revisar denegaciones](/docs/es/auto-mode-config#review-denials) para las otras formas. Para una [denegación sin veredicto](#permissiondenied-decision-control), comienza con `Auto mode could not evaluate this action and is blocking it for safety`. Para una denegación porque el modelo del clasificador no estaba disponible, es el texto fijo `Classifier unavailable` |
2407 2407
2408<h4 id="permissiondenied-decision-control">2408<h4 id="permissiondenied-decision-control">
2433Recibe estos eventos de hook incluso con notificaciones de escritorio desactivadas: la configuración `preferredNotifChannel`, incluida `notifications_disabled`, cambia solo cómo se le alerta, no si su hook se ejecuta.2433Recibe estos eventos de hook incluso con notificaciones de escritorio desactivadas: la configuración `preferredNotifChannel`, incluida `notifications_disabled`, cambia solo cómo se le alerta, no si su hook se ejecuta.
2434 2434
2435| Matcher | Cuándo se dispara |2435| Matcher | Cuándo se dispara |
2436| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2436| :- | :- |
2437| `permission_prompt` | Claude necesita su permiso para usar una herramienta o una [solicitud de red](/docs/es/sandboxing#network-isolation) de un comando en sandbox, y el aviso ha esperado aproximadamente seis segundos |2437| `permission_prompt` | Claude necesita su permiso para usar una herramienta o una [solicitud de red](/docs/es/sandboxing#network-isolation) de un comando en sandbox, y el aviso ha esperado aproximadamente seis segundos |
2438| `idle_prompt` | Claude terminó de responder hace aproximadamente 60 segundos y no ha escrito desde entonces |2438| `idle_prompt` | Claude terminó de responder hace aproximadamente 60 segundos y no ha escrito desde entonces |
2439| `auth_success` | La autenticación se completa |2439| `auth_success` | La autenticación se completa |
2550Los hooks SubagentStart no pueden bloquear la creación del subagente, pero pueden inyectar contexto en el subagente. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver:2550Los hooks SubagentStart no pueden bloquear la creación del subagente, pero pueden inyectar contexto en el subagente. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver:
2551 2551
2552| Campo | Descripción |2552| Campo | Descripción |
2553| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2553| :- | :- |
2554| `additionalContext` | Cadena agregada al contexto del subagente al inicio de su conversación, antes de su primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) |2554| `additionalContext` | Cadena agregada al contexto del subagente al inicio de su conversación, antes de su primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) |
2555 2555
2556```json theme={null}2556```json theme={null}
2632```2632```
2633 2633
2634| Campo | Descripción |2634| Campo | Descripción |
2635| :----------------- | :--------------------------------------------------------------------------------- |2635| :- | :- |
2636| `task_id` | Identificador de la tarea que se está creando |2636| `task_id` | Identificador de la tarea que se está creando |
2637| `task_subject` | Título de la tarea |2637| `task_subject` | Título de la tarea |
2638| `task_description` | Descripción detallada de la tarea. Puede estar ausente |2638| `task_description` | Descripción detallada de la tarea. Puede estar ausente |
2693```2693```
2694 2694
2695| Campo | Descripción |2695| Campo | Descripción |
2696| :----------------- | :--------------------------------------------------------------------------------- |2696| :- | :- |
2697| `task_id` | Identificador de la tarea que se está completando |2697| `task_id` | Identificador de la tarea que se está completando |
2698| `task_subject` | Título de la tarea |2698| `task_subject` | Título de la tarea |
2699| `task_description` | Descripción detallada de la tarea. Puede estar ausente |2699| `task_description` | Descripción detallada de la tarea. Puede estar ausente |
2748Cada entrada en `background_tasks` describe una tarea en vuelo y usa estos campos:2748Cada entrada en `background_tasks` describe una tarea en vuelo y usa estos campos:
2749 2749
2750| Campo | Descripción |2750| Campo | Descripción |
2751| :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2751| :- | :- |
2752| `id` | Identificador de tarea |2752| `id` | Identificador de tarea |
2753| `type` | Etiqueta de tipo de tarea amigable como `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session`, o `MCP task`. Cada etiqueta identifica qué característica de Claude Code creó la tarea. Vuelve al discriminante sin procesar para tipos no reconocidos |2753| `type` | Etiqueta de tipo de tarea amigable como `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session`, o `MCP task`. Cada etiqueta identifica qué característica de Claude Code creó la tarea. Vuelve al discriminante sin procesar para tipos no reconocidos |
2754| `status` | Estado actual de la tarea |2754| `status` | Estado actual de la tarea |
2762Cada entrada en `session_crons` describe un despertar programado con alcance de sesión, originado de `CronCreate`, `ScheduleWakeup`, y `/loop`:2762Cada entrada en `session_crons` describe un despertar programado con alcance de sesión, originado de `CronCreate`, `ScheduleWakeup`, y `/loop`:
2763 2763
2764| Campo | Descripción |2764| Campo | Descripción |
2765| :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |2765| :- | :- |
2766| `id` | Identificador de tarea cron |2766| `id` | Identificador de tarea cron |
2767| `schedule` | Expresión cron, por ejemplo `0 9 * * 1-5` |2767| `schedule` | Expresión cron, por ejemplo `0 9 * * 1-5` |
2768| `recurring` | `false` para despertares únicos cuya programación codifica un tiempo de disparo único, `true` para tareas que se disparan nuevamente en cada coincidencia |2768| `recurring` | `false` para despertares únicos cuya programación codifica un tiempo de disparo único, `true` para tareas que se disparan nuevamente en cada coincidencia |
2806Los hooks `Stop` y `SubagentStop` pueden controlar si Claude continúa. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:2806Los hooks `Stop` y `SubagentStop` pueden controlar si Claude continúa. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:
2807 2807
2808| Campo | Descripción |2808| Campo | Descripción |
2809| :------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2809| :- | :- |
2810| `decision` | `"block"` evita que Claude se detenga. Omita para permitir que Claude se detenga |2810| `decision` | `"block"` evita que Claude se detenga. Omita para permitir que Claude se detenga |
2811| `reason` | Requerido cuando `decision` es `"block"`. Le dice a Claude por qué debe continuar |2811| `reason` | Requerido cuando `decision` es `"block"`. Le dice a Claude por qué debe continuar |
2812| `hookSpecificOutput.additionalContext` | Retroalimentación sin error para Claude. La conversación continúa para que Claude pueda actuar sobre ella, pero a diferencia de `decision: "block"` se muestra en la transcripción como retroalimentación de hook en lugar de un error de hook |2812| `hookSpecificOutput.additionalContext` | Retroalimentación sin error para Claude. La conversación continúa para que Claude pueda actuar sobre ella, pero a diferencia de `decision: "block"` se muestra en la transcripción como retroalimentación de hook en lugar de un error de hook |
2844Además de los [campos de entrada comunes](#common-input-fields), los hooks StopFailure reciben `error`, `error_details` opcional, y `last_assistant_message` opcional. El campo `error` identifica el tipo de error y se utiliza para filtrado de matcher.2844Además de los [campos de entrada comunes](#common-input-fields), los hooks StopFailure reciben `error`, `error_details` opcional, y `last_assistant_message` opcional. El campo `error` identifica el tipo de error y se utiliza para filtrado de matcher.
2845 2845
2846| Campo | Descripción |2846| Campo | Descripción |
2847| :----------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2847| :- | :- |
2848| `error` | Tipo de error: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, o `unknown` |2848| `error` | Tipo de error: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, o `unknown` |
2849| `error_details` | Detalles adicionales sobre el error, cuando esté disponible |2849| `error_details` | Detalles adicionales sobre el error, cuando esté disponible |
2850| `last_assistant_message` | El texto de error renderizado mostrado en la conversación. A diferencia de `Stop` y `SubagentStop`, donde este campo contiene la salida conversacional de Claude, para `StopFailure` contiene la cadena de error de API en sí, como `"API Error: Rate limit reached"` |2850| `last_assistant_message` | El texto de error renderizado mostrado en la conversación. A diferencia de `Stop` y `SubagentStop`, donde este campo contiene la salida conversacional de Claude, para `StopFailure` contiene la cadena de error de API en sí, como `"API Error: Rate limit reached"` |
2890```2890```
2891 2891
2892| Campo | Descripción |2892| Campo | Descripción |
2893| :-------------- | :--------------------------------------------------------------------------------- |2893| :- | :- |
2894| `teammate_name` | Nombre del compañero que está a punto de quedarse inactivo |2894| `teammate_name` | Nombre del compañero que está a punto de quedarse inactivo |
2895| `team_name` | Deprecado. Nombre de equipo derivado de sesión; se eliminará en una versión futura |2895| `team_name` | Deprecado. Nombre de equipo derivado de sesión; se eliminará en una versión futura |
2896 2896
2927El matcher filtra en la fuente de configuración:2927El matcher filtra en la fuente de configuración:
2928 2928
2929| Matcher | Cuándo se dispara |2929| Matcher | Cuándo se dispara |
2930| :----------------- | :------------------------------------------------------------------- |2930| :- | :- |
2931| `user_settings` | `~/.claude/settings.json` cambia |2931| `user_settings` | `~/.claude/settings.json` cambia |
2932| `project_settings` | `.claude/settings.json` cambia |2932| `project_settings` | `.claude/settings.json` cambia |
2933| `local_settings` | `.claude/settings.local.json` cambia |2933| `local_settings` | `.claude/settings.local.json` cambia |
2978Los hooks ConfigChange pueden bloquear cambios de configuración para que no surtan efecto. Use código de salida 2 o un JSON `decision` para evitar el cambio. Cuando se bloquea, la nueva configuración no se aplica a la sesión en ejecución.2978Los hooks ConfigChange pueden bloquear cambios de configuración para que no surtan efecto. Use código de salida 2 o un JSON `decision` para evitar el cambio. Cuando se bloquea, la nueva configuración no se aplica a la sesión en ejecución.
2979 2979
2980| Campo | Descripción |2980| Campo | Descripción |
2981| :--------- | :--------------------------------------------------------------------------------------- |2981| :- | :- |
2982| `decision` | `"block"` evita que se aplique el cambio de configuración. Omita para permitir el cambio |2982| `decision` | `"block"` evita que se aplique el cambio de configuración. Omita para permitir el cambio |
2983| `reason` | Aceptado pero nunca mostrado |2983| `reason` | Aceptado pero nunca mostrado |
2984 2984
3027Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks CwdChanged pueden devolver `watchPaths` para establecer dinámicamente qué rutas de archivo [FileChanged](#filechanged) observa:3027Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks CwdChanged pueden devolver `watchPaths` para establecer dinámicamente qué rutas de archivo [FileChanged](#filechanged) observa:
3028 3028
3029| Campo | Descripción |3029| Campo | Descripción |
3030| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3030| :- | :- |
3031| `watchPaths` | Matriz de rutas absolutas. Reemplaza la lista de observación dinámica actual. Las rutas de su configuración `matcher` siempre se observan. Devolver una matriz vacía borra la lista dinámica, que es típico al entrar en un nuevo directorio |3031| `watchPaths` | Matriz de rutas absolutas. Reemplaza la lista de observación dinámica actual. Las rutas de su configuración `matcher` siempre se observan. Devolver una matriz vacía borra la lista dinámica, que es típico al entrar en un nuevo directorio |
3032 3032
3033Los hooks CwdChanged no tienen control de decisión. No pueden bloquear el cambio de directorio.3033Los hooks CwdChanged no tienen control de decisión. No pueden bloquear el cambio de directorio.
3053El matcher filtra en cómo se agregó el directorio:3053El matcher filtra en cómo se agregó el directorio:
3054 3054
3055| Matcher | Cuándo se dispara |3055| Matcher | Cuándo se dispara |
3056| :------------------- | :-------------------------------------------------------------------------------------- |3056| :- | :- |
3057| `slash_command` | Agrega un directorio con `/add-dir` |3057| `slash_command` | Agrega un directorio con `/add-dir` |
3058| `register_repo_root` | Un cliente de SDK agrega un directorio con la solicitud de control `register_repo_root` |3058| `register_repo_root` | Un cliente de SDK agrega un directorio con la solicitud de control `register_repo_root` |
3059 3059
3064Además de los [campos de entrada comunes](#common-input-fields), los hooks DirectoryAdded reciben `directory` y `source`.3064Además de los [campos de entrada comunes](#common-input-fields), los hooks DirectoryAdded reciben `directory` y `source`.
3065 3065
3066| Campo | Descripción |3066| Campo | Descripción |
3067| :---------- | :--------------------------------------------------------------------------------------------------------------------------- |3067| :- | :- |
3068| `directory` | Ruta absoluta del directorio que se agregó |3068| `directory` | Ruta absoluta del directorio que se agregó |
3069| `source` | Cómo se agregó el directorio, `"slash_command"` para `/add-dir` o `"register_repo_root"` para la solicitud de control de SDK |3069| `source` | Cómo se agregó el directorio, `"slash_command"` para `/add-dir` o `"register_repo_root"` para la solicitud de control de SDK |
3070 3070
3138Además de los [campos de entrada comunes](#common-input-fields), los hooks FileChanged reciben `file_path` y `event`.3138Además de los [campos de entrada comunes](#common-input-fields), los hooks FileChanged reciben `file_path` y `event`.
3139 3139
3140| Campo | Descripción |3140| Campo | Descripción |
3141| :---------- | :------------------------------------------------------------------------------------------------------------------------- |3141| :- | :- |
3142| `file_path` | Ruta absoluta al archivo que cambió |3142| `file_path` | Ruta absoluta al archivo que cambió |
3143| `event` | Qué sucedió: `"change"` para un archivo modificado, `"add"` para un archivo creado, o `"unlink"` para un archivo eliminado |3143| `event` | Qué sucedió: `"change"` para un archivo modificado, `"add"` para un archivo creado, o `"unlink"` para un archivo eliminado |
3144 3144
3160Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks FileChanged pueden devolver `watchPaths` para actualizar dinámicamente qué rutas de archivo se observan:3160Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks FileChanged pueden devolver `watchPaths` para actualizar dinámicamente qué rutas de archivo se observan:
3161 3161
3162| Campo | Descripción |3162| Campo | Descripción |
3163| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3163| :- | :- |
3164| `watchPaths` | Matriz de rutas absolutas. Reemplaza la lista de observación dinámica actual. Las rutas de su configuración `matcher` siempre se observan. Úselo cuando su script de hook descubra archivos adicionales para observar basándose en el archivo cambiado |3164| `watchPaths` | Matriz de rutas absolutas. Reemplaza la lista de observación dinámica actual. Las rutas de su configuración `matcher` siempre se observan. Úselo cuando su script de hook descubra archivos adicionales para observar basándose en el archivo cambiado |
3165 3165
3166Los hooks FileChanged no tienen control de decisión. No pueden bloquear el cambio de archivo que ocurre.3166Los hooks FileChanged no tienen control de decisión. No pueden bloquear el cambio de archivo que ocurre.
3296El valor del matcher indica si la compactación fue disparada manualmente o automáticamente:3296El valor del matcher indica si la compactación fue disparada manualmente o automáticamente:
3297 3297
3298| Matcher | Cuándo se dispara |3298| Matcher | Cuándo se dispara |
3299| :------- | :------------------------------------------------------------------------------------------------------------------------------------------- |3299| :- | :- |
3300| `manual` | `/compact` |3300| `manual` | `/compact` |
3301| `auto` | Compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window) |3301| `auto` | Compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window) |
3302 3302
3332Los mismos valores de matcher se aplican que para `PreCompact`:3332Los mismos valores de matcher se aplican que para `PreCompact`:
3333 3333
3334| Matcher | Cuándo se dispara |3334| Matcher | Cuándo se dispara |
3335| :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ |3335| :- | :- |
3336| `manual` | Después de `/compact` |3336| `manual` | Después de `/compact` |
3337| `auto` | Después de compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window) |3337| `auto` | Después de compactación automática cuando la conversación alcanza la [ventana de compactación automática](/docs/es/model-config#set-the-auto-compact-window) |
3338 3338
3450Además de los [campos de entrada comunes](#common-input-fields), los hooks PreModelSwitch reciben los campos en esta tabla. Los últimos cinco describen qué cuesta reenviar la conversación al nuevo modelo, para que un hook pueda mostrar esa cifra antes de que suceda el cambio.3450Además de los [campos de entrada comunes](#common-input-fields), los hooks PreModelSwitch reciben los campos en esta tabla. Los últimos cinco describen qué cuesta reenviar la conversación al nuevo modelo, para que un hook pueda mostrar esa cifra antes de que suceda el cambio.
3451 3451
3452| Campo | Tipo | Descripción |3452| Campo | Tipo | Descripción |
3453| :-------------------------- | :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3453| :- | :- | :- |
3454| `from_model` | string | ID de modelo del que cambia el cambio |3454| `from_model` | string | ID de modelo del que cambia el cambio |
3455| `to_model` | string | ID de modelo al que cambia el cambio. El matcher compara contra el nombre canónico de este modelo |3455| `to_model` | string | ID de modelo al que cambia el cambio. El matcher compara contra el nombre canónico de este modelo |
3456| `requested_model` | string o `null` | El modelo que la solicitud nombró: un alias como `opus`, un ID de modelo completo, o `null` cuando la solicitud fue para el modelo predeterminado |3456| `requested_model` | string o `null` | El modelo que la solicitud nombró: un alias como `opus`, un ID de modelo completo, o `null` cuando la solicitud fue para el modelo predeterminado |
3490Para un control más fino, devuelva `permissionDecision` y `permissionDecisionReason` en un objeto `hookSpecificOutput`, como en [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` acepta `"allow"`, `"deny"`, y `"ask"`. No acepta `"defer"`, `updatedInput`, o `additionalContext`. La tabla a continuación describe ambos campos:3490Para un control más fino, devuelva `permissionDecision` y `permissionDecisionReason` en un objeto `hookSpecificOutput`, como en [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` acepta `"allow"`, `"deny"`, y `"ask"`. No acepta `"defer"`, `updatedInput`, o `additionalContext`. La tabla a continuación describe ambos campos:
3491 3491
3492| Campo | Descripción |3492| Campo | Descripción |
3493| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3493| :- | :- |
3494| `permissionDecision` | `"allow"` continúa y omite la [confirmación que Claude Code muestra mientras el caché de prompt está caliente](/docs/es/prompt-caching#switching-models). `"deny"` cancela el cambio. `"ask"` solicita al usuario que lo confirme |3494| `permissionDecision` | `"allow"` continúa y omite la [confirmación que Claude Code muestra mientras el caché de prompt está caliente](/docs/es/prompt-caching#switching-models). `"deny"` cancela el cambio. `"ask"` solicita al usuario que lo confirme |
3495| `permissionDecisionReason` | Para `"deny"`, se muestra al usuario como la razón por la que se bloqueó el cambio, o se devuelve como el error para una solicitud `set_model`. Para `"ask"`, se muestra en el aviso de confirmación. Se ignora para `"allow"` |3495| `permissionDecisionReason` | Para `"deny"`, se muestra al usuario como la razón por la que se bloqueó el cambio, o se devuelve como el error para una solicitud `set_model`. Para `"ask"`, se muestra en el aviso de confirmación. Se ignora para `"allow"` |
3496 3496
3570Claude Code toma su stdout de texto plano del hook [](#exit-code-0) en salida 0, o `additionalContext` de salida JSON, y lo entrega a Claude con la siguiente solicitud después del cambio. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver:3570Claude Code toma su stdout de texto plano del hook [](#exit-code-0) en salida 0, o `additionalContext` de salida JSON, y lo entrega a Claude con la siguiente solicitud después del cambio. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver:
3571 3571
3572| Campo | Descripción |3572| Campo | Descripción |
3573| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------- |3573| :- | :- |
3574| `additionalContext` | Cadena agregada al contexto de Claude con la siguiente solicitud. Consulte [Agregar contexto para Claude](#add-context-for-claude) |3574| `additionalContext` | Cadena agregada al contexto de Claude con la siguiente solicitud. Consulte [Agregar contexto para Claude](#add-context-for-claude) |
3575 3575
3576Si el hook no se ha completado dentro de cinco segundos después de que envía la siguiente solicitud, Claude Code envía esa solicitud sin la salida y la adjunta a la siguiente solicitud en su lugar. Si el modelo cambia varias veces antes de la siguiente solicitud, Claude Code entrega solo la salida para el modelo de destino del último cambio.3576Si el hook no se ha completado dentro de cinco segundos después de que envía la siguiente solicitud, Claude Code envía esa solicitud sin la salida y la adjunta a la siguiente solicitud en su lugar. Si el modelo cambia varias veces antes de la siguiente solicitud, Claude Code entrega solo la salida para el modelo de destino del último cambio.
3584El campo `reason` en la entrada del hook indica por qué terminó la sesión:3584El campo `reason` en la entrada del hook indica por qué terminó la sesión:
3585 3585
3586| Razón | Descripción |3586| Razón | Descripción |
3587| :---------------------------- | :----------------------------------------------------------------------------------- |3587| :- | :- |
3588| `clear` | Sesión borrada con comando `/clear` |3588| `clear` | Sesión borrada con comando `/clear` |
3589| `resume` | Sesión cambiada a través de `/resume` interactivo |3589| `resume` | Sesión cambiada a través de `/resume` interactivo |
3590| `logout` | Usuario cerró sesión |3590| `logout` | Usuario cerró sesión |
3691```3691```
3692 3692
3693| Campo | Valores | Descripción |3693| Campo | Valores | Descripción |
3694| :-------- | :---------------------------- | :------------------------------------------------------------------------------- |3694| :- | :- | :- |
3695| `action` | `accept`, `decline`, `cancel` | Si aceptar, rechazar o cancelar la solicitud |3695| `action` | `accept`, `decline`, `cancel` | Si aceptar, rechazar o cancelar la solicitud |
3696| `content` | object | Valores de campo de formulario a enviar. Solo se usa cuando `action` es `accept` |3696| `content` | object | Valores de campo de formulario a enviar. Solo se usa cuando `action` es `accept` |
3697 3697
3744```3744```
3745 3745
3746| Campo | Valores | Descripción |3746| Campo | Valores | Descripción |
3747| :-------- | :---------------------------- | :---------------------------------------------------------------------------------------- |3747| :- | :- | :- |
3748| `action` | `accept`, `decline`, `cancel` | Anula la acción del usuario |3748| `action` | `accept`, `decline`, `cancel` | Anula la acción del usuario |
3749| `content` | object | Anula los valores del campo de formulario. Solo significativo cuando `action` es `accept` |3749| `content` | object | Anula los valores del campo de formulario. Solo significativo cuando `action` es `accept` |
3750 3750
3834```3834```
3835 3835
3836| Campo | Requerido | Descripción |3836| Campo | Requerido | Descripción |
3837| :---------------- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3837| :- | :- | :- |
3838| `type` | sí | Debe ser `"prompt"` |3838| `type` | sí | Debe ser `"prompt"` |
3839| `prompt` | sí | El texto del prompt a enviar al LLM. Use `$ARGUMENTS` como marcador de posición para la entrada JSON del hook. Si `$ARGUMENTS` no está presente, la entrada JSON se agrega al prompt |3839| `prompt` | sí | El texto del prompt a enviar al LLM. Use `$ARGUMENTS` como marcador de posición para la entrada JSON del hook. Si `$ARGUMENTS` no está presente, la entrada JSON se agrega al prompt |
3840| `model` | no | Modelo a usar para evaluación. Por defecto es un modelo rápido |3840| `model` | no | Modelo a usar para evaluación. Por defecto es un modelo rápido |
3856```3856```
3857 3857
3858| Campo | Descripción |3858| Campo | Descripción |
3859| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3859| :- | :- |
3860| `ok` | `true` para permitir. Para `false`, consulte el comportamiento por evento a continuación |3860| `ok` | `true` para permitir. Para `false`, consulte el comportamiento por evento a continuación |
3861| `reason` | Requerido cuando `ok` es `false` |3861| `reason` | Requerido cuando `ok` es `false` |
3862| `impossible` | Opcional. El modelo lo devuelve con `ok: false` cuando juzga que la condición nunca puede satisfacerse. En `Stop` y `SubagentStop`, Claude Code permite que el turno termine en lugar de retroalimentar la razón. Los hooks de agente y otros eventos lo ignoran |3862| `impossible` | Opcional. El modelo lo devuelve con `ok: false` cuando juzga que la condición nunca puede satisfacerse. En `Stop` y `SubagentStop`, Claude Code permite que el turno termine en lugar de retroalimentar la razón. Los hooks de agente y otros eventos lo ignoran |