J'ai acheté trois fois le même paprika, puis j'ai refait le harness de nos agents comme j'avais refait ma cuisine

Publié le  · Igor Tkachenko

Une cuisine d'appartement européen à l'heure dorée : un fondateur détendu, un verre à la main, regarde travailler trois hiboux OwlMeans en tenue décontractée ; l'un, en casquette plate, scotche une carte plastifiée AGENTS.md à l'intérieur de la porte du placard, un autre range des bocaux étiquetés sur une seule étagère, le troisième arrive avec sa trousse à couteaux ; à l'écart, trois pots de paprika identiques et trois classeurs de recettes fatigués, sous un titre qui dit ONE SHELF / ANY COOK

Pendant à peu près deux ans, ma cuisine a fonctionné avec trois systèmes. Le range-épices livré avec l’appartement, vissé au mur au-dessus des plaques. Le tiroir que j’avais organisé moi-même une fois le range-épices plein. Et une étagère dans le cellier pour tout ce qui ne rentrait ni dans l’un ni dans l’autre.

Il y avait du paprika dans les trois. Je le sais, je l’ai acheté trois fois.

Ce n’est pas un drame ; on s’en accommode. Ce qui m’a achevé, c’est un samedi où un ami a cuisiné chez moi et où j’ai passé toute la soirée planté derrière lui : non, la bonne poêle est sous l’évier, ce sel est gros, mets-en moitié moins, le four chauffe trop. Il cuisine mieux que moi. Simplement, il ne pouvait pas travailler dans ma cuisine sans que j’y sois.

Il y a deux semaines, je me suis rendu compte que nos dépôts en étaient exactement là.

Trois range-épices, une cuisine

OwlMeans Common est la bibliothèque sur laquelle repose chacun de nos projets, et chacun de ces projets, c’est un agent de code qui le construit. Chez nous, un dépôt ne contient donc pas que du code : il contient aussi les consignes que l’agent lit en premier, à savoir comment on range les choses, ce qu’on ne fait jamais, quel script sert à quoi.

On prenait en charge deux agents, Claude Code et GitHub Copilot, et chacun voulait son étagère. Chaque règle s’écrivait donc deux fois : une fois en .claude/skills/<name>/SKILL.md, une fois en .github/instructions/<name>.instructions.md. Deux fichiers de contexte toujours chargés, presque identiques. Deux cartes du dépôt. Le même script shell, identique à l’octet près, dans deux répertoires. Deux dossiers de mémoire qui divergeaient sans bruit.

La facture se lit directement dans l’historique : un commit de cette époque touche douze fichiers de skills et leurs onze jumeaux en miroir. Personne n’a décidé que c’était une bonne idée. Ça s’est accumulé, comme s’accumule un troisième range-épices.

Une étagère, une fiche

Alors j’ai tout arraché. Tout est passé dans un seul dossier, .agents/, qui réunit skills, règles, scripts et mémoire. Et tout ce qu’un agent doit lire avant de commencer tient désormais dans un seul fichier à la racine : AGENTS.md. Dans OwlMeans Common, ça a supprimé deux cent treize fichiers d’instructions en double. CLAUDE.md, qui entassait jusque-là un peu de tout sur quatre-vingt-six lignes, pèse maintenant six cents octets.

Je n’ai pas inventé l’étagère. J’ai pris celle sur laquelle tout le monde s’était déjà mis d’accord, et la manière dont cet accord s’est fait explique pourquoi je lui fais confiance.

En mai 2025, Amp a proposé un fichier unique appelé AGENT.md, au singulier. Puis OpenAI a choisi le pluriel pour Codex, et c’était justement tout l’intérêt du pluriel : plusieurs agents qui partagent un seul fichier. Amp aurait pu se battre pour son nom. À la place, l’équipe a écrit : « plutôt que de nous accrocher à ce qu’on avait trouvé, on a décidé qu’on préférait un standard unique », à condition qu’OpenAI obtienne le domaine agents.md. OpenAI l’a obtenu, et Amp a suivi.

