<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Claude | Antoine Weill--Duflos</title>
    <link>https://antoine.weill-duflos.fr/fr/tag/claude/</link>
      <atom:link href="https://antoine.weill-duflos.fr/fr/tag/claude/index.xml" rel="self" type="application/rss+xml" />
    <description>Claude</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-fr</language><lastBuildDate>Sun, 07 Jun 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://antoine.weill-duflos.fr/media/icon_hu_d686267daab28486.png</url>
      <title>Claude</title>
      <link>https://antoine.weill-duflos.fr/fr/tag/claude/</link>
    </image>
    
    <item>
      <title>cortexmd : un cerveau de mémoire à long terme et de navigation de code pour agents IA</title>
      <link>https://antoine.weill-duflos.fr/fr/project/cortexmd/</link>
      <pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/project/cortexmd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/Leicas/cortexmd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cortexmd&lt;/a&gt; est un cerveau de mémoire à long terme et de navigation de code pour agents IA, exposé via le &lt;strong&gt;Model Context Protocol&lt;/strong&gt;. Tout a commencé par un projet privé sur mon homelab appelé obsidian-mcp, un serveur qui permettait à Claude de lire, chercher et écrire des notes dans mon coffre Obsidian. Je l&amp;rsquo;ai construit pour moi, puis je l&amp;rsquo;ai nettoyé pour le partager.&lt;/p&gt;
&lt;p&gt;Il fait deux choses.&lt;/p&gt;
&lt;p&gt;La première, c&amp;rsquo;est la &lt;strong&gt;mémoire&lt;/strong&gt;. Les agents oublient tout d&amp;rsquo;une session à l&amp;rsquo;autre. cortexmd leur offre un endroit où déposer ce qu&amp;rsquo;ils apprennent : des mémoires auto-catégorisées en types comme observation, décision, intuition et plan, avec un cycle de vie thermique où lire une mémoire la réchauffe et l&amp;rsquo;inactivité la refroidit. Le rappel est hybride, fusionnant la recherche plein texte et la recherche sémantique, amplifié par la température et les liens. Au début d&amp;rsquo;une session, l&amp;rsquo;agent effectue un réveil qui fait remonter les mémoires les plus chaudes et les plus pertinentes, pour reprendre là où il s&amp;rsquo;était arrêté.&lt;/p&gt;
&lt;p&gt;La seconde, c&amp;rsquo;est la &lt;strong&gt;navigation de code&lt;/strong&gt;. Un indexeur en Rust parcourt un dépôt, l&amp;rsquo;analyse avec tree-sitter et construit une base de données de symboles en SQLite qui enregistre, pour chaque symbole, son nom, son type, sa signature, sa docstring, sa plage dans le fichier et son graphe d&amp;rsquo;appels. Cet index est exposé sous forme d&amp;rsquo;outils MCP peu coûteux : recherche de symboles, plan de fichier, appelants et appelés, impact des changements, chaîne d&amp;rsquo;appels, code mort, cycles d&amp;rsquo;import et doublons issus de copier-coller. L&amp;rsquo;objectif de conception est qu&amp;rsquo;un agent navigue dans le code en interrogeant l&amp;rsquo;index, à environ 60 jetons par résultat, plutôt qu&amp;rsquo;en lisant des fichiers entiers. Un hook shell optionnel réécrit des commandes comme grep et cat sur un dépôt indexé en l&amp;rsquo;appel de navigation de code équivalent.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;élément qui l&amp;rsquo;a rendu publiable, c&amp;rsquo;est le &lt;strong&gt;modèle de coffre-cerveau&lt;/strong&gt; (brain-vault). cortexmd possède un coffre-cerveau distinct qui est la seule chose dans laquelle il écrit. Vos propres coffres sont attachés en tant que sources en lecture seule, indexés pour la recherche et la navigation de code, jamais modifiés, avec une liste d&amp;rsquo;autorisation par refus par défaut pour que les sous-arbres privés restent à l&amp;rsquo;écart. Les données circulent dans un seul sens, donc il n&amp;rsquo;y a aucun fichier mutable partagé et aucune course à la fusion.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  SOURCE_VAULTS[]  (read-only, opt-in, allowlisted)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ┌───────────┐  ┌───────────┐  ┌───────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │  notes/   │  │  code/    │  │  docs/    │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        │  index (one-way, read)      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        └──────────────┼──────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │     cortexmd     │   &amp;lt;- sole writer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │   (MCP server)   │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              └────────┬─────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       │ writes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │   BRAIN_VAULT    │   memories · journal · diaries
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │ (own dir, not    │   tasks · KG notes · code-repos.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │  your vault)     │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              └──────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il fonctionne selon deux modes : un mode &lt;strong&gt;local-stdio&lt;/strong&gt; sans Docker, sans authentification et sans réseau, recommandé pour une seule personne ; et un mode &lt;strong&gt;HTTP auto-hébergé&lt;/strong&gt; avec authentification pour les configurations multi-clients. Le dépôt est un monorepo polyglotte, un serveur MCP en TypeScript et un binaire Rust unique, maintenus cohérents par un contrat partagé et une vérification de parité en CI.&lt;/p&gt;
&lt;p&gt;cortexmd est &lt;strong&gt;en pré-alpha et sous licence MIT&lt;/strong&gt;. Les API et les noms de configuration sont encore susceptibles de changer.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;histoire complète est racontée dans une série de quatre billets de blog. Commencez par &lt;a href=&#34;../../post/cortexmd-second-brain/&#34;&gt;Donner un second cerveau à un agent IA&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ouvrir le code du cerveau : le modèle du brain-vault</title>
      <link>https://antoine.weill-duflos.fr/fr/post/cortexmd-open-source/</link>
      <pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/post/cortexmd-open-source/</guid>
      <description>&lt;p&gt;Dans la &lt;a href=&#34;../cortexmd-token-killer/&#34;&gt;partie 3&lt;/a&gt; j&amp;rsquo;ai décrit le volet navigation de code de cette chose : un indexeur Rust qui parcourt un dépôt, construit une base de données de symboles, et permet à un agent d&amp;rsquo;interroger la structure du code pour à peu près le coût d&amp;rsquo;un simple grep au lieu de lire des fichiers entiers. Cela, plus le moteur de mémoire de la &lt;a href=&#34;../cortexmd-memory-engine/&#34;&gt;partie 2&lt;/a&gt;, constituait l&amp;rsquo;outil privé que je faisais tourner sur mon homelab depuis quelques mois. Ça marchait. Je l&amp;rsquo;utilisais tous les jours.&lt;/p&gt;
