Voltar aos PodcastsClaude
Claude Code 101
Hooks no Claude Code
Hooks let you run commands at different points in Claude code's life cycle.
Os hooks permitem que você execute comandos em diferentes momentos do ciclo de vida do Claude Code.
The key difference between hooks and everything else we covered is that hooks are deterministic.
A principal diferença entre os hooks e tudo o mais que abordamos é que os hooks são determinísticos.
They always run.
Eles sempre são executados.
So, put it this way.
Assim sendo.
You can tell Claude in your claude.md file to run prettier after every file edit and most of the time it will do that, but sometimes it won't.
Você pode dizer ao Claude no seu arquivo claude.md para executar o prettier após cada edição de arquivo e na maioria das vezes ele fará isso, mas às vezes não.
It's not perfect.
Não é perfeito.
But a hook makes it happen every single time with no exceptions.
Mas um hook faz isso acontecer todas as vezes sem exceções.
Common use cases could include auto formatting after file edits, logging all executed commands for compliance, blocking dangerous operations like modifying production files, and sending yourself notifications when Claude finishes a task.
Os casos de uso comuns incluem formatação automática após edições de arquivos, registro de todos os comandos executados para conformidade, bloqueio de operações perigosas como modificar arquivos de produção e envio de notificações quando o Claude conclui uma tarefa.
Hooks are configured in your settings.json file.
Os hooks são configurados no seu arquivo settings.json.
You pick an event, optionally set a matcher for which tool it applies to, and provide a command to run.
Você escolhe um evento, opcionalmente define um matcher para qual ferramenta ele se aplica e fornece um comando a ser executado.
User prompts submit runs when you submit a prompt before Claude processes it.
UserPromptSubmit é executado quando você envia um prompt antes que o Claude o processe.
Pre-tool use which runs before a tool call, post-tool use runs after a tool call completes.
PreToolUse é executado antes de uma chamada de ferramenta, PostToolUse é executado após a conclusão de uma chamada de ferramenta.
Notification runs when Claude sends a notification, and stop runs when Claude finishes responding.
Notification é executado quando o Claude envia uma notificação, e Stop é executado quando o Claude termina de responder.
The most common hook.
O hook mais comum.
Auto formatting after edits.
Formatação automática após edições.
You set a post-tool use hook with a matcher of edit or multi-edit, right?
Você define um hook PostToolUse com um matcher de edit ou multi-edit, certo?
So, it fires whenever Claude modifies a file.
Assim, ele dispara sempre que o Claude modifica um arquivo.
The command checks the file extension and runs the appropriate formatter.
O comando verifica a extensão do arquivo e executa o formatador apropriado.
This could be prettier for TypeScript, go format for go, rough for Python, whatever your project uses.
Pode ser prettier para TypeScript, go format para Go, ruff para Python, o que seu projeto usar.
Pre-tool use hooks can block tool calls before they execute.
Os hooks PreToolUse podem bloquear chamadas de ferramentas antes que sejam executadas.
So, your hook receives the tool name and input as JSON on stdin.
Seu hook recebe o nome da ferramenta e a entrada como JSON no stdin.
If it exits with code two, the action is blocked and the STD error message gets fed back to Claude's feedback so Claude knows why it was blocked and can adjust.
Se ele terminar com o código 2, a ação é bloqueada e a mensagem de erro padrão é enviada de volta ao Claude para que ele saiba por que foi bloqueado e possa se ajustar.
Exit code zero means proceed.
Código de saída 0 significa prosseguir.
Exit code two means block.
Código de saída 2 significa bloquear.
This is how you enforce hard rules.
É assim que você impõe regras rígidas.
Block writes to a production config directory, block bash commands that contain rm-rf, block commits to main, whatever your team needs to be guaranteed, not suggested.
Bloquear gravações em um diretório de configuração de produção, bloquear comandos bash que contenham rm-rf, bloquear commits para main, o que sua equipe precisar garantir, não apenas sugerir.
Hooks configured in .Claude/settings.json are project level and can be checked into your repo. This means that your entire team gets the same hooks automatically.
Os hooks configurados em .Claude/settings.json são de nível de projeto e podem ser incluídos no seu repositório. Isso significa que toda a sua equipe obtém os mesmos hooks automaticamente.
Use the Claude project dir environment variable in your commands to reference scripts stored in your project so they work regardless of Claude's current working directory.
Use a variável de ambiente do diretório do projeto Claude nos seus comandos para referenciar scripts armazenados no seu projeto para que funcionem independentemente do diretório de trabalho atual do Claude.
[music]
[music]
Hooks gives you deterministic control over Claude code's behavior.
Os hooks fornecem controle determinístico sobre o comportamento do Claude Code.
[music]
[music]
Use post-tool-use for auto-formatting and logging. Use pre-tool-use to block dangerous operations. Configure them in the /hooks or in settings.
Use PostToolUse para formatação automática e registro. Use PreToolUse para bloquear operações perigosas. Configure-os em /hooks ou em settings.
json
json
[music]
[music]
and check them into your repository so your team gets them, too.
e inclua-os no seu repositório para que sua equipe também os tenha.
If something needs to happen every time without fail, don't put it in a prompt.
Se algo precisa acontecer toda vez sem falha, não coloque no prompt.
Put it in a hook.
Coloque em um hook.
[music]
[music]