AGENTS.md est passé de vingt mille dépôts en août 2025 à plus de soixante mille aujourd’hui, et en décembre il a été confié à l’Agentic AI Foundation, sous l’égide de la Linux Foundation. Vingt-trois outils le lisent désormais nativement : Codex, Cursor, Copilot, Gemini CLI, Zed, Windsurf, Devin, Jules, Aider.

L’autre moitié de l’étagère est arrivée par l’autre bout. Agent Skills, le format SKILL.md, vient d’Anthropic, qui en a fait une spécification publique en décembre 2025 ; c’est la même fondation qui en a aujourd’hui la charge. Il définit précisément à quoi ressemble le dossier d’une skill et ne dit rien du tout de l’endroit où le mettre. Chaque éditeur a donc choisi son dossier parent. Codex parcourt .agents/skills. Copilot accepte .agents/skills. Le choix était fait pour moi.

L’invité qui apporte ses propres couteaux

Un diorama sombre : un seul placard de cuisine éclairé, avec trois étagères étiquetées SKILLS, MEMORY et RULES et une carte AGENTS.md scotchée à l'intérieur de sa porte ouverte ; devant, trois trousses à couteaux de chef marquées CODEX, COPILOT et CLAUDE, d'où partent des filets de lumière indigo vers le placard, celui de CLAUDE faisant un détour par une petite note épinglée sur la porte ; un hibou observe depuis un coin

Il y a un agent qui ne lit pas la fiche sur la porte.

