LE LABO IA
📘 Guide Technique ⏱️ 10 min de lecture 🏷️ Claude Code

Claude Code Hooks : Automatiser ton Workflow de Développement

Les hooks sont le système d'automatisation le plus puissant de Claude Code. À chaque action — avant d'exécuter une commande, après avoir modifié un fichier, quand la session se termine — tu peux déclencher automatiquement du code. Auto-format, validation de sécurité, notifications, logs. Sans jamais y penser.

Là où le fichier CLAUDE.md donne des instructions que Claude Code peut choisir de suivre, les hooks sont du code machine. Ils s'exécutent à chaque fois, sans exception. C'est la différence entre dire "s'il te plaît, formate le code" et brancher un formateur automatique qui se déclenche à chaque modification. Ce guide t'explique tout : les événements disponibles, comment configurer tes hooks, et les 5 hooks indispensables à mettre en place dès maintenant.

PreToolUse Avant l'action Outil exécuté Write, Bash, Edit... PostToolUse Après l'action Stop Cycle de vie d'une action Claude Code Chaque étape peut déclencher un hook automatique

C'est quoi un hook Claude Code

Un hook est un script qui s'exécute automatiquement à un moment précis du cycle de vie de Claude Code. Avant qu'un outil soit utilisé (PreToolUse), après (PostToolUse), à la fin de la session (Stop), ou quand un sub-agent démarre (SubagentStart). C'est de l'automatisation garantie.

Le concept est simple : tu définis un événement déclencheur et un script à exécuter. Quand l'événement se produit, le script se lance. Pas de demande de permission, pas d'oubli, pas de variation. Le script s'exécute. Point.

C'est la différence fondamentale avec le fichier CLAUDE.md. Quand tu écris dans ton CLAUDE.md "Formate toujours le code avec Prettier", c'est une suggestion. Claude Code la suit la plupart du temps, mais c'est du texte que le modèle interprète. Il peut l'oublier, l'ignorer dans un cas particulier, ou l'appliquer de manière incohérente.

Un hook, c'est du code. Si tu configures un hook PostToolUse qui lance Prettier après chaque modification de fichier, Prettier se lancera. À chaque fois. Sans exception. Le hook ne passe pas par l'interprétation du modèle — il passe par le système d'exécution de Claude Code. C'est de l'enforcement, pas de la guidance.

En résumé : CLAUDE.md = suggestions que Claude Code peut ignorer. Hooks = exécution garantie, contrôlée par des codes de sortie.

Les événements disponibles

Claude Code expose plusieurs événements dans son cycle de vie. Chaque événement est un point d'accroche où tu peux injecter ton propre code. Voici les principaux.

PreToolUse — Avant l'action

C'est l'événement le plus stratégique. Il se déclenche avant que Claude Code utilise un outil : Write, Edit, Bash, ou n'importe quel autre. Ton hook reçoit les détails de l'action prévue (quel outil, quels arguments) et peut décider de la laisser passer ou de la bloquer.

Le contrôle se fait par le code de sortie (exit code) du script :

Cas d'usage typiques : bloquer des commandes dangereuses (rm -rf /, git push --force), valider que les fichiers sensibles ne sont pas modifiés sans confirmation, empêcher l'exécution de certaines commandes en production.

PostToolUse — Après l'action

Se déclenche une fois que l'outil a terminé son exécution. Ton hook reçoit le résultat de l'action. C'est l'endroit idéal pour des traitements post-action : formater le code qui vient d'être écrit, logger les modifications, mettre à jour un fichier de suivi.

Cas d'usage typiques : lancer Prettier ou Black après chaque Write/Edit, ajouter une entrée de log après chaque commande Bash, vérifier que le code modifié compile toujours.

Stop — Fin de session

Se déclenche quand Claude Code termine une session — soit parce que la tâche est finie, soit parce que tu quittes. C'est le moment de faire le ménage : envoyer une notification, générer un résumé des changements, déclencher un commit automatique.

Cas d'usage typiques : notification macOS/Slack quand la session se termine, résumé des fichiers modifiés, auto-commit des changements en cours.

SubagentStart / SubagentStop

