Brahim Bousnguar

Notes · Article

Gardez la session de l’agent à côté du code

Par · · 12 min de lecture

La session de l’agent vaut autant que le diff qu’elle a produit, alors elle doit vivre dans Git, à côté du code. C’est la thèse de Thomas Dohmke, et sa société Entire la construit : un checkpoint qui relie les prompts, les appels d’outils et les approches rejetées d’une session au commit où elle a abouti. La transcription ne prouve pas que le code est juste. C’est la preuve que le diff correspond à ce que vous vouliez.

Thomas a dirigé GitHub comme CEO et dirige maintenant Entire. Il a donné cette conférence le deuxième jour d’AGNTCon + MCPCon North America, le 23 octobre, puis a continué en coulisses. J’ai mergé 830 pull requests sur mes dépôts depuis le 1er octobre. La plupart des sessions qui les ont écrites sont déjà en train de quitter mon disque, alors celle-ci m’a touché.

La file de revue grossit dans deux sens

Il a ouvert sur un aveu que je reconnais. Le matin, il prend une idée, demande à un agent de la planifier et de la construire, revient sur du code qui marche, ouvre une pull request en bon coéquipier, et se rend compte qu’il n’a aucune idée de ce que fait tout ce code.

Les slides y mettent des chiffres. Un graphique de The Pragmatic Engineer : les équipes qui utilisent des agents de code atteignent 57 pull requests par semaine, contre environ 10 pour les équipes classiques. Un graphique de Cursor : ces pull requests deviennent aussi beaucoup plus grosses. La file grossit donc dans deux sens à la fois, plus de changements et plus de code dans chaque changement.

Une pull request arrive toujours avec la même attente : quelqu’un va la lire et la comprendre. Quelque chose doit céder, et sa slide suivante montrait quoi : de plus en plus de changements écrits par l’IA acceptés sans revue humaine.

Il l’a fait lui-même. On est vendredi, 16 ou 17 heures, l’agent dit que tout marche, la CI est verte et le diff ne dit pas ce qui aurait pu mal tourner. Il vous reste trois pull requests. Les approuver, les laisser attendre lundi, ou merger en mode YOLO.

Pull requests par semaine

Équipes avec agents de code57

Équipes classiques~10

Et chacuneplus grosse qu’avant, d’après Cursor

  1. 1ApprouverL’agent dit que tout marche, et la CI est verte.
  2. 2AttendreLes laisser jusqu’à lundi.
  3. 3YOLOMerger, en espérant que le diff ne cachait rien.

Ce qui cèdeDe plus en plus de changements de l’IA acceptés sans revue humaine.

Les barres sont à l’échelle, d’après sa slide de The Pragmatic Engineer. La slide de Cursor montrait une tendance, pas un chiffre, donc pas de barre pour elle.

La boucle était construite autour d’une personne

Sa phrase la plus piquante : le cycle de vie du développement logiciel, tel qu’on le connaît, est mort.

Vous avez déjà vu le symbole infini. Écrire, compiler et tester, c’est la boucle intérieure. Intégrer, publier, déployer et observer, c’est la boucle extérieure. Pendant vingt ans, DevOps et l’agilité ont rendu ces boucles plus rapides et les lots plus petits, et ça marchait parce qu’un développeur portait le contexte, l’intention et l’idée tout autour du cercle.

Maintenant, c’est un agent qui roule sur ces rails, et nous, à chaque gare, on lui donne une nouvelle direction. Le travail continue d’avancer. La question, c’est de savoir si l’intention du départ voyage avec lui.

En coulisses, il a inversé l’ancien objectif. On rendait les boucles plus petites pour qu’une personne puisse suivre. Maintenant, il faut les rendre plus grandes, pour que les agents continuent de travailler pendant qu’il est sur la scène d’une keynote, en rendez-vous client ou endormi, et construisent quand même ce qu’on voulait sans gaspiller de tokens. Son moment le plus frustrant : ouvrir l’appli Codex sur son téléphone le matin et découvrir qu’un run s’est arrêté cinq minutes après qu’il est allé se coucher.

Le coût joue aussi dans l’autre sens. Il a dit à des étudiants, lors d’un hackathon, que ce n’est pas un exploit de gagner un prix de 10 000 dollars si on y a dépensé 50 000 dollars en tokens.

Boucle intérieureÉcrire, compiler, tester

Boucle extérieureIntégrer, publier, déployer, observer

