Stop Hook no Claude Code: verificar antes de “pronto”

Adicione uma checagem local que bloqueia o encerramento quando um teste falha ou um arquivo não existe.

A mensagem “pronto” não prova que o Claude Code executou os testes ou gerou o arquivo esperado. Um Stop Hook pode rodar uma checagem local curta antes do fim do turno. Ele não substitui CI nem uma estratégia completa de testes.

Hook mínimo

Em .claude/settings.json, ligue o evento Stop ao script ./scripts/check-before-stop.sh com timeout curto. O script pode executar um teste focado e verificar dist/app.js.

Retorne 0 quando tudo passar. Em caso de erro, escreva uma causa curta em stderr e retorne 2. No Claude Code, o código 2 bloqueia Stop e entrega a causa ao Claude; 1 normalmente é apenas um erro não bloqueante.

{ "hooks": { "Stop": [{ "hooks": [{ "type": "command", "command": "./scripts/check-before-stop.sh", "timeout": 30 }] }] } }
chmod +x scripts/check-before-stop.sh

Stop Hook executa a checagem no fim do turno. CLAUDE.md descreve regras, mas não executa comandos. CI roda separadamente e continua sendo a barreira final.

npm test -- --runInBand >/dev/null 2>&1 || { echo "Stop bloqueado: npm test" >&2; exit 2; } test -s dist/app.js || { echo "Stop bloqueado: falta dist/app.js" >&2; exit 2; } exit 0

Validação completa

  1. Use de propósito um caminho inexistente e confirme manualmente o código 2.
  2. Execute uma tarefa pequena no Claude Code. O hook deve impedir o encerramento e mostrar a causa curta.
  3. Corrija o teste ou caminho e repita. O código 0 deve liberar o fim do turno.
  4. Se stop_hook_active já for true, não faça retry cego: corrija a checagem ou pare a sessão para reparar o hook.

Não imprima API Keys, .env ou logs completos. Para um fluxo API separado, consulte a documentação BetterToken para Claude Code.

Quer otimizar seu fluxo de trabalho com LLMs?

Conecte modelos por uma única API, gerencie chaves e controle os gastos com IA.