O Que São os Hooks do Claude Code? Comandos Determinísticos
Os hooks do Claude Code são comandos de shell definidos pelo usuário que rodam automaticamente em pontos específicos do ciclo de vida do Claude Code, tornando o "isto precisa sempre acontecer" real e determinístico sem depender do julgamento do LLM. Os eventos clássicos são nove — SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Notification, Stop, SubagentStop, SessionEnd, PreCompact — dos quais PreToolUse e outros podem bloquear (impedindo edições em arquivos protegidos ou comandos perigosos). Você os configura em settings.json sob a chave "hooks" como nome do evento -> matcher -> type + command. O contrato de E/S: um hook recebe JSON na stdin (session_id, tool_input, etc.) e retorna via código de saída 0 (sucesso) / 2 (bloquear, com a stderr passada de volta ao Claude) ou JSON estruturado (continue, decision:block, permissionDecision: deny/allow/ask). O princípio-chave é "os hooks podem apertar, mas não afrouxar restrições" (deny sempre vence, bloqueia até sob bypassPermissions). Casos de uso clássicos: formatar após edições (PostToolUse + Edit|Write), proteger arquivos críticos, bloquear comandos perigosos, reinjetar contexto (SessionStart), notificações/log de auditoria e testar antes de parar (Stop). Sobre segurança, os hooks executam comandos de shell arbitrários com os seus privilégios, então configure apenas os confiáveis e valide/coloque entre aspas as entradas; a configuração dos hooks é capturada no início da sessão (um recurso de segurança), então alterações no meio da sessão não se aplicam. Com base na documentação oficial, ancorado nos nove eventos clássicos e no contrato de E/S.