Sa phraseLe cycle de vie du développement logiciel, tel qu’on le connaît, est mort.

La boucle infinie de sa slide, redessinée. Le carré jaune, c’est celui qui conduit : avant, c’était vous.

Le dépôt montre ce qui a changé, jamais pourquoi

Slide suivante : la page d’accueil qu’a chaque dépôt GitHub. Des dossiers et des fichiers, un README quelque part en bas, quelques métadonnées sur le côté. On pouvait lire le code et reconstituer le raisonnement à partir des issues, des pull requests et des messages de commit.

Plus souvent qu’on ne veut l’admettre, a-t-il dit, on allait sur Slack, sur Discord ou sur un canal IRC demander à la personne qui avait écrit cette ligne ce qu’elle voulait dire. Le dépôt montrait ce qui avait changé. Le pourquoi n’est jamais venu avec.

Puis la dernière interface qu’on partageait tous s’est tue. Il a montré un titre de Cursor du 5 avril 2026 : l’éditeur est devenu la solution de repli. Il l’ouvre encore pour vérifier un fichier qu’un agent a écrit. Ses interfaces standard, maintenant, ce sont Claude Code dans un terminal, Codex dans une appli Mac, ou un environnement tmux qu’un développeur a fait sien.

C’est là que la réflexion se passe désormais. La session garde l’approche que vous avez rejetée, et le moment où vous avez dit à l’agent « c’est correct, mais ce n’est pas ce que je voulais ». Quand la session se termine, cet apprentissage compte encore. Dans trois ans, c’est le seul moyen de remonter le temps et de voir ce que vous vouliez vraiment.

La page du dépôt

Ce qui a changé

Dossiers et fichiers

Un README en bas

Commits, issues, pull requests

Le pourquoi : sur Slack, Discord ou IRC

vs

La session de l’agent

Pourquoi ça a changé

Les prompts et le plan

Chaque appel d’outil

L’approche rejetée

« Correct, mais pas ce que je voulais »

5 avril 2026Cursor : l’éditeur est devenu la solution de repli.

La ligne barrée, c’est la partie qui n’est jamais arrivée dans le dépôt.

Un checkpoint relie la session au commit

Voici le mécanisme. Sur sa slide, le journal de session est à gauche : les appels d’outils, les réponses du modèle, ce qu’il voulait. Le commit Git est à droite, avec son diff et son SHA. Au milieu, il y a ce qu’Entire appelle un checkpoint, qui relie les deux dans Git.

Git, parce que c’est le système open source qu’on utilise depuis plus de vingt ans, donc les journaux de session y ont leur place en tant qu’objets Git. Ça veut dire aussi que ses coéquipiers peuvent lire ses sessions, et quiconque rejoindra l’équipe dans trois ans aussi.

La CLI d’Entire, open source, est sous licence MIT et écrite en Go. D’après son README et sa doc, elle fonctionne ainsi :

entire enable --agent claude-code   # installe les hooks de l'agent et les hooks Git du dépôt
git commit -m "..."                 # le hook demande : relier ce commit au contexte de session ?
entire checkpoint explain <id>      # le prompt, la transcription et les fichiers derrière un commit
entire session resume <branch>      # reprendre les sessions dans votre agent
  • Les hooks de l’agent capturent la session pendant que vous travaillez : prompts, transcription, activité des outils, fichiers modifiés et consommation de tokens quand elle est disponible.
  • Un checkpoint a besoin à la fois du contexte capturé et d’un commit. Les hooks Git ajoutent un trailer Entire-Checkpoint au message de commit, et c’est ça, le lien.
  • Le checkpoint est stocké dans sa propre ref, sous refs/entire/checkpoints/, pas comme un commit sur votre branche. Votre branche reste propre.
  • Une session peut produire plusieurs checkpoints, et un checkpoint peut réunir plusieurs sessions.

Elle prend en charge Claude Code, Codex, Cursor, Copilot CLI, OpenCode et quelques autres. Par-dessus, il y a la plateforme hébergée d’Entire, où un Trail regroupe le résultat voulu, les changements sur plusieurs dépôts, les sessions, les retours de revue, les résultats de CI et les approbations humaines, avec des barrières qui disent quand un changement est prêt à être mergé.

