<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mémoire | Antoine Weill--Duflos</title>
    <link>https://antoine.weill-duflos.fr/fr/tag/m%C3%A9moire/</link>
      <atom:link href="https://antoine.weill-duflos.fr/fr/tag/m%C3%A9moire/index.xml" rel="self" type="application/rss+xml" />
    <description>Mémoire</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-fr</language><lastBuildDate>Fri, 05 Jun 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://antoine.weill-duflos.fr/media/icon_hu_d686267daab28486.png</url>
      <title>Mémoire</title>
      <link>https://antoine.weill-duflos.fr/fr/tag/m%C3%A9moire/</link>
    </image>
    
    <item>
      <title>Le moteur de mémoire : chaleur, déclin et rêves</title>
      <link>https://antoine.weill-duflos.fr/fr/post/cortexmd-memory-engine/</link>
      <pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/post/cortexmd-memory-engine/</guid>
      <description>&lt;p&gt;Dans la &lt;a href=&#34;../cortexmd-second-brain/&#34;&gt;première partie&lt;/a&gt; j&amp;rsquo;ai décrit deux problèmes qui revenaient sans cesse me mordre quand je travaillais avec des agents IA. Le premier, c&amp;rsquo;est qu&amp;rsquo;ils oublient tout entre les sessions. Le second, c&amp;rsquo;est qu&amp;rsquo;ils brûlent des tokens à relire du code qu&amp;rsquo;ils ont déjà vu. Ce billet porte sur le premier problème, et sur la partie de cortexmd à laquelle je tiens le plus : le moteur de mémoire. L&amp;rsquo;approche d&amp;rsquo;ensemble est inspirée de &lt;a href=&#34;https://github.com/mempalace/mempalace&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mempalace&lt;/a&gt;, un projet de palais de mémoire pour agents IA ; ce qui suit, c&amp;rsquo;est la façon dont cortexmd en construit sa propre version.&lt;/p&gt;
