Esta página fornece documentação de referência para implementar hooks no Claude Code.
~/.claude/settings.json
- Configurações do usuário.claude/settings.json
- Configurações do projeto.claude/settings.local.json
- Configurações locais do projeto (não commitadas)PreToolUse
e PostToolUse
)
Write
corresponde apenas à ferramenta WriteEdit|Write
ou Notebook.*
*
para corresponder a todas as ferramentas. Você também pode usar string vazia (""
) ou deixar
matcher
em branco.type
: Atualmente apenas "command"
é suportadocommand
: O comando bash para executar (pode usar a variável de ambiente $CLAUDE_PROJECT_DIR
)timeout
: (Opcional) Por quanto tempo um comando deve executar, em segundos, antes
de cancelar esse comando específico.UserPromptSubmit
, Notification
, Stop
, e SubagentStop
que não usam matchers, você pode omitir o campo matcher:
CLAUDE_PROJECT_DIR
(disponível apenas quando
Claude Code gera o comando hook) para referenciar scripts armazenados em seu projeto,
garantindo que funcionem independentemente do diretório atual do Claude:
Task
- Tarefas de subagente (veja documentação de subagentes)Bash
- Comandos shellGlob
- Correspondência de padrão de arquivoGrep
- Busca de conteúdoRead
- Leitura de arquivoEdit
, MultiEdit
- Edição de arquivoWrite
- Escrita de arquivoWebFetch
, WebSearch
- Operações webmanual
- Invocado de /compact
auto
- Invocado de auto-compact (devido à janela de contexto cheia)startup
- Invocado da inicializaçãoresume
- Invocado de --resume
, --continue
, ou /resume
clear
- Invocado de /clear
compact
- Invocado de compactação automática ou manual.reason
na entrada do hook será um de:
clear
- Sessão limpa com comando /clearlogout
- Usuário fez logoutprompt_input_exit
- Usuário saiu enquanto entrada de prompt estava visívelother
- Outras razões de saídatool_input
depende da ferramenta.
tool_input
e tool_response
depende da ferramenta.
stop_hook_active
é true quando Claude Code já está continuando como resultado de
um hook de parada. Verifique este valor ou processe a transcrição para prevenir que Claude Code
execute indefinidamente.
manual
, custom_instructions
vem do que o usuário passa para
/compact
. Para auto
, custom_instructions
está vazio.
stdout
é mostrado ao usuário no modo transcrição
(CTRL-R), exceto para UserPromptSubmit
e SessionStart
, onde stdout é
adicionado ao contexto.stderr
é enviado de volta para Claude processar
automaticamente. Veja comportamento por evento de hook abaixo.stderr
é mostrado ao usuário e
execução continua.UserPromptSubmit
onde stdout é injetado como contexto.Evento de Hook | Comportamento |
---|---|
PreToolUse | Bloqueia a chamada da ferramenta, mostra stderr para Claude |
PostToolUse | Mostra stderr para Claude (ferramenta já executou) |
Notification | N/A, mostra stderr apenas para usuário |
UserPromptSubmit | Bloqueia processamento do prompt, apaga prompt, mostra stderr apenas para usuário |
Stop | Bloqueia parada, mostra stderr para Claude |
SubagentStop | Bloqueia parada, mostra stderr para subagente Claude |
PreCompact | N/A, mostra stderr apenas para usuário |
SessionStart | N/A, mostra stderr apenas para usuário |
SessionEnd | N/A, mostra stderr apenas para usuário |
stdout
para controle mais sofisticado:
continue
for false, Claude para de processar após os hooks executarem.
PreToolUse
, isso é diferente de "permissionDecision": "deny"
, que
apenas bloqueia uma chamada de ferramenta específica e fornece feedback automático para Claude.PostToolUse
, isso é diferente de "decision": "block"
, que
fornece feedback automatizado para Claude.UserPromptSubmit
, isso previne que o prompt seja processado.Stop
e SubagentStop
, isso tem precedência sobre qualquer
saída "decision": "block"
."continue" = false
tem precedência sobre qualquer
saída "decision": "block"
.stopReason
acompanha continue
com uma razão mostrada ao usuário, não mostrada
para Claude.
PreToolUse
PreToolUse
podem controlar se uma chamada de ferramenta prossegue.
"allow"
contorna o sistema de permissão. permissionDecisionReason
é mostrado
ao usuário mas não para Claude."deny"
previne que a chamada da ferramenta execute. permissionDecisionReason
é
mostrado para Claude."ask"
pede ao usuário para confirmar a chamada da ferramenta na UI.
permissionDecisionReason
é mostrado ao usuário mas não para Claude.decision
e reason
estão depreciados para hooks PreToolUse.
Use hookSpecificOutput.permissionDecision
e
hookSpecificOutput.permissionDecisionReason
em vez disso. Os campos depreciados
"approve"
e "block"
mapeiam para "allow"
e "deny"
respectivamente.PostToolUse
PostToolUse
podem fornecer feedback para Claude após execução da ferramenta.
"block"
automaticamente solicita Claude com reason
.undefined
não faz nada. reason
é ignorado."hookSpecificOutput.additionalContext"
adiciona contexto para Claude considerar.UserPromptSubmit
UserPromptSubmit
podem controlar se um prompt de usuário é processado.
"block"
previne que o prompt seja processado. O prompt submetido é
apagado do contexto. "reason"
é mostrado ao usuário mas não adicionado ao contexto.undefined
permite que o prompt prossiga normalmente. "reason"
é ignorado."hookSpecificOutput.additionalContext"
adiciona a string ao contexto se não
bloqueado.Stop
/SubagentStop
Stop
e SubagentStop
podem controlar se Claude deve continuar.
"block"
previne que Claude pare. Você deve preencher reason
para Claude
saber como prosseguir.undefined
permite que Claude pare. reason
é ignorado.SessionStart
SessionStart
permitem que você carregue contexto no início de uma sessão.
"hookSpecificOutput.additionalContext"
adiciona a string ao contexto.additionalContext
de múltiplos hooks são concatenados.SessionEnd
SessionEnd
executam quando uma sessão termina. Eles não podem bloquear terminação de sessão
mas podem realizar tarefas de limpeza.
UserPromptSubmit
, você pode injetar contexto usando qualquer método:UserPromptSubmit
)mcp__<server>__<tool>
, por exemplo:
mcp__memory__create_entities
- Ferramenta de criar entidades do servidor Memorymcp__filesystem__read_file
- Ferramenta de ler arquivo do servidor Filesystemmcp__github__search_repositories
- Ferramenta de busca do servidor GitHub"$VAR"
não $VAR
..
em caminhos de arquivo$CLAUDE_PROJECT_DIR
para o caminho do projeto).env
, .git/
, chaves, etc./hooks
para mudanças se aplicaremCLAUDE_PROJECT_DIR
está disponível e contém o
caminho absoluto para o diretório raiz do projeto (onde Claude Code foi iniciado)--debug
)/hooks
para ver se seu hook está registradoclaude --debug
para ver detalhes de execução de hook\"
dentro de strings JSONclaude --debug
para ver execução detalhada de
hookclaude --debug
para ver detalhes de execução de hook: