.devin/ do seu projeto (ou em uma configuração em nível de usuário), e a Devin CLI os executará nos eventos correspondentes do ciclo de vida. Hooks existentes em diretórios .claude/ também são detectados automaticamente — consulte Onde os hooks ficam.
O que os Hooks podem fazer?
Aplicar políticas
Bloquear comandos perigosos, exigir confirmação para ações específicas ou restringir o acesso a arquivos.
Adicionar contexto
Injetar instruções ou informações adicionais quando ferramentas específicas forem chamadas.
Executar efeitos colaterais
Executar scripts, enviar notificações ou registrar eventos quando algo acontecer.
Modificar permissões
Conceder ou restringir permissões dinamicamente com base na situação.
Exemplo rápido
Crie.devin/hooks.v1.json no seu projeto:
./scripts/check-command.sh antes de cada execução de comando de shell. O script recebe os dados do evento pela stdin e pode bloquear a ação saindo com o código 2 (ou imprimindo um objeto JSON "decision": "block"); qualquer outro código de saída diferente de zero é registrado como erro e não bloqueia — veja Códigos de saída.
Eventos de hook
Os hooks podem responder a estes eventos de ciclo de vida:
Consulte Hooks de ciclo de vida para ver detalhes sobre cada evento e os dados disponíveis.
Formato do hook
Cada hook tem um tipo (command ou prompt), um matcher opcional (regex na tool_name do evento do hook) e uma configuração:
Hooks de comando
Os hooks de comando executam um comando no shell. Os dados do evento são enviados como JSON em stdin, e o comando pode retornar JSON em stdout para controlar o resultado (consulte Formato de saída abaixo). Entrada (stdin):
A variável de ambiente
DEVIN_PROJECT_DIR é definida automaticamente como o diretório raiz do projeto.
Consulte Como usar o Matcher para ver os nomes das ferramentas integradas e o formato de nome de ferramenta MCP com o qual você pode fazer correspondência.
Formato de saída
Um hook de comando pode imprimir um objeto JSON em stdout para controlar o resultado. Para aprovar ou bloquear uma ação, retorne um campodecision no nível superior (com um reason opcional):
additionalContext dentro de um objeto hookSpecificOutput identificado com o nome do evento:
updatedInput dentro de um hookSpecificOutput de PreToolUse. Os campos em updatedInput são mesclados aos argumentos da ferramenta, então você pode atualizar apenas um subconjunto deles (por exemplo, só command):
Códigos de Saída
Onde os hooks ficam
O Devin CLI lê hooks nos seguintes locais. Todos usam o mesmo formato JSON. Os arquivos de hook no nível do projeto são detectados no diretório de trabalho e em seus diretórios ancestrais até a raiz do repositório, da mesma forma que skills e rules são carregados.No nível do projeto
Nível do usuário (global)
Em
.devin/hooks.v1.json, o objeto hooks é o arquivo inteiro (não é necessária nenhuma chave de encapsulamento). Em todos os outros locais, hooks fica aninhado sob a chave "hooks" em um arquivo de configurações.Os hooks dos caminhos
.claude/ são carregados quando read_config_from.claude está ativado (padrão). Se necessário, você pode desativar isso na sua configuração do usuário.Verificando hooks
Use o comando/hooks para ver todos os hooks carregados no momento e seus arquivos de origem:
Próximas etapas
Hooks de ciclo de vida
Aprofunde-se em cada tipo de evento e nos dados disponíveis.
Configuração
Defina de quais locais de configuração o Devin CLI lê hooks.

