Configurer son environnement IA - 05 - Les hooks : automatiser les reactions de Claude

Les hooks Claude Code : déclencher des actions automatiques avant ou apres les outils. Formatter, protéger, notifier.

05 - Les hooks : automatiser les reactions de Claude

Ce que tu vas apprendre

  • Ce que sont les hooks et quand ils se declenchent
  • Les événements disponibles : PreToolUse, PostToolUse, Stop, Notification
  • Quatre hooks concrets a mettre en place aujourd'hui
  • La configuration dans settings.json

Prerequisites


Le feature le plus sous-estime de Claude Code

Si je devais garder une seule fonctionnalité de Claude Code en dehors de l'agent lui-meme, ce serait les hooks. Personne n'en parle. La plupart des développeurs qui utilisent Claude Code ne savent meme pas qu'ils existent. Et pourtant, c'est le système d'automatisation le plus puissant du setup.

Un hook, c'est une commande shell déclenchée automatiquement quand un événement spécifique se produit dans Claude Code. Claude edite un fichier ? Un hook formate le code. Claude veut modifier un fichier protégé ? Un hook bloque l'action. Claude termine une longue tache ? Un hook t'envoie une notification desktop.

Les événements

Voici les événements auxquels tu peux accrocher des hooks :

PreToolUse : se déclenché avant que Claude utilise un outil (avant d'écrire un fichier, avant de lancer une commande). Tu peux bloquer l'action en retournant un code de sortie 2.

PostToolUse : se déclenché apres qu'un outil a ete utilise. Parfait pour formater le code, lancer un linter, mettre à jour un index.

Stop : se déclenché quand Claude a fini de répondre. Utile pour des actions de nettoyage ou des validations finales.

Notification : se déclenché quand Claude envoie une notification (typiquement, quand il attend ton input apres une longue reflexion).

La configuration

Les hooks se configurent dans settings.json. Tu peux avoir un settings.json au niveau projet (.claude/settings.json) ou au niveau utilisateur (~/.claude/settings.json).

json{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "command": "prettier --write \"$CLAUDE_FILE_PATH\"",
        "description": "Auto-format apres chaque edition"
      }
    ],
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "command": "node .claude/hooks/protect-files.js \"$CLAUDE_FILE_PATH\"",
        "description": "Bloquer l'edition des fichiers proteges"
      }
    ],
    "Notification": [
      {
        "command": "notify-send 'Claude Code' 'En attente de ta reponse'",
        "description": "Notification desktop"
      }
    ]
  }
}

Le champ matcher filtre sur le nom de l'outil. Edit|Write signifie que le hook ne se déclenché que quand Claude utilise l'outil Edit ou Write. Sans matcher, le hook se déclenché pour tous les outils.

Hook 1 : auto-format avec Prettier

Mon hook préféré. Apres chaque modification de fichier, Prettier formate automatiquement le code. Claude ne produit pas toujours un formatage parfait (indentation, espaces, trailing commas). Ce hook corrige ca sans que tu y penses.

json{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "command": "prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
      }
    ]
  }
}

Le 2>/dev/null || true évité que le hook echoue sur des fichiers non supportes par Prettier (images, binaires). Simple, efficace, zero maintenance.

Hook 2 : protéger les fichiers sensibles

Tu ne veux pas que Claude modifie ton .env, tes lock files, ou tes configs mail. Ce hook bloque toute tentative d'écriture sur des fichiers proteges :

bash#!/bin/bash
# .claude/hooks/protect-files.sh
PROTECTED=(".env" ".env.local" "bun.lock" "mail/config/opendkim")

for pattern in "${PROTECTED[@]}"; do
  if [[ "$1" == *"$pattern"* ]]; then
    echo "BLOCKED: $1 est un fichier protege"
    exit 2
  fi
done

exit 0

Le code de sortie est la clé. exit 0 : l'action continue. exit 2 : l'action est bloquee. Claude recoit le message d'erreur et adapte son comportement.

Dans settings.json :

json{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "command": "bash .claude/hooks/protect-files.sh \"$CLAUDE_FILE_PATH\""
      }
    ]
  }
}

Hook 3 : notification quand Claude attend

Quand tu lances Claude sur une grosse tache et que tu passes sur un autre ecran, tu perds du temps a vérifier régulièrement s'il a fini. Ce hook t'envoie une notification desktop quand Claude attend ta réponse :

Sur Linux :

json{
  "hooks": {
    "Notification": [
      {
        "command": "notify-send 'Claude Code' \"$CLAUDE_NOTIFICATION_MESSAGE\""
      }
    ]
  }
}

Sur macOS, remplace par osascript -e 'display notification ...'. Sur Windows, tu peux utiliser un script PowerShell avec New-BurntToastNotification ou un simple msg. Ca a l'air anodin, mais ce hook m'a fait gagner un temps fou. Plus besoin de surveiller le terminal.

Hook 4 : re-injecter du contexte apres compaction

Quand une session devient longue, Claude Code compacte automatiquement le contexte pour rester dans les limites du modèle. Le problème : apres compaction, certaines instructions de ton CLAUDE.md ou des regles contextuelles peuvent etre perdues.

Un hook Stop qui re-affiche les regles les plus importantes apres chaque réponse :

json{
  "hooks": {
    "Stop": [
      {
        "command": "cat .claude/context-reminder.md",
        "type": "prompt"
      }
    ]
  }
}

Le type: "prompt" fait que la sortie du hook est reinjectee dans le prompt de Claude, pas juste affichee dans le terminal. C'est un type différent de hook : au lieu d'une commande shell silencieuse, le résultat influence directement le comportement de Claude.

Les types de hooks

Quatre types de hooks existent :

command (défaut) : exécuté une commande shell. La sortie est affichee dans le terminal.

HTTP : envoie une requête HTTP a un endpoint. Utile pour notifier un service externe (Slack, webhook).

prompt : exécuté une commande et reinjecte la sortie comme instruction pour Claude. Utilise le modèle Haiku pour interpréter la sortie.

agent : lance un sous-agent Claude pour exécuter le hook. Plus puissant mais plus coûteux en tokens.

Pour la plupart des cas, command suffit. Les hooks prompt sont utiles pour la re-injection de contexte. Les hooks agent sont reserves aux automatisations complexes.

Mon opinion

Les hooks sont le feature qui transforme Claude Code d'un assistant interactif en un vrai workflow automatise. Formater, protéger, notifier, re-injecter du contexte : tout ca se fait sans intervention humaine. Et pourtant, presque personne ne les configure.

Commence avec les hooks 1 et 2 (auto-format et protection de fichiers). Ajoute les notifications quand tu te rends compte que tu perds du temps a surveiller le terminal. Les hooks de re-injection de contexte, c'est pour les sessions longues et complexes.


Article précédent : 04 - Les skills

Article suivant : 06 - RTK et les outils compagnons

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.