tool_name del evento de hook) para filtrar qué invocaciones de herramientas activan tu hook.
PreToolUse
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
Ejemplo — Registrar todos los comandos del shell:
PermissionRequest
Ejemplo — Aprobar automáticamente comandos de git:
UserPromptSubmit
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
Ejemplo — Recordarle al agente que ejecute pruebas:
PostCompaction
Ejemplo — Registrar eventos de compactación:
SessionStart
Ejemplo — Ejecutar script de configuración:
additionalContext dentro de un objeto hookSpecificOutput en stdout:
SessionEnd
Coincidencia de múltiples eventos
Cómo usar el matcher
matcher 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
tool_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 públicas más comunes son:
readeditgrepglobexec
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.
