Aller au contenu
Développement medium

Claude Code CLI : erreurs courantes et recadrage en session

16 min de lecture

Logo Claude Code - erreurs courantes et recadrage de session

Même avec un bon prompt, un CLAUDE.md et un rituel de validation, certaines sessions partent en vrille : Claude boucle sur la même erreur, modifie plus de fichiers que demandé, ou enchaîne sur un plan que vous n'avez pas validé. Ce guide vous donne les manœuvres de reprise de contrôle à connaître : arrêter net, compacter, recadrer, ou annuler proprement. Toutes se pratiquent sur lab-claude.

  • Repérer 10 dérives typiques d'une session Claude Code
  • Appliquer un arbre de décision de recadrage
  • Utiliser Esc, /compact, /clear au bon moment
  • Formuler un recadrage court et ferme qui tient
  • Annuler une modification avec Git sans perdre le reste
  • Gérer les conflits Git après un git restore
  • Savoir quand quitter la session plutôt que /clear
  • Retrouver une décision perdue après un reset contexte

Pourquoi le recadrage est une compétence à part entière

Section intitulée « Pourquoi le recadrage est une compétence à part entière »

Reprendre une session dérivée, ce n'est pas échouer. C'est la moitié du travail d'un agent. Les deux pièges classiques :

  • Laisser dériver "encore une tentative" : le contexte se dégrade, l'agent insiste sur la mauvaise piste
  • Tout réinitialiser à la moindre friction : vous perdez l'état utile déjà chargé

La bonne réponse est souvent un geste précis et court, pas une refonte.

  • lab-claude opérationnel avec CLAUDE.md en place
  • Rituel plan / diff / validations appliqué (voir mode plan, diff et validations)
  • Dépôt lab-claude sous contrôle Git propre (git status clean au début)

La colonne du milieu est la seule qui compte au moment où vous êtes dans la session : elle décrit ce que vous voyez à l'écran, pas ce que vous supposez. Les cinq premières lignes sont des dérives de conduite (l'agent avance mal), les cinq dernières des dérives de résultat (l'agent produit du code qu'il ne faut pas garder). Les secondes coûtent plus cher parce qu'elles passent inaperçues jusqu'à la relecture du diff, et deux d'entre elles ne se voient que dans les fichiers que l'on ne relit pas : tests/ et pyproject.toml.

DériveSignal visibleManœuvre recommandée
Claude ignore le périmètreDiff touche des fichiers hors scopeRecadrage court + rejet du diff
Boucle sur la même erreurPlusieurs tentatives sur le même symptômeEsc, reformuler l'hypothèse
Plan qui s'allongePlan à 7+ étapes alors que vous avez demandé 3Recadrer vers plan plus court
Session qui bavardeRéponses longues, peu d'action/compact pour resserrer le contexte
Contexte dégradéClaude oublie des éléments posés tôt/clear et repartir avec un prompt structuré
Confiance excessiveClaude affirme "c'est bon" sans preuveExiger la sortie de pytest + ruff
Tests désactivésUn test passe parce qu'il a été marqué skipRelire le diff ligne à ligne sur tests/
Edit massifUn seul prompt déclenche 10 fichiers modifiésEsc, git restore, réduire le périmètre
Hallucination d'APIMéthode ou paramètre qui n'existe pasRecadrer : "cite le fichier source ou dis que tu ne sais pas"
Dépendance silencieusepyproject.toml modifié sans mentionRefuser le diff, interdire l'ajout sans validation

Identifier la dérive avant d'agir évite d'appliquer la mauvaise manœuvre.

Quand une session dérive, suivez cet ordre. La règle d'or : commencer par le geste le moins destructeur.

Dérive détectée
├─ Action en cours ? ──── oui ──> Esc
│ │
│ v
│ Diagnostic court
├─ Diff hors périmètre ? ─ oui ──> Refuser + recadrage
├─ Fichiers modifiés à tort ?
│ │
│ oui ──> git stash (sécuriser) ──> git restore ciblé
│ │
│ v
│ ruff + pytest
├─ Session longue mais utile ? ─ oui ──> /compact
│ │
│ v
│ Rappeler périmètre
└─ Contexte irrécupérable ? ──── oui ──> /clear OU quitter la session
v
Prompt structuré

Lisez l'arbre de haut en bas : vous n'appliquez /clear qu'après avoir tenté Esc, un recadrage, et /compact.

Interrompt immédiatement l'action en cours (recherche, modification, exécution). À utiliser dès que vous voyez Claude partir dans une direction qui ne convient pas : inutile d'attendre la fin.

