Stop Hook Claude Code : vérifier avant « terminé »

Ajoutez un contrôle local qui bloque la fin si un test échoue ou si un fichier manque.

Le message « terminé » ne prouve pas que Claude Code a lancé les tests ou produit le fichier attendu. Un Stop Hook peut exécuter un contrôle local court avant la fin du tour. Il ne remplace ni la CI ni une stratégie de test complète.

Hook minimal

Dans .claude/settings.json, reliez l'événement Stop à ./scripts/check-before-stop.sh avec un délai court. Le script peut lancer un test ciblé puis vérifier dist/app.js.

Il renvoie 0 en cas de succès. En cas d'échec, il écrit une cause précise dans stderr et renvoie 2. Dans Claude Code, seul le code 2 bloque Stop et transmet la raison à Claude ; 1 reste généralement une erreur non bloquante.

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

Le Stop Hook exécute le contrôle en fin de tour. CLAUDE.md décrit les règles sans lancer de commande. La CI reste indépendante et constitue la barrière finale.

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

Test de bout en bout

  1. Utilisez volontairement un mauvais chemin et confirmez le code 2 à la main.
  2. Lancez une petite tâche dans Claude Code. Le hook doit bloquer la fin et afficher la raison courte.
  3. Corrigez le test ou le chemin, puis recommencez. Le code 0 doit autoriser la fin.
  4. Si stop_hook_active est déjà vrai, ne bouclez pas au hasard : corrigez le contrôle ou arrêtez la session pour réparer le hook.

N'affichez ni API Key, ni .env, ni journal complet. Pour un flux API distinct, consultez la documentation BetterToken pour Claude Code.

Prêt à optimiser votre workflow LLM ?

Connectez vos modèles via une API unique, gérez les clés et maîtrisez vos dépenses d’IA.