Le piège est dans le même README. Par défaut, les checkpoints sont poussés avec votre code, donc un dépôt public expose ses transcriptions. Le masquage des secrets tourne avant l’écriture d’un checkpoint, et ils le qualifient eux-mêmes de « best effort ». Ils suggèrent de prévisualiser avec entire checkpoint list --outgoing, un dépôt de checkpoints privé à part, ou --skip-push-sessions.

  1. 1SessionPrompts, transcription, appels d’outils, fichiers touchés, tokens consommés.
  2. 2CheckpointSa propre ref sous refs/entire/checkpoints/, pas un commit sur votre branche.
  3. 3CommitLe diff, le SHA, et un trailer : Entire-Checkpoint: <id>.

Son proposPas la preuve que le code est correct. La preuve que le diff correspond à l’intention.

Le piègePoussé avec le code par défaut. Un dépôt public expose ses transcriptions.

Sa slide, redessinée, avec les détails de stockage tirés du README et de la doc de la CLI. L’identifiant est schématique.

L’idée de Git, appliquée au serveur

L’autre pression, c’est la charge. Il a montré un graphique des commits de Claude Code à lui seul qui grimpent vite, puis un graphique de GitHub d’août 2026, avec les pull requests, les commits et les dépôts multipliés par dix ou plus.

Si chaque production d’agent attend qu’un humain la relise, c’est nous le goulot d’étranglement. Et si l’infrastructure ne passe pas à l’échelle aussi vite que les agents, c’est elle le suivant.

Sa réponse, c’est l’idée qu’avait Linus en créant Git, poussée un cran plus loin. Git est distribué sur nos portables : chacun a sa propre copie du dépôt. Puis on renvoie tous tout vers un hub central. Selon lui, ça ne passe pas à l’échelle, ce n’est pas résilient, et ça ne vous laisse pas choisir dans quel pays ou quelle région votre code est hébergé.

Il appelle le logiciel le plus grand sport d’équipe de la planète. Des millions de personnes en entreprise, dans l’open source, la recherche, les écoles et les hackathons, qui se moquent du pays où sont les autres et souvent n’utilisent même pas leur vrai nom. Cette communauté mérite une infrastructure décentralisée, open source et indépendante, comme Git et Linux eux-mêmes.

Git aujourd’hui

Un seul hub

Chaque portable a une copie complète

Chaque push va au même endroit

Vous ne choisissez pas la région

vs

Sa demande

Des serveurs distribués aussi

Un hébergement aussi distribué que les clients

Qui suit la production des agents

Vous choisissez le pays et la région

Août 2026GitHub : pull requests, commits et dépôts multipliés par dix ou plus.

Schématique : le nombre de machines et de liens est inventé. Le carré, c’est le hub central.

Un conflit de merge est une question d’intention

En coulisses, l’animateur a ressorti une opinion tranchée que Thomas lui avait donnée plus tôt : les conflits de merge, c’est un problème de compétences. Thomas l’a expliquée.

Les conflits de merge sont devenus faciles. Vous prévenez votre agent, ou vous laissez la CI s’en charger : la PR a un conflit, corrige-le. Les agents sont très bons sur le cas courant, quand quelqu’un a mis à jour main pendant que votre pull request était ouverte et qu’il faut faire un rebase.

L’autre cas, c’est quand deux personnes ont modifié la même chose. Là, la question n’est plus textuelle. Est-ce mon intention ou celle de Stefan qui est la bonne ? Il faut encore une personne pour ça.

Il voit la même chose dans la CI. Plus personne n’écrit les workflows GitHub Actions en YAML à la main, c’est l’agent qui le fait. Puis un run prend une demi-heure, puis une heure, et il faut quand même savoir à quoi ressemble la normale avant de lui demander d’optimiser.

Main a bougé sous ma PR

L’agent fait le rebase

À la demande, ou par la CI

Textuel, pas une décision

vs

On a modifié la même chose

Une personne tranche

Mon intention ou celle de Stefan ?

L’agent a le contexte, pas la décision

Pareil en CIL’agent écrit le YAML. Il faut toujours savoir quelle est la durée normale d’un run.

Ses deux cas, tels qu’il les a racontés. Stefan est son exemple, pas un vrai conflit.

Le code et la prose vont en sens inverse

Les cinq meilleures minutes en coulisses ne parlaient pas de code. Il a dit que quand on laisse l’IA écrire un article de blog, il a l’air génial à la première lecture. À la deuxième, il sonne comme un article de recherche écrit pour un public qui n’est pas celui du blog.

