Chargement
Chargement

Hooks

RésuméTranscription

Les hooks vous permettent d'exécuter des commandes à des moments précis du cycle de vie de Claude Code. La principale différence entre les hooks et tout ce qui a été abordé dans ce cours est que les hooks sont déterministes — ils s'exécutent toujours.

Pourquoi utiliser les hooks

Vous pouvez indiquer à Claude dans votre CLAUDE.md d'exécuter Prettier après chaque modification de fichier. La plupart du temps, il le fera. Mais parfois, non. Un hook garantit que cela se produit à chaque fois, sans exception.

Les cas d'usage courants incluent :

  • Le formatage automatique après les modifications de fichiers
  • La journalisation de toutes les commandes exécutées à des fins de conformité
  • Le blocage des opérations dangereuses comme la modification de fichiers de production
  • L'envoi de notifications lorsque Claude termine une tâche

Comment ça fonctionne

Les hooks sont configurés dans votre settings.json. Vous choisissez un événement, définissez éventuellement un filtre (matcher) pour les outils auxquels il s'applique, et fournissez une commande à exécuter. Voici quelques-uns des événements les plus courants :

  • PreToolUse — s'exécute avant un appel d'outil
  • PostToolUse — s'exécute après qu'un appel d'outil soit terminé
  • UserPromptSubmit — s'exécute lorsque vous soumettez une requête, avant que Claude ne la traite
  • Stop — s'exécute lorsque Claude termine sa réponse
  • Notification — s'exécute lorsque Claude envoie une notification

Ce ne sont là que quelques-uns des événements auxquels vous pouvez vous accrocher — Claude Code en prend en charge bien d'autres. Consultez la référence des hooks pour la liste complète.

Vous les configurez en modifiant directement settings.json. La commande /hooks à l'intérieur de Claude Code ouvre une liste en lecture seule de vos hooks configurés, afin que vous puissiez vérifier qu'un nouveau hook apparaît bien.

Le fichier settings.json à l'intérieur du répertoire .claude avec la configuration des hooks

Un exemple concret

Le hook le plus courant : le formatage automatique après les modifications. Configurez un hook PostToolUse avec un filtre "Edit|Write" afin qu'il se déclenche après que Claude utilise l'outil Edit ou Write. La commande vérifie l'extension du fichier et exécute le formateur approprié : Prettier pour TypeScript, gofmt pour Go, ou tout autre outil utilisé par votre projet.

Bloquer avec PreToolUse

Les hooks PreToolUse peuvent bloquer les appels d'outils avant leur exécution. Votre hook reçoit le nom de l'outil et les données d'entrée au format JSON sur stdin. Le code de sortie détermine le comportement :

  • Code de sortie 0 — poursuivre normalement.
  • Code de sortie 2 — bloquer l'action. Le message stderr est renvoyé à Claude en tant que retour d'information, afin qu'il sache pourquoi il a été bloqué et puisse s'ajuster.
  • Tout autre code de sortie — une erreur non bloquante qui vous est affichée mais qui n'arrête rien.

C'est ainsi que vous appliquez des règles strictes. Bloquez les écritures dans un répertoire de configuration de production. Bloquez les commandes bash contenant rm -rf. Bloquez les commits sur main. Tout ce que votre équipe doit garantir, et non simplement suggérer.

Un fichier settings.json montrant des hooks PreToolUse et PostToolUse avec des filtres et des commandes

Partager les hooks avec votre équipe

Les hooks configurés dans .claude/settings.json sont définis au niveau du projet et peuvent être intégrés à votre dépôt. Cela signifie que toute votre équipe obtient automatiquement les mêmes hooks. Utilisez la variable d'environnement CLAUDE_PROJECT_DIR dans vos commandes pour référencer des scripts stockés dans votre projet, afin qu'ils fonctionnent quel que soit le répertoire de travail actuel de Claude.

Récapitulatif

Les hooks vous donnent un contrôle déterministe sur le comportement de Claude Code. Utilisez PostToolUse pour le formatage automatique et la journalisation. Utilisez PreToolUse pour bloquer les opérations dangereuses. Configurez-les dans settings.json et consultez-les avec /hooks. Et intégrez-les à votre dépôt pour que votre équipe en bénéficie également.

Si quelque chose doit se produire à chaque fois sans faute, ne le mettez pas dans une requête. Mettez-le dans un hook.