Passer au contenu principal
Chaque événement de hook se déclenche à un moment spécifique du cycle de vie de l’agent. Utilisez le champ matcher (une expression régulière appliquée au tool_name de l’événement de hook) pour filtrer les invocations d’outil qui déclenchent votre hook.

PreToolUse

Se déclenche avant l’exécution d’un outil. Utilisez-le pour bloquer, modifier ou ajouter du contexte aux appels d’outils. Données stdin : Exemple — Bloquer les commandes destructrices :
Exemple — Exiger une confirmation pour les écritures hors de src/ : Utilisez un script qui examine l’entrée de l’outil et renvoie une décision :
Exemple — Réécrire les commandes avant leur exécution : Un hook peut réécrire de manière transparente l’entrée de l’outil en affichant hookSpecificOutput.updatedInput sur stdout (voir Format de sortie). Par exemple, un script de hook qui fait passer les commandes shell par un wrapper :
Les arguments réécrits sont intégrés à l’appel d’outil avant son exécution — l’agent exécute la commande mise à jour au lieu de la commande d’origine.

PostToolUse

Se déclenche après l’exécution d’un outil. Utilisez-le pour la journalisation, la validation ou pour activer des actions de suivi. Données stdin : Exemple — Journaliser toutes les commandes shell :

PermissionRequest

Se déclenche lorsque l’agent a besoin d’une décision d’autorisation. Utilisez-le pour implémenter une logique d’approbation personnalisée. Données stdin : Exemple — Approbation automatique des commandes git :

UserPromptSubmit

Se déclenche lorsque l’utilisateur envoie un message. Servez-vous-en pour ajouter du contexte ou déclencher des workflows. Données stdin : Exemple — Injecter du contexte pour chaque prompt :
La commande affiche additionalContext dans un objet hookSpecificOutput sur stdout, associé au nom de l’événement. Ce texte est injecté dans le contexte de l’agent :

Stop

Se déclenche lorsque l’agent décide de s’arrêter (c’est-à-dire de terminer son tour). Utilisez-le pour ajouter des instructions complémentaires ou éviter un arrêt prématuré. Données stdin : Exemple — Rappeler à l’agent d’exécuter des tests :
Faites attention aux hooks d’arrêt bloquants : ils peuvent faire entrer l’agent dans une boucle si la condition n’est pas satisfaite à terme.

PostCompaction

Se déclenche après la réussite du compactage du contexte. À utiliser pour la journalisation, le déclenchement d’actions de suivi ou la réinjection de contexte qui aurait pu être perdu lors du compactage. Données stdin : Exemple — Journaliser les événements de compactage :

SessionStart

Se déclenche lorsqu’une nouvelle session démarre. À utiliser pour l’initialisation, la journalisation ou la configuration de l’environnement. Données stdin : Exemple — Exécuter le script de configuration :
Une commande SessionStart peut également injecter du contexte en écrivant additionalContext dans un objet hookSpecificOutput sur stdout :

SessionEnd

Se déclenche lorsqu’une session se termine. Utilisez-le pour effectuer un nettoyage ou assurer la journalisation finale. Données stdin :

Associer plusieurs événements

Un même fichier de hooks peut définir des hooks pour plusieurs événements :

Utiliser le matcher

Le champ matcher est une regex appliquée au tool_name de l’événement de hook. Il est disponible pour les événements liés aux outils : PreToolUse, PostToolUse et PermissionRequest. Pour les événements non liés aux outils (UserPromptSubmit, Stop, PostCompaction, SessionStart et SessionEnd), il n’y a pas de tool_name ; utilisez "" ou omettez le matcher pour exécuter le hook sur chaque événement de ce type.
Le matcher n’est pas un motif glob d’autorisation. Des motifs comme mcp__github__* sont utiles dans les autorisations, mais les matchers de hook sont des regex. Utilisez mcp__github__.* dans un matcher de hook.

Noms d’outils que vous pouvez faire correspondre

Les matchers de hook s’appliquent aux mêmes noms d’outils exposés en externe que les scripts de hook reçoivent sur stdin dans tool_name. Les noms d’outils exacts disponibles peuvent varier selon le mode CLI, le modèle et les intégrations activées. Les noms d’outils publics de base les plus courants sont :
  • read
  • edit
  • grep
  • glob
  • exec
Les outils d’un serveur MCP se présentent sous la forme mcp__<server>__<tool>. Par exemple, un outil d’un serveur MCP github nommé create_issue apparaît sous la forme mcp__github__create_issue. Pour les autres outils, faites correspondre exactement le tool_name affiché sur stdin par le hook. Pour confirmer l’ensemble complet disponible dans votre session actuelle, ajoutez un hook PostToolUse temporaire avec matcher: "" et consignez la charge utile reçue sur stdin.