Aller au contenu principal

Hooks d'enforcement

Rules in CLAUDE.md → intentions. Hooks → guarantees.

Les hooks sont des scripts shell exécutés automatiquement par le harness Claude Code. Ils ne dépendent pas du raisonnement de Claude — ils s'exécutent inconditionnellement.


Cockpit §1 — heads-up display

Chaque réponse Claude s'ouvre sur une ligne d'en-tête générée par les hooks :

`[06-25 18:55:13 | claude-opus-4-6] ⬇️`
ChampValeursSignification
timestampMM-DD HH:MM:SSHorodatage (mois-jour heure:minute:seconde)
modelclaude-opus-4-6Modèle actif (extrait du transcript live)
Pastille🟢 optimal · ⬆️ sous-dimensionné · ⬇️ surdimensionnéFit modèle/complexité (METRICS)

Un vrai tableau de bord pilote : modèle, coût, routage, infrastructure — en un coup d'œil.


Les rails actifs

#HookÉvénementCe qu'il fait
1session-model.shSessionStartCache le modèle de session pour routing cross-hooks
2vault-context.shSessionStartCharge le résumé Peter (brief/mailbox/roadmap) en contexte
3routing-check.shUserPromptSubmitRouting modèle (live > transcript > cache), détection stack, diagnostic, longueur session
4model-metrics.shUserPromptSubmitAnalyse 5 derniers tours assistant → pastille 🟢/⬆️/⬇️ → §1 entête final
5detect-design-need.shUserPromptSubmitDétecte besoin UI/UX/design → propose Séréna 🎨
6peter-inbox-check.shUserPromptSubmitVérifie vault mailbox, signale priorités
7guard-no-sign.shPreToolUseBloque Co-Authored-By, --signoff (commit)
8guard-commit-french.shPreToolUseBloque messages purement anglais (commit)
9guard-qmd-first.shPreToolUseRedirige .md vers QMD avant lecture (Read)
10guard-loop-master.shPreToolUseBloque commit si flag §3 (loop-master) manque (commit)
11guard-tests-before-push.shPreToolUse + PostToolUseExige tests vert avant push (push / rappel)
12guard-review-auto.shPreToolUse + PostToolUseGate 100+ lignes, feat, 10 commits, archi (push / challenger)
13guard-anti-loop.shPostToolUseDétecte N+ tentatives identiques (param configurable)
14guard-hooks-reload.shPostToolUseRappel rechargement si hooks/settings modifiés
15guard-s1-header.shStopApplique le format entête §1 final

Principe de fonctionnement

Utilisateur envoie un message

UserPromptSubmit hooks (routing-check, model-metrics, detect-design)

Claude raisonne + choisit un outil

PreToolUse hooks s'exécutent
Exit 0 → l'outil s'exécute
Exit 2 → bloqué, message injecté dans le contexte

PostToolUse hooks s'exécutent

Pastille METRICS — fit modèle/complexité

model-metrics.sh analyse les 5 derniers tours assistant et classe chaque outil utilisé :

CatégorieOutils
lowRead, Glob, Grep, NotebookRead
highAgent, WebSearch, WebFetch
mediumtout le reste (Edit, Write, Bash…)

Si 60%+ des tours sont high → complexité high. Si 60%+ sont low → complexité low. Sinon medium.

Complexité + ModèleVerdictPastille
high + opusoptimal🟢
high + sonnetlimite⬆️
medium + sonnetoptimal🟢
medium + opusléger surplus⬇️
low + haikuoptimal🟢
low + sonnetléger surplus⬇️

Challenger — le garde-fou automatique

Le hook guard-review-auto.sh détecte 5 situations :

TriggerSignalAction proposée
100+ lignes modifiéesVolume élevé/review-copilot ou /angle-mort
Commit feat: / refactor:Feature terminée/angle-mort avant de continuer
10 commits sans reviewEndurance/angle-mort pause minimale
Fichier architecturant crééChoix structurant/review-copilot validation
3+ tentatives échouéesBoucleSTOP, changer d'approche

Le Challenger propose, il ne bloque pas. Exit code 0 toujours.


Hooks et chemins machine-spécifiques

Les hooks dans settings.json contiennent des chemins absolus propres à chaque machine. claude-atelier init et claude-atelier update les régénèrent systématiquement — ils ne sont jamais réutilisés depuis une ancienne installation.

Ne pas copier settings.json entre machines

Les chemins de hooks sont absolus et machine-spécifiques. Lancer claude-atelier init sur chaque machine pour générer les bons chemins.


Tests des hooks

npm test

(test/hooks.js) — 37+ tests couvrant routing, METRICS, mode M/A, Ollama, race condition inter-hooks, gate handoff. Doit passer avant tout push.