Comment empêcher Cursor d'effacer votre base de données
Un prompt. Un petit bug backend. Vous détournez le regard, et l'agent lance supabase db reset.
Base locale effacée. Données de test perdues. La migration à mi-chemin, perdue.
Ce n'est pas un bug de Cursor. C'est ce qui arrive quand on donne un terminal à un agent et qu'on croit qu'un fichier texte suffira à le freiner.
TL;DR — Les .cursorrules ne vous sauveront pas. Les règles sont des suggestions, et une règle qui dit « demander avant » est une règle qui autorise. Trois barrières fermes à la place : une règle sans échappatoire, la confirmation terminal activée dans Cursor, et un blocage au niveau du shell qui refuse la commande, quel que soit ce que décide le modèle. Le vrai rempart, ce sont les permissions de la base.
Pourquoi les .cursorrules ne tiennent pas
Voici la règle que la plupart des gens écrivent :
Toujours demander une confirmation explicite avant d'exécuter toute commande destructive sur la base de données.
Lisez-la comme un modèle la lit. Vous n'avez pas interdit la commande. Vous y avez attaché une condition.
Une condition, c'est une porte.
L'agent écrit la commande dans le bloc terminal et vous pose la question dans le même souffle. Vous cliquez sur Accepter en croyant répondre à la question. C'était les deux à la fois.
Puis il y a le problème d'incitation. Le modèle optimise pour une chose : faire disparaître l'erreur. Schéma bancal, migration qui ne passe pas — reset est le chemin le plus court vers le vert. Vos données de test ne figurent pas dans la fonction objectif.
1. Retirer la condition de la règle
Si le texte est votre première barrière, rendez-le absolu. Pas de « sauf si ». Pas de « demander avant ».
# Database safety
- NEVER generate, write, or suggest `supabase db reset` or `supabase db drop`.
- No exceptions. Do not ask for confirmation. Refuse to write the command. Ce n'est toujours pas une garantie. C'est une règle que le modèle ne peut pas contourner par interprétation — ce qui est déjà autre chose.
2. Désactiver l'exécution automatique
L'agent Cursor peut exécuter des commandes terminal seul pour tester ses corrections. Pratique — jusqu'à ce que ce ne le soit plus.
Réglages → Fonctionnalités → Terminal (ou sous Composer, selon votre version). Exiger une confirmation avant d'exécuter des commandes terminal. Laissez activé.
Vous cliquerez plus souvent. C'est le compromis.
3. Bloquer au niveau du shell
La seule règle qu'un agent ne peut pas réinterpréter est celle qu'il ne lit jamais. Mettez-la dans le shell.
supabase() {
if [[ "$1" == "db" && "$2" == "reset" ]]; then
echo "❌ BLOCKED: supabase db reset is disabled."
return 1
fi
command supabase "$@"
} source ~/.zshrc, et la commande meurt avant d'atteindre Supabase — quoi que le modèle ait écrit.
Un bémol, parce que ça compte. Cela ne couvre que les shells qui lisent votre ~/.zshrc. Le terminal intégré de Cursor le fait en général. Un sous-processus lancé par un agent, ou tout appel direct à sh, peut ne pas le faire. Dupliquez la protection dans ~/.bashrc et considérez-la comme un ralentisseur, pas un mur.
Le mur est dans la base de données
Les astuces shell stoppent l'accident que vous pouvez imaginer. Les permissions stoppent ceux que vous ne pouvez pas.
Le compte utilisé par votre environnement local ne devrait pas pouvoir DROP. Les identifiants de production ne devraient pas se trouver sur votre machine. Les sauvegardes devraient tourner selon un planning, pas selon votre mémoire.
Faites cela correctement et peu importe ce que l'agent a tapé.
C'est le même ordre des opérations que pour toute automatisation IA qui mérite d'être mise en production. Les contraintes d'abord. La vitesse ensuite. Sautez la première étape et vous n'avez rien automatisé — vous avez juste déplacé le risque là où vous ne le voyez plus.
Prêt à laisser l'agent tourner ?
Le zero trust ne consiste pas à se méfier du modèle. Il consiste à ne pas avoir besoin de lui faire confiance. Le texte dit à l'agent ce que vous préféreriez. Les permissions décident de ce qui est possible. Construisez pour la seconde option et vous pourrez arrêter de lire chaque bloc terminal le doigt sur Échap.
👉 Vous voulez les mêmes garde-fous autour des automatisations que vous faites tourner en production ? Contactez-moi