Résume la session en gardant l'essentiel, libère de la fenêtre de contexte. À utiliser quand la session est longue mais que vous voulez continuer avec les mêmes objectifs.

Démarre une nouvelle conversation avec un contexte vide. À utiliser quand le contexte est trop dégradé et qu'aucun résumé ne sauverait la suite. Vous conservez votre CLAUDE.md, les fichiers du projet et votre historique Git ; la conversation précédente n'est pas détruite, elle reste accessible avec /resume. Passer un nom en argument (/clear enquete-health) l'étiquette dans le sélecteur de /resume, ce qui rend le retour en arrière praticable.

Esc coupe l'action en cours, il n'annule rien de ce qui a déjà été écrit sur le disque. C'est un arrêt, pas un retour en arrière : les fichiers déjà modifiés le restent, et c'est l'étape 5 qui s'en occupe. L'intérêt d'interrompre tôt est de figer l'état avant qu'il ne s'étende à d'autres fichiers, puis de demander un diagnostic sans autoriser de nouvelle modification, ce que fait la dernière ligne du prompt ci-dessous.

  1. Dès que vous voyez une dérive en cours, appuyez sur Esc

  2. Posez un diagnostic court

    Stop. Explique en 3 points ce que tu étais en train de faire
    et pourquoi tu as pris cette direction.
    Ne modifie rien.
  3. Décidez : recadrer dans la session actuelle ou compacter/effacer

Un recadrage efficace est bref, directif et rappelle le périmètre.

Exemple type :

Stop. Tu sors du périmètre.
Travaille uniquement sur app/main.py et tests/test_health.py.
Propose un plan en 3 étapes maximum.
N'exécute rien tant que je n'ai pas validé.

À éviter :

Non, ce n'est pas exactement ce que je voulais, peut-être qu'on pourrait...

La politesse est bien, mais elle dilue la consigne. Soyez précis avant d'être gentil.

Étape 3 : compacter quand la session est longue mais encore utile

Section intitulée « Étape 3 : compacter quand la session est longue mais encore utile »

/compact remplace l'historique de la conversation par un résumé, ce qui libère du contexte mais fait perdre le détail. Le risque n'est donc pas de perdre du code, c'est de perdre une contrainte posée quarante messages plus tôt et que le résumé n'a pas jugée importante. D'où l'étape 2 ci-dessous : relire ce que le résumé a retenu au lieu d'enchaîner directement. /compact accepte aussi des consignes de focalisation directement dans la commande, ce qui évite l'aller-retour de l'étape 3.

  1. Lancez la commande

    /compact
  2. Relisez le résumé proposé

    Vérifiez qu'il conserve : objectif, périmètre, décisions déjà prises, fichiers déjà touchés.

  3. Ajustez si nécessaire

    Ajoute au résumé : le périmètre est limité à app/main.py et tests/test_health.py.

Utilisez /clear quand au moins deux de ces signaux sont réunis : Claude se contredit, il oublie des règles posées, il insiste sur une mauvaise piste malgré le recadrage.

  1. Vérifiez l'état Git avant de repartir

    Fenêtre de terminal
    git status
    git diff
  2. Annulez les modifications non voulues (voir étape 5)

  3. Lancez /clear puis reformulez un prompt structuré

    Lis app/main.py et tests/test_health.py.
    Résume en 6 points le comportement actuel de /health.
    Ne modifie aucun fichier.

Étape 5 : annuler proprement une modification avec Git

Section intitulée « Étape 5 : annuler proprement une modification avec Git »

Si Claude a modifié des fichiers hors périmètre, n'essayez pas de corriger à la main.

  1. Regardez l'état

    Fenêtre de terminal
    git status
    git diff
  2. Annulez un fichier spécifique

    Fenêtre de terminal
    git restore app/main.py
  3. Ou annulez tout le working tree non commité

    Fenêtre de terminal
    git restore .
  4. Relancez les validations pour vérifier

    Fenêtre de terminal
    uv run ruff check .
    uv run pytest -q

git restore . écrase les modifications non commitées. Si une partie est utile, mettez-la en sécurité avant :

Fenêtre de terminal
git stash push -m "avant-recadrage-claude"
git restore .
uv run ruff check .
uv run pytest -q

Vous pouvez ensuite :

  • Appliquer les changements sauvegardés : git stash pop
  • Lister les sauvegardes : git stash list
  • Supprimer définitivement : git stash drop

Réflexe : toujours stash avant restore quand vous hésitez sur ce qui est utile.

