Hooks et permissions
Personnaliser le comportement de Claude et poser des garde-fous
⏱ Estim. ~6 min
01 · Lire
Les hooks te permettent d'exécuter ton propre code à des moments précis du flow de Claude. Avant qu'un outil tourne ? Après une édition ? Au démarrage de la session ? Tu peux intercepter ces événements pour ajouter ta logique — formatage automatique, vérifications de sécurité, notifications, validations personnalisées.
Les permissions contrôlent ce que Claude est autorisé à faire. Par défaut, Claude demande avant de lancer une commande ou d'éditer un fichier. Mais tu peux pré-approuver les actions sûres (comme npm test), bloquer les dangereuses (comme git push --force) et laisser Claude aller plus vite sur les tâches de routine tout en restant prudent sur les actions à risque.
💡 Imagine çaLes hooks, c'est comme les points de contrôle sur une chaîne de production. À chaque station, l'inspecteur (ton script) regarde le travail et le laisse passer (exit 0) ou le renvoie (exit 2). Les permissions, c'est comme un système de badges — certaines portes sont toujours ouvertes (lire un fichier), certaines demandent un badge (commandes), d'autres sont verrouillées (opérations dangereuses).
Points clés
- Hooks : ton code s'exécute à des moments précis du flow Claude
- Permissions : ce que Claude peut et ne peut pas faire
- Les hooks interceptent des événements ; les permissions fixent les règles générales
- Ensemble, ils personnalisent et protègent Claude pour ton flow
02 · Lire
Voici les événements de hook les plus utiles : - PreToolUse — déclenché avant que Claude utilise un outil (Read, Edit, Bash, etc.). Tu peux examiner ce qu'il s'apprête à faire et le bloquer. - PostToolUse — déclenché après le succès d'un outil. Parfait pour formater automatiquement les fichiers édités ou logger les changements. - SessionStart — déclenché au démarrage de la session. À utiliser pour injecter des rappels de contexte, surtout après une compression. - Notification — déclenché quand Claude a besoin de ton attention. Parfait pour les notifications desktop. - Stop — déclenché quand Claude finit de répondre.
Les hooks communiquent via les exit codes : exit 0 autorise l'action, exit 2 la bloque (le message d'erreur sur ton stderr devient un feedback pour Claude).
Points clés
- PreToolUse : examine avant qu'un outil tourne, bloque si besoin
- PostToolUse : réagit après le succès d'un outil (formatage auto, log)
- SessionStart : injecte du contexte au démarrage ou après compression
- Exit 0 = autorisé, Exit 2 = bloqué (stderr devient le feedback)
03 · Exemple de code
Voici un hook PostToolUse qui formate automatiquement après que Claude édite un fichier. Il vit dans le .claude/settings.json de ton projet.
.claude/settings.json — hook de formatage automatique
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
}]
}]
}
}
Le champ matcher fait un regex sur le nom de l'outil — Edit|Write veut dire que le hook se déclenche après tout appel à Edit ou Write. La commande reçoit le JSON sur stdin avec les détails de l'appel, extrait le chemin du fichier et lance Prettier dessus. Chaque fichier édité par Claude est formaté automatiquement.
04 · Exemple de code
Voici un hook PreToolUse qui bloque les commandes Bash dangereuses.
.claude/hooks/protect.sh
#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command')
if [[ "$CMD" =~ "rm -rf" ]]; then
echo "Blocked: rm -rf is not allowed" >&2
exit 2 # Block the action
fi
exit 0 # Allow everything else
.claude/settings.json
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": ".claude/hooks/protect.sh"
}]
}]
}
}
Ce hook intercepte chaque commande Bash que Claude essaie de lancer. Il lit la commande sur stdin (en JSON), vérifie la présence de 'rm -rf' et bloque avec l'exit code 2. Le message d'erreur sur stderr dit à Claude pourquoi c'est bloqué, et Claude accepte la restriction.
05 · Lire
Les permissions te donnent des règles allow/deny globales sans écrire de script. Elles utilisent des wildcards pour rester flexibles.
Règles allow — pré-approuvent des actions pour que Claude ne demande plus : - Bash(npm run ) — n'importe quel npm script - Bash(git commit ) — commit des changements - Read(*.env) — lire les fichiers env
Règles deny — bloquent complètement des actions : - Bash(git push --force ) — pas de force push - Edit(package-lock.json) — pas touche au lockfile - Bash(rm -rf ) — pas de suppression récursive
Les règles deny gagnent toujours sur les règles allow. La configuration est vérifiée du plus spécifique au plus général : local project > project > user.
Points clés
- Règles allow : pré-approuvent les actions sûres (pas de prompt de permission)
- Règles deny : bloquent complètement des actions
- Wildcards : Bash(npm *) matche n'importe quelle commande npm
- En cas de conflit, deny l'emporte toujours sur allow
- La config locale écrase la config projet, qui écrase la config utilisateur
06 · Quiz
Ton hook PreToolUse détecte que Claude va lancer rm -rf /tmp/build. Quel exit code ton script de hook doit-il renvoyer pour bloquer cette action ?
- Exit code 0 — succès
- Exit code 2 — bloque l'action
- Exit code 1 — erreur générique
- Exit code 255 — erreur critique
07 · Associer
Associe chaque événement de hook à ce pour quoi il est le mieux adapté.
(Cette section est interactive — active JavaScript pour l'utiliser.)
Autres leçons de ce chapitre
⚠ L'expérience interactive complète nécessite JavaScript. Active-le et recharge la page.
※ Ce site est un projet éducatif indépendant — pas un produit officiel d'Anthropic. Claude™ est une marque déposée d'Anthropic, PBC.