Aller au contenu

31 hooks Claude Code sous-exploites — du DVD logo a l'orchestration multi-agents

Resume

@itseieio publie une demo virale (17K likes, 932K vues) d'un hook Claude Code qui affiche un logo DVD rebondissant pendant que Claude reflechit. La demo est fun, mais l'insight technique est ailleurs : dans les replies, il explique que "hooking into the thinking state is trivial" et pointe vers la doc officielle des hooks. Cette doc revele 31 hook events distincts organises en 5 categories (session, per-turn, agentic loop, async/background, additionnel). La plupart sont sous-exploites par la communaute et plusieurs sont directement applicables a l'orchestration multi-agents.

Analyse critique

Les 31 hooks — inventaire complet

Session-Level (3) : - SessionStart : demarrage/reprise de session - SessionEnd : fin de session - InstructionsLoaded : chargement de CLAUDE.md et .claude/rules/*.md

Per-Turn (2) : - UserPromptSubmit : avant que Claude traite un prompt (notre hook 7.A constitutional-inject) - Stop : quand Claude finit de repondre

Agentic Loop (10) : - PreToolUse : avant execution d'un tool (notre hook 7.B guard-push) - PostToolUse : apres succes d'un tool (notre hook 7.C prettier) - PostToolUseFailure : apres echec d'un tool - PermissionRequest : quand un dialogue de permission apparait - PermissionDenied : quand le mode auto refuse un tool - SubagentStart : quand un subagent spawn - SubagentStop : quand un subagent finit - TaskCreated : quand le tool TaskCreate est utilise - TaskCompleted : quand une tache est marquee complete - Elicitation : quand un serveur MCP demande un input utilisateur

Async/Background (7) : - Notification : notifications Claude Code (avec matchers : permission_prompt, idle_prompt, auth_success, elicitation_dialog) - ConfigChange : changement de fichier de config - CwdChanged : changement de repertoire de travail - FileChanged : changement de fichier surveille - WorktreeCreate : creation d'un worktree - WorktreeRemove : suppression d'un worktree - ElicitationResult : reponse utilisateur a une elicitation MCP

Additionnel (3+) : - StopFailure : fin de tour par erreur API - PreCompact : avant compaction du contexte - PostCompact : apres compaction du contexte - TeammateIdle : quand un agent team member est idle

Types de handlers

Chaque hook supporte 4 types de handlers : 1. command : script shell recevant du JSON sur stdin 2. http : POST vers une URL 3. prompt : evaluation single-turn LLM 4. agent : subagent avec acces aux outils

Ce qu'on utilise deja (3 sur 31)

  • UserPromptSubmit → hook 7.A constitutional-inject (injection RULES.md a chaque tour)
  • PreToolUse (matcher Bash) → hook 7.B guard-push (bloque git push sans Gate 8 GO)
  • PostToolUse (matcher Edit|Write) → hook 7.C prettier (formatage automatique)

3 hooks sur 31. On exploite moins de 10% de la surface disponible.

Ce qu'on devrait utiliser pour LOTR

Hook Usage LOTR Gain
Stop Le Lord sait immediatement quand un Ringbearer finit de reflechir, sans polling cmux 10s Remplace le scraping visuel du pane par un signal event-driven. C'est le "Monitor tool" version hook.
SubagentStart / SubagentStop Suivre les agents step 6b en temps reel — quel agent tourne, depuis combien de temps, lequel a fini Visibilite native sur le workflow multi-agents sans parser le terminal
TaskCreated / TaskCompleted Suivre la progression du TodoWrite dans un Ringbearer — combien de taches faites, combien restantes Le Lord peut afficher le % de progression via Signal
PreCompact / PostCompact Detecter quand un Ringbearer atteint la saturation contexte et compacte Signal d'alerte contextuel. Remplace claude-hud pour la detection de saturation. Plus precis : pas "tu es a 85%" mais "la compaction vient de se declencher".
Notification (idle_prompt) Detecter quand un Ringbearer attend une reponse humaine Le Lord peut router l'escalade immediatement au lieu de detecter visuellement un picker
StopFailure Detecter un crash API avant que la session meure Alerte precoce pour restart automatique
PermissionRequest Detecter quand un Ringbearer demande une permission Le Lord peut auto-approuver selon les regles ou escalader

Le handler type http est la cle pour LOTR

Chaque hook peut etre configure en type http — un POST vers une URL. Si on configure les hooks des Ringbearers pour poster vers http://localhost:7899 (notre broker claude-peers), le Lord recoit les events nativement sans scraping, sans cmux capture, sans polling.

Architecture cible :

Ringbearer (session Claude Code)
  ├─ hook Stop → POST localhost:7899/send-message
  ├─ hook SubagentStop → POST localhost:7899/send-message
  ├─ hook PreCompact → POST localhost:7899/send-message
  ├─ hook Notification(idle) → POST localhost:7899/send-message
  └─ hook StopFailure → POST localhost:7899/send-message

Lord (One Ring)
  └─ poll-messages depuis broker → route vers Signal

C'est une refonte complete de la supervision LOTR : au lieu de 1300 lignes de bash qui scrapent du texte dans des panes cmux, le Lord recoit des events structures via HTTP. Chaque event a un payload JSON avec session_id, transcript_path, cwd, etc.

Pertinence ProbatioVault

Impact fort — change potentiellement l'architecture de supervision LOTR.

Ce que ca remplace

Mecanisme actuel Remplace par
Polling cmux 10s (lord_term_capture) Hook Stop + Notification(idle) via HTTP
Scraping regex pour detecter step courant Hook TaskCompleted pour progression
Detection crash par session morte Hook StopFailure pour alerte precoce
claude-hud pour contexte % Hook PreCompact / PostCompact pour detection saturation
Estimation duree agents step 6b Hook SubagentStart / SubagentStop pour duree exacte

Ce que ca ne remplace pas

  • L'envoi de commandes au Ringbearer (cmux send-keys ou gov_ask_po) — les hooks sont des listeners, pas des emetteurs
  • Le broker peers (claude-peers-mcp) — toujours necessaire pour la messagerie bidirectionnelle
  • Signal — toujours necessaire pour le canal mobile

Action recommandee

  1. Court terme : configurer le hook Stop en type http sur un Ringbearer de test. Verifier que le POST arrive bien au broker peers. Si oui, c'est la validation que l'architecture hook-driven fonctionne.

  2. Moyen terme : refactorer gov-lord.sh pour recevoir les events par hooks HTTP au lieu du polling cmux. Garder le polling cmux comme fallback (si les hooks ne fonctionnent pas, on revient au scraping). C'est une evolution de [L4] Monitor tool dans le TODO.

  3. Mettre a jour le TODO : l'item [L4] "Monitor tool — remplacer le polling cmux par event-driven" peut etre reformule comme "Hooks HTTP Stop/SubagentStop/PreCompact vers broker peers". C'est plus precis et plus realiste que "utiliser le Monitor tool" (qui est un outil different).

Hooks candidats pour notre matrice TODO existante

Item TODO existant Hook pertinent
[L4] Monitor tool supervision Stop + Notification(idle) via HTTP
[#10] Compaction awareness PreCompact / PostCompact
[L14] claude-hud monitoring PreCompact (plus precis que la statusline)
[L8] Palantir robustesse StopFailure pour detection crash
Hook 7.4 (TaskCompleted) dans TODO existant TaskCompleted — deja prevu, maintenant mieux compris
Hook 7.7 (SubagentStop) dans TODO existant SubagentStop — deja prevu, maintenant mieux compris