&lt;p&gt;La solution naïve à l&amp;rsquo;oubli, c&amp;rsquo;est de tout déverser dans le contexte. Garder un gros fichier de notes, le coller au début de chaque session et espérer que l&amp;rsquo;agent le lise. J&amp;rsquo;ai essayé des variantes de ça, et ça s&amp;rsquo;effondre vite. Le fichier grossit sans limite. Des faits anciens et périmés voisinent avec la seule chose qui compte vraiment aujourd&amp;rsquo;hui, sur un pied d&amp;rsquo;égalité. Vous payez pour toute la pile à chaque tour, et le signal qui vous intéresse se retrouve enseveli sous du bruit dont vous avez cessé de vous soucier depuis longtemps. Une mémoire humaine ne fonctionne pas comme ça, et elle ne le devrait pas. L&amp;rsquo;objectif de conception était donc simple à énoncer mais plus difficile à construire : l&amp;rsquo;agent devrait se souvenir comme le fait une personne, où ce que vous utilisez reste vif et ce que vous cessez de toucher s&amp;rsquo;estompe.&lt;/p&gt;
&lt;h2 id=&#34;huit-sortes-de-mémoire&#34;&gt;Huit sortes de mémoire&lt;/h2&gt;
&lt;p&gt;Quand un agent stocke quelque chose, cortexmd ne le traite pas comme un bloc de texte indifférencié. Chaque souvenir est auto-catégorisé dans l&amp;rsquo;une de huit sortes : observation, décision, idée, conversation, fait, préférence, plan et réflexion. La distinction compte parce que ces choses se comportent différemment dans le temps et veulent être retrouvées différemment. Une préférence (je veux toujours l&amp;rsquo;orthographe britannique, je déteste les tirets cadratins) est un fait durable sur ma façon de travailler, et elle devrait continuer à remonter. Un fragment de conversation est contextuel et surtout utile peu après qu&amp;rsquo;il s&amp;rsquo;est produit. Une décision est quelque chose que vous voulez pouvoir retrouver des mois plus tard quand vous vous demandez pourquoi diable vous avez fait ça. Étiqueter la sorte dès le départ donne au reste du système quelque chose à partir de quoi raisonner, au lieu de forcer chaque étape ultérieure à deviner à partir du texte brut.&lt;/p&gt;
&lt;h2 id=&#34;chaleur--chaud-tiède-froid&#34;&gt;Chaleur : chaud, tiède, froid&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;idée centrale est que chaque souvenir a une température, et que la température décline. Un souvenir frais ou récemment utilisé est chaud. Laissez-le intact et il refroidit vers tiède, puis après environ un mois d&amp;rsquo;inactivité il dérive vers froid, et les souvenirs plus froids finissent par être archivés plutôt que gardés au premier plan de l&amp;rsquo;esprit de l&amp;rsquo;agent.&lt;/p&gt;
&lt;p&gt;Le détail crucial, c&amp;rsquo;est la promotion à l&amp;rsquo;accès : lire un souvenir le réchauffe. C&amp;rsquo;est toute l&amp;rsquo;astuce. Vous n&amp;rsquo;avez pas à curer manuellement ce qui est important. L&amp;rsquo;importance se révèle par l&amp;rsquo;usage. Les souvenirs vers lesquels vous et l&amp;rsquo;agent revenez sans cesse restent chauds précisément parce que vous revenez sans cesse vers eux, et ceux que vous ne touchez jamais coulent d&amp;rsquo;eux-mêmes. C&amp;rsquo;est le même instinct qu&amp;rsquo;un cache de type least-recently-used, sauf que ce qui est mis en cache, c&amp;rsquo;est le sens qu&amp;rsquo;a l&amp;rsquo;agent de ce qui compte en ce moment, et l&amp;rsquo;éviction est gracieuse : froid puis archivé, pas supprimé.&lt;/p&gt;
&lt;p&gt;Pourquoi se donner tout ce mal au lieu d&amp;rsquo;un seul stock plat ? Parce que la température donne au rappel un a priori. Quand l&amp;rsquo;agent part chercher quelque chose, il ne fait pas face à une mer plate de notes également plausibles. Il a un sens intégré de ce qui a été actif récemment, et ce signal ne coûte rien de plus à maintenir parce qu&amp;rsquo;il découle de l&amp;rsquo;usage normal.&lt;/p&gt;
&lt;h2 id=&#34;consolidation--ranger-le-tiroir-des-froids&#34;&gt;Consolidation : ranger le tiroir des froids&lt;/h2&gt;
&lt;p&gt;Laisser les souvenirs refroidir n&amp;rsquo;est que la moitié de l&amp;rsquo;histoire. Si vous laissez simplement les souvenirs froids s&amp;rsquo;empiler, vous vous retrouvez avec un tiroir plein de bouts quasi dupliqués : cinq notes légèrement différentes sur la même tâche terminée depuis longtemps, chacune un peu périmée, aucune ne valant la peine d&amp;rsquo;être lue seule. Alors cortexmd consolide. Les souvenirs froids apparentés sont repliés ensemble en résumés, de sorte que l&amp;rsquo;essentiel survive en un endroit cohérent tandis que les fragments redondants cessent d&amp;rsquo;encombrer. Le détail n&amp;rsquo;est pas jeté à la légère, il est compressé en quelque chose que vous voudriez réellement lire plus tard. Le refroidissement décide de ce qui n&amp;rsquo;est plus urgent ; la consolidation décide quoi en faire.&lt;/p&gt;
&lt;h2 id=&#34;rappel-hybride&#34;&gt;Rappel hybride&lt;/h2&gt;
&lt;p&gt;Bien stocker la mémoire ne sert à rien si vous ne pouvez pas la récupérer. Le rappel dans cortexmd est hybride. Il lance une recherche lexicale en texte intégral (la correspondance par mots-clés, bonne pour les termes et noms exacts) et la fusionne avec une recherche sémantique sur des embeddings (la correspondance par le sens, bonne quand vous vous souvenez de l&amp;rsquo;idée mais pas des mots). Le lexical seul rate tout ce qui est formulé autrement que votre requête. Le sémantique seul peut dériver vers des choses vaguement dans le sujet mais pas ce que vous vouliez dire. Fusionner les deux compense les faiblesses de chacun.&lt;/p&gt;
&lt;p&gt;Par-dessus le score fusionné, le classement est rehaussé par trois choses : la température (les souvenirs plus chauds remontent, parce que la récence d&amp;rsquo;usage est un signal), l&amp;rsquo;importance (certains souvenirs sont simplement plus lourds) et les liens (un souvenir connecté à d&amp;rsquo;autres souvenirs pertinents est plus susceptible d&amp;rsquo;être celui que vous voulez). Le résultat est un classement qui reflète non seulement la similarité textuelle mais aussi à quel point un souvenir est actif et connecté. C&amp;rsquo;est bien plus proche de la façon dont vous vous rappelez réellement les choses qu&amp;rsquo;un simple score de similarité.&lt;/p&gt;
&lt;h2 id=&#34;le-réveil&#34;&gt;Le réveil&lt;/h2&gt;
&lt;p&gt;Tout cela se rejoint au début d&amp;rsquo;une session dans ce que j&amp;rsquo;appelle le réveil. Au lieu de commencer chaque conversation comme une page blanche, l&amp;rsquo;agent effectue un réveil de la mémoire qui fait remonter les souvenirs les plus chauds et les plus pertinents. C&amp;rsquo;est la différence entre un collègue qui entre en sachant déjà où vous en êtes restés hier et un que vous devez briefer de zéro chaque matin. Le réveil s&amp;rsquo;appuie sur tout ce qui précède : le modèle de chaleur décide ce qui est actif en ce moment, le rappel hybride décide ce qui est pertinent, et l&amp;rsquo;agent commence la session déjà orienté. C&amp;rsquo;est le moment où tout le moteur justifie son existence, parce que c&amp;rsquo;est le moment où vous sentez l&amp;rsquo;agent se souvenir de vous.&lt;/p&gt;
&lt;h2 id=&#34;la-phase-smarter-brain--liens-et-rêves&#34;&gt;La phase smarter-brain : liens et rêves&lt;/h2&gt;
&lt;p&gt;Les pièces ci-dessus formaient le cœur du système de mémoire v2.0. Une phase ultérieure, que je vois comme le travail smarter-brain, a ajouté quelques choses qui font que le cerveau ressemble moins à une base de données et davantage à quelque chose qui réfléchit pendant que vous êtes absent.&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-longlet-intelligence-du-tableau-de-bord--santé-du-coffre-insights-de-rêve-grappes-thématiques-et-compteurs-dentités-et-du-graphe-de-connaissances-données-de-démonstration-issues-du-coffre-dexemple-seedé-du-projet&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;https://antoine.weill-duflos.fr/img/cortexmd/intelligence.png&#34; alt=&#34;L&amp;rsquo;onglet Intelligence du tableau de bord cortexmd, montrant un score de santé du coffre, des insights de rêve, des grappes thématiques et des compteurs du graphe de connaissances&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      L&amp;rsquo;onglet Intelligence du tableau de bord : santé du coffre, insights de rêve, grappes thématiques, et compteurs d&amp;rsquo;entités et du graphe de connaissances. Données de démonstration issues du coffre d&amp;rsquo;exemple seedé du projet.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;La première, ce sont les liens automatiques du graphe de connaissances. À mesure que les données sont stockées, cortexmd trace de lui-même des liens entre les notes apparentées, au lieu d&amp;rsquo;attendre que je les câble à la main. Le lien manuel est exactement le genre de tâche administrative qui semble sympa et n&amp;rsquo;arrive jamais vraiment, donc avoir les connexions qui se forment automatiquement comme effet secondaire du stockage signifie que le signal de liens dans le rappel ne cesse de s&amp;rsquo;enrichir sans aucun effort de ma part.&lt;/p&gt;
&lt;p&gt;La deuxième, c&amp;rsquo;est le rêve. cortexmd lance une passe de consolidation planifiée, sur un calendrier calme, que j&amp;rsquo;ai nommée le rêve à cause de ce qu&amp;rsquo;elle fait et du moment où elle le fait. Elle réconcilie les notes similaires, avec une attention particulière aux plus anciennes, celles qui ont refroidi, et les replie dans des notes de projet. C&amp;rsquo;est le jardinier d&amp;rsquo;arrière-plan du cerveau : pendant qu&amp;rsquo;il ne se passe rien, il parcourt les coins refroidis, remarque que ces trois pensées à moitié finies ne sont en réalité qu&amp;rsquo;une seule chose, et les range en une note de projet cohérente. Vous réveillez l&amp;rsquo;agent le lendemain et le cerveau est un peu mieux organisé que vous ne l&amp;rsquo;aviez laissé, sans que vous n&amp;rsquo;ayez rien fait.&lt;/p&gt;
&lt;p&gt;La troisième, c&amp;rsquo;est quelque chose que j&amp;rsquo;ai emprunté tel quel à Obsidian : une vue graphe du coffre, rendue sur un canvas dans le tableau de bord web. Parce que le graphe de connaissances est réel, vous pouvez le regarder. Voir le cerveau comme une constellation de notes liées, avec les grappes denses et les orphelins solitaires étalés devant vous, rend le tout concret d&amp;rsquo;une manière qu&amp;rsquo;une liste de lignes ne fait jamais.&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-la-vue-graphe-du-coffre-dans-le-tableau-de-bord-chaque-point-est-une-note-chaque-trait-un-lien-cest-le-coffre-de-démonstration-autonome-du-projet--les-noms-de-notes-sont-des-données-dexemple-seedées-pas-mes-propres-notes&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;https://antoine.weill-duflos.fr/img/cortexmd/graph.png&#34; alt=&#34;Le graphe du coffre cortexmd : des notes dessinées en nœuds sur un canvas sombre, reliées par des liens, avec une barre de recherche et un compteur de nœuds en bas&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      La vue graphe du coffre dans le tableau de bord. Chaque point est une note, chaque trait un lien. C&amp;rsquo;est le coffre de démonstration autonome du projet : les noms de notes sont des données d&amp;rsquo;exemple seedées, pas mes propres notes.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-cliquez-sur-un-nœud-et-la-note-souvre-dans-le-panneau-latéral-avec-ses-liens-mêmes-données-de-démonstration-seedées&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;https://antoine.weill-duflos.fr/img/cortexmd/graph-selected.png&#34; alt=&#34;Le même graphe avec un nœud sélectionné, montrant le contenu de la note et ses liens dans un panneau latéral&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Cliquez sur un nœud et la note s&amp;rsquo;ouvre dans le panneau latéral avec ses liens. Mêmes données de démonstration seedées.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;pourquoi-un-modèle-de-chaleur-lemporte&#34;&gt;Pourquoi un modèle de chaleur l&amp;rsquo;emporte&lt;/h2&gt;
&lt;p&gt;Pour rassembler le tout : la raison pour laquelle un modèle de chaleur bat le fait de tout déverser dans le contexte, c&amp;rsquo;est que l&amp;rsquo;attention est la ressource rare, pour un agent exactement comme pour une personne. Un stock plat traite une note d&amp;rsquo;il y a huit mois et une décision de ce matin comme des égaux, vous fait payer pour les deux à chaque tour, et force l&amp;rsquo;agent à redécouvrir ce qui compte à chaque fois. Le modèle de chaleur encode ce qui compte comme une propriété des données elles-mêmes, le tient à jour gratuitement par l&amp;rsquo;usage ordinaire, compresse ce qui a refroidi au lieu de l&amp;rsquo;accumuler, et fait remonter la tranche active et pertinente au réveil. L&amp;rsquo;agent porte moins, et ce qu&amp;rsquo;il porte, c&amp;rsquo;est ce qu&amp;rsquo;il faut.&lt;/p&gt;
&lt;p&gt;Voilà pour l&amp;rsquo;oubli. L&amp;rsquo;autre moitié du problème d&amp;rsquo;origine, l&amp;rsquo;agent qui brûle des tokens à relire du code qu&amp;rsquo;il a déjà vu, demande un mécanisme complètement différent. C&amp;rsquo;est un indexeur Rust et une base de données de symboles, et c&amp;rsquo;est le sujet de la &lt;a href=&#34;../cortexmd-token-killer/&#34;&gt;troisième partie : le tueur de tokens&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;cortexmd est en pré-alpha et sous licence MIT. Le code, y compris le moteur de mémoire décrit ici, vit sur la &lt;a href=&#34;../../project/cortexmd/&#34;&gt;page du projet&lt;/a&gt; et sur GitHub à &lt;a href=&#34;https://github.com/Leicas/cortexmd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;github.com/Leicas/cortexmd&lt;/a&gt;. Les noms et la configuration sont encore mouvants, alors traitez les détails comme un instantané plutôt que comme un contrat.&lt;/p&gt;
&lt;h2 id=&#34;série&#34;&gt;Série&lt;/h2&gt;
&lt;p&gt;Ceci est la deuxième partie d&amp;rsquo;une série de quatre billets sur cortexmd :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-second-brain/&#34;&gt;Donner un second cerveau à un agent IA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Le moteur de mémoire : chaleur, déclin et rêves (vous êtes ici)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-token-killer/&#34;&gt;Le tueur de tokens : naviguer dans le code sans le lire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-open-source/&#34;&gt;Ouvrir le cerveau : le modèle brain-vault&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Donner un second cerveau à un agent IA</title>
      <link>https://antoine.weill-duflos.fr/fr/post/cortexmd-second-brain/</link>
      <pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/post/cortexmd-second-brain/</guid>
      <description>&lt;p&gt;Je travaille avec un agent de programmation presque tous les jours maintenant. Il est vraiment bon. Il lit mon code, raisonne dessus, propose des changements, lance les tests, répare ce qu&amp;rsquo;il a cassé. Et chaque fois que j&amp;rsquo;ouvre une nouvelle session, il a la mémoire d&amp;rsquo;un poisson rouge.&lt;/p&gt;
