Aller au contenu principal

Autres types de hooks

Autres types de hooks

Au-dela des hooks PreToolUse et PostToolUse que nous avons etudies, Claude Code propose plusieurs autres types de hooks :

HookDeclenchement
NotificationQuand Claude Code envoie une notification (besoin de permission ou inactivite depuis 60 secondes)
StopQuand Claude Code a fini de repondre
SubagentStopQuand un sous-agent (affiche comme “Task” dans l’UI) a termine
PreCompactAvant une operation de compactage, manuelle ou automatique
UserPromptSubmitQuand l’utilisateur soumet un prompt, avant que Claude ne le traite
SessionStartAu demarrage ou a la reprise d’une session
SessionEndQuand une session se termine

Le defi : des formats d’entree variables

Voici la partie delicate :

  • L’entree stdin de vos commandes change selon le type de hook (PreToolUse, PostToolUse, Notification, etc.)
  • Le tool_input contenu dans ces donnees varie selon l’outil appele

Par exemple, voici l’entree stdin d’un hook PostToolUse surveillant l’outil TodoWrite :

{
  "session_id": "9ecf22fa-edf8-...",
  "hook_event_name": "PostToolUse",
  "tool_name": "TodoWrite",
  "tool_input": {
    "todos": [
      { "content": "ecrire un readme", "status": "pending" }
    ]
  },
  "tool_response": {
    "oldTodos": [],
    "newTodos": [
      { "content": "ecrire un readme", "status": "pending" }
    ]
  }
}

Et pour comparaison, voici l’entree d’un hook Stop :

{
  "session_id": "af9f50b6-f042-...",
  "hook_event_name": "Stop",
  "stop_hook_active": false
}

La structure change considerablement selon le type de hook et le matcher utilise.

Astuce : le hook de debug

Pour decouvrir exactement quelles donnees votre commande recevra, creez un hook de debug qui ecrit les donnees dans un fichier :

{
  "PostToolUse": [
    {
      "matcher": "*",
      "hooks": [
        {
          "type": "command",
          "command": "jq . > post-log.json"
        }
      ]
    }
  ]
}

Le matcher * capture tous les outils. La commande jq . formate le JSON et l’ecrit dans post-log.json. Vous pouvez ensuite inspecter ce fichier pour comprendre exactement quelles donnees votre commande hook devrait traiter.

Cette technique est particulierement utile quand vous creez un nouveau type de hook, voulez comprendre les donnees d’un outil specifique, ou debuggez un hook qui ne fonctionne pas comme prevu.