Boucle de debug infinie : laisser Cursor CLI corriger jusqu'à ce que les tests passent

4 min read

Écrivez un script shell qui fait que cursor agent corrige le code automatiquement, lance les tests, et s'ils échouent laisse l'IA corriger à nouveau — en répétant jusqu'à ce que tous les tests passent. Pas besoin de rester à appuyer sur O/N. Confiez la boucle à l'IA et allez faire autre chose — revenez quand le terminal affiche « tests passed ».

Concept central

while tests don't pass:
    run tests → collect error output
    feed error output to cursor agent
    cursor agent fixes the code
    run tests again

C'est une boucle « lancer les tests → échec → demander à l'IA de corriger → répéter » jusqu'au vert. Simple et direct, mais efficace.

Étape 1 : Vérifier les prérequis

  • cursor est installé et connecté (cursor --version pour vérifier)
  • Le projet a une commande de test qui s'exécute dans le terminal, par exemple :
    • npm test
    • pytest
    • go test ./...
    • cargo test
  • Les tests renvoient un code de sortie non nul en cas d'échec (c'est le cas par défaut pour presque tous les frameworks)

Étape 2 : Le script le plus simple

Créez debug-loop.sh :

#!/bin/bash
 
MAX_LOOPS=10        # max iterations to prevent truly infinite loops
TEST_CMD="npm test" # replace with your test command
loop=0
 
while [ $loop -lt $MAX_LOOPS ]; do
  echo ""
  echo "=== Loop $((loop + 1)) ==="
 
  # run tests and capture stdout + stderr
  TEST_OUTPUT=$(eval "$TEST_CMD" 2>&1)
  EXIT_CODE=$?
 
  if [ $EXIT_CODE -eq 0 ]; then
    echo "✅ Tests passed! Completed in $((loop + 1)) loop(s)."
    exit 0
  fi
 
  echo "❌ Tests failed, letting the AI fix..."
  echo "$TEST_OUTPUT" | tail -30  # print the last 30 lines for your reference
 
  # feed the error output to cursor agent
  cursor agent "Tests failed with the following errors. Please fix the code to make the tests pass:
 
$TEST_OUTPUT" --model gpt-codex-5.3-high --no-interactive
 
  loop=$((loop + 1))
done
 
echo "⚠️  Reached max loops ($MAX_LOOPS). Stopping. Please investigate manually."
exit 1

Étape 3 : Lancer le script

chmod +x debug-loop.sh
./debug-loop.sh

Vous pouvez aller prendre un café, répondre aux messages et revenir quand vous voyez ✅ Tests passed! dans le terminal. Si la limite MAX_LOOPS est atteinte sans succès, c'est le moment d'intervenir manuellement.

Étape 4 : Adapter à votre projet

Changez la commande de test (ligne 4) :

TEST_CMD="pytest -x"          # Python, -x stops on first failure
TEST_CMD="go test ./..."      # Go
TEST_CMD="cargo test"         # Rust
TEST_CMD="./vendor/bin/phpunit" # PHP

Ajustez le nombre max de boucles :

MAX_LOOPS=5   # conservative, stop early if not improving
MAX_LOOPS=20  # more complex problems get more chances

Donnez plus de contexte à l'IA (dans la commande cursor agent) :

cursor agent "Tests failed. Errors below.
The test framework is Jest and the language is TypeScript.
Do not modify test files — only change files under src/.
 
Error output:
$TEST_OUTPUT" --model gpt-codex-5.3-high --no-interactive

Version améliorée : garder des logs par boucle

#!/bin/bash
 
MAX_LOOPS=10
TEST_CMD="npm test"
LOG_DIR="debug-logs"
mkdir -p $LOG_DIR
 
loop=0
 
while [ $loop -lt $MAX_LOOPS ]; do
  echo ""
  echo "=== Loop $((loop + 1)) ==="
 
  LOG_FILE="$LOG_DIR/loop-$((loop + 1)).log"
  TEST_OUTPUT=$(eval "$TEST_CMD" 2>&1 | tee "$LOG_FILE")
  EXIT_CODE=${PIPESTATUS[0]}
 
  if [ $EXIT_CODE -eq 0 ]; then
    echo "✅ Tests passed! Completed in $((loop + 1)) loop(s)."
    exit 0
  fi
 
  echo "❌ Failed. Log saved to $LOG_FILE"
 
  cursor agent "Tests failed with the following errors. Please fix the code to make the tests pass:
 
$TEST_OUTPUT" --model gpt-codex-5.3-high --no-interactive
 
  loop=$((loop + 1))
done
 
echo "⚠️  Reached max loops. Stopping. Check the logs in $LOG_DIR/."
exit 1

Utile pour revoir « ce qui a échoué à quelle itération » après coup.

Points de vigilance

Risque Comment limiter
L'IA casse plus de fichiers Faites un git commit avant pour figer l'état, git checkout . pour revenir en arrière si besoin
Trop de boucles consomment le quota Fixez un MAX_LOOPS raisonnable (5–15 recommandé)
L'IA modifie les fichiers de test Dites explicitement dans le prompt « do not modify test files »
Échecs différents à chaque boucle Gardez les logs (version améliorée) pour analyser après

Résumé

  1. Structure du script : lancer les tests → échec → donner la sortie à l'IA → répéter jusqu'à succès ou limite
  2. Paramètres clés : TEST_CMD (commande de test), MAX_LOOPS (nombre max d'itérations)
  3. Soyez précis dans le prompt : indiquez le langage, restreignez les répertoires à modifier, ne pas toucher aux tests
  4. Faites un git commit avant — facile de revenir en arrière si ça dérape, et l'esprit tranquille

En complément de Worktree : lancez une boucle de debug sur des branches différentes en parallèle. Voir 06-cursor-cli-with-worktree.