Ces événements se déclenchent quand Claude Code lance un sub-agent (un agent spécialisé qui travaille en parallèle). SubagentStart se déclenche au lancement, SubagentStop à la fin. C'est utile pour monitorer l'utilisation des sub-agents, gérer les ressources, ou logger leur activité.

Notification

Se déclenche quand Claude Code a besoin de ton attention — par exemple quand il attend une réponse ou une confirmation. C'est l'événement parfait pour envoyer une alerte sonore ou une notification système quand tu es sur un autre écran.

UserPromptSubmit

Se déclenche quand tu soumets un prompt à Claude Code. Tu peux l'utiliser pour injecter du contexte automatique, enrichir le prompt avec des informations du projet, ou logger les interactions.

PreCompact

Se déclenche avant que Claude Code compacte son contexte (quand la conversation devient trop longue). C'est le bon moment pour sauvegarder un snapshot de l'état actuel avant que des informations soient résumées.

Les types de handlers

Un handler, c'est le code qui s'exécute quand l'événement se déclenche. Claude Code propose quatre types de handlers différents, selon ce que tu veux faire.

type: command — Script shell

Le type le plus courant. Tu définis une commande shell qui sera exécutée. Ça peut être un script Bash, un appel à un outil CLI, ou n'importe quelle commande système. L'événement est passé en entrée via stdin au format JSON.

{
  "type": "command",
  "command": "bash /path/to/my-hook.sh"
}

C'est le type à utiliser pour 90 % des cas : formatage, validation, notifications système, logging.

type: http — Webhook HTTP POST

Envoie une requête HTTP POST à une URL avec les données de l'événement en JSON. Parfait pour intégrer Claude Code avec des services externes : Slack, Discord, un dashboard interne, un système de monitoring.

{
  "type": "http",
  "url": "https://hooks.slack.com/services/xxx/yyy/zzz"
}

type: prompt — Évaluation LLM

Le handler est un prompt qui sera évalué par le modèle de langage. Le résultat est retourné en JSON. C'est utile pour des validations intelligentes qui nécessitent une compréhension du contexte.

type: mcp-tool — Outil MCP

Exécute un outil MCP (Model Context Protocol) comme handler. Si tu as des serveurs MCP configurés avec des outils spécifiques, tu peux les déclencher automatiquement via des hooks.

Configurer ses hooks

Les hooks se configurent dans un fichier JSON. Tu as deux options de placement, selon que tu veux des hooks locaux au projet ou globaux.

Emplacement des fichiers

Pour des hooks spécifiques au projet, crée un fichier .claude/hooks.json à la racine de ton projet. Pour des hooks globaux (qui s'appliquent à tous tes projets), ajoute-les dans la section hooks de ton fichier ~/.claude/settings.json.

Structure JSON

La structure est un objet dont les clés sont les noms d'événements, et les valeurs sont des tableaux de handlers :

{
  "hooks": {
    "PreToolUse": [
      {
        "type": "command",
        "command": "bash .claude/hooks/security-guard.sh",
        "matcher": "Bash",
        "timeout": 5000
      }
    ],
    "PostToolUse": [
      {
        "type": "command",
        "command": "bash .claude/hooks/auto-format.sh",
        "matcher": "Write|Edit"
      }
    ],
    "Notification": [
      {
        "type": "command",
        "command": "bash .claude/hooks/notify.sh",
        "async": true
      }
    ]
  }
}

Les matchers

Le champ matcher permet de filtrer sur quel outil le hook se déclenche. Tu peux spécifier un nom d'outil exact ("Bash"), plusieurs outils avec un pipe ("Write|Edit"), ou omettre le champ pour déclencher le hook sur tous les outils.

Options avancées

Les codes de sortie

Pour les hooks PreToolUse, le code de sortie contrôle le flux :

Automatise tout ton workflow avec Claude Code

Dans le programme LE LABO IA, on te montre comment configurer tes hooks, tes skills, et tout l'écosystème Claude Code pour être productif dès le premier jour.

Découvrir le Programme

5 hooks indispensables

Assez de théorie. Voici 5 hooks concrets que tu peux mettre en place aujourd'hui. Chacun résout un problème réel et fréquent.

1. Auto-format après chaque modification

Le hook le plus utile. Chaque fichier modifié par Claude Code passe automatiquement par Prettier (JavaScript/TypeScript) ou Black (Python). Fini le code mal formaté.

// .claude/hooks/auto-format.sh
#!/bin/bash
# Récupère le chemin du fichier modifié depuis stdin (JSON)
FILE=$(cat | jq -r '.tool_input.file_path // empty')

if [ -z "$FILE" ]; then
  exit 0
fi

# Détecte l'extension et formate
case "$FILE" in
  *.js|*.ts|*.jsx|*.tsx|*.json|*.css)
    npx prettier --write "$FILE" 2>/dev/null
    ;;
  *.py)
    black "$FILE" 2>/dev/null
    ;;