Il arrive qu'un git stash pop ou un git restore <fichier> produise un conflit quand le fichier a changé entre-temps. Procédure simple :

  1. Listez les fichiers en conflit

    Fenêtre de terminal
    git status
  2. Ouvrez chaque fichier et résolvez les marqueurs <<<<<<<, =======, >>>>>>>

  3. Ajoutez la résolution

    Fenêtre de terminal
    git add <fichier>
  4. Relancez le rituel

    Fenêtre de terminal
    uv run ruff check .
    uv run pytest -q

Si le conflit vient d'un stash, terminez par git stash drop pour nettoyer la pile une fois le conflit résolu.

/clear démarre une nouvelle conversation sans quitter le CLI ; la précédente reste récupérable avec /resume. Quitter complètement (Ctrl+D ou /exit, dont /quit est l'alias) rend la main au terminal. La différence pratique est faible côté données, puisque dans les deux cas rien n'est perdu : elle porte surtout sur le coût de reprise, immédiat avec /clear, de quelques secondes de relance avec /exit.

SituationChoix recommandé
Contexte dégradé mais même tâche/clear + prompt structuré
Changement complet de tâche ou de projetQuitter et relancer claude
Longue session dont vous voulez pouvoir revenirQuitter (puis claude --resume si utile)
Vous n'êtes pas sûr de pouvoir sauver le contexteQuitter et repartir propre

Règle pratique : quand vous hésitez, quittez. Relancer une session prend 2 secondes, et le CLAUDE.md du projet se recharge automatiquement.

Après /clear ou un redémarrage, les décisions prises dans la conversation disparaissent, mais les traces persistantes restent :

  • Le diff Git montre ce qui a été réellement modifié : git diff HEAD~1
  • L'historique de commits raconte la progression : git log --oneline -20
  • Les fichiers du projet (notamment CLAUDE.md si vous y avez enregistré une règle)
  • L'historique de la session si vous relancez avec claude --resume

Bonne pratique pour limiter la perte : si une décision doit survivre à un /clear, elle doit atterrir quelque part de persistant (commit, CLAUDE.md, ou note en clair dans un fichier du projet).

Ce tableau est fait pour être consulté pendant une session qui dérape, quand vous n'avez pas le temps de relire le guide. Il reprend les lignes précédentes dans l'ordre de gravité croissante : les quatre premières se règlent dans la conversation, les quatre suivantes touchent au dépôt Git. Le passage de l'une à l'autre moitié est le moment où vous devez vérifier git status avant d'agir.

SituationGeste immédiat
Claude part sur une mauvaise pisteEsc + prompt de diagnostic
Diff hors périmètre proposéRefuser + recadrage court
Session longue mais encore utile/compact
Contexte irrécupérable, même tâche/clear + prompt structuré
Changement de tâche completQuitter + relancer claude
Fichiers modifiés à tortgit restore <fichier>
Multiples fichiers impactésgit stash puis git restore . + vérif ruff + pytest
Conflit après stash popRésoudre marqueurs + git add + rituel
Décision à préserverLa commit ou l'écrire dans CLAUDE.md

Ces quatre situations ont la même racine : on applique la bonne manœuvre avec une formulation trop vague. Un recadrage poli, un résumé non guidé, un git restore . sans cible, un prompt qui ne dit pas ce qui est interdit produisent tous le même effet, l'agent repart dans la direction qu'il avait déjà prise. La colonne de droite se lit donc comme une consigne de précision, pas comme une commande de plus.

SymptômeCause probableCorrection
Recadrage sans effetFormulation trop longue ou polieRaccourcir, commencer par Stop.
/compact perd le périmètreRésumé trop génériqueAjouter un post-compact rappelant les fichiers cibles
Modifications perdues utilesgit restore . trop largePréférer un git restore <fichier> ciblé ou git stash
Boucle sur la même erreur après /clearMême prompt flouReformuler avec objectif + périmètre + contrainte + validation

Ces cinq points se vérifient en pratiquant, pas en relisant. Rejouez une session sur lab-claude en provoquant volontairement une dérive (demandez une modification hors périmètre, puis interrompez) : si vous enchaînez Esc, recadrage, git restore et validations sans rouvrir cette page, le guide a servi.

  • Je reconnais au moins 3 dérives sans hésiter
  • Je sais quand utiliser Esc, /compact, /clear
  • Je formule un recadrage court commençant par Stop.
  • Je sais annuler une modification ciblée avec Git
  • Je relance ruff + pytest après chaque annulation
  • Une session dérivée n'est pas un échec, c'est un signal à traiter
  • Priorisez : Esc + recadrage > /compact > /clear
  • Git est votre filet de sécurité : utilisez-le avant de reprompter
  • Un bon recadrage est bref, précis et directif

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn