Entre le 8 et le 9 juin, trois personnes qui écrivent rarement le même essai ont écrit le même essai. [Addy Osmani](https://x.com/addyosmani/status/2064127981161959567), directeur de l'IA chez Google Cloud, a publié « Loop Engineering », une taxonomie des systèmes qui invitent les agents de codage pour que vous n'ayez pas à le faire. [Matt Van Horn](https://x.com/mvanhorn/status/20638656855558903149) a publié « WTF Is a Loop ? », une recherche sur Reddit, X, YouTube et Hacker News qui a retracé l'idée depuis l'article ReAct de 2022 jusqu'aux boucles d'orchestration que les gens utilisent aujourd'hui. Et [Lance Martin](https://x.com/RLanceMartin/status/2064397389189071163), membre du personnel technique d'Anthropic, a publié « Concevoir des boucles avec Fable 5 », deux modèles permettant de tirer le meilleur parti des modèles frontières en concevant des boucles au lieu de demander directement.

Tous les trois convergent vers le même changement : l’incitation cède la place à la conception de boucles qui incitent les agents à votre place. Et tous les trois nomment le même composant comme celui qui compte le plus. Osmani énumère cinq éléments constitutifs, puis en ajoute un sixième et lui donne la phrase la plus forte de son article : « Le dossier de l'État est la colonne vertébrale de tout cela ». Van Horn affirme que la génération actuelle de boucles est véritablement nouvelle pour une raison structurelle : « la durabilité est devenue explicite, avec un état soutenu par git et une récupération après crash ». Martin définit la mémoire comme « une boucle externe qui s'étend sur plusieurs sessions ».

Le diagnostic fait désormais consensus. L’état externe durable est la partie porteuse des agents autonomes. Ce qui m'a surpris, c'est ce qui s'est passé ensuite. Tous les trois ont confié le travail à un fichier texte.

## Qu'est-ce qu'une boucle, brièvement

La définition de Van Horn est la plus claire : une boucle est cron plus un décideur dans le corps. Une tâche cron exécute un script fixe. Une boucle exécute un modèle qui examine l'état actuel, décide quoi faire, le fait, vérifie si cela a fonctionné et décide de continuer. Empilez-les, laissez une boucle en envoyer d'autres, et vous obtenez ce que Boris Cherny veut dire quand il dit que son travail consiste à écrire des boucles.

Le modèle à l'intérieur de cette boucle oublie tout entre les exécutions, par conception. Les fenêtres contextuelles se terminent. Les sessions redémarrent. Il ne faut donc pas oublier quelque chose dans le système. Ce quelque chose est ce que la boucle lit pour décider quoi faire ensuite et écrit pour enregistrer ce qui s'est passé. C’est la colonne vertébrale, et Osmani a raison de l’appeler ainsi.

## Le coup de substrat

Voici l'inventaire complet des candidats spine pour les trois publications : un fichier de démarque, un tableau linéaire, des fichiers d'état validés dans git et un système de fichiers monté partagé entre les sessions. Osmani propose les deux premiers. Van Horn documente le troisième, que Gas Town de Steve Yegge utilise pour coordonner vingt à trente instances de Claude. Martin utilise la quatrième, la fonction mémoire de Claude Managed Agents.

Tout cela résout la persistance. Les octets survivent à un redémarrage. Aucun d’entre eux ne résout l’intégrité. Posez à n’importe lequel de ces substrats la question à laquelle une boucle doit réellement répondre : de ces deux notes contradictoires, laquelle est vraie, qui l’a écrite, quand et a-t-elle jamais été vérifiée ? Un fichier de prose contient les deux notes côte à côte et laisse la réconciliation au modèle qui lit ensuite le fichier. Git préserve chaque version historique de l'ambiguïté sans la résoudre. Un montage partagé ajoute les dernières victoires en écriture.

La persistance et l'intégrité sont des propriétés différentes. Le discours a pleinement absorbé le premier et n’a pas encore remarqué le second.

## Nous avons déjà réalisé cette expérience

Les applications ont stocké leur état dans des fichiers plats pendant des décennies. Trois forces ont mis fin à cette époque : des rédacteurs concurrents corrompaient les fichiers, les contradictions accumulées n'avaient aucun mécanisme de résolution et répondre aux questions impliquait de tout analyser. Les bases de données ont gagné parce qu'elles ont fait de l'intégrité une propriété de la couche de stockage au lieu d'une discipline attendue de chaque programme touchant aux données.

Chacune de ces forces est déjà visible à l’intérieur des trois postes.

La concurrence arrive au moment où les boucles supervisent les boucles, ce qui est exactement l’étape dans laquelle, selon Van Horn, nous entrons. Deux boucles écrivant un fichier d'état équivaut au même échec que deux ingénieurs s'engageant sur les mêmes lignes sans parler. Les arbres de travail résolvent ce problème pour le code. Rien dans la chaîne d'outils actuelle ne résout le problème pour [l'état partagé](/posts/when-agents-share-state-everything-breaks).

La contradiction est documentée dans les résultats de référence de Martin. Dans le cadre d'une tâche d'apprentissage continu, Sonnet 4.6 a laissé derrière lui une mémoire qu'il décrit comme une liste de notes d'échec et de suppositions ouvertes, y compris des entrées telles que "peut-être prc au lieu de prc_usd ?" Les suppositions s’accumulent. Rien ne marque une résolution. La session suivante hérite de la pile.