esac

exit 0

Hook config : PostToolUse, matcher "Write|Edit".

2. Security guard — bloquer les commandes dangereuses

Un filet de sécurité qui empêche Claude Code d'exécuter des commandes destructrices. Indispensable si tu donnes des permissions larges à Claude Code.

// .claude/hooks/security-guard.sh
#!/bin/bash
COMMAND=$(cat | jq -r '.tool_input.command // empty')

# Liste des patterns dangereux
BLOCKED_PATTERNS=(
  "rm -rf /"
  "rm -rf ~"
  "git push --force"
  "git push -f"
  "DROP TABLE"
  "DROP DATABASE"
  "> /dev/sda"
)

for pattern in "${BLOCKED_PATTERNS[@]}"; do
  if echo "$COMMAND" | grep -qi "$pattern"; then
    echo "BLOQUÉ : commande dangereuse détectée ($pattern)"
    exit 2
  fi
done

exit 0

Hook config : PreToolUse, matcher "Bash". Le exit 2 bloque l'action et affiche le message.

3. Notification quand Claude Code attend

Quand tu travailles sur autre chose et que Claude Code a besoin de ton attention, ce hook envoie une notification macOS avec un son. Tu ne rates plus jamais une question de Claude Code.

// .claude/hooks/notify.sh
#!/bin/bash
osascript -e 'display notification "Claude Code a besoin de toi" with title "LE LABO IA" sound name "Ping"'

Hook config : Notification, async: true. Le async est important ici — la notification ne doit pas bloquer Claude Code.

4. Protection des fichiers sensibles

Empêche Claude Code de modifier des fichiers critiques (.env, fichiers de credentials, configurations de production) sans que tu aies explicitement validé.

// .claude/hooks/file-protect.sh
#!/bin/bash
FILE=$(cat | jq -r '.tool_input.file_path // empty')

# Fichiers protégés
PROTECTED_PATTERNS=(".env" "credentials" "secret" "production.json" ".pem" ".key")

for pattern in "${PROTECTED_PATTERNS[@]}"; do
  if echo "$FILE" | grep -qi "$pattern"; then
    echo "BLOQUÉ : fichier sensible ($FILE). Modifie-le manuellement."
    exit 2
  fi
done

exit 0

Hook config : PreToolUse, matcher "Write|Edit". Toute tentative de modification d'un fichier sensible sera bloquée avec un message explicite.

5. Notification de fin de session

Quand Claude Code termine une tâche longue, tu reçois une alerte. Plus besoin de vérifier manuellement si c'est fini.

// .claude/hooks/task-done.sh
#!/bin/bash
osascript -e 'display notification "Tâche terminée ✓" with title "Claude Code" sound name "Glass"'

Hook config : Stop, async: true.

Ces 5 hooks couvrent les besoins fondamentaux : qualité du code (auto-format), sécurité (guard + file-protect), et expérience utilisateur (notifications). C'est un excellent point de départ avant d'aller vers des hooks plus avancés.

Si tu veux créer des commandes personnalisées et des skills pour compléter tes hooks, c'est l'étape suivante logique. Les hooks automatisent, les skills et commandes te donnent des capacités à la demande.

PreToolUse Valide ou bloque Exit 0/1/2 Outil exécuté Write, Edit, Bash... PostToolUse Format, log, notifie Chaque outil passe par ce cycle — les hooks interceptent à chaque étape

