Hooks
Hooks são comandos shell, endpoints HTTP ou prompts LLM que executam automaticamente em pontos específicos do ciclo de vida do Claude Code. Diferente do CLAUDE.md, que é instrução textual e portanto sujeita à interpretação do modelo, hooks são determinísticos: se você configurou, vai rodar.
Use hook quando precisar de garantia. "Sempre formate código depois de editar" no CLAUDE.md é uma sugestão. Um PostToolUse que roda prettier é uma certeza.
Onde Configurar
Hooks vivem em arquivos de settings JSON, na mesma hierarquia das outras configurações:
| Local | Escopo |
|---|---|
~/.claude/settings.json | Todos os projetos |
.claude/settings.json | Projeto, versionado |
.claude/settings.local.json | Projeto, gitignored |
Plugin hooks/hooks.json | Quando o plugin está habilitado |
| Skill/Agent frontmatter | Enquanto o componente está ativo |
| Managed policy settings | Toda a organização |
Estrutura de um Hook
Três níveis de aninhamento:
{
"hooks": {
"EventName": [
{
"matcher": "ToolName|OutroTool",
"hooks": [
{
"type": "command",
"command": "/caminho/pro/script.sh"
}
]
}
]
}
}
Tipos de Handler
| Tipo | O que faz |
|---|---|
command | Executa script shell, recebe JSON via stdin |
http | Manda POST com payload JSON |
prompt | Avaliação LLM single-turn (ex: "isso é seguro?") |
agent | Spawna subagente pra verificar (experimental) |
Eventos Principais
Os hooks disparam em diferentes cadências:
Por sessão
SessionStart- quando a sessão começa ou retomaSessionEnd- quando termina
Por turno
UserPromptSubmit- antes do Claude processar seu promptStop- quando o Claude termina de responderStopFailure- quando termina com falha
Por tool call
PreToolUse- antes de executar qualquer toolPostToolUse- depois de executar com sucessoPostToolUseFailure- depois de executar com falhaPermissionRequest- quando aparece dialog de permissãoPermissionDenied- quando o classificador do auto mode bloqueia
Assíncronos
FileChanged- quando um arquivo monitorado mudaCwdChanged- quando o working directory mudaInstructionsLoaded- quando CLAUDE.md ou rules carregamPreCompact/PostCompact- antes e depois de compactaçãoSubagentStart/SubagentStop- lifecycle de subagentesNotification- notificações (idle, permission prompt)