Build
Guide avancé

Faire vérifier Claude par ton ordinateur, pas par ta vigilance

Guide avancé, fait pour qui a déjà Claude Code. Tu débutes ? La formation t'y amène pas à pas.

Ce guide est pour toi si tu as Claude Code, c'est-à-dire Claude installé sur ton ordinateur. Il tape lui-même des commandes qui déplacent, copient ou effacent tes fichiers. Une consigne écrite, il peut l'oublier. Un hook, non : c'est ton ordinateur qui regarde chaque commande avant qu'elle parte et refuse celles que tu as interdites. Tu vas en poser un qui l'empêche d'effacer un dossier entier.

Tu as Claude Code : colle la demande de l'étape 1, il pose le garde-fou tout seul. Puis le test sans danger de l'étape 2. Tu ne l'as pas : ce guide ne se fait pas sur téléphone. Lis l'étape 3, elle te servira le jour où tu confieras de vrais fichiers à Claude.
Tu arrives d'un reel ?

Ce guide se fait dans Claude Code, compris dans la formule Claude Pro (la version gratuite ne l'inclut pas). Jamais installé ? Compte une demi-heure la première fois avec ces quatre leçons gratuites, ensuite ce guide prend le temps annoncé :

01

Demande-lui le garde-fou

Claude Code est compris dans l'abonnement Claude Pro (20 dollars par mois chez Anthropic, le prix en euros s'affiche au paiement). Il faut aussi Python, gratuit : tape python --version dans le terminal (python3 --version sur Mac), s'il répond un numéro c'est bon.

Lance claude dans le dossier où tu travailles avec lui et colle cette demande. Tu n'écris rien toi-même : c'est lui qui crée les fichiers.

À écrire dans Claude Code
Pose-moi un garde-fou (un hook) dans ce projet.

Avant chaque commande que tu tapes dans le terminal (Bash ou
PowerShell), un petit programme Python, scripts/garde.py, lit la
commande. S'il y trouve rm -rf, ou Remove-Item avec -Recurse, il
écrit « Refuse : suppression recursive. » sur le canal des erreurs
et sort avec le code 2. Sinon il sort avec le code 0.

Ajoute le réglage dans .claude/settings.json sans toucher à ce qui
y est déjà (garde la partie permissions telle quelle). Crée le
fichier s'il n'existe pas. Écris le chemin avec $CLAUDE_PROJECT_DIR,
jamais l'adresse complète de mon dossier.

Montre-moi les deux fichiers quand c'est fait.

Tu veux qu'il te demande avant d'écrire ? Si tu lis ⏵⏵ auto mode on tout en bas de la fenêtre, appuie une fois sur Shift + Tab (dans l'application de bureau : Manuel, à côté du bouton d'envoi).

Il te montre ce qu'il va écrire et demande la permission. Si une partie permissions était déjà dans le fichier, vérifie qu'elle y est toujours, puis tape 1 (Yes, « oui »). Sur Mac, ajoute une ligne à la demande avant de l'envoyer : « sur ce Mac, écris python3 au lieu de python dans la commande ».

Une commandeva partirTon hookregardeIl laisse passerou il refuse
La consigne demande, le hook décide. C'est toute la différence.

Pour comprendre, rien à faire. Un hook (« crochet » en anglais) est un petit programme que ton ordinateur lance tout seul juste avant chaque commande de Claude, comme un vigile à la porte. Claude Code lui passe la commande qui va partir. Le programme répond par un chiffre en se terminant. 0 : la commande part. 2 : elle est bloquée, ton message arrive à Claude, qui comprend pourquoi et propose autre chose. rm -rf efface un dossier entier sans passer par la corbeille. Remove-Item -Recurse fait la même chose en PowerShell, que Claude Code utilise souvent sur Windows.

Facultatif, pour relire ce qu'il a écrit. Le réglage, dans .claude/settings.json, dit : avant chaque commande du terminal, lance scripts/garde.py et écoute sa réponse. Le même réglage dans ~/.claude/settings.json vaudrait pour tous tes projets. Commence par un seul.

Le contenu du fichier
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash|PowerShell",
        "hooks": [
          {
            "type": "command",
            "command": "python \"$CLAUDE_PROJECT_DIR/scripts/garde.py\""
          }
        ]
      }
    ]
  }
}

Et le programme, scripts/garde.py :

Le contenu du fichier
import json, sys

charge = json.load(sys.stdin)
commande = charge.get("tool_input", {}).get("command", "").lower()

if "rm -rf" in commande or ("remove-item" in commande and "-recurse" in commande):
    print("Refuse : suppression recursive.", file=sys.stderr)
    sys.exit(2)

sys.exit(0)

Tu viens de faire la première étape. La formation fait pareil pour tes devis, tes relances et ton site, leçon par leçon : 29 € une seule fois, accès à vie. Prix de lancement.

Je prends l'accès
02

Teste-le sans danger

Tape /hooks dans Claude : ton garde-fou doit apparaître dans la liste. S'il n'y est pas, tape /exit puis relance claude dans le même dossier. Ensuite colle ceci :

À écrire dans Claude Code
Pour tester mon hook, lance la commande rm -rf dossier-test-hook
et dis-moi exactement ce qui s'est passé.

Ce dossier n'existe pas, donc rien ne peut être effacé. S'il te demande la permission, tape 1 : le hook bloque quand même. Il doit te répondre que la commande a été bloquée par un hook, en citant ton message « Refuse : suppression recursive ». S'il dit qu'elle est passée, écris-lui : « le hook ne s'est pas déclenché, montre-moi .claude/settings.json et trouve pourquoi ».

Puis fais-lui lancer trois commandes sans danger : ls (lister le dossier), python --version (python3 --version sur Mac) et mkdir essai-hook (créer un dossier). Elles doivent passer normalement.

Le piège

Tester seulement le cas qu'on veut attraper. Teste surtout les trois commandes qu'il ne doit PAS bloquer : un hook qui se trompe deux fois de suite est un hook qu'on désactive.

03

Pourquoi un hook et pas une consigne

Le 7 août, deux commandes de copie ont écrasé la liste des membres d'un site en ligne par une vieille copie gardée sur l'ordinateur. Sept fiches détruites, dont trois abonnés payants. La consigne « le serveur est la source de vérité » existait dans le fichier de règles. Elle n'a pas suffi : elle dépendait de l'attention au moment où la commande a été tapée. Le hook qui refuse ces copies existe depuis.

Ce hook-là regarde aussi le sens. Descendre du site vers la machine est une sauvegarde, donc autorisé. Monter écrase du vivant par du périmé, donc refusé. Un garde-fou qui bloque les deux sens finit par être désactivé.

Un autre garde-fou se demande de la même façon. Remplace « avant chaque commande que tu tapes dans le terminal » par « avant que tu modifies ou écrives un fichier » et dis ce qu'il doit refuser.

Si tu ne retiens qu'une chose

Ce soir : colle la demande de l'étape 1, puis fais le test de l'étape 2. Pose un hook quand l'erreur coûte cher, pas quand elle agace : une consigne oriente un style, elle ne protège pas ce qui ne se répare pas.

Offre de lancement

La suite, c'est la formation complète.

29 €une seule fois, accès à vie

Prix de lancement : ensuite ce sera 49 €.

Je prends l'accès à vie

Paiement sécurisé par Stripe. Nécessite Claude Pro chez Anthropic (environ 20 € par mois).