&lt;p&gt;Il ne se souvient pas de la décision que nous avons prise la semaine dernière sur la raison pour laquelle un module est structuré comme il l&amp;rsquo;est. Il ne se souvient pas que je préfère les virgules aux tirets, ni qu&amp;rsquo;un coin du code est porteur et fragile. Il ne se souvient pas de la conversation où nous avions écarté une approche pour de bonnes raisons. Tout ce contexte vivait dans la session précédente, et la session précédente n&amp;rsquo;existe plus. Alors je réexplique. Puis je réexplique encore le lendemain.&lt;/p&gt;
&lt;p&gt;Voilà le premier problème. L&amp;rsquo;agent oublie.&lt;/p&gt;
&lt;p&gt;Et il n&amp;rsquo;y a pas que le code. Dès que je lui demande de l&amp;rsquo;aide pour quoi que ce soit d&amp;rsquo;humain, le même trou s&amp;rsquo;ouvre. Demandez-lui de rédiger un e-mail et il n&amp;rsquo;a aucune idée de qui est le destinataire pour moi, s&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;un ami proche, d&amp;rsquo;un collègue ou d&amp;rsquo;un partenaire avec qui je dois faire attention, et donc il ne sait pas quel ton adopter, parce que ce ton vivait dans des conversations passées qu&amp;rsquo;il ne peut plus voir. Il fait un mauvais travail pour relier une session à la suivante, si bien que chaque fil repart à froid. Et la façon dont je cloisonne ma vie aggrave les choses : le personnel dans un compte, le professionnel dans un autre, comme la plupart des gens. Dès que je passe de l&amp;rsquo;un à l&amp;rsquo;autre, tout ce que l&amp;rsquo;agent avait appris sur moi a tout simplement disparu. Pouf. Plus de mémoire.&lt;/p&gt;
&lt;h2 id=&#34;deux-problèmes-pas-un-seul&#34;&gt;Deux problèmes, pas un seul&lt;/h2&gt;
&lt;p&gt;Le second problème est plus discret, mais il apparaît sur chaque facture. Pour faire quoi que ce soit d&amp;rsquo;utile, l&amp;rsquo;agent doit comprendre le code, et la façon dont il comprend le code, c&amp;rsquo;est en le lisant. Donc il lit des fichiers. Des fichiers entiers. Pour répondre à une petite question sur une fonction, il va charger un module entier dans son contexte, et souvent les modules qui appellent ce module aussi. Multipliez cela sur une session de travail et vous payez, en tokens, pour charger le même code source encore et encore, dont la majeure partie n&amp;rsquo;a rien à voir avec la question posée.&lt;/p&gt;
&lt;p&gt;Les deux problèmes viennent du même endroit : l&amp;rsquo;agent n&amp;rsquo;a aucun stockage persistant de ce qu&amp;rsquo;il a appris, et aucun moyen bon marché de consulter les choses. Il n&amp;rsquo;a que la fenêtre de contexte devant lui, et cette fenêtre est à la fois oublieuse et coûteuse à remplir.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai décidé de m&amp;rsquo;attaquer aux deux. Pas parce que j&amp;rsquo;avais une idée de produit, mais parce que ça m&amp;rsquo;agaçait au quotidien et que j&amp;rsquo;avais un homelab qui ne demandait qu&amp;rsquo;à être utile.&lt;/p&gt;
&lt;p&gt;Il y avait aussi une raison personnelle qui rendait la forme de la solution évidente. Il y a quelque temps, après avoir lu le long récit d&amp;rsquo;un &lt;a href=&#34;https://blog.tolki.dev/posts/2022/pkm/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ami sur son propre parcours de gestion de connaissances personnelles&lt;/a&gt;, je me suis mis à prendre des notes dans Obsidian. Construire ce second cerveau pour moi-même a changé ma façon de voir le problème. Si un coffre de notes liées fonctionne comme mémoire externe pour moi, il devrait fonctionner comme mémoire externe pour l&amp;rsquo;agent aussi. Je pouvais le laisser lire le mien pour démarrer, en lecture seule, puis le laisser construire le sien, un cerveau que je pourrais réellement ouvrir, parcourir et comprendre. Pas une boîte noire d&amp;rsquo;embeddings quelque part, mais des notes, dans un coffre, qui m&amp;rsquo;appartiennent.&lt;/p&gt;
&lt;h2 id=&#34;lorigine-sur-le-homelab&#34;&gt;L&amp;rsquo;origine sur le homelab&lt;/h2&gt;
&lt;p&gt;Depuis un moment, je fais tourner un petit serveur MCP sur mon homelab. MCP, le Model Context Protocol, est la manière standard de donner à un client IA des outils et des données qu&amp;rsquo;il peut aller chercher. Le serveur que j&amp;rsquo;avais construit s&amp;rsquo;appelait obsidian-mcp, et son premier rôle était simple : donner à Claude la capacité de lire, de chercher et d&amp;rsquo;écrire des notes dans mon coffre Obsidian.&lt;/p&gt;
&lt;p&gt;Il tournait dans un conteneur Docker derrière un reverse proxy, mes notes étaient déjà là, et tout à coup l&amp;rsquo;agent pouvait y accéder. Cela seul était déjà utile. Mais cela transformait aussi le coffre en un endroit naturel où placer les réponses à mes deux problèmes, parce qu&amp;rsquo;un coffre n&amp;rsquo;est que du texte structuré qu&amp;rsquo;un agent peut lire et écrire, et c&amp;rsquo;est exactement ce sur quoi une mémoire et un index de code doivent reposer.&lt;/p&gt;
&lt;p&gt;Le serveur a donc fait pousser deux nouvelles capacités, une pour chaque problème.&lt;/p&gt;
&lt;p&gt;La première capacité est un système de mémoire, inspiré de &lt;a href=&#34;https://github.com/mempalace/mempalace&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mempalace&lt;/a&gt;, un projet de palais de mémoire pour agents IA. Au lieu de laisser tout s&amp;rsquo;évaporer à la fin d&amp;rsquo;une session, l&amp;rsquo;agent peut stocker ce qu&amp;rsquo;il apprend : une observation, une décision, une intuition, une préférence que j&amp;rsquo;ai exprimée à voix haute. Ces mémoires ne s&amp;rsquo;empilent pas simplement à l&amp;rsquo;infini dans une liste plate. Elles ont un cycle de vie. Celles qui servent restent chaudes et faciles à faire remonter, celles que personne ne touche refroidissent et finissent par être pliées dans des résumés, et au début d&amp;rsquo;une nouvelle session l&amp;rsquo;agent fait un réveil qui ramène à la surface les mémoires les plus chaudes et les plus pertinentes. L&amp;rsquo;objectif, c&amp;rsquo;est la continuité. L&amp;rsquo;agent reprend à peu près là où il s&amp;rsquo;était arrêté plutôt qu&amp;rsquo;à partir de zéro. C&amp;rsquo;est le sujet de la deuxième partie.&lt;/p&gt;
&lt;p&gt;La seconde capacité est un index de code. Plutôt que de lire des fichiers entiers pour comprendre un dépôt, l&amp;rsquo;agent interroge un index de celui-ci. Un indexeur en Rust parcourt le dépôt, l&amp;rsquo;analyse et enregistre les choses que l&amp;rsquo;on veut réellement consulter : quels symboles existent, leurs signatures, où ils vivent, et surtout qui appelle qui. Ensuite l&amp;rsquo;agent pose des questions ciblées. À quoi ressemble cette fonction ? Qui l&amp;rsquo;appelle ? Qu&amp;rsquo;est-ce qui casse si je la modifie ? Chaque réponse est petite et bon marché, de l&amp;rsquo;ordre d&amp;rsquo;une consultation plutôt que d&amp;rsquo;une lecture complète, au lieu de traîner le fichier entier dans le contexte. L&amp;rsquo;objectif de conception est franc : une consultation de navigation de code devrait coûter environ soixante tokens par résultat et être bien moins chère que la lecture du fichier dont elle provient. C&amp;rsquo;est le sujet de la troisième partie.&lt;/p&gt;
&lt;h2 id=&#34;dun-outil-privé-à-cortexmd&#34;&gt;D&amp;rsquo;un outil privé à cortexmd&lt;/h2&gt;
&lt;p&gt;Pendant des mois, ce fut une affaire personnelle. Ça tournait sur mon matériel, sur mon propre coffre Obsidian privé, celui qui contient à la fois des notes personnelles et professionnelles. Je n&amp;rsquo;en citerai rien ici, et l&amp;rsquo;outil lui-même est délibérément construit pour que les données restent les miennes. Mais le constat tient : c&amp;rsquo;était un outil que j&amp;rsquo;avais fait pour moi, et je l&amp;rsquo;utilisais tous les jours.&lt;/p&gt;
&lt;p&gt;Puis je me suis heurté à un autre genre de mur, qui venait précisément de la façon dont il marchait bien pour moi. Je le raconterai correctement dans la quatrième partie, mais en résumé : tout était réglé sur ma propre installation, mon coffre, monté et synchronisé à ma façon, ce qui en faisait un excellent outil personnel et le rendait impossible à faire tourner pour quiconque d&amp;rsquo;autre. Le rendre partageable impliquait une refonte, et c&amp;rsquo;est cette refonte qui en a finalement fait quelque chose que d&amp;rsquo;autres pouvaient utiliser.&lt;/p&gt;
&lt;p&gt;Cette refonte est devenue cortexmd. C&amp;rsquo;est open source, sous licence MIT, et public sur &lt;a href=&#34;https://github.com/Leicas/cortexmd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;github.com/Leicas/cortexmd&lt;/a&gt;. C&amp;rsquo;est honnêtement en pré-alpha. Les API et les noms de configuration sont encore en mouvement, et je ne miserais pas un workflow de production dessus pour l&amp;rsquo;instant. Le cadrage honnête est le bon : j&amp;rsquo;ai construit ça pour moi, puis je l&amp;rsquo;ai nettoyé pour le partager. Le nettoyage est un vrai travail et il constitue l&amp;rsquo;essentiel de la quatrième partie.&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-ce-que-cest-devenu--le-panneau-de-contrôle-de-cortexmd-cette-capture-provient-de-la-démonstration-autonome-du-projet-donc-les-données-sont-des-exemples-seedés-pas-mon-propre-coffre&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;https://antoine.weill-duflos.fr/img/cortexmd/overview.png&#34; alt=&#34;L&amp;rsquo;onglet vue d&amp;rsquo;ensemble du panneau de contrôle de cortexmd, avec les panneaux de requêtes, de latence, de mémoire et de navigation de code, et un tableau d&amp;rsquo;usage des outils&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Ce que c&amp;rsquo;est devenu : le panneau de contrôle de cortexmd. Cette capture provient de la démonstration autonome du projet, donc les données sont des exemples seedés, pas mon propre coffre.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Voilà donc la forme de la série. Il y avait deux problèmes, un agent qui oublie et un agent qui brûle des tokens à relire du code. Il y a deux réponses, un système de mémoire et un index de code, tous deux nés à l&amp;rsquo;intérieur d&amp;rsquo;un serveur MCP sur un homelab. Et il y a la refonte qui a transformé un outil privé en quelque chose que vous pouvez faire tourner vous-même.&lt;/p&gt;
&lt;h2 id=&#34;ce-qui-arrive&#34;&gt;Ce qui arrive&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Partie 2, le moteur de mémoire.&lt;/strong&gt; Chaleur, déclin et rêves. Les huit catégories dans lesquelles une mémoire peut tomber, le cycle de vie chaud vers tiède vers froid, la promotion à l&amp;rsquo;accès, la consolidation, le rappel hybride qui fusionne recherche plein texte et recherche sémantique, le réveil de session, et le graphe de liaison automatique qui relie les notes entre elles au fur et à mesure qu&amp;rsquo;elles sont stockées.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partie 3, le tueur de tokens.&lt;/strong&gt; L&amp;rsquo;indexeur en Rust et tree-sitter, la base de données de symboles SQLite, les outils de navigation de code, l&amp;rsquo;idée des environ soixante tokens par résultat, le hook shell optionnel qui réécrit des commandes comme grep et cat sur un dépôt indexé en leur équivalent bon marché, et ce que ça a donné de l&amp;rsquo;utiliser sur le propre code source du projet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partie 4, l&amp;rsquo;ouverture du cerveau en open source.&lt;/strong&gt; Pourquoi un outil qui ne marchait que pour moi a dû être repensé pour être partagé, le modèle du brain-vault qui le généralise, les deux modes de déploiement, le monorepo polyglotte tenu ensemble par un contrat partagé, le renommage, et pourquoi je tiens à posséder mes propres données.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous voulez sauter directement au code, la page du projet est par &lt;a href=&#34;../../project/cortexmd/&#34;&gt;ici&lt;/a&gt; et le dépôt est &lt;a href=&#34;https://github.com/Leicas/cortexmd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sur GitHub&lt;/a&gt;. Sinon, la deuxième partie est l&amp;rsquo;endroit où l&amp;rsquo;agent commence à se souvenir.&lt;/p&gt;
&lt;h2 id=&#34;série&#34;&gt;Série&lt;/h2&gt;
&lt;p&gt;Ceci est la &lt;strong&gt;Partie 1 : Donner un second cerveau à un agent IA&lt;/strong&gt; (vous êtes ici).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Partie 1 : Donner un second cerveau à un agent IA (ce billet)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-memory-engine/&#34;&gt;Partie 2 : Le moteur de mémoire : chaleur, déclin et rêves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-token-killer/&#34;&gt;Partie 3 : Le tueur de tokens : naviguer dans le code sans le lire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-open-source/&#34;&gt;Partie 4 : Ouvrir le cerveau en open source : le modèle brain-vault&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Page du projet : &lt;a href=&#34;../../project/cortexmd/&#34;&gt;cortexmd&lt;/a&gt;. Source : &lt;a href=&#34;https://github.com/Leicas/cortexmd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;github.com/Leicas/cortexmd&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
