<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Auto-Heberge | Antoine Weill--Duflos</title>
    <link>https://antoine.weill-duflos.fr/fr/tag/auto-heberge/</link>
      <atom:link href="https://antoine.weill-duflos.fr/fr/tag/auto-heberge/index.xml" rel="self" type="application/rss+xml" />
    <description>Auto-Heberge</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-fr</language><lastBuildDate>Sat, 13 Jun 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://antoine.weill-duflos.fr/media/icon_hu_d686267daab28486.png</url>
      <title>Auto-Heberge</title>
      <link>https://antoine.weill-duflos.fr/fr/tag/auto-heberge/</link>
    </image>
    
    <item>
      <title>Pointeuse : un suivi du temps natif pour Odoo, sur ordinateur et Android</title>
      <link>https://antoine.weill-duflos.fr/fr/project/pointeuse/</link>
      <pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/project/pointeuse/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/Leicas/pointeuse&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pointeuse&lt;/a&gt; est un outil de suivi du temps rapide et natif pour &lt;a href=&#34;https://www.odoo.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Odoo&lt;/a&gt;. Une &lt;em&gt;pointeuse&lt;/em&gt;, c&amp;rsquo;est exactement ce que c&amp;rsquo;est : une petite application qui vit dans la barre des tâches et qui permet de démarrer et d&amp;rsquo;arrêter un minuteur sur n&amp;rsquo;importe quelle tâche Odoo sans ouvrir de navigateur.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.odoo.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Odoo&lt;/a&gt; est un ERP puissant, mais son interface complète peut submerger quelqu&amp;rsquo;un qui veut juste noter ce sur quoi il a travaillé. Pointeuse est l&amp;rsquo;inverse : la surface la plus simple possible devant lui. Votre seul travail est de dire sur quelle tâche vous êtes, de recevoir un petit rappel, et de changer en un clic ; le temps se déverse dans Odoo sous forme de vraies feuilles de temps en coulisses, pour que l&amp;rsquo;entreprise garde toute la puissance de l&amp;rsquo;ERP. C&amp;rsquo;est aussi une démonstration que s&amp;rsquo;intégrer à Odoo est facile, sur ordinateur ou sur mobile, sans module côté serveur.&lt;/p&gt;
&lt;p&gt;Elle fait ce qu&amp;rsquo;un flux de feuilles de temps Odoo demande, mais en application native plutôt qu&amp;rsquo;en onglet web :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Suivre le temps sur les tâches Odoo.&lt;/strong&gt; Démarrer ou arrêter un minuteur sur n&amp;rsquo;importe quelle &lt;code&gt;project.task&lt;/code&gt; ; la feuille de temps atterrit dans &lt;code&gt;account.analytic.line&lt;/code&gt;, là où Odoo l&amp;rsquo;attend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intégration de la présence.&lt;/strong&gt; Pointer l&amp;rsquo;entrée et la sortie (&lt;code&gt;hr.attendance&lt;/code&gt;) depuis l&amp;rsquo;application ou la barre des tâches. Le minuteur s&amp;rsquo;arrête automatiquement quand vous sortez depuis ailleurs, y compris le client web Odoo ou le mobile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rappels d&amp;rsquo;inactivité.&lt;/strong&gt; Une fenêtre configurable demande sur quoi vous travaillez, avec des suggestions pour changer de tâche en un clic. Sur Android, ce sont des notifications avec boutons d&amp;rsquo;action.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hors ligne d&amp;rsquo;abord.&lt;/strong&gt; Toutes les données Odoo sont mises en cache dans SQLite. Les feuilles de temps sont mises en file localement quand vous êtes hors ligne et se synchronisent au retour de la connexion.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un tableau de bord des tâches.&lt;/strong&gt; Un kanban groupé par étape et par projet, un panneau de détail de tâche, et un journal du temps avec des vues jour, semaine et mois.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elle dialogue avec n&amp;rsquo;importe quelle instance Odoo 14+ via le XML-RPC standard, sans module côté serveur à installer. Les identifiants, ou une clé API pour Odoo Online, sont stockés dans le trousseau du système, jamais sur le disque.&lt;/p&gt;
&lt;p&gt;Sous le capot, elle est construite avec &lt;strong&gt;Tauri 2&lt;/strong&gt; et un backend &lt;strong&gt;Rust&lt;/strong&gt;, avec un frontend volontairement en &lt;strong&gt;JavaScript pur sans framework&lt;/strong&gt;. Une seule base de code est publiée pour &lt;strong&gt;Windows, Linux, macOS et Android&lt;/strong&gt;. Les commits sur &lt;code&gt;main&lt;/code&gt; suivent les Conventional Commits, semantic-release découpe les versions, GitHub Actions construit les quatre plateformes, et les applications de bureau se mettent à jour seules depuis les GitHub Releases.&lt;/p&gt;
&lt;p&gt;Pointeuse est sous &lt;strong&gt;licence MIT&lt;/strong&gt;. L&amp;rsquo;histoire complète, pourquoi je l&amp;rsquo;ai construite et comment elle fonctionne, est dans l&amp;rsquo;article de blog &lt;a href=&#34;../../post/pointeuse/&#34;&gt;Pointeuse : un suivi du temps natif et hors ligne d&amp;rsquo;abord pour Odoo&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <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>
    
  </channel>
</rss>
