Un vendredi soir, l’affiche « on ne pousse pas sans relecture » ne dit rien. Le script, lui, refuse.
Voici comment les hooks marchent, d’après la documentation d’Anthropic relevée le 29 septembre 2026.
Ce qu’est un hook
Un script que Claude Code lance à un moment précis de la session. Vous choisissez le moment. Claude Code lance votre script. Ce que le script renvoie décide de la suite.
Les moments s’appellent des événements. La documentation en liste treize, du démarrage de la session à sa fin.
Les événements qui servent vraiment
Inutile de tous les apprendre. Six suffisent à couvrir ce qu’une équipe cherche à contrôler.
PreToolUse se déclenche avant l’exécution d’un appel d’outil, et il peut le bloquer.
PostToolUse se déclenche après un appel réussi. Il sert au contrôle qualité : lancer les tests, relancer un vérificateur, enregistrer une trace.
UserPromptSubmit se déclenche quand vous envoyez une demande, avant que Claude la traite.
Stop et SubagentStop se déclenchent quand Claude a fini de répondre. C’est l’endroit où l’on vérifie qu’un travail est bien terminé.
SessionStart se déclenche au démarrage ou à la reprise d’une session. C’est là qu’on injecte du contexte que personne ne doit avoir à coller à la main.
Le code de sortie 2.
La documentation est nette. Sur les événements qui peuvent bloquer, un code de sortie 2 refuse l’action. Il la refuse que le hook imprime du JSON ou non. Même un permissionDecision à allow renvoyé en JSON ne passe pas devant.
La décision ne se négocie pas.
Ce que le code 2 produit dépend de l’événement. Sur PreToolUse, il bloque l’appel d’outil. Sur UserPromptSubmit, il bloque le traitement et efface la demande. Sur Stop et SubagentStop, il empêche Claude de s’arrêter et poursuit la conversation. Sur TaskCompleted, il empêche la tâche d’être marquée terminée. Sur PreCompact, il bloque le résumé automatique de la conversation.
Le JSON, pour les cas plus fins
Un hook peut aussi renvoyer du JSON sur la sortie standard.
Sur PreToolUse, le champ permissionDecision accepte quatre valeurs : allow, deny, ask, defer. C’est le seul endroit où un hook peut demander une autorisation plutôt que trancher.
Sur les autres événements, le champ decision n’accepte qu’une valeur, block, accompagnée d’un reason. Le message que voit l’utilisateur est ce reason quand il existe, et la sortie d’erreur du script sinon.
Les trois événements du travail en équipe
Ils sont arrivés avec les équipes d’agents.
TeammateIdle se déclenche quand un coéquipier s’apprête à se mettre en attente. Un code de sortie 2 lui renvoie un retour et le remet au travail.
TaskCreated se déclenche à la création d’une tâche, et un code 2 empêche cette création.
TaskCompleted se déclenche quand une tâche est marquée terminée, et un code 2 empêche qu’elle le soit.
TaskCompleted est le plus utile en pratique. C’est là qu’on vérifie qu’une tâche annoncée finie l’est. Par les tests, plutôt que par la déclaration de l’agent.
Ce que la documentation dit de ne pas faire
Pour une autorisation dure, la documentation renvoie au système de permissions.
La documentation en donne la raison. Le filtre qui choisit quels appels déclenchent un hook fait de son mieux, sans garantie.
Une façon simple de trancher. Le hook fait respecter vos règles de qualité. Pour couper un accès, c’est le système de permissions.
Ce que ça donne dans une équipe
Le cas qui rend service tout de suite est le contrôle avant commit. Un hook sur PreToolUse lit ce qui part, et refuse si une étape obligatoire manque.
Le même hook vaut pour une relecture, un test qui passe, une ligne de journal présente. Tout ce que votre équipe se promet de faire et oublie sous pression.
L’autre cas est l’injection de contexte au démarrage. Vos conventions arrivent dans chaque session sans que personne les colle.
Personne n’a besoin de s’en souvenir. Le dépôt s’en souvient.
Où on les déclare
Dans les fichiers de réglages, dont le .claude/settings.json du projet.
Cet emplacement compte plus que les autres pour une équipe. Une règle posée là vit dans le dépôt. Elle s’applique à tout le monde au prochain git pull. Y compris à la personne arrivée lundi, qui n’était pas à la réunion.
Le lien avec le reste
Un hook est la couche qui fait tenir les décisions prises ailleurs. La règle de relecture, le découpage du travail, ce à quoi un agent n’a pas accès. Ces décisions se prennent en amont, et je les détaille dans Claude Code en équipe.
Les sous-agents ont leurs propres événements, SubagentStart et SubagentStop, traités dans les sous-agents de Claude Code.
L’ANSSI a aussi des recommandations sur les droits d’un agent. Voir notre page sur la sécurité de l’IA en entreprise.
C’est ce qu’on installe pendant la formation Claude Code, sur vos dépôts. Une règle de votre équipe, transformée en script qui refuse.
Source relevée le 29 septembre 2026, la documentation des hooks d’Anthropic.