tool_name de l’événement de hook) pour filtrer les invocations d’outil qui déclenchent votre hook.
En plus des champs spécifiques à l’événement ci-dessous, chaque charge utile envoyée sur stdin inclut un session_id stable par session et un prompt_id par tour (renouvelé à chaque prompt utilisateur ; absent pour les événements qui se déclenchent avant le premier prompt utilisateur, p. ex. SessionStart) — voir Hooks de commande.
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 :
hookSpecificOutput.updatedInput sur stdout (voir Format de sortie). Par exemple, un script de hook qui fait passer les commandes shell par un wrapper :
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 :
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 :
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 :
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 champmatcher 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 danstool_name. Les noms d’outils exacts disponibles peuvent varier selon le mode CLI, le modèle et les intégrations activées.
Les noms des outils de base, par catégorie :
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.
