Les hooks exécutent des commandes shell à des points fixes d'une session : après l'écriture d'un fichier, avant l'exécution d'un outil, à la fin d'un tour. C'est la seule partie de la configuration qui exécute du code sans redemander à chaque fois, ce qui rend rentable la chasse à ses échecs silencieux. Un matcher qui nomme un outil inexistant ne se déclenche jamais et ne se plaint jamais. Une commande qui cherche un argument reçoit une chaîne vide, car l'événement arrive en JSON sur l'entrée standard et non en arguments. Et seuls certains événements peuvent réellement empêcher ce qui allait se produire. Ce créateur couvre les trois cas et dit quels événements bloquent et lesquels ne font qu'observer.
Fonctionnalités
Chaque événement listé avec ce qui le déclenche
Matchers vérifiés contre de vrais noms d’outils, casse comprise
Avertit quand un matcher est posé sur un événement sans outil
Avertit quand une commande cherche des arguments qu’elle ne recevra jamais
Dit quels événements peuvent bloquer une action, et comment
Motifs de matcher courants proposés en un clic
Plusieurs hooks regroupés correctement par événement et matcher
Signale une commande destructrice avant qu’elle ne tourne sans surveillance
Comment utiliser Générateur de hooks
Choisissez l’événement où intervenir
Ajoutez un matcher si l’événement est propre à un outil
Écrivez la commande en lisant la charge sur l’entrée standard
Lisez les alertes puis fusionnez la sortie dans settings.json
Exemple
Entrée
prettier --write "$1"
Sortie
Warning: $1 will be empty — a hook is not given arguments
L’événement arrive en JSON par un tube ; lisez-le avec jq.
Erreurs courantes et dépannage
Le hook ne s’exécute jamais. — Le plus souvent le matcher. Les noms d’outils prennent une majuscule et distinguent la casse — Write, pas write — et un nom inexistant ne correspond à rien, silencieusement.
La commande tourne mais ne reçoit rien. — L’entrée du hook arrive en JSON sur l’entrée standard. Lisez-la avec par exemple jq -r '.tool_input.file_path' plutôt que d’attendre un argument.
Mon hook n’arrive pas à arrêter l’appel. — Seuls certains événements le peuvent, et seulement en sortant avec le statut 2. Tout le reste vaut « continue », et des événements comme PostToolUse se déclenchent après coup de toute façon.
La session se bloque sur mon hook. — Fixez un délai. Un hook qui attend quelque chose — un appel réseau, un verrou — retient toute la session pendant ce temps.
Foire aux questions
Quel événement pour un formateur ?
PostToolUse avec un matcher sur les outils d’écriture, pour qu’il tourne quand le fichier existe. Formater avant l’écriture n’a rien à formater.
Comment le hook reçoit-il l’événement ?
En JSON sur l’entrée standard : le nom de l’outil, son entrée et le contexte. Rien n’est passé en argument de ligne de commande, et c’est pourquoi une commande écrite autour de $1 ne reçoit rien.
Un hook peut-il empêcher un outil de s’exécuter ?
Avant son exécution, oui : sortir avec le statut 2 bloque. Quels événements le permettent s’affiche au moment du choix, car tenter de bloquer depuis un événement postérieur est une erreur aussi fréquente que déroutante.
Les hooks tournent-ils sans demander ?
Oui — c’est leur raison d’être et la raison de lire attentivement tout hook avant de l’ajouter. Un hook qui supprime des fichiers est signalé ici, mais la règle générale est que tout ce fichier tourne sans surveillance.
Puis-je avoir plusieurs hooks sur un événement ?
Oui. Ceux qui partagent événement et matcher sont regroupés dans la sortie, forme attendue par le fichier de configuration.