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) :

~/.claude/settings.json
{
  "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

  1. 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.
    Terminal
    jq --version
    brew install jq
  2. 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 :
    proteger-fichiers.sh
    #!/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
  3. Le rendre exécutableSans cette étape, Claude Code ne peut pas le lancer.
    Terminal
    chmod +x .claude/hooks/proteger-fichiers.sh
  4. Le tester à la mainOn envoie au script une fausse demande de modification. Il doit afficher le message « Bloqué » puis le code 2.
    Terminal
    echo '{"tool_name":"Edit","tool_input":{"file_path":"factures/FAC-2026-001.md"}}' | .claude/hooks/proteger-fichiers.sh
    echo $?
  5. Déclarer le hookAjoutez ce bloc dans .claude/settings.json, à la racine du même dossier. S'il contient déjà une clé hooks, ajoutez PreToolUse à côté des autres événements au lieu de tout remplacer.
    .claude/settings.json
    {
      "hooks": {
        "PreToolUse": [
          {
            "matcher": "Edit|Write",
            "hooks": [
              {
                "type": "command",
                "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/proteger-fichiers.sh"
              }
            ]
          }
        ]
      }
    }
  6. Vérifier dans Claude CodeTapez /hooks : votre hook apparaît sous PreToolUse. 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 sur Bash, ou une règle de permission deny.
  • Si le hook ne se déclenche pas : vérifiez /hooks, le chmod +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

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.