Pular para o conteúdo principal
Cada evento de hook é acionado em um ponto específico do ciclo de vida do agente. Use o campo matcher (uma regex aplicada ao tool_name do evento de hook) para filtrar quais invocações de ferramenta acionam seu hook.

PreToolUse

É acionado antes de uma ferramenta ser executada. Use isso para bloquear, modificar ou adicionar contexto às chamadas de ferramentas. Dados de stdin: Exemplo — Bloquear comandos destrutivos:
Exemplo — Exigir confirmação para escritas fora de src/: Use um script que analisa a entrada da ferramenta e retorna uma decisão:
Exemplo — Reescrever comandos antes da execução: Um hook pode reescrever de forma transparente a entrada da ferramenta ao imprimir hookSpecificOutput.updatedInput em stdout (consulte Formato de saída). Por exemplo, um script de hook que encaminha comandos de shell por meio de um wrapper:
Os argumentos reescritos são incorporados à chamada da ferramenta antes da execução — o agente executa o comando atualizado em vez do original.

PostToolUse

É acionado após a execução de uma ferramenta. Use isso para logging, validação ou para acionar ações subsequentes. Dados de stdin: Exemplo — Registrar em log todos os comandos do shell:

PermissionRequest

É acionado quando o agente precisa de uma decisão sobre permissão. Use isso para implementar uma lógica de aprovação personalizada. Dados de stdin: Exemplo — Aprovar automaticamente comandos git:

UserPromptSubmit

É acionado quando o usuário envia uma mensagem. Use isto para adicionar contexto ou acionar workflows. Dados de stdin: Exemplo — Injete contexto em todos os prompts:
O comando imprime additionalContext dentro de um objeto hookSpecificOutput no stdout, marcado com o nome do evento. Esse texto é injetado no contexto do agente:

Stop

É acionado quando o agente decide parar (encerrar seu turno). Use isso para adicionar instruções adicionais ou evitar que ele pare cedo demais. Dados de stdin: Exemplo — Lembre o agente de executar testes:
Tenha cuidado com hooks de parada que bloqueiam — eles podem fazer o agente entrar em loop se a condição não acabar sendo atendida.

PostCompaction

É acionado após a compactação de contexto ser concluída com sucesso. Use isso para registrar em log, acionar ações subsequentes ou reinjetar contexto que possa ter sido perdido durante a compactação. Dados de stdin: Exemplo — Registrar eventos de compactação:

SessionStart

É acionado quando uma nova sessão é iniciada. Use-o para inicialização, registro em log ou configuração do ambiente. Dados de stdin: Exemplo — Executar script de configuração:
Um comando SessionStart também pode injetar contexto ao imprimir additionalContext dentro de um objeto hookSpecificOutput no stdout:

SessionEnd

Ocorre quando uma sessão termina. Use este evento para limpeza ou registro final. Dados de stdin:

Correspondência com vários eventos

Um único arquivo de hooks pode definir hooks para vários eventos:

Como usar o matcher

O campo matcher é uma regex aplicada ao tool_name do evento do hook. Ele está disponível para eventos relacionados a ferramentas: PreToolUse, PostToolUse e PermissionRequest. Para eventos que não envolvem ferramentas (UserPromptSubmit, Stop, PostCompaction, SessionStart e SessionEnd), não há tool_name; use "" ou omita o matcher para executar o hook em todos os eventos desse tipo.
O matcher não é um glob de permissão. Padrões como mcp__github__* são úteis em permissões, mas matchers de hook são regexes. Use mcp__github__.* em um matcher de hook.

Nomes de ferramentas com os quais você pode fazer correspondência

Os matchers de hook operam sobre os mesmos nomes de ferramentas visíveis externamente que os scripts de hook recebem via stdin como tool_name. Os nomes exatos de ferramentas disponíveis podem variar conforme o modo da CLI, o modelo e as integrações ativadas. Os nomes públicos mais comuns das ferramentas principais são:
  • read
  • edit
  • grep
  • glob
  • exec
As ferramentas de servidor MCP aparecem como mcp__<server>__<tool>. Por exemplo, uma ferramenta de servidor MCP github chamada create_issue aparece como mcp__github__create_issue. Para outras ferramentas, faça correspondência com o tool_name exato mostrado no stdin do hook. Para confirmar o conjunto completo disponível na sua sessão atual, adicione temporariamente um hook PostToolUse com matcher: "" e registre o payload do stdin.