Aller au contenu
Mastering Claude

Accueil / Gestes courants

Gestes courants11 minApplication

Pièges d'écriture : fichiers, edits parallèles et livrables perdus

Un rapport de succès écrit par un sous-agent ne prouve rien sur l'état réel des fichiers, puisqu'il démarre dans un contexte isolé sans accès à ce que l'agent principal a déjà lu ou écrit, et la seule preuve fiable reste un diff vérifié après coup, pas le texte du rapport.

Un sous-agent démarre avec un contexte isolé et neuf à chaque appel, sauf pour un fork, qui hérite au contraire de toute la conversation en cours. Il ne voit ni l'historique de la conversation principale, ni les skills déjà invoquées, ni les fichiers que l'agent principal a déjà lus. Cette isolation ne l'empêche pas de consulter lui même le disque : il dispose des mêmes outils de lecture et d'exécution que la conversation principale, et peut très bien lancer un git diff ou relire un fichier pour vérifier son propre travail. Ce qui manque, c'est un regard extérieur : un rapport de succès reste un texte produit par le même agent qui vient d'agir, jamais une vérification indépendante, et rien ne garantit qu'il corresponde à une écriture réelle sur le disque tant que personne d'autre ne l'a contrôlé.

Le rapport de texte n'est pas la preuve

La bonne pratique documentée consiste à demander un diff vérifiable plutôt que de faire confiance au texte du rapport. Un diff montre les lignes réellement changées dans un fichier réel, un rapport de succès n'est qu'une phrase générée par le même agent qui affirme avoir réussi.

mkdir -p /tmp/demo-diff
echo "version initiale" > /tmp/demo-diff/avant.txt
echo "version modifiee" > /tmp/demo-diff/apres.txt
diff /tmp/demo-diff/avant.txt /tmp/demo-diff/apres.txt
# resultat : la ligne modifiee apparait, la preuve est dans le diff, pas dans une phrase

Un rapport en texte affirmant qu'apres.txt a été mis à jour n'apporte rien de plus que ce diff, et sans lui, rien ne distingue une écriture réelle d'une phrase inventée. Un script en une seule ligne qui contient des guillemets inversés se heurte à un piège voisin : le shell qui l'exécute peut les interpréter avant que la commande n'atteigne sa cible, et ce qui s'affiche ensuite ressemble à un succès alors que la commande réellement lancée était tronquée. Relire la commande telle qu'elle a été reçue par le shell, pas seulement telle qu'elle a été tapée, répond au même besoin de preuve que le diff.

Deux écritures sur le même fichier ne sont jamais indépendantes

Deux modifications envoyées ensemble sur le même fichier, que ce soit par deux sous-agents ou par deux appels de l'outil d'édition dans le même tour, s'appliquent l'une après l'autre sur le contenu que l'outil trouve au moment où il agit, jamais sur deux copies séparées fusionnées ensuite. La seconde modification peut donc échouer à trouver le texte qu'elle cherchait, parce que la première l'a déjà changé. Envoyer les deux modifications en séquence, en relisant le fichier entre les deux, réduit ce risque et rend chaque étape vérifiable pour elle même.

Le même principe de preuve vérifiable s'applique à un livrable long : un contenu de plusieurs paragraphes qui n'existe que dans la réponse affichée disparait avec elle dès que la conversation continue. L'écrire dans un fichier réel avant de l'afficher, comme pour une sortie structurée en mode headless, garantit qu'il reste consultable indépendamment du fil de conversation, exactement comme un diff reste lisible indépendamment du rapport qui l'accompagne.

Figure 1

Rapport de succès contre preuve vérifiable

Preuve qu'une écriture a réellement eu lieuCe qui la produitCe qu'elle montreComment la vérifier
Rapport de succès en texteGénérée par le même agent qui affirme avoir réussiUne phrase affirmant que le fichier a été mis à jourRien à vérifier, la phrase se prend elle même pour preuve
Diff du fichier réelProduit par une commande qui lit le contenu du fichier sur le disqueLes lignes exactes qui ont changé, ou aucune ligne si rien n'a changéSe relit indépendamment de ce que l'agent affirme
La comparaison croise trois critères, ce qui produit chaque preuve, ce qu'elle montre et comment la vérifier, entre un rapport de succès en texte et un diff du fichier réel.
Calibrez vous-même

Un développeur demande à un sous-agent d'ajouter une ligne de configuration dans un fichier, reçoit une réponse annonçant que la modification est faite, puis ouvre lui même le fichier sur le disque et lit son contenu.

Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.

Ce qu’il faut retenir
  • Un sous-agent démarre avec un contexte isolé, sans accès à l'historique de la conversation principale, aux skills déjà invoquées ni aux fichiers déjà lus par l'agent principal.
  • Un sous-agent peut lire le disque comme la conversation principale, mais son rapport reste un texte produit par le même agent qui a agi, jamais une vérification indépendante, d'où le risque qu'il ne corresponde à aucune écriture réelle.
  • Un diff des lignes réellement changées constitue une preuve vérifiable, un rapport en texte affirmant un succès n'en est pas une.
  • Deux modifications envoyées ensemble sur le même fichier s'appliquent l'une après l'autre sur le contenu trouvé au moment de l'action, jamais sur deux copies fusionnées ensuite.
  • Un livrable long écrit uniquement dans la réponse affichée disparait avec elle, l'écrire dans un fichier réel le rend consultable indépendamment du fil de conversation.
À faire maintenant

Ouvrez un fichier que vous avez récemment demandé à un sous-agent ou à un outil d'écrire, lancez un diff ou une relecture directe de son contenu sur le disque, et confirmez que ce que vous y trouvez correspond exactement au rapport de succès reçu.

Vérifier à la source

Chaque affirmation datable de cette leçon renvoie ici au texte public qui la porte. Une source qui ne s’ouvre pas ne prouve rien.