- Outils
- Claude Code, jq
- Prix
- Inclus (jq est gratuit)
- Temps
- 15 min
- Niveau
- Terminal, intermédiaire
Un fichier CLAUDE.md donne des consignes à l'IA, et Claude les suit en général. En général seulement. Pour une facture déjà envoyée, « en général » ne suffit pas : une facture émise ne se modifie pas. Les hooks règlent ce problème. Anthropic les présente comme un contrôle « déterministe » : une action précise se produit toujours, au lieu de compter sur le modèle pour y penser.
Comment ça marche
Un hook s'écrit dans un fichier de réglages, settings.json. Il associe un moment (un « événement ») à une commande. Les moments les plus utiles :
PreToolUse: juste avant une action de Claude (modifier un fichier, lancer une commande). Ce hook peut la bloquer.PostToolUse: juste après une action réussie, par exemple pour remettre un fichier en forme.Notification: quand Claude attend votre réponse ou votre autorisation.SessionStart: au démarrage d'une session.
Le réglage matcher précise à quelles actions le hook s'applique : Edit|Write vise les modifications de fichiers. Pour bloquer, la commande doit se terminer avec le code de sortie 2. Attention, le code 1 ne bloque pas : il produit seulement un avertissement.
Pour commencer : être prévenu quand l'IA vous attend
Un premier hook sans risque, tiré de la documentation : une notification macOS chaque fois que Claude a besoin de vous. À ajouter dans ~/.claude/settings.json (créez le fichier s'il n'existe pas) :
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude a besoin de vous\" with title \"Claude Code\"'"
}
]
}
]
}
}Si rien ne s'affiche, ouvrez Réglages Système, Notifications, et autorisez « Éditeur de script », l'application par laquelle passent ces notifications.
Bloquer la modification de vos factures
- Vérifier que jq est installéjq lit les données que Claude Code transmet au hook. Si la première commande ne répond pas, installez-le avec Homebrew.
jq --version brew install jq - Créer le script de vérificationDans le dossier de votre activité, enregistrez ce fichier sous
.claude/hooks/proteger-fichiers.sh. Adaptez la liste des motifs protégés :#!/bin/bash # Bloque la modification de certains fichiers par Claude Code INPUT=$(cat) FICHIER=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty') PROTEGES=("factures/" ".env" ".git/") for motif in "${PROTEGES[@]}"; do if [[ "$FICHIER" == *"$motif"* ]]; then echo "Bloqué : $FICHIER est protégé ($motif). Demande d'abord à l'utilisateur." >&2 exit 2 fi done exit 0 - Le rendre exécutableSans cette étape, Claude Code ne peut pas le lancer.
chmod +x .claude/hooks/proteger-fichiers.sh - Le tester à la mainOn envoie au script une fausse demande de modification. Il doit afficher le message « Bloqué » puis le code 2.
echo '{"tool_name":"Edit","tool_input":{"file_path":"factures/FAC-2026-001.md"}}' | .claude/hooks/proteger-fichiers.sh echo $? - Déclarer le hookAjoutez ce bloc dans
.claude/settings.json, à la racine du même dossier. S'il contient déjà une cléhooks, ajoutezPreToolUseà côté des autres événements au lieu de tout remplacer.{ "hooks": { "PreToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/proteger-fichiers.sh" } ] } ] } } - Vérifier dans Claude CodeTapez
/hooks: votre hook apparaît sousPreToolUse. Demandez ensuite à Claude d'ajouter une ligne à une facture : la modification est refusée avant d'avoir lieu, et Claude reçoit votre message pour adapter sa démarche.
Où ranger un hook
~/.claude/settings.json: tous vos dossiers, sur cet ordinateur seulement..claude/settings.json: un seul dossier, partageable avec l'équipe..claude/settings.local.json: un seul dossier, pour vous seul.
Un hook PreToolUse qui bloque s'applique dans tous les modes d'autorisation, même quand vous laissez Claude agir sans demander. C'est ce qui en fait un vrai garde-fou.
Les limites
- Ce hook surveille les outils de modification de fichiers. Une commande du Terminal lancée par Claude (
rm,mv) passe par l'outil Bash et n'est pas couverte : il faudrait un second hook surBash, ou une règle de permissiondeny. - Si le hook ne se déclenche pas : vérifiez
/hooks, lechmod +x, et la validité du JSON (pas de virgule finale, pas de commentaire). - Rien à payer en plus : un hook de type « command » tourne sur votre ordinateur, sans appel au modèle.
Sécurité. Un hook exécute des commandes avec tous vos droits d'utilisateur : il peut lire, modifier ou supprimer n'importe lequel de vos fichiers. Lisez et testez chaque hook avant de l'ajouter, et méfiez-vous des hooks présents dans le dossier .claude/ d'un projet récupéré ailleurs. Claude Code attend que vous fassiez confiance au dossier avant de les lancer en session interactive : ne validez pas cette confiance les yeux fermés.
Sources
- Documentation Claude Code : Automate actions with hooks
- Documentation Claude Code : Hooks reference (Security considerations)
- jq, outil de lecture JSON
Vous voulez des agents IA qui travaillent sur vos devis et vos factures avec ce genre de garde-fous dès le départ ? C'est ce que je construis dans mes agents IA.