Claude Code Safety Net : je ne bosse plus sans filet
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.
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 :
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`
# .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é :
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.
0 2 * * * /usr/local/bin/daily-workspace-backup.shCe 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-fou | Claude Code natif | Safety Net plugin |
|---|---|---|
Confirmation avant rm -rf | ✅ | ✅ |
Deny list git reset --hard | ❌ | ✅ |
| Checkpoint auto avant actions destructives | ❌ | ✅ |
| Log d'audit des commandes | Partiel | ✅ |
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.
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.Claude Code peut détruire ton travail non committé en une seule commande mal choisie.
- 2.8 règles Safety Net suffisent à couvrir 99% des incidents.
- 3.Les garde-fous natifs Anthropic ne sont pas suffisants — ils couvrent les évidences, pas les subtilités.
- 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 :
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