Automatisation avec Hooks
À l'issue de cette leçon, le stagiaire comprend les hooks de Claude Code, sait identifier les événements principaux (PreToolUse, PostToolUse, UserPromptSubmit, Stop), et configure un premier hook utile pour son contexte de travail.
Hooks — automatiser le cycle de vie
Un hook est un script qui s'exécute automatiquement à un moment précis du cycle de vie d'une session Claude Code : avant une commande, après une édition, à la soumission d'un prompt, en fin de session. Là où une Skill influence le contenu de la réponse, un hook déclenche une action hors-Claude à un moment précis.
Les hooks transforment Claude Code d'agent passif en agent intégré dans une chaîne d'outils. Linter qui s'exécute à chaque édition, garde-fou qui bloque les commandes risquées, notification qui informe la fin d'une session longue. Tout ce qui mérite d'être automatique au lieu d'être à votre charge.
Les quatre événements principaux
PreToolUse
Déclenché avant chaque utilisation d'un outil par Claude (édition de fichier, commande shell). Usage typique : valider la commande, bloquer si pattern dangereux, logger l'intention.
PostToolUse
Déclenché après chaque utilisation d'un outil. Usage typique : formater le code (prettier, black), lancer un linter ciblé, mettre à jour un index, déclencher un test.
UserPromptSubmit
Déclenché à chaque prompt utilisateur. Usage typique : injecter du contexte automatique (statut Git, branche courante), enrichir le prompt avec des métadonnées, logger les demandes.
Stop
Déclenché en fin de session. Usage typique : notification (mail, Slack, son), résumé de la session, archivage automatique. Pratique pour les sessions agentiques longues.
Configuration — le fichier settings.json
Les hooks se définissent dans le fichier settings.json, au niveau utilisateur (~/.claude/settings.json) ou projet (.claude/settings.json à la racine, versionné dans Git). Le format est simple : nom de l'événement, conditions, commande à exécuter.
Exemple — formater le code automatiquement
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "prettier --write \"$file\""
}
]
}
]
}
}Après chaque édition ou écriture de fichier, Claude lance Prettier sur le fichier modifié. Le code reste toujours formaté selon les conventions du projet, sans que vous ayez à y penser.
Hook PreToolUse — garde-fou anti-secret
Le hook PreToolUse est le plus puissant en termes de sécurité : il peut bloquer une action avant qu'elle ne soit exécutée. Application typique : détection de secrets (clés d'API, tokens) avant qu'ils ne soient écrits en clair quelque part.
Le principe
Le hook reçoit la commande proposée par Claude. Il scanne pour détecter des patterns sensibles (regex sur clés AWS, tokens GitHub, mots de passe). Si détection, il retourne un code d'erreur, Claude refuse l'action et signale le problème.
Convention Unix classique : exit code 0 = succès (Claude continue), autre exit code = échec (action bloquée). La sortie standard (stdout) sert à passer un message d'information ; la sortie d'erreur (stderr) sert à expliquer le blocage.
# Hook PreToolUse — script bash de détection de secrets #!/bin/bash if echo "$CLAUDE_TOOL_INPUT" | grep -qE '(AKIA[0-9A-Z]{16}|ghp_[a-zA-Z0-9]{36}|sk-[a-zA-Z0-9]{48})'; then echo "Secret detected, action blocked" >&2 exit 1 fi exit 0
Discipline d'usage — éviter les ralentissements
Les hooks s'exécutent à chaque déclenchement de leur événement. Un hook PostToolUse qui lance un linter complet à chaque édition de fichier ralentit visiblement la session. La discipline d'écriture des hooks est essentielle.
Trois règles d'or
- Rapidité avant tout : un hook doit s'exécuter en moins de 2 secondes idéalement. Au-delà, c'est ressenti comme une latence par l'utilisateur.
- Ciblage par matcher : utilisez le champ
matcherpour ne déclencher que sur les outils ou fichiers concernés. Pas de hook PostToolUse universel. - Test à blanc : avant d'installer un hook au niveau projet (donc partagé avec l'équipe), tester en local 2-3 sessions pour vérifier le comportement.
Quelques hooks utiles à connaître
Format automatique après édition
PostToolUse + prettier / black / gofmt / rustfmt. Code toujours bien formaté, plus de discussions stériles en revue de code sur le style.
Lint ciblé sur les fichiers modifiés
PostToolUse + linter sur le fichier modifié uniquement (pas tout le projet). Rapide et utile : signale les erreurs en temps réel.
Logging des sessions
Stop + script qui archive la conversation dans un dossier daté. Utile pour la traçabilité Qualiopi ou la revue de session.
Notification de fin de session
Stop + notification système / mail / Slack. Pour les sessions agentiques longues où vous ne restez pas devant l'écran.
Versionnement et revue de code
Un hook installé au niveau projet (.claude/settings.json) s'applique à tous les développeurs du projet. Modifier les hooks = modifier le comportement de tout le monde. Conclusion : les hooks de projet passent en revue de code comme tout autre changement.
Cette discipline évite trois types de problèmes : un hook qui ralentit l'équipe entière sans qu'on sache d'où vient le ralentissement ; un hook qui bloque des commandes légitimes (faux positif) ; un hook qui contourne involontairement une règle de sécurité.
Pour vos hooks personnels (~/.claude/settings.json), évidemment, vous êtes seul maître à bord. Mais gardez l'œil sur ce qui est local vs partagé — c'est la première confusion qui crée des surprises.
Configurer un premier hook utile
Identifiez UNE répétition que vous faites manuellement après chaque édition de code ou de document : reformater, relire, déclencher un test, mettre à jour un index. Configurez le hook PostToolUse correspondant. Testez sur 3 éditions consécutives et mesurez le gain de temps (temps gagné × fréquence par jour = ROI).
Cet exercice est à conserver dans votre dossier de stagiaire. Il n'est pas évalué mais il est tracé.
- docs.claude.com — Hooks documentation officielle des hooks, événements disponibles, format settings.json
Vous comprenez les hooks de Claude Code, les quatre événements principaux, et savez configurer un premier hook utile ?