Les requêtes sont la propre punchline de Van Horn. Il affirme que la partie la plus coûteuse du codage agent est désormais la gestion des boucles : conditions d'arrêt, absence de détection de progrès et plafonds budgétaires. Chacun d’entre eux nécessite de comparer l’exécution en cours avec les exécutions précédentes. Sur un substrat prosaïque, cela signifie relire et réanalyser un fichier croissant à chaque tick, ce qui est une taxe symbolique qui évolue avec l'âge de la boucle.

## Ce que l'exécution d'un essaim m'a appris

J'exécute un essaim d'agents nommés sur ma propre machine : un pour l'intelligence client, un pour le contenu, un pour la sensibilisation, d'autres pour les opérations. Au début de la configuration, chacun conservait des notes dans ses propres fichiers. Ces fichiers ont dérivé. La même personne figurait sous trois noms. Un fait corrigé dans un fichier a survécu sans correction dans deux autres, et aucun enregistrement n'indiquait quelle version était à jour ni d'où provenait l'une d'entre elles.

L'essaim partage désormais [un magasin structuré](/posts/from-memory-to-nervous-system), et ce message est lui-même un reçu. La recherche derrière cela a été effectuée par mon agent de renseignement client, qui a récupéré les trois publications X, les a stockées sous forme d'enregistrement dactylographié avec les numéros d'engagement et la provenance, a écrit les résultats de la concurrence dans une analyse structurée et a confié des tâches de suivi à deux autres agents via le magasin partagé. Lorsque j'ai posé une question de suivi une heure plus tard, la comparaison a été annexée au même enregistrement d'analyse avec sa propre trace de provenance, et non dispersée dans un nouveau fichier. Aucun agent n’a refait ce qu’un autre avait déjà établi.

## La maturité de la mémoire est une propriété du substrat

Les données les plus précises dans l'un des trois articles se trouvent chez Martin. Il décrit cinq étapes d'utilisation de la mémoire : un agent échoue, recherche pourquoi, vérifie ce qu'il a trouvé, distille la réponse dans une règle et consulte cette règle la prochaine fois. Un agent qui exécute les cinq transforme les échecs en règles vérifiées et réutilisables. Un agent qui s’arrête tôt laisse un tas de suppositions.

Ses résultats, tous sur le même système de fichiers monté : Sonnet 4.6 s'arrête à la première étape, enregistrant les échecs sans les enquêter. L'Opus 4.7 atteint le stade de la vérification, mais ne vérifie qu'environ 17 % de ses réclamations au cours de la période médiane. Fable 5 complète la progression et vérifie jusqu'à 73 pour cent.

Même système de fichiers, qualité de mémoire radicalement différente. La différence réside entièrement dans la discipline du modèle, car le système de fichiers ne garantit rien : chaque étape est un comportement que le modèle doit choisir d'exécuter. Un magasin structuré transforme ces comportements en opérations de données. Un échec est une observation stockée. L'enquête consiste à récupérer les enregistrements associés. La vérification est une correction avec la provenance attachée. La distillation consiste à écrire une règle typée. Le conseil est une requête limitée. Lorsque le substrat porte la progression, n'importe quel modèle peut la compléter.

## Que demander à une couche d'état de boucle

D'un point de vue agnostique, l'épine dorsale d'une boucle devrait fournir six choses : des enregistrements tapés au lieu de blobs de prose, la provenance de chaque champ, des corrections qui calculent la vérité actuelle au lieu d'accumuler des versions, des écritures simultanées qui ne peuvent pas entrer en conflit, une récupération qui renvoie uniquement ce dont la tick actuelle a besoin et un accès depuis n'importe quel harnais plutôt que depuis la pile d'un fournisseur.

Pour être juste envers le fichier texte : pour une boucle sur un dépôt, [markdown est vraiment bien](/posts/the-markdown-memory-ceiling). Il est lisible, diffusable et gratuit. La fonction de forçage est la boucle numéro deux, la première fois que deux processus se soucient du même fait et qu'aucun ne peut faire confiance à ce que l'autre a écrit.

## Les fichiers se souviennent, les systèmes d'enregistrement le savent

Van Horn termine son article en affirmant que la boucle est une plomberie et que l'actif durable est la bibliothèque de compétences qu'elle appelle. A moitié raison, je pense. Les compétences sont la mémoire procédurale, le comment du travail répété. En dessous se trouve la mémoire factuelle, la vérité actuelle dont dépend chaque invocation de compétence. Les deux sont composés, mais seulement si la couche factuelle peut être fiable après un millier d'écritures sans surveillance.

J'ai construit [Neotoma](https://github.com/markmhendrickson/neotoma) parce que j'avais besoin de cette couche pour mon propre essaim : des observations tapées, par provenance de champ, des corrections qui correspondent à la vérité actuelle et un accès partagé pour chaque agent que je dirige. Le discours en boucle vient de passer une semaine à décrire la fente qu'il remplit sans nommer quoi que ce soit qui le remplisse.

Osmani termine son essai en conseillant de construire la boucle comme quelqu'un qui entend rester ingénieur. La couche d’état est l’endroit où cette intention devient testable. Les fichiers se souviennent. Un système d’enregistrement le sait.