Claude Code lit CLAUDE.md, et uniquement CLAUDE.md. La demande pour qu’il lise aussi AGENTS.md est ouverte depuis mars (l’issue #34235 du dépôt Claude Code, en tête d’un groupe de tickets qui cumulent des milliers de votes) et elle l’est toujours. C’est un peu drôle, quand on sait que c’est Anthropic qui a écrit le format de skills qui occupe l’autre moitié du dossier.

Le réflexe, c’est de faire une deuxième copie. Tous ceux qui essaient racontent la même fin : deux fichiers modifiés à la main finissent toujours par diverger, et un fichier d’instructions désynchronisé est pire que pas de fichier du tout, parce que l’agent le croit.

Alors on a jeté un pont. CLAUDE.md survit avec six cent dix octets, identique à l’octet près dans chaque dépôt, et sa première ligne est @AGENTS.md. Le reste est une note qui rappelle que les skills vivent dans .agents/skills/ et qu’on ne doit jamais les écrire ailleurs. Un petit script shell génère ensuite un lien symbolique par skill dans un .claude/skills/ ignoré par git, et un hook de session les régénère à chaque démarrage. Un lien par skill, pas par répertoire : Claude Code accepte qu’une skill soit un lien symbolique, pas que le dossier des skills tout entier en soit un. Le genre de chose qu’on n’apprend qu’en essayant.

Des recettes de ma main

Le deuxième changement compte plus que le dossier.

Le livre de cuisine dit vingt-cinq minutes à cent quatre-vingts degrés. La fiche dans mon placard dit vingt-deux minutes, au fond à gauche, ce four chauffe trop. Les deux ont raison ; une seule parle de ma cuisine.

Les projets OwlMeans n’installent pas de skills génériques : chacun fait pousser les siennes. Le dépôt de notre plateforme en compte dix-neuf, celui de l’agent, juste à côté, vingt-trois, et là où les noms se recoupent, les contenus diffèrent : execution désigne l’abstraction dans l’un et, dans l’autre, la façon dont la plateforme s’en sert. Ce n’est pas de la duplication. Ce sont deux cuisines différentes.

Le problème d’une fiche scotchée sur une porte, c’est que les fours changent. Le harness referme donc désormais la boucle. Approuver un plan, c’est aussi approuver la relecture qui le suit : une fois le travail livré, l’agent repasse sur les skills que ce travail a touchées, réécrit celles qui ne sont plus vraies. Le rapport de fin doit ensuite contenir un tableau : ce qu’il a mis à jour, ce qu’il a créé, ce qui n’avait besoin de rien, raison à l’appui. Un rapport sans ce tableau compte comme inachevé.

Encore une règle, qui me plaît plus que je ne l’aurais cru : une skill énonce les règles en vigueur, jamais ce qui a changé. Pas de bulletins datés, pas d’anciennement X, désormais Y. Le test : une skill terminée doit se lire comme si la fonctionnalité avait toujours été ainsi.

Ranger par plat, pas par date d’achat

Le troisième changement est celui auquel je renoncerais en dernier.

Les agents tiennent désormais une mémoire, et, livrés à eux-mêmes, ils la tiennent comme un journal intime. Les nôtres le faisaient : des fichiers nommés d’après des événements, comme slot-status-reconciler.md ou null-error-investigation.md, qui commençaient chacun par ce qu’on faisait cette semaine-là. C’est un carnet de courses. Il note parfaitement quand tu as acheté quelque chose, mais ne dit rien de ce qu’il faut pour le plat de ce soir.

Alors on a rangé les étagères par plat. Un nœud de mémoire porte désormais le nom d’une vraie partie du projet (un sous-système, une question transversale comme le routage ou les traductions, un service externe, ou l’espace de travail lui-même), jamais celui d’un événement, d’une date ou d’une tâche. Son contenu se répartit entre ce qui est vrai, ce qui doit tenir, ce qui peut te mordre et où regarder. Les dates n’ont droit de cité que dans une seule section, réservée au travail encore en cours.

C’est l’index qui fait le vrai travail. Cinquante lignes au maximum, une par nœud, chacune avec les chemins que ce nœud couvre. Un agent le lit en début de session, et rien d’autre ; quand une tâche arrive, il compare les chemins de la tâche à ces lignes et ouvre le ou les deux nœuds qui correspondent. Il ne lit jamais toute la mémoire.

Et chaque écriture est une fusion. Quand quelque chose change, on réécrit la ligne sur place ; on n’ajoute jamais en dessous une correction datée, sinon le fichier redevient discrètement un journal. Le dépôt de notre plateforme est passé de vingt fichiers chronologiques à onze nœuds structurels, et chercher quelque chose a cessé de ressembler à des fouilles archéologiques.

Tu peux simplement l’avoir

Avec un peu de recul, rien de tout ça n’est exotique. Un dossier au lieu de trois. Une fiche sur la porte qui explique comment marche la maison. Des recettes de ta main, tenues à jour. Des étagères rangées selon ce que tu cuisines vraiment.

Ça m’a quand même coûté deux semaines, et l’essentiel est parti dans des choses qu’on ne trouve pas en cherchant : que le standard existe et lequel l’a emporté, qu’un dossier de skills en lien symbolique échoue là où des liens par skill fonctionnent, que la mémoire organisée autour des événements pourrit alors que celle organisée autour de la structure tient.

Voici donc mon argument, en toute franchise.

Si tu construis quoi que ce soit de sérieux avec un agent de code, tu vas tomber là-dessus. Tu ajouteras un deuxième agent et tu te mettras à tout écrire en double. Tu verras grossir un dossier de mémoire qui se lit comme un journal que personne n’a envie d’ouvrir. Tu peux faire comme moi et y laisser deux semaines. Pour moi, ça valait le coup : c’est mon métier.

Ce n’est pas le tien.

C’est exactement ce que livre OwlMeans. Chaque projet que construit la plateforme sort avec le harness déjà en place (.agents/, AGENTS.md, des skills taillées pour ce projet, un graphe de mémoire qui épouse la forme de son code), et OwlMeans Services adapte la même chose à une base de code que tu as déjà. Tout t’appartient. Pas d’enfermement chez un fournisseur, pas d’agent maison : Codex, Copilot, Claude Code, et ce qui sortira le trimestre prochain, tous lisent la même étagère.

N’importe quel cuisinier, n’importe quelle cuisine. Épargne-toi mes deux semaines : tu peux simplement l’avoir.


OwlMeans construit du SaaS TypeScript full-stack à partir de tes user stories : typé, prêt pour le SSO et que tu continues à faire évoluer avec l’agent de ton choix. Découvre ce qu’il sait faire →