&lt;p&gt;Mais il avait une limite inscrite dans ses fondations, et cette limite est la raison d&amp;rsquo;être de ce billet.&lt;/p&gt;
&lt;h2 id=&#34;le-problème--il-ne-marchait-que-pour-moi&#34;&gt;Le problème : il ne marchait que pour moi&lt;/h2&gt;
&lt;p&gt;La version privée, celle qui s&amp;rsquo;appelait encore obsidian-mcp à l&amp;rsquo;époque, était entièrement façonnée autour de mon installation. Elle lisait mon coffre Obsidian personnel, celui que je garde synchronisé entre mes machines et que je traite comme la source de vérité pour tout ce que je fais. Ses conventions, ses chemins, la façon dont elle découvrait et indexait les notes, tout supposait mon environnement, ma structure, mes habitudes. Au quotidien, c&amp;rsquo;était invisible. C&amp;rsquo;était un outil vraiment bon, et il s&amp;rsquo;améliorait à mesure que je m&amp;rsquo;appuyais dessus.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;ennui, c&amp;rsquo;est qu&amp;rsquo;il était bon pour moi d&amp;rsquo;une façon qui le rendait impossible à confier à quelqu&amp;rsquo;un d&amp;rsquo;autre. Vous ne pouviez pas simplement le pointer sur vos propres notes et le voir fonctionner. Il attendait mon coffre, monté comme je le monte, synchronisé comme je le synchronise. Il lisait depuis un espace réglé pour exactement une personne, et cette personne, c&amp;rsquo;était moi. Comme outil personnel, c&amp;rsquo;était parfait. Comme projet à passer en open source, c&amp;rsquo;était une impasse, car la première chose sur laquelle tomberait tout autre utilisateur, c&amp;rsquo;est que toute la conception supposait discrètement qu&amp;rsquo;il était moi.&lt;/p&gt;
&lt;p&gt;La question qui a guidé la refonte n&amp;rsquo;était donc pas comment corriger un bug. Elle était plus simple et plus exigeante : que faudrait-il pour qu&amp;rsquo;une personne qui n&amp;rsquo;est pas moi fasse tourner ceci sur ses propres notes, en toute sécurité, sans hériter de mon installation ? Y répondre honnêtement voulait dire séparer deux choses que la version privée avait emmêlées, les notes que je lis et les données que l&amp;rsquo;outil écrit.&lt;/p&gt;
&lt;h2 id=&#34;la-refonte--le-modèle-du-brain-vault&#34;&gt;La refonte : le modèle du brain-vault&lt;/h2&gt;
&lt;p&gt;Le correctif qui a rendu cortexmd partageable est presque embarrassant de simplicité une fois qu&amp;rsquo;on s&amp;rsquo;est brûlé. cortexmd possède son propre brain vault séparé, et ce brain vault est la seule chose dans laquelle il a le droit d&amp;rsquo;écrire. Mémoires, journal, journaux d&amp;rsquo;agents, tâches, notes du graphe de connaissances, la liste des dépôts de code indexés : tout cela vit dans le brain vault, et cortexmd en est l&amp;rsquo;unique rédacteur.&lt;/p&gt;
&lt;p&gt;Vos propres coffres, ceux que vous modifiez à la main dans Obsidian, sont attachés en tant que coffres sources en lecture seule. cortexmd les indexe pour la recherche et la navigation de code, et il ne les modifie jamais. Pas une mise à jour de chaleur, pas une étiquette, pas un seul octet. Attacher un coffre source se fait sur option, avec une liste d&amp;rsquo;autorisation qui refuse par défaut, de sorte que vous pouvez garder des sous-arbres privés entièrement hors de l&amp;rsquo;index et n&amp;rsquo;exposer que les parties que vous voulez que l&amp;rsquo;agent voie.&lt;/p&gt;
&lt;p&gt;Les données circulent dans un seul sens. Les coffres sources entrent, le brain vault sort, et les deux ne se chevauchent jamais. Vous attachez le coffre qui est le vôtre, l&amp;rsquo;outil le lit et n&amp;rsquo;y réécrit rien, et le cerveau qu&amp;rsquo;il construit vit entièrement ailleurs. C&amp;rsquo;est ce qui le rend général : il n&amp;rsquo;y a plus aucune supposition que le coffre soit le mien, monté à ma façon, ou synchronisé à ma façon. C&amp;rsquo;est aussi ce qui le rend sûr, car un outil qui n&amp;rsquo;écrit jamais dans vos notes ne peut pas les écraser, et il n&amp;rsquo;y a aucun fichier partagé qu&amp;rsquo;un agent de synchronisation puisse bifurquer. Le couplage qui maintenait la version privée collée à ma machine a tout simplement disparu.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  SOURCE_VAULTS[]  (read-only, opt-in, allowlisted)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ┌───────────┐  ┌───────────┐  ┌───────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │  notes/   │  │  code/    │  │  docs/    │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        │  index (one-way, read)      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        └──────────────┼──────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │     cortexmd     │   &amp;lt;- sole writer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │   (MCP server)   │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              └────────┬─────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       │ writes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │   BRAIN_VAULT    │   memories · journal · diaries
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │ (own dir, not    │   tasks · KG notes · code-repos.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              │  your vault)     │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              └──────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le brain vault par défaut est un répertoire de données dédié, quelque chose comme &lt;code&gt;~/.local/share/cortexmd/brain&lt;/code&gt;, jamais votre véritable coffre Obsidian. Vous pouvez le pointer ailleurs, mais le défaut garde les écritures de l&amp;rsquo;outil et vos notes dans deux endroits clairement séparés dès la première exécution.&lt;/p&gt;
&lt;h2 id=&#34;deux-façons-de-le-faire-tourner&#34;&gt;Deux façons de le faire tourner&lt;/h2&gt;
&lt;p&gt;Une fois que l&amp;rsquo;histoire de l&amp;rsquo;écriture était saine, l&amp;rsquo;histoire du déploiement devait suivre. cortexmd se livre avec deux modes, et ils sont d&amp;rsquo;égale importance plutôt qu&amp;rsquo;un vrai et un de jouet.&lt;/p&gt;
&lt;p&gt;Le défaut recommandé pour une seule personne est local-stdio. Il tourne sur votre propre machine, parle MCP via stdio avec n&amp;rsquo;importe quel client que vous utilisez, et lit vos coffres directement depuis le disque. Pas de synchronisation. Pas de Docker. Pas d&amp;rsquo;authentification. Aucun réseau du tout. Pour une personne sur une machine c&amp;rsquo;est tout ce dont vous avez besoin, et c&amp;rsquo;est le mode vers lequel j&amp;rsquo;orienterais presque tout le monde en premier. Tout l&amp;rsquo;intérêt de la refonte était qu&amp;rsquo;un seul utilisateur puisse obtenir le cerveau complet sans aucun du poids opérationnel que la version privée avait fini par accumuler autour d&amp;rsquo;elle.&lt;/p&gt;
&lt;p&gt;Le second mode est l&amp;rsquo;auto-hébergement HTTP, et c&amp;rsquo;est explicitement la voie avancée. Ici cortexmd tourne comme un serveur Express avec une authentification en bonne et due forme (clé d&amp;rsquo;API ou OAuth2), et les coffres sources sont tirés en lecture seule via un transport. Ce transport est une interface que j&amp;rsquo;ai appelée la couture IVault, avec des implémentations pour le disque local, git-pull, WebDAV et S3. C&amp;rsquo;est le mode pour les configurations multi-clients ou véritablement distantes, où plusieurs clients MCP partagent un cerveau ou bien les données sources vivent ailleurs que sur le disque du serveur lui-même. Cela représente plus de pièces mobiles, et vous n&amp;rsquo;y avez recours que lorsque vous en avez réellement besoin.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;important, c&amp;rsquo;est que les deux modes partagent le même modèle source-en-lecture-seule, cerveau-rédacteur-unique. Le mode HTTP conserve la même garantie : vos sources restent en lecture seule et le cerveau est la seule cible d&amp;rsquo;écriture. Il change seulement la façon dont les sources en lecture seule parviennent à l&amp;rsquo;indexeur.&lt;/p&gt;
&lt;h2 id=&#34;un-monorepo-polyglotte-tenu-ensemble-par-un-contrat&#34;&gt;Un monorepo polyglotte tenu ensemble par un contrat&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;autre chose que l&amp;rsquo;ouverture du code m&amp;rsquo;a forcé à nettoyer, c&amp;rsquo;est la couture entre les deux langages dont ce projet est fait, car ce sont vraiment deux projets portant un seul manteau.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;packages/server&lt;/code&gt; est le serveur MCP en TypeScript : Node 22, Express, le moteur de mémoire, la logique de rappel, les définitions d&amp;rsquo;outils qui apparaissent aux clients sous l&amp;rsquo;espace de noms &lt;code&gt;mcp__cortexmd__&lt;/code&gt;. &lt;code&gt;crates/cli&lt;/code&gt; est un unique binaire Rust, &lt;code&gt;cortexmd-cli&lt;/code&gt;, qui est l&amp;rsquo;indexeur tree-sitter plus le client en ligne de commande, les crochets de session, et le HUD de la barre d&amp;rsquo;état. Deux chaînes d&amp;rsquo;outils, collées ensemble par la CI.&lt;/p&gt;
&lt;p&gt;La partie difficile d&amp;rsquo;une scission comme celle-ci, c&amp;rsquo;est l&amp;rsquo;endroit où elles doivent s&amp;rsquo;accorder exactement. Les identifiants de symboles que l&amp;rsquo;indexeur Rust produit doivent être identiques octet pour octet à ceux que le côté TypeScript attend, sinon toute la couche de navigation de code pointe silencieusement vers rien. Il y a donc un répertoire &lt;code&gt;contract/&lt;/code&gt; qui contient le format de fil partagé, la spécification des identifiants de symboles, et un jeu de golden fixtures. Une vérification de parité en CI fait passer les mêmes entrées à travers les deux côtés et fait échouer la compilation si le producteur Rust et le consommateur TypeScript sont un jour en désaccord sur ce que devrait être un identifiant. Le contrat est l&amp;rsquo;arbitre, et il garde les deux langages honnêtes sans qu&amp;rsquo;aucun n&amp;rsquo;ait à faire confiance à l&amp;rsquo;autre.&lt;/p&gt;
&lt;h2 id=&#34;le-changement-de-nom-et-ce-que-cest-maintenant&#34;&gt;Le changement de nom, et ce que c&amp;rsquo;est maintenant&lt;/h2&gt;
&lt;p&gt;Quand j&amp;rsquo;ai rassemblé tout cela pour le partager, l&amp;rsquo;ancien nom ne convenait plus. obsidian-mcp décrivait ce que c&amp;rsquo;était au départ : un pont vers le coffre d&amp;rsquo;une seule application. Ce que c&amp;rsquo;était devenu, c&amp;rsquo;était un cerveau de mémoire et de navigation de code qui utilisait par hasard le markdown de style Obsidian comme un format de stockage parmi d&amp;rsquo;autres. Alors c&amp;rsquo;est devenu cortexmd, et c&amp;rsquo;est le nom sous lequel il se livre.&lt;/p&gt;
&lt;p&gt;Une note d&amp;rsquo;honnêteté : ceci est en pré-alpha. C&amp;rsquo;est public et sous licence MIT à &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;, et les noms de configuration ainsi qu&amp;rsquo;une partie des API sont encore mouvants. Je l&amp;rsquo;ai construit pour moi d&amp;rsquo;abord, l&amp;rsquo;ai fait tourner sur mon propre homelab au-dessus de mon propre coffre privé de notes personnelles et professionnelles, j&amp;rsquo;ai réalisé qu&amp;rsquo;il était câblé trop étroitement sur ma propre installation pour être partagé, je l&amp;rsquo;ai généralisé, puis je l&amp;rsquo;ai nettoyé suffisamment pour le mettre là où d&amp;rsquo;autres personnes peuvent l&amp;rsquo;utiliser. Ce n&amp;rsquo;est pas un produit fini et je ne prétends pas que c&amp;rsquo;en est un.&lt;/p&gt;
&lt;p&gt;Ce dont je me sens bien, c&amp;rsquo;est de sa forme. Vos notes restent les vôtres, sur votre disque, en lecture seule, avec les parties privées exclues par défaut. Le cerveau que l&amp;rsquo;agent construit vit dans son propre endroit et ne va jamais retoucher vos fichiers. Dans le mode par défaut rien ne quitte votre machine : pas de cloud, pas de compte, pas de réseau. C&amp;rsquo;est la version local-first, propriétaire-de-vos-données de l&amp;rsquo;idée que je voulais vraiment depuis le début, et il a fallu la détacher de ma propre installation pour y arriver.&lt;/p&gt;
&lt;p&gt;Si quoi que ce soit de tout cela vous est utile, la page du projet a la vue d&amp;rsquo;ensemble et les liens : &lt;a href=&#34;../../project/cortexmd/&#34;&gt;cortexmd&lt;/a&gt;. Et si vous voulez le lire depuis le début, la &lt;a href=&#34;../cortexmd-second-brain/&#34;&gt;partie 1&lt;/a&gt; est l&amp;rsquo;endroit où la série commence.&lt;/p&gt;
&lt;h2 id=&#34;série&#34;&gt;Série&lt;/h2&gt;
&lt;p&gt;Ceci est la partie 4 d&amp;rsquo;une série en quatre parties sur cortexmd.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;../cortexmd-second-brain/&#34;&gt;Partie 1 : Donner un second cerveau à un agent IA&lt;/a&gt;&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;Partie 4 : Ouvrir le code du cerveau : le modèle du brain-vault (vous êtes ici)&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Le tueur de tokens : naviguer dans le code sans le lire</title>
      <link>https://antoine.weill-duflos.fr/fr/post/cortexmd-token-killer/</link>
      <pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/post/cortexmd-token-killer/</guid>
      <description>&lt;p&gt;Dans la &lt;a href=&#34;../cortexmd-memory-engine/&#34;&gt;deuxième partie&lt;/a&gt;, j&amp;rsquo;ai écrit sur la moitié de cortexmd qui combat l&amp;rsquo;oubli : le moteur de mémoire, avec sa chaleur, sa décroissance et son rêve nocturne. Ce billet parle de l&amp;rsquo;autre moitié, celle qui combat le gaspillage.&lt;/p&gt;