Hooks vs CLAUDE.md : quand utiliser quoi

Les hooks et le fichier CLAUDE.md sont complémentaires, mais ils servent des objectifs très différents. Voici comment choisir.

Aspect Hooks CLAUDE.md
Nature Code exécuté (enforcement) Texte interprété (guidance)
Fiabilité Garanti à 100 % Suivi la plupart du temps
Cas d'usage Sécurité, formatage, notifications Conventions, préférences, contexte
Complexité Nécessite du scripting (Bash, etc.) Texte Markdown simple
Flexibilité Rigide (c'est le but) Flexible, s'adapte au contexte
Quand Claude Code ignore Impossible — le hook s'exécute Possible dans certains cas
Langage Shell, HTTP, JSON Markdown (langage naturel)

La règle est simple : si c'est critique et que ça ne doit jamais être ignoré (sécurité, formatage, notifications), utilise un hook. Si c'est une préférence, une convention, ou du contexte que Claude Code doit connaître, utilise le CLAUDE.md.

Les deux systèmes ensemble forment un setup complet. Le CLAUDE.md dit à Claude Code comment tu veux travailler. Les hooks s'assurent que certaines règles sont appliquées mécaniquement, sans dépendre de la bonne volonté du modèle.

Pour une vue d'ensemble de tout l'écosystème Claude Code — hooks, skills, CLAUDE.md, MCP, permissions — consulte le guide complet de Claude Code. Et si tu débutes en automatisation, les hooks sont un excellent premier pas vers un workflow professionnel.

Tu peux aussi combiner les hooks avec le workflow Claude Code pour entrepreneurs pour industrialiser ta production de code tout en gardant le contrôle sur la qualité et la sécurité.

Skills, hooks, agents — maîtrise tout l'écosystème Claude Code

Le programme LE LABO IA couvre l'ensemble de l'écosystème : configuration avancée, automatisation, et déploiement de solutions complètes avec Claude Code.

Voir le Programme Complet

Questions fréquentes

C'est quoi un hook dans Claude Code ?
Un hook est un script qui s'exécute automatiquement à un moment clé du workflow Claude Code : avant une action (PreToolUse), après (PostToolUse), ou en fin de session (Stop). Contrairement aux instructions CLAUDE.md, un hook est garanti de s'exécuter.
Comment configurer un hook Claude Code ?
Crée un fichier .claude/hooks.json dans ton projet ou ajoute une section hooks dans settings.json. Définis l'événement déclencheur, le type de handler (command, http, prompt) et le script à exécuter.
Quelle est la différence entre un hook et un skill ?
Un skill est une commande que tu invoques volontairement (/nom-du-skill). Un hook est automatique — il se déclenche tout seul à chaque événement correspondant. Les hooks sont pour l'automatisation, les skills pour les commandes.
Comment un hook peut bloquer une action dangereuse ?
Un hook PreToolUse peut retourner le code de sortie 2 pour bloquer l'action avec un message d'erreur. Par exemple, un hook qui détecte rm -rf dans une commande Bash et retourne exit 2 avec le message "Commande dangereuse bloquée".
Les hooks ralentissent-ils Claude Code ?
Un hook synchrone s'exécute avant ou après chaque action concernée, donc oui, il ajoute un délai. Utilise async: true pour les hooks non critiques (notifications, logs) afin qu'ils s'exécutent en parallèle sans bloquer.
Peut-on avoir des hooks différents par projet ?
Oui. Les hooks dans .claude/hooks.json sont spécifiques au projet. Les hooks dans ~/.claude/hooks/ sont globaux. Tu peux combiner les deux. Les hooks projet s'ajoutent aux hooks globaux.
Quel hook créer en premier ?
Un auto-format avec Prettier ou Black sur PostToolUse pour Write et Edit. C'est le hook le plus utile car il garantit que chaque fichier modifié par Claude Code est automatiquement formaté selon tes conventions.
Meydeey - Architecte IA
Meydeey — Architecte IA & Automatisation

+110 entrepreneurs formés au Vibe Coding et à l'automatisation IA avec N8N. Fondateur du Labo IA.