tool_name del evento del hook) para filtrar qué invocaciones de herramientas activan tu hook.
Además de los campos específicos del evento que se muestran a continuación, cada payload de stdin incluye un session_id estable por sesión y un prompt_id por turno (que rota con cada prompt del usuario; no está presente en los eventos que se activan antes del primer prompt del usuario, p. ej. SessionStart) — consulta Hooks de Command.
PreToolUse
Se activa antes de que se ejecute una herramienta. Úsalo para bloquear, modificar o agregar contexto a las llamadas a herramientas. Datos de stdin:
Ejemplo: bloquear comandos destructivos
hookSpecificOutput.updatedInput en stdout (consulta Formato de salida). Por ejemplo, un script de hook que redirige los comandos de shell a través de un wrapper:
PostToolUse
Se activa después de que una herramienta termina de ejecutarse. Úsalo para registros, validación o para desencadenar acciones posteriores. Datos de stdin:
Ejemplo — Registrar todos los comandos del shell:
PermissionRequest
Se activa cuando el agente necesita una decisión sobre permisos. Úsalo para implementar una lógica de aprobación personalizada. Datos de stdin:
Ejemplo — Aprobar automáticamente comandos de git:
UserPromptSubmit
Se activa cuando el usuario envía un mensaje. Úsalo para agregar contexto o desencadenar flujos de trabajo. Datos de stdin:
Ejemplo — Inyectar contexto en cada prompt:
additionalContext dentro de un objeto hookSpecificOutput en stdout, con la etiqueta del nombre del evento. Ese texto se inyecta en el contexto del agente:
Detener
Se activa cuando el agente decide detenerse (finalizar su turno). Usa esto para agregar instrucciones de seguimiento o evitar que se detenga antes de tiempo. Datos de stdin:
Ejemplo — Recordarle al agente que ejecute pruebas:
PostCompaction
Se activa después de que la compactación del contexto se complete correctamente. Úsalo para el registro, desencadenar acciones posteriores o volver a inyectar contexto que pueda haberse perdido durante la compactación. Datos de stdin:
Ejemplo — Registrar eventos de compactación:
SessionStart
Se activa cuando comienza una nueva sesión. Úsalo para la inicialización, el registro o la configuración del entorno. Datos de stdin:
Ejemplo — Ejecutar script de configuración:
additionalContext dentro de un objeto hookSpecificOutput en stdout:
SessionEnd
Se activa cuando finaliza una sesión. Úsalo para tareas de limpieza o para el registro final. Datos de stdin:Coincidencia de múltiples eventos
Un único archivo de hooks puede definir hooks para múltiples eventos:Cómo usar el matcher
El campomatcher es una regex que se hace coincidir con el tool_name del evento del hook. Está disponible para eventos relacionados con herramientas: PreToolUse, PostToolUse y PermissionRequest.
En los eventos no relacionados con herramientas (UserPromptSubmit, Stop, PostCompaction, SessionStart y SessionEnd), no hay tool_name; usa "" u omite el matcher para ejecutar el hook en todos los eventos de ese tipo.
El matcher no es un glob de permisos. Patrones como
mcp__github__* son útiles en los permisos, pero los matchers de hooks son regexes. Usa mcp__github__.* en un matcher de hook.Nombres de herramientas que puedes hacer coincidir
Los matchers de hooks se aplican a los mismos nombres de herramientas visibles externamente que los scripts de hook reciben por stdin comotool_name. Los nombres exactos de las herramientas disponibles pueden variar según el modo de CLI, el modelo y las integraciones habilitadas.
Los nombres de herramientas core, por categoría:
Las herramientas de servidor MCP aparecen como
mcp__<server>__<tool>. Por ejemplo, una herramienta de servidor MCP de github llamada create_issue aparece como mcp__github__create_issue.
Para otras herramientas, haz coincidir el tool_name exacto que se muestra en el stdin del hook. Para confirmar el conjunto completo disponible en tu sesión actual, agrega un hook PostToolUse temporal con matcher: "" y registra el payload de stdin.