&lt;p&gt;Voici le problème. Quand vous demandez à un agent IA de travailler sur une vraie base de code, le réflexe par défaut est de lire des fichiers. L&amp;rsquo;agent ouvre un fichier, le tout atterrit dans son contexte, et vous payez désormais pour chacune de ses lignes. La plupart de ces lignes sont du bruit pour la tâche en cours. Vous vouliez savoir ce que fait une fonction et qui l&amp;rsquo;appelle, et au lieu de cela vous avez acheté un fichier de mille lignes, plus ses imports, plus trois modules d&amp;rsquo;aide qu&amp;rsquo;il a tirés au passage par prudence. Faites cela quelques fois et la fenêtre de contexte se remplit de code que l&amp;rsquo;agent n&amp;rsquo;utilisera jamais, le signal est enseveli, et la facture est bien réelle.&lt;/p&gt;
&lt;p&gt;La solution consiste à arrêter de lire le code pour commencer à l&amp;rsquo;interroger.&lt;/p&gt;
&lt;h2 id=&#34;un-dépôt-est-un-graphe-pas-un-tas-de-texte&#34;&gt;Un dépôt est un graphe, pas un tas de texte&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;intuition est ancienne, ennuyeuse et juste : le code source n&amp;rsquo;est pas vraiment un tas plat de texte. C&amp;rsquo;est un graphe de symboles. Des fonctions, des méthodes, des types, et les arêtes entre eux, qui appelle qui. Un IDE le sait. &amp;ldquo;Aller à la définition&amp;rdquo; et &amp;ldquo;trouver toutes les références&amp;rdquo; ne lisent pas vos fichiers de haut en bas à chaque clic. Ils consultent un index. cortexmd donne la même chose à un agent.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;indexeur est un binaire Rust (&lt;code&gt;cortexmd-cli&lt;/code&gt;, le même binaire qui embarque le client en ligne de commande et les hooks de session dont je parlerai plus loin). Il parcourt un dépôt, analyse chaque fichier avec tree-sitter, et écrit le résultat dans une base de données de symboles SQLite. Pour chaque symbole, il enregistre le nom, le genre (fonction, méthode, type, et ainsi de suite), la signature, la docstring s&amp;rsquo;il y en a une, la plage dans le fichier, et, point crucial, le graphe d&amp;rsquo;appels : les appelants et les appelés. tree-sitter est le bon outil ici parce qu&amp;rsquo;il est rapide, incrémental, et qu&amp;rsquo;il parle beaucoup de langages, si bien que la même passe d&amp;rsquo;indexation fonctionne sur un dépôt polyglotte au lieu d&amp;rsquo;exiger un parseur sur mesure par chaîne d&amp;rsquo;outils.&lt;/p&gt;
&lt;p&gt;Une fois cette base de données en place, l&amp;rsquo;agent n&amp;rsquo;a plus jamais besoin d&amp;rsquo;ouvrir un fichier juste pour se repérer.&lt;/p&gt;
&lt;h2 id=&#34;les-outils-de-navigation-de-code&#34;&gt;Les outils de navigation de code&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;index est exposé aux clients MCP sous la forme d&amp;rsquo;un ensemble d&amp;rsquo;outils peu coûteux. Chacun répond à une question précise qu&amp;rsquo;un agent se pose réellement pendant qu&amp;rsquo;il travaille :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;recherche de symboles&lt;/strong&gt; : trouver des symboles par nom, signature, ou texte de docstring. Le point d&amp;rsquo;entrée vers tout le reste.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;plan de fichier&lt;/strong&gt; : la forme d&amp;rsquo;un fichier (ses symboles et leurs signatures) sans les corps. Vous obtenez la table des matières plutôt que le livre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;récupérer un symbole&lt;/strong&gt; : extraire le corps d&amp;rsquo;exactement un symbole quand vous avez décidé que vous en aviez besoin, et rien d&amp;rsquo;autre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;appelants et appelés&lt;/strong&gt; : parcourir le graphe d&amp;rsquo;appels dans un sens ou dans l&amp;rsquo;autre. Qui appelle ceci, et ce que ceci appelle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;impact d&amp;rsquo;un changement&lt;/strong&gt; : la réponse transitive à &amp;ldquo;si je modifie ceci, qui casse ?&amp;rdquo;. C&amp;rsquo;est celui que je dégaine le plus souvent avant de toucher à quoi que ce soit de porteur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chaîne d&amp;rsquo;appels&lt;/strong&gt; : le chemin d&amp;rsquo;un symbole à un autre, pour voir comment A atteint réellement Z.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;détection de code mort&lt;/strong&gt; : les symboles vers lesquels rien ne pointe.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;détection de cycles d&amp;rsquo;imports&lt;/strong&gt; : là où le graphe de modules boucle sur lui-même.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;détection de doublons sémantiques&lt;/strong&gt; : la détection de copier-coller, les corps quasi identiques qui ont divergé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-la-vue-des-économies-de-navigation-de-code-avec-cortexmd-qui-indexe-son-propre-dépôt-le-projet-qui-fait-du-dogfooding-de-son-indexeur-les-chiffres-proviennent-de-la-démo-seedée-du-projet-pas-dun-benchmark-formel&#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/code.png&#34; alt=&#34;L&amp;rsquo;onglet Code du tableau de bord cortexmd, montrant les tokens économisés par outil, un graphique de cumul, et les dépôts indexés&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      La vue des économies de navigation de code, avec cortexmd qui indexe son propre dépôt (le projet qui fait du dogfooding de son indexeur). Les chiffres proviennent de la démo seedée du projet, pas d&amp;rsquo;un benchmark formel.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Le motif est le même pour tous. L&amp;rsquo;agent restreint avant de lire. Rechercher pour trouver le symbole, dresser le plan pour voir le voisinage, consulter les appelants et l&amp;rsquo;impact d&amp;rsquo;un changement pour comprendre le rayon d&amp;rsquo;explosion, et seulement ensuite, s&amp;rsquo;il en a vraiment besoin, récupérer un symbole. La plupart des tâches n&amp;rsquo;exigent jamais un fichier complet.&lt;/p&gt;
&lt;h2 id=&#34;environ-60-tokens-par-résultat&#34;&gt;Environ 60 tokens par résultat&lt;/h2&gt;
&lt;p&gt;Voici l&amp;rsquo;objectif de conception qui a guidé tout cela. Une recherche de navigation de code est censée coûter environ 60 tokens par résultat. Lire un fichier entier en coûte des milliers. Interroger l&amp;rsquo;index est donc censé revenir bien moins cher que lire, pour la même réponse utile.&lt;/p&gt;
&lt;p&gt;Je veux être honnête sur ce qu&amp;rsquo;est ce chiffre et ce qu&amp;rsquo;il n&amp;rsquo;est pas. C&amp;rsquo;est une cible que j&amp;rsquo;ai visée en concevant l&amp;rsquo;outil, pas un résultat de référence que je vous cite. Le coût exact dépend du symbole, du langage, de la quantité de docstring. Mais sa forme générale est tout l&amp;rsquo;enjeu : un résultat est un enregistrement compact (nom, genre, signature, une plage, quelques arêtes), pas un pavé de code source. Quand l&amp;rsquo;unité de travail est un fait de 60 tokens au lieu d&amp;rsquo;un fichier de 2 000 tokens, un agent peut poser vingt questions pour le prix d&amp;rsquo;une lecture, et la fenêtre de contexte reste pleine de réponses au lieu de meule de foin.&lt;/p&gt;
&lt;p&gt;Cela se lit aussi mieux pour le modèle. Une liste propre d&amp;rsquo;appelants est plus facile à raisonner que la même information étalée sur cinq fichiers que l&amp;rsquo;agent a dû charger pour la reconstituer.&lt;/p&gt;
&lt;h2 id=&#34;attraper-la-vieille-habitude&#34;&gt;Attraper la vieille habitude&lt;/h2&gt;
&lt;p&gt;Il y a un piège à donner de meilleurs outils à un agent : il doit penser à les utiliser. La mémoire musculaire d&amp;rsquo;&amp;ldquo;enquêter sur le code&amp;rdquo;, c&amp;rsquo;est &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;. Ces habitudes sont profondes, et un agent y retombera volontiers et se mettra à charger des fichiers dans son contexte dès que vous cessez de surveiller.&lt;/p&gt;
&lt;p&gt;Alors cortexmd embarque un hook shell optionnel. Quand il est activé et que vous travaillez dans un dépôt indexé, il réécrit ces commandes en leurs équivalents peu coûteux de navigation de code. Un &lt;code&gt;grep&lt;/code&gt; cherchant un symbole devient une recherche de symboles. Un &lt;code&gt;cat&lt;/code&gt; d&amp;rsquo;un fichier devient un plan de fichier. L&amp;rsquo;agent croit faire la vieille chose, et l&amp;rsquo;index répond discrètement à la place. C&amp;rsquo;est optionnel à dessein, parce que réécrire les commandes shell de quelqu&amp;rsquo;un est exactement le genre de magie à laquelle on veut consentir plutôt que la découvrir, et parce que la réécriture n&amp;rsquo;a de sens que sur un dépôt réellement indexé.&lt;/p&gt;
&lt;p&gt;La belle propriété, c&amp;rsquo;est qu&amp;rsquo;il rejoint l&amp;rsquo;agent là où ses habitudes sont déjà. Vous n&amp;rsquo;avez pas à rééduquer le réflexe, vous l&amp;rsquo;interceptez simplement.&lt;/p&gt;
&lt;h2 id=&#34;le-dogfooding-sur-son-propre-code-source&#34;&gt;Le dogfooding sur son propre code source&lt;/h2&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas testé cela sur un jouet. cortexmd est un monorepo polyglotte (TypeScript d&amp;rsquo;un côté, Rust de l&amp;rsquo;autre, j&amp;rsquo;y reviens dans la quatrième partie), et j&amp;rsquo;ai pointé l&amp;rsquo;indexeur sur le code source du projet lui-même pour travailler dessus à travers ses propres outils de navigation. C&amp;rsquo;est le test qui compte. Quand vous modifiez l&amp;rsquo;indexeur tout en naviguant avec l&amp;rsquo;indexeur, les aspérités vous trouvent vite. &amp;ldquo;L&amp;rsquo;impact d&amp;rsquo;un changement dit que rien ne casse, alors pourquoi ça a cassé&amp;rdquo; est une phrase très motivante à lire dans ses propres journaux.&lt;/p&gt;
&lt;p&gt;Le dogfooding est aussi l&amp;rsquo;endroit où les deux moitiés de cortexmd se rencontrent. L&amp;rsquo;index de code dit à l&amp;rsquo;agent ce qu&amp;rsquo;est le code en ce moment. Le moteur de mémoire de la &lt;a href=&#34;../cortexmd-memory-engine/&#34;&gt;deuxième partie&lt;/a&gt; lui dit pourquoi le code est ce qu&amp;rsquo;il est, les décisions et les impasses qu&amp;rsquo;aucune base de données de symboles n&amp;rsquo;enregistrera jamais. La structure plus l&amp;rsquo;histoire. L&amp;rsquo;une s&amp;rsquo;interroge, l&amp;rsquo;autre se rappelle, et ensemble elles forment l&amp;rsquo;essentiel de ce que je veux qu&amp;rsquo;un collaborateur possède.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est encore une pré-alpha, donc les noms exacts des outils et la configuration vont bouger. L&amp;rsquo;idée sous-jacente est stable : naviguer dans le code en interrogeant un index, pas en lisant des fichiers, et payer 60 tokens pour un fait plutôt que des milliers pour une meule de foin.&lt;/p&gt;
&lt;p&gt;Dans la &lt;a href=&#34;../cortexmd-open-source/&#34;&gt;quatrième partie&lt;/a&gt;, j&amp;rsquo;aborde la partie qui a transformé un outil privé de homelab en quelque chose que je pouvais mettre sur internet : pourquoi un outil entièrement réglé sur ma propre installation ne pouvait pas être partagé tel quel, la refonte autour du brain-vault qui l&amp;rsquo;a généralisé, et pourquoi je l&amp;rsquo;ai passé en open source.&lt;/p&gt;
&lt;p&gt;La page du projet est &lt;a href=&#34;../../project/cortexmd/&#34;&gt;ici&lt;/a&gt;, et le code se trouve 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;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;série&#34;&gt;Série&lt;/h3&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;&lt;a href=&#34;../cortexmd-memory-engine/&#34;&gt;Le moteur de mémoire : chaleur, décroissance et rêves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Le tueur de tokens : naviguer dans le code sans le lire (vous êtes ici)&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>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>
