Aller au contenu principal
Claude Code Safety Net : je ne bosse plus sans filet
Retour au blog
IA

Claude Code Safety Net : je ne bosse plus sans filet

Patrice Huetz11 avril 20266 min

Le 4 février 2026, 23h47, j'ai perdu 4 heures de travail non committé en 8 secondes. Claude Code avait exécuté git checkout -- . pour « nettoyer l'environnement » avant une tâche de refactoring. Aucun fichier n'avait été préalablement staged. Les 4 heures de travail étaient dans le working tree. Elles sont parties. Personne n'a trouvé utile de me demander de confirmer. Depuis, je ne lance plus un agent Claude Code sans le plugin Safety Net. Voici ce qui s'est passé exactement, et les 8 règles que j'applique désormais sans négociation.

L'incident en 3 minutes

Il était 23h47. Je travaillais sur un refactor du moteur de recherche du blog, côté Turso. J'avais modifié 14 fichiers, pas committé encore parce que je voulais tester en local d'abord. Je lance Claude Code avec un prompt simple : « Ajoute un index excerpt_tsv sur la table blog_posts en utilisant un Drizzle migration ». Dans l'idée, une tâche de 5 minutes.

L'agent démarre. Première action : git status. Deuxième action : je vois dans le terminal git checkout -- .. Troisième action : « Working directory cleaned. Now creating migration... ». Je hurle. Trop tard. Les 14 fichiers avaient été restaurés à leur état du dernier commit.

Cause : le system prompt de Claude Code contenait (à l'époque) une instruction bien intentionnée : « ensure a clean working directory before making structural changes ». L'agent a interprété « clean » = « zéro diff non committé ». Il a supprimé. Aucune confirmation, aucune sauvegarde, rien.

⚠️
Un LLM qui exécute du shell n'a **aucune** intuition de ce qui est précieux dans ton working tree. Les fichiers non committés ont exactement le même statut pour lui qu'un fichier temporaire à la poubelle.

Les 8 règles Safety Net que j'applique maintenant

Règle 1 : jamais d'agent sur un working tree sale

Avant chaque invocation de Claude Code, git status doit être propre OU tout doit être stashé. Pas d'exception. J'ai un alias :

bash
alias cc-safe='git stash push -m "cc-safety-$(date +%s)" && claude-code'

Si j'ai besoin du travail en cours, je le stash avant de lancer. Si Claude casse quelque chose, le stash est ma time machine.

Règle 2 : une deny list explicite dans `.claude/config.yml`

yaml
# .claude/config.yml
deny_commands:
  - "git checkout -- *"
  - "git reset --hard *"
  - "git clean -fd*"
  - "rm -rf *"
  - "find . -delete"
  - "sudo *"
  - "> *"  # redirection vers fichier existant
  - ".env*"
confirmation_required:
  - "git commit *"
  - "git push *"
  - "npm publish"

Chaque commande dans deny_commands est refusée au niveau du plugin Safety Net, avant même que l'agent ait le temps de l'exécuter.

Règle 3 : confirmation humaine sur les opérations irréversibles

Toute opération qui supprime ou écrase sans undo demande une confirmation explicite. Ça ralentit légèrement le workflow, mais ça t'évite le cauchemar du 4 février.

Règle 4 : checkpoint automatique avant chaque run

Le plugin Safety Net fait un git stash push --include-untracked avant chaque action destructive, nommé cc-auto-<timestamp>. Si quelque chose casse, je peux faire git stash list et retrouver l'état précédent.

Règle 5 : logs d'actions destructives dans un fichier dédié

Toutes les commandes matchant un pattern destructif sont loguées dans .claude/destructive-actions.log avec timestamp, prompt initial, et état du working tree. Ça me permet de faire un audit après chaque session.

2026-02-04T23:47:12Z action=git_checkout prompt="Add index excerpt_tsv..."
  dirty_files_before=14 result=ALLOWED (pre-safety-net)

Règle 6 : sandbox pour les tâches expérimentales

Pour toute tâche que je considère comme « exploration » (refactoring profond, migration, expérimentation d'une lib), je crée un worktree git dédié :

bash
git worktree add ../my-project-experiment experiment-branch
cd ../my-project-experiment
claude-code ...

Si ça casse, je jette le worktree. Le main repo est intact. Coût : 30 secondes de setup. Bénéfice : zéro stress.

Règle 7 : jamais de Claude Code sur `main`

Ma règle personnelle depuis 3 mois : Claude Code ne tourne jamais sur la branche main directement. Toujours sur une branche de travail qui peut être abandonnée. Si Claude est sur main, c'est déjà une faute de configuration.

Règle 8 : backup journalier du workspace complet

Tous les jours à 2h du matin, un cron fait un tar czf de mon dossier de travail, encrypté et uploadé sur Backblaze B2. Coût : 0,40 $/mois pour 50 Go. Bénéfice : si tout part en fumée, j'ai une copie de moins de 24h.

cron
0 2 * * * /usr/local/bin/daily-workspace-backup.sh

Ce que Safety Net ajoute vs ce que Claude Code fait nativement

Depuis l'incident, Anthropic a ajouté plusieurs garde-fous natifs — mais ils sont loin d'être suffisants. Voici ce que chacun couvre :

Garde-fouClaude Code natifSafety Net plugin
Confirmation avant rm -rf
Deny list git reset --hard
Checkpoint auto avant actions destructives
Log d'audit des commandesPartiel
Refus d'édition sur .env*
Sandbox worktree automatique

Claude Code natif couvre les accidents évidents (rm -rf /). Safety Net couvre les accidents subtils (git checkout sans commit précédent). Les deux sont nécessaires.

💡
Même si tu fais confiance à ton agent, Safety Net coûte 20 secondes par setup et te protège contre les 3-4 incidents que tu vas inévitablement rencontrer. C'est de l'assurance, pas de la parano.

Le coût psychologique de ne pas avoir Safety Net

Après l'incident, j'ai arrêté de faire confiance aveuglément à Claude Code pendant 10 jours. Chaque tâche me demandait 2× plus de vigilance, ce qui réduisait mon productivity gain à peu près à zéro. J'étais fatigué, je râlais, je faisais plus de bugs humains parce que je stressais.

Installer Safety Net m'a pris 30 minutes. À la sortie, j'ai retrouvé ma confiance en une journée. L'absence de Safety Net coûte plus que son installation — pas en sécurité, mais en charge mentale.

Ce qu'il faut retenir

  1. 1.Claude Code peut détruire ton travail non committé en une seule commande mal choisie.
  2. 2.8 règles Safety Net suffisent à couvrir 99% des incidents.
  3. 3.Les garde-fous natifs Anthropic ne sont pas suffisants — ils couvrent les évidences, pas les subtilités.
  4. 4.Le vrai coût de ne pas avoir Safety Net n'est pas le risque d'incident, c'est la charge mentale qui en découle.

Pour aller plus loin sur la discipline Ralph Loop qui rend ces workflows autonomes possibles sans sacrifier la sécurité, j'ai écrit un livre complet :

La Boucle Ralph
La Boucle Ralph

Guide Pratique du Coding Autonome par IA.

Découvrir →
🔒

Soutenez mon travail sur Patreon

Accès anticipé aux articles, contenu exclusif, et la satisfaction de soutenir un auteur indépendant.

Rejoindre — à partir de 3€/mois

Commentaires

Chargement des commentaires...

Laisser un commentaire