Et on ne s’en sort pas en corrigeant. Ce qu’on lit de l’IA se mêle tellement à ce qu’on a en tête que retoucher les phrases ne le rend pas écrit par un humain. Pour le texte, il faut travailler dans l’autre sens : écrire d’abord le brouillon, puis se servir de l’agent comme d’un relecteur, qui fait des retours mais n’écrit jamais le texte.

Le code est allé dans la direction opposée. L’IA écrit tout et on vérifie. Chez Entire, un de leurs ingénieurs a construit un agent appelé slop cop, qui traque la bouillie dans votre code. C’est une éval sur leur plateforme : orange ou rouge, et vous n’avez pas le droit de merger. Ensuite, vous dites à votre agent de traiter les retours du slop cop et il reconstruit, testé avec les mêmes tests unitaires et d’intégration. Réécrire du code est facile comme ça. Réécrire de la prose, non.

L’animateur a ajouté son conseil préféré : lancer toute skill de revue dans un sous-agent, parce qu’un contexte pollué par l’agent qui a écrit le code ne peut pas le juger. Thomas a mis en garde contre l’excès inverse, des skills de revue qui écrivent des milliers de lignes de tests pour un changement de cinq lignes, sur des minutes de CI que vous payez.

Code

L’agent écrit

1L’agent l’écrit

2Slop cop : orange ou rouge, pas de merge

3L’agent réécrit, mêmes tests

vs

Prose

Vous écrivez

1Vous l’écrivez

2L’agent relit, comme un pair

3Vous réécrivez. Il n’écrit jamais le texte

PourquoiOn ne s’en sort pas en corrigeant un texte d’IA.

Les deux sens, tels qu’il les a décrits en coulisses.

Mes sessions expirent avant mes PR

C’est la partie qui m’a touché. Mon setup : le travail part dans une issue GitHub, un agent construit dans son propre worktree, un modèle d’un autre fournisseur relit le changement, et chaque changement finit en pull request que je merge moi-même. Depuis le 1er octobre, ça fait 830 pull requests mergées sur mes dépôts.

Les pull requests resteront pour toujours. Les sessions derrière elles, non. Sur le Mac mini, en ce moment, il y a 739 fichiers de session Claude Code, 4,7 Go de JSONL, et le plus ancien date du 28 septembre. Ce n’est pas un hasard : Claude Code supprime les transcriptions locales au bout de 30 jours par défaut, via son réglage cleanupPeriodDays. Mi-novembre, le raisonnement derrière chaque PR du début d’octobre aura disparu.

Ce qui survit, c’est ce que j’ai fait écrire aux agents. L’issue dit ce qu’il fallait, le corps de la PR dit ce qui a changé et Closes #N relie les deux, et un fragment de changelog voyage dans la même PR. C’est le pourquoi en quelques lignes. L’approche rejetée et les moments « correct, mais pas ce que je voulais » n’y arrivent pas.

Je n’ai pas encore lancé Entire, et une chose m’arrêterait sur certains dépôts : ce site est public, et les checkpoints sont poussés avec le code par défaut. Pour un dépôt public, je les voudrais dans un dépôt de checkpoints privé, ce que le README suggère déjà.

830pull requests mergées depuis le 1er octobre

739fichiers de session Claude Code sur le mini, 4,7 Go

30 joursavant que Claude Code supprime une transcription, par défaut

Ce qui reste sur le disque

Avant le 28 sept. : suppriméDu 28 sept. au 27 oct. : gardé

Survit dans Git

L’issue : ce qu’il fallait

Le corps de la PR et Closes #N

Un fragment de changelog

vs

Disparaît après 30 jours

L’approche que j’ai rejetée

« Correct, mais pas ce que je voulais »

Chaque appel d’outil entre les deux

Mon setup le jour où j’ai écrit ceci. La frise montre la fenêtre de conservation, pas mon historique de sessions à l’échelle.

À essayer

La keynote dure environ onze minutes, et la partie en coulisses à peu près onze de plus. Regardez le passage « le SDLC est mort », puis lisez la section du README d’Entire sur l’endroit où sont stockés les checkpoints avant de l’activer sur quoi que ce soit de public.

Pour aller plus loin :

Si vous gardez vos sessions d’agent quelque part qui survit à la fenêtre de chat, dites-moi où. J’aimerais savoir si quelqu’un les relit après le merge.

Texte brut: agent-session-next-to-the-code.md · Flux Atom · Toutes les notes

Contact

Écrivez-moi.

b.bousnguar@gmail.com

Intégration SAP Commerce Cloud, MuleSoft et Salesforce · Nantes · FR / EN