Objetivo: ao final, o consultor escolhe o evento certo para cada necessidade entre os 30 disponíveis, e sabe qual é o único caminho para reinjetar contexto depois de uma compactação.
PreToolUse é o único que impede (roda antes da ferramenta). PostToolUse reage depois do sucesso. Stop permite recusar o encerramento do turno.SessionStart com matcher compact — PostCompact existe, mas serve para detectar o fim da compactação (log, limpeza) e não consegue injetar contexto.| Evento | Quando dispara | Para que serve na prática |
|---|---|---|
PreToolUse |
Antes de uma chamada de ferramenta | Impedir ou reescrever a chamada — o primitivo de aplicação de política (aula 3.2.3) |
PostToolUse |
Depois do sucesso da ferramenta | Formatação, lint, type-check; reescrever a saída antes de o Claude ver |
Stop |
O Claude quer encerrar o turno | Recusar o encerramento — portão de teste (módulo 3.4) |
SubagentStop |
Um subagente quer encerrar | O mesmo portão, na borda da delegação |
SessionStart |
Início de sessão, e também em compact, resume e fork |
Injetar contexto — inclusive reinjetar depois de compactar (aula 3.2.5) |
PreCompact |
Antes da compactação | Salvar estado que a compactação vai descartar |
PostCompact |
Depois da compactação | Detectar que compactou: log, limpeza. Não injeta contexto |
InstructionsLoaded |
Quando arquivos de instrução carregam | Auditar o que entrou no contexto e quando — resolve "por que a regra não pegou?" |
Não precisa memorizar. Precisa saber que existem, para procurar antes de improvisar:
| Categoria | Eventos |
|---|---|
| Prompt | UserPromptSubmit, UserPromptExpansion |
| Permissão | PermissionRequest, PermissionDenied |
| Falha de ferramenta e lote | PostToolUseFailure, PostToolBatch |
| Subagente e tarefa | SubagentStart, TaskCreated, TaskCompleted, TeammateIdle |
| Encerramento | StopFailure, SessionEnd |
| Ambiente e arquivo | FileChanged, CwdChanged, ConfigChange |
| Worktree (aula 2.6.4) | WorktreeCreate, WorktreeRemove |
| Interface e setup | Notification, MessageDisplay, Setup |
| Elicitação | Elicitation, ElicitationResult |
O erro é natural: existe um evento chamado PostCompact, o objetivo é fazer algo depois de compactar, então parece obviamente o evento certo. Não é.
PostCompact |
SessionStart + matcher compact |
|
|---|---|---|
| Dispara depois de compactar | Sim | Sim |
| Consegue injetar contexto | Não — só mostra stderr | Sim — o stdout dele entra no contexto |
| Uso certo | Log, limpeza, telemetria | Reinjetar o estado do trabalho |
O motivo técnico é a aula 3.2.4: SessionStart é um dos três eventos cujo stdout puro vai para o contexto. PostCompact não é um deles.
Bônus: SessionStart também dispara em resume e em fork, então o mesmo hook reexecuta e atualiza informação que envelhece — carimbo de data, SHA do commit atual.
Regra Wayon O hook de política de ambiente do Meridiano é
PreToolUse— é o único que impede antes de acontecer. Política implementada emPostToolUsenão é política: o comando já rodou em QAS quando o hook dispara. Se a regra é "não pode acontecer", sóPreToolUseserve.
📖 Referência de eventos de hook
PreToolUseCorreto. É o único que roda antes da ferramenta e consegue impedir a execução.
PostToolUseDispara depois do sucesso — quando ele roda, o comando já tocou o QAS. Serve para reagir, não para impedir.
PermissionDeniedDispara após uma negação já ter ocorrido; é observação do que aconteceu, não o portão que decide.
.cds do projeto CAP, você quer rodar o linter automaticamente.PreToolUse, para preparar o ambiente antes da ediçãoRodaria antes da edição existir, então não há o que lintar ainda.
PostToolUseCorreto. Dispara depois do sucesso da ferramenta — é o lugar canônico de formatação, lint e type-check.
FileChangedExiste e reage a mudança de arquivo, mas o gancho ligado ao ciclo da ferramenta que o Claude acabou de usar é o PostToolUse.
SessionEnd, que dispara ao fim da sessãoDispara no encerramento da sessão inteira e não bloqueia — tarde demais e sem poder de recusa.
PostToolUse, verificando o resultado do último comandoReage a uma chamada de ferramenta específica, não ao momento em que o Claude decide que terminou.
Stop, que permite recusar o encerramento e devolver o motivoCorreto. É o portão de teste que o módulo 3.4 constrói.
paths: do módulo 2.3.6 não parece estar sendo aplicada, e você quer confirmar se ela entrou no contexto e quando.SessionStart, que lista tudo que carrega no inícioInjeta contexto no início, mas não é o evento que relata quais arquivos de instrução foram carregados.
InstructionsLoadedCorreto. É o evento feito para auditar quais arquivos de instrução entraram no contexto, quando e por quê.
ConfigChange, que reage a mudança de configuraçãoReage a alteração de configuração, não ao carregamento de instrução numa sessão.
PostCompact, que dispara exatamente depois da compactaçãoDispara no momento certo, mas não consegue injetar contexto — só mostra stderr. Serve para log e limpeza.
PreCompact, salvando o estado antes de a compactação apagarBom para salvar o estado, mas não reinjeta nada depois: quando a sessão volta, é preciso outro evento para escrever no contexto.
SessionStart com matcher compactCorreto. É o único caminho de reinjeção, porque o stdout de SessionStart vai direto para o contexto.