<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Christian Roy</title>
    <link>https://christianroy.dev/fr/</link>
    <description>Recent content on Christian Roy</description>
    <generator>Hugo -- 0.156.0</generator>
    <language>fr</language>
    <lastBuildDate>Tue, 07 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://christianroy.dev/fr/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Le tableau RAID qui perdait un disque à chaque redémarrage</title>
      <link>https://christianroy.dev/fr/til/raid-array-losing-disk-every-reboot/</link>
      <pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/raid-array-losing-disk-every-reboot/</guid>
      <description>&lt;p&gt;&lt;em&gt;Résumé en français. Le récit complet, beaucoup plus détaillé, est disponible &lt;a href=&#34;https://christianroy.dev/til/raid-array-losing-disk-every-reboot/&#34;&gt;en anglais&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sur mon NAS quatre baies, un disque de remplacement s&amp;rsquo;est mal inséré: une brève chute de capacité pendant l&amp;rsquo;insertion a fait échouer la seule tentative de reconstruction automatique du firmware. Résultat: le tableau RAID 5 restait dégradé (&lt;code&gt;[4/3]&lt;/code&gt;), et même après une reconstruction manuelle réussie, chaque redémarrage faisait retomber le disque hors du tableau.&lt;/p&gt;
&lt;p&gt;Avec Claude Code, j&amp;rsquo;ai désassemblé les binaires propriétaires du firmware pour comprendre pourquoi. La vraie cause était une boucle: au moment d&amp;rsquo;éteindre le NAS, une routine expulsait explicitement tout disque absent d&amp;rsquo;un registre de volume (corrompant son superblock RAID), donc le démarrage suivant l&amp;rsquo;excluait légitimement, donc les registres se régénéraient comme &amp;ldquo;trois disques&amp;rdquo;, et ainsi de suite indéfiniment. Plusieurs pistes plausibles se sont révélées être des impasses, dont l&amp;rsquo;édition de champs de configuration que le code ne lit jamais, avant qu&amp;rsquo;un traçage rigoureux, vérifié instruction par instruction, ne révèle le vrai mécanisme.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOVA·FM : une station de radio IA sans fin bâtie sur Stable Audio 3</title>
      <link>https://christianroy.dev/fr/til/novafm-endless-ai-radio-station-stable-audio-3/</link>
      <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/novafm-endless-ai-radio-station-stable-audio-3/</guid>
      <description>&lt;p&gt;NOVA·FM est une station de radio sans bibliothèque et sans playlist.
Chaque morceau est composé sur le coup, quelques secondes avant
d&amp;rsquo;atteindre vos oreilles, puis disparaît et n&amp;rsquo;est jamais réentendu
tout à fait sous la même forme. Je l&amp;rsquo;ai construite en deux jours
avec Claude Code (Opus 4.7 et 4.8), sous ma direction, sur Stable
Audio 3, la famille de modèles audio open-weight de Stability AI
sortie plus tôt ce mois-ci.&lt;/p&gt;</description>
    </item>
    <item>
      <title>opencode avec un Qwen3.6-35B-A3B local a itéré jusqu&#39;à un jouet web de physique des couleurs fonctionnel</title>
      <link>https://christianroy.dev/fr/til/opencode-local-qwen36-35b-a3b-color-physics-web-toy/</link>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/opencode-local-qwen36-35b-a3b-color-physics-web-toy/</guid>
      <description>&lt;p&gt;J&amp;rsquo;ai donné à &lt;a href=&#34;https://opencode.ai&#34;&gt;opencode&lt;/a&gt; un cahier des charges d&amp;rsquo;un
paragraphe : « un canvas HTML où des cercles colorés s&amp;rsquo;attirent selon des
teintes similaires et se repoussent quand ils sont opposés », et je l&amp;rsquo;ai
branché sur la quantification d&amp;rsquo;unsloth de Qwen3.6-35B-A3B (UD-Q8_K_XL,
~3 milliards de paramètres actifs) tournant en local. Une douzaine de tours
de pilotage plus tard, à corriger des bugs et ajuster le comportement,
j&amp;rsquo;avais une démo fonctionnelle dans un seul fichier.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini 3.1 Flash Live : IA vocale à faible latence avec sortie audio native</title>
      <link>https://christianroy.dev/fr/til/gemini-3-1-flash-live-low-latency-voice-ai/</link>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/gemini-3-1-flash-live-low-latency-voice-ai/</guid>
      <description>&lt;p&gt;Google a lancé Gemini 3.1 Flash Live via la Live API pour créer des agents vocaux et visuels en temps réel. Le modèle traite des flux continus d&amp;rsquo;audio, vidéo et texte pour fournir des réponses parlées immédiates avec détection de nuances acoustiques et support de 90+ langues.&lt;/p&gt;
&lt;p&gt;Principales améliorations par rapport à Gemini 2.5 Flash Native Audio :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Meilleur filtrage du bruit dans des environnements réels&lt;/li&gt;
&lt;li&gt;Respect renforcé des instructions système complexes&lt;/li&gt;
&lt;li&gt;Dialogue plus naturel avec latence améliorée&lt;/li&gt;
&lt;li&gt;Capacité de réflexion via &lt;code&gt;thinkingLevel&lt;/code&gt; (minimal/low/medium/high) au lieu de &lt;code&gt;thinkingBudget&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le modèle produit de l&amp;rsquo;audio natif (pas de pipeline STT+TTS) avec une fenêtre de contexte de 128k. Il supporte l&amp;rsquo;appel de fonctions synchrones, Google Search grounding et l&amp;rsquo;entrée vidéo en plus de l&amp;rsquo;audio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cohere Transcribe devance Whisper Large v3 sur le classement ASR de HuggingFace avec un modele open source de 2 milliards de parametres</title>
      <link>https://christianroy.dev/fr/til/cohere-transcribe-asr-beats-whisper/</link>
      <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/cohere-transcribe-asr-beats-whisper/</guid>
      <description>&lt;p&gt;Cohere, surtout connu pour ses modeles de texte et d&amp;rsquo;embeddings, vient de lancer un modele
de reconnaissance vocale qui atteint la premiere place du classement Open ASR de HuggingFace:
5,42% de WER moyen contre 7,44% pour Whisper Large v3. Il fait 2 milliards de parametres,
est sous licence Apache 2.0, et disponible sur HuggingFace aujourd&amp;rsquo;hui.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;architecture est un Conformer: un hybride de CNN et de Transformers. Les CNN gerent les
caracteristiques acoustiques locales (phonemes, transitions rapides), les Transformers gerent
le contexte global. Leur imbrication est l&amp;rsquo;astuce standard pour la reconnaissance vocale; le
pari de Cohere est qu&amp;rsquo;un entrainement dedie, fait from scratch et axe sur le WER, surpasse
l&amp;rsquo;approche generaliste.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Covo-Audio de Tencent est un modele audio bout-en-bout de 7 milliards de parametres avec conversation en duplex integral via les tokens THINK, SHIFT et BREAK</title>
      <link>https://christianroy.dev/fr/til/covo-audio-tencent-full-duplex-audio-llm/</link>
      <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/covo-audio-tencent-full-duplex-audio-llm/</guid>
      <description>&lt;p&gt;La plupart des pipelines vocaux IA sont cascades: l&amp;rsquo;ASR transcrit, un LLM raisonne, le
TTS parle. Covo-Audio effondre ces trois etapes en un seul modele de 7 milliards de
parametres qui prend de l&amp;rsquo;audio en entree et produit de l&amp;rsquo;audio en sortie, construit sur
Qwen2.5-7B avec un encodeur Whisper-large-v3.&lt;/p&gt;
&lt;p&gt;La variante duplex integral (Covo-Audio-Chat-FD) est la partie interessante. Elle gere
l&amp;rsquo;ecoute et la parole simultanees via trois tokens speciaux integres dans l&amp;rsquo;architecture:
THINK (ecoute, pas encore de reponse), SHIFT (passage au tour de parole du modele), et
BREAK (l&amp;rsquo;utilisateur a interrompu, arreter de parler immediatement). Chaque segment audio
fait 0,16 seconde. Les flux du modele et de l&amp;rsquo;utilisateur sont entrelaces dans un ratio 1:4.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Le connecteur MCP officiel d&#39;Asana pour Claude ne peut pas creer de taches dans Claude Code CLI car ses outils necessitent une interface interactive</title>
      <link>https://christianroy.dev/fr/til/asana-mcp-create-task-claude-code-cli/</link>
      <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/asana-mcp-create-task-claude-code-cli/</guid>
      <description>&lt;p&gt;Le connecteur officiel Claude d&amp;rsquo;Asana utilise un outil appele &lt;code&gt;create_task_preview&lt;/code&gt; plutot
que &lt;code&gt;create_task&lt;/code&gt;. Le nom suggere un apercu, mais c&amp;rsquo;est en realite l&amp;rsquo;outil principal de
creation dans l&amp;rsquo;integration v2. Le probleme: il necessite une interface interactive pour
afficher une etape de confirmation. Claude Code CLI ne peut pas afficher cette interface,
donc la creation de taches echoue silencieusement.&lt;/p&gt;
&lt;p&gt;Cela a ete mis en evidence dans le forum Asana apres que &lt;code&gt;create_task&lt;/code&gt; ait aussi disparu
temporairement du jeu d&amp;rsquo;outils v1 (Asana l&amp;rsquo;avait accidentellement supprime lors d&amp;rsquo;une mise
a jour v2, maintenant restaure). Asana a confirme le probleme CLI separement et a indique
travailler sur la detection de si la surface supporte l&amp;rsquo;interactivite avant de proposer des
outils interactifs. Estimation: environ une semaine a partir du 26 mars.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TurboQuant de Google compresse les caches KV des LLMs par 6 sans perte de precision et avec un temps d&#39;indexation quasi nul</title>
      <link>https://christianroy.dev/fr/til/turboquant-google-kv-cache-compression/</link>
      <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/turboquant-google-kv-cache-compression/</guid>
      <description>&lt;p&gt;Le cache KV est un goulot d&amp;rsquo;etranglement majeur en memoire pour l&amp;rsquo;inference LLM en contexte
long. Les methodes traditionnelles de quantification vectorielle comme la quantification par
produit necessitent un entrainement de codebook specifique au jeu de donnees qui peut prendre
des centaines de secondes. TurboQuant, de Google Research (ICLR 2026), est independant des
donnees: pas d&amp;rsquo;entrainement, pas de calibration, fonctionne instantanement.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;intuition cle: appliquer une rotation aleatoire aux vecteurs d&amp;rsquo;entree induit une
distribution Beta concentree sur chaque coordonnee en haute dimension, rendant les
coordonnees presque i.i.d. Cela permet de resoudre un simple probleme de quantification
scalaire 1D par coordonnee plutot qu&amp;rsquo;une optimisation conjointe complexe. Les codebooks sont
precalcules une fois par largeur de bits et reutilises au moment de l&amp;rsquo;inference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyLoRA affine un modele de 7 milliards de parametres a 91,8% sur GSM8K avec seulement 13 parametres grace au RL</title>
      <link>https://christianroy.dev/fr/til/tinylora-13-parameters-fine-tuning/</link>
      <pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/tinylora-13-parameters-fine-tuning/</guid>
      <description>&lt;p&gt;Un modele Qwen2.5-7B-Instruct affine avec 13 parametres entrainables (26 octets en bf16)
atteint 91,8% sur GSM8K. L&amp;rsquo;affinage complet de 7,6 milliards de parametres atteint 91,7%.
Ce chiffre n&amp;rsquo;est pas une erreur de frappe, et oui, ce sont le meme type de parametres.&lt;/p&gt;
&lt;p&gt;Pour comprendre pourquoi c&amp;rsquo;est possible, il faut savoir ce que ces 13 parametres font
reellement. Ce ne sont pas 13 poids remplacant 7,6 milliards d&amp;rsquo;autres. Ce sont 13 valeurs
scalaires projetees a travers un tenseur aleatoire fixe en une mise a jour de haute
dimension, qui est ensuite ajoutee aux matrices de poids geles dans toutes les couches.
Vous ne reglez pas 13 boutons a la place de 7,6 milliards - vous reglez 13 directions de
changement qui affectent chacune l&amp;rsquo;ensemble du modele via une transformation mathematique
fixe. Les poids geles font tout le travail; la mise a jour minuscule les oriente.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitAgent définit les agents IA comme des dépôts git, exportables vers n&#39;importe quel framework avec une seule commande CLI</title>
      <link>https://christianroy.dev/fr/til/gitagent-ai-agents-as-git-repos/</link>
      <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/gitagent-ai-agents-as-git-repos/</guid>
      <description>&lt;p&gt;GitAgent propose que votre dépôt git &lt;em&gt;est&lt;/em&gt; votre agent. Deux fichiers obligatoires -
&lt;code&gt;agent.yaml&lt;/code&gt; (le manifeste) et &lt;code&gt;SOUL.md&lt;/code&gt; (l&amp;rsquo;identité) - définissent l&amp;rsquo;agent. Tout
le reste - skills, outils, mémoire, artefacts de conformité - est une structure
optionnelle ajoutée par-dessus.&lt;/p&gt;
&lt;p&gt;La partie intéressante est le modèle de supervision : quand un agent met à jour sa
mémoire ou acquiert un nouveau skill, le changement devient un commit git ou une PR.
Les réviseurs humains peuvent examiner les diff des changements de personnalité de
l&amp;rsquo;agent comme n&amp;rsquo;importe quelle revue de code. Si le comportement dérive, &lt;code&gt;git revert&lt;/code&gt;
le ramène en arrière.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nemotron-Cascade 2 de NVIDIA atteint le niveau medaille d&#39;or en maths et en code avec un MoE de 30B n&#39;utilisant que 3B de parametres actifs</title>
      <link>https://christianroy.dev/fr/til/nemotron-cascade-2-moe-gold-medal-math-coding/</link>
      <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/nemotron-cascade-2-moe-gold-medal-math-coding/</guid>
      <description>&lt;p&gt;Nemotron-Cascade 2 est un modele Mixture-of-Experts de 30B qui n&amp;rsquo;active que 3B de
parametres par passe. C&amp;rsquo;est le deuxieme modele open-weight a atteindre le niveau
medaille d&amp;rsquo;or a l&amp;rsquo;IMO 2025, l&amp;rsquo;IOI 2025 et aux Finales mondiales de l&amp;rsquo;ICPC - apres
DeepSeek a 671B, soit plus de 20 fois la taille.&lt;/p&gt;
&lt;p&gt;La technique principale est le Cascade RL : un apprentissage par renforcement
sequentiel domaine par domaine, ou chaque domaine (maths, code, suivi d&amp;rsquo;instructions,
agents SWE) dispose de ses propres hyperparametres sans destabiliser les autres.
L&amp;rsquo;ajout novateur est la Multi-Domain On-Policy Distillation (MOPD) : quand une etape
de Cascade RL provoque une regression sur d&amp;rsquo;autres benchmarks, on distille a la volee
depuis le meilleur modele enseignant intermediaire pour ce domaine. Sur AIME 2025,
MOPD a atteint les performances de l&amp;rsquo;enseignant en 30 etapes ; GRPO n&amp;rsquo;atteignait que
91.0 apres le meme nombre d&amp;rsquo;etapes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GLM-OCR : un spécialiste du parsing de documents 0.9B qui bat des modèles 235B</title>
      <link>https://christianroy.dev/fr/til/glm-ocr-zhipu-ai-document-parsing-specialist/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/glm-ocr-zhipu-ai-document-parsing-specialist/</guid>
      <description>&lt;p&gt;GLM-OCR est un modèle multimodal OCR de 0.9B qui atteint 94.62 sur OmniDocBench V1.5, se classant premier malgré sa taille compacte. Développé par Zhipu AI, il bat Qwen3-VL-235B (260× plus de paramètres) et Gemini-3 Pro sur les benchmarks de parsing de documents.&lt;/p&gt;
&lt;p&gt;Le modèle combine un encodeur visuel CogViT de 0.4B avec un décodeur GLM de 0.5B. Son innovation clé est la Prédiction Multi-Jeton (MTP), qui prédit 10 jetons par étape au lieu d&amp;rsquo;un seul. Pour l&amp;rsquo;OCR—une tâche déterministe—vous copiez des caractères, pas vous échantillonnez du texte créatif. Cela offre un débit environ 50% plus élevé que le décodage standard.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Le serveur MCP Colab de Google permet a n&#39;importe quel agent IA de creer et d&#39;executer des notebooks dans le cloud</title>
      <link>https://christianroy.dev/fr/til/colab-mcp-server-ai-agents-notebooks/</link>
      <pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/colab-mcp-server-ai-agents-notebooks/</guid>
      <description>&lt;p&gt;Google a publie un serveur MCP open source pour Google Colab. N&amp;rsquo;importe quel
agent compatible MCP - Claude Code, Gemini CLI, ou un agent personnalise - peut
maintenant controler un notebook Colab par programmation : creer des cellules,
ecrire et executer du code, installer des dependances, reorganiser le contenu.&lt;/p&gt;
&lt;p&gt;La configuration tient en un seul bloc :&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-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;colab-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;git+https://github.com/googlecolab/colab-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La motivation est concrete : les developpeurs copiaient du code depuis leur
terminal vers des cellules Colab pour l&amp;rsquo;executer ou visualiser des donnees. Ce
changement de contexte brise la concentration. Avec ce serveur, l&amp;rsquo;agent ecrit
directement dans un notebook ouvert - vous obtenez un artefact reproductible et
executable dans le cloud plutot qu&amp;rsquo;un simple extrait de code dans votre terminal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Qianfan-OCR de Baidu remplace le pipeline OCR multi-etapes par un seul modele de 4B avec Layout-as-Thought</title>
      <link>https://christianroy.dev/fr/til/qianfan-ocr-layout-as-thought-document-intelligence/</link>
      <pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/qianfan-ocr-layout-as-thought-document-intelligence/</guid>
      <description>&lt;p&gt;Les pipelines OCR traditionnels enchainent au moins trois modeles : un detecteur de
mise en page, un moteur de reconnaissance de texte, et un modele de langage pour la
comprehension. Qianfan-OCR remplace les trois par un seul modele de 4B qui passe
directement de l&amp;rsquo;image au Markdown.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;innovation cle est le Layout-as-Thought : ajouter un token &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; a n&amp;rsquo;importe
quelle invite declenche une phase de raisonnement optionnelle ou le modele analyse
explicitement les boites englobantes, les types d&amp;rsquo;elements et l&amp;rsquo;ordre de lecture avant
de produire la sortie. C&amp;rsquo;est du Chain-of-Thought applique a la mise en page - et c&amp;rsquo;est
optionnel, donc on peut le desactiver pour les documents simples a colonne unique afin
de reduire la latence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenShell de NVIDIA applique les garde-fous des agents IA en dehors du processus agent, pour qu&#39;un agent compromis ne puisse pas les contourner</title>
      <link>https://christianroy.dev/fr/til/nvidia-openshell-out-of-process-agent-guardrails/</link>
      <pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/nvidia-openshell-out-of-process-agent-guardrails/</guid>
      <description>&lt;p&gt;Le probleme avec les garde-fous qui vivent a l&amp;rsquo;interieur de l&amp;rsquo;agent : un agent
compromis peut les contourner. Claude Code et Cursor embarquent des prompts de
securite internes, mais ces protections sont dans le meme processus qu&amp;rsquo;elles sont
censees surveiller. Une injection de prompt ou un skill tiers malveillant a acces
au meme environnement d&amp;rsquo;execution.&lt;/p&gt;
&lt;p&gt;NVIDIA OpenShell deplace le point d&amp;rsquo;application en dehors. Il encapsule n&amp;rsquo;importe
quel agent dans un conteneur isole avec des politiques YAML que l&amp;rsquo;agent ne peut ni
lire ni modifier. L&amp;rsquo;acces reseau est refuse par defaut et rechargeable a chaud ; les
contraintes sur le systeme de fichiers et les processus sont verouillees a la
creation. L&amp;rsquo;agent ne peut pas escalader ses privileges parce que le noyau ne le
permet pas - pas parce qu&amp;rsquo;on lui a dit de ne pas le faire.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unsloth Studio est une interface no-code open source pour entraîner et exécuter des LLMs localement</title>
      <link>https://christianroy.dev/fr/til/unsloth-studio-no-code-local-llm-training/</link>
      <pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/unsloth-studio-no-code-local-llm-training/</guid>
      <description>&lt;p&gt;Unsloth Studio regroupe l&amp;rsquo;inférence locale, le fine-tuning et l&amp;rsquo;export de modèles dans
une seule interface web sans code. Une commande curl suffit pour l&amp;rsquo;installer; on peut
ensuite exécuter des modèles GGUF ou safetensor sur Mac, Windows ou Linux sans écrire
une seule ligne de code.&lt;/p&gt;
&lt;p&gt;Le volet entraînement est le principal attrait: fine-tuning 2x plus rapide avec 70% moins
de VRAM sur 500+ familles de modèles (texte, vision, TTS, embeddings). LoRA, FP8 et
le fine-tuning complet fonctionnent sur le matériel NVIDIA, avec support multi-GPU
déjà intégré.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mistral Small 4 fusionne instruct, raisonnement et code en un seul modele avec un effort de raisonnement configurable par requete</title>
      <link>https://christianroy.dev/fr/til/mistral-small-4-unified-instruct-reasoning-coding/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/mistral-small-4-unified-instruct-reasoning-coding/</guid>
      <description>&lt;p&gt;Mistral Small 4 remplace trois modeles Mistral distincts - Magistral pour le
raisonnement, Devstral pour les agents de code, et Mistral Small pour les instructions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;par un seul modele MoE de 119 milliards de parametres (128 experts, 4 actifs,
6,5 milliards de parametres actifs par token). Le comportement se choisit par requete
via un parametre &lt;code&gt;reasoning_effort&lt;/code&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;reasoning_effort=&amp;quot;none&amp;quot;&lt;/code&gt;: reponses rapides style chat, equivalent a Mistral Small 3.2&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;reasoning_effort=&amp;quot;high&amp;quot;&lt;/code&gt;: raisonnement approfondi etape par etape, equivalent a Magistral&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenViking: Une base de contexte utilisant un paradigme de système de fichiers pour les agents IA</title>
      <link>https://christianroy.dev/fr/til/openviking-context-database-ai-agents/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/openviking-context-database-ai-agents/</guid>
      <description>&lt;p&gt;OpenViking abandonne le stockage vectoriel RAG traditionnel et utilise plutôt un paradigme de système de fichiers. Il organise le contexte de l&amp;rsquo;agent (mémoires, ressources, compétences) sous les URI &lt;code&gt;viking://&lt;/code&gt; avec une structure à trois niveaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;L0 (Abstract)&lt;/strong&gt;: Résumé en une phrase pour une récupération rapide&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L1 (Overview)&lt;/strong&gt;: Informations essentielles et scénarios d&amp;rsquo;utilisation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L2 (Details)&lt;/strong&gt;: Données originales complètes, chargées à la demande&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela permet une récupération récursive par répertoires qui verrouille d&amp;rsquo;abord les répertoires à haut score, puis affine l&amp;rsquo;exploration du contenu. La trajectoire de récupération est entièrement observable, permettant aux utilisateurs de voir exactement comment le contexte est accédé.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On peut forcer un LLM a ne produire que des reponses valides</title>
      <link>https://christianroy.dev/fr/til/static-constrained-decoding-gpu/</link>
      <pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/static-constrained-decoding-gpu/</guid>
      <description>&lt;p&gt;YouTube vient de publier en open source un projet appele &lt;a href=&#34;https://github.com/youtube/static-constraint-decoding&#34;&gt;STATIC&lt;/a&gt;
qui resout un probleme que la plupart des gens ignorent: &lt;strong&gt;les LLMs peuvent dire n&amp;rsquo;importe quoi,
mais parfois vous avez besoin qu&amp;rsquo;ils choisissent uniquement parmi une liste specifique.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;le-probleme&#34;&gt;Le probleme&lt;/h2&gt;
&lt;p&gt;Quand un LLM genere du texte, il choisit un token (mot/chiffre) a la fois parmi un
vocabulaire de ~32 000 options. C&amp;rsquo;est ideal pour la conversation, mais terrible quand vous
avez besoin qu&amp;rsquo;il produise quelque chose de precis: un identifiant de produit valide, un
code medical, ou une recommandation video parmi un catalogue de millions d&amp;rsquo;entrees.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Passer les reponses d&#39;agents Mastra dans jq pour coloriser le raisonnement et les appels d&#39;outils dans le terminal</title>
      <link>https://christianroy.dev/fr/til/mastra-jq-ansi-agent-responses/</link>
      <pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/mastra-jq-ansi-agent-responses/</guid>
      <description>&lt;p&gt;L&amp;rsquo;API HTTP d&amp;rsquo;agents de Mastra retourne une structure JSON avec des &lt;code&gt;steps&lt;/code&gt;, chacune
contenant des elements &lt;code&gt;content&lt;/code&gt; types comme &lt;code&gt;reasoning&lt;/code&gt;, &lt;code&gt;tool-call&lt;/code&gt;, &lt;code&gt;tool-result&lt;/code&gt; et
&lt;code&gt;text&lt;/code&gt;. La sortie brute est dense. Commencez par l&amp;rsquo;explorer:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Appeler l&amp;#39;API et voir la structure brute&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http localhost:4111/api/agents/weather-agent/generate &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  messages&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;what&amp;#39;s the weather in montreal?&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq .
&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 class=&#34;c1&#34;&gt;# Obtenir uniquement la reponse finale&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http localhost:4111/api/agents/weather-agent/generate &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  messages&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;what&amp;#39;s the weather in montreal?&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.text&amp;#39;&lt;/span&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 class=&#34;c1&#34;&gt;# Explorer ce qui se trouve dans les steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http localhost:4111/api/agents/weather-agent/generate &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  messages&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;what&amp;#39;s the weather in montreal?&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.steps[].content[] | .type&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;reasoning&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;tool-call&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;tool-result&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;reasoning&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;text&amp;#34;&lt;/span&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 class=&#34;c1&#34;&gt;# Voir quels champs chaque type possede&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http localhost:4111/api/agents/weather-agent/generate &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  messages&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;what&amp;#39;s the weather in montreal?&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.steps[].content[] | select(.type == &amp;#34;tool-call&amp;#34;)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois la structure comprise, passez dans &lt;code&gt;jq -r&lt;/code&gt; avec des sequences d&amp;rsquo;echappement
ANSI en ligne pour coloriser chaque element:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Les skills OpenClaw disparaissent silencieusement sans descriptions YAML entre guillemets et sans metadonnees openclaw</title>
      <link>https://christianroy.dev/fr/til/openclaw-skill-frontmatter-metadata/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/openclaw-skill-frontmatter-metadata/</guid>
      <description>&lt;p&gt;Si un skill OpenClaw personnalise n&amp;rsquo;apparait pas dans &lt;code&gt;openclaw skills list&lt;/code&gt; et que
l&amp;rsquo;agent ne peut pas le voir non plus, le frontmatter de SKILL.md est probablement en
cause. OpenClaw echoue silencieusement, donc le retour de debogage est minimal.&lt;/p&gt;
&lt;p&gt;Deux choses doivent etre correctes. Premierement, tout &lt;code&gt;name&lt;/code&gt; ou &lt;code&gt;description&lt;/code&gt; contenant
un deux-points doit etre entoure de guillemets doubles, sinon YAML interprete le
deux-points comme un separateur cle-valeur et l&amp;rsquo;analyse echoue. Deuxiemement, le
frontmatter doit inclure un bloc de metadonnees &lt;code&gt;openclaw&lt;/code&gt; declarant l&amp;rsquo;icone emoji et
les binaires ou variables d&amp;rsquo;environnement requis. Sans cela, OpenClaw n&amp;rsquo;enregistrera
pas le skill du tout.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lyria 3 de Google DeepMind génère des chansons complètes à partir d&#39;une photo ou d&#39;une phrase</title>
      <link>https://christianroy.dev/fr/til/lyria3-music-gen/</link>
      <pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/lyria3-music-gen/</guid>
      <description>&lt;p&gt;Lyria 3 prend un prompt texte ou une image et produit un track complet: instrumentation,
voix, paroles. Pas une boucle, pas un mood board. Une chanson.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;entrée image, c&amp;rsquo;est ce qui le rend intéressant. La plupart des modèles audio génératifs
prennent du texte. Lyria 3 peut regarder une photo et décider à quoi ça ressemble soniquement.
C&amp;rsquo;est un type d&amp;rsquo;interprétation créative différent, plus proche de la façon dont un compositeur
pourrait répondre à une œuvre visuelle que d&amp;rsquo;une spec écrite.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Un site peut servir une vraie interface terminal ANSI quand on le curle plutôt que du HTML</title>
      <link>https://christianroy.dev/fr/til/curl-ansi-terminal-website/</link>
      <pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/curl-ansi-terminal-website/</guid>
      <description>&lt;p&gt;Faire &lt;code&gt;curl ysap.sh&lt;/code&gt; ne retourne pas du HTML. Ça retourne une interface terminal complètement
rendue: en-tête en pixel art, panneaux avec bordures, disposition en deux colonnes, liens en
couleur. Exactement ce qu&amp;rsquo;on attendrait d&amp;rsquo;une app TUI, livré via HTTP ordinaire.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;astuce: inspecter l&amp;rsquo;en-tête &lt;code&gt;User-Agent&lt;/code&gt;. Quand il commence par &lt;code&gt;curl/&lt;/code&gt;, répondre avec
des codes d&amp;rsquo;échappement ANSI et des caractères de dessin. Quand c&amp;rsquo;est un navigateur,
répondre avec du HTML. Même URL, deux expériences complètement différentes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTTPie a besoin de --ignore-stdin dans les environnements non-TTY comme Claude Code</title>
      <link>https://christianroy.dev/fr/til/httpie-ignore-stdin-claude-code/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/httpie-ignore-stdin-claude-code/</guid>
      <description>&lt;p&gt;HTTPie détecte s&amp;rsquo;il tourne dans un TTY. Quand il n&amp;rsquo;y en a pas, comme lorsque Claude Code
l&amp;rsquo;appelle comme subprocess, HTTPie suppose que stdin pourrait avoir des données à venir et
interprète la requête comme un POST, même si tu voulais faire un GET.&lt;/p&gt;
&lt;p&gt;La correction, c&amp;rsquo;est &lt;code&gt;--ignore-stdin&lt;/code&gt; :&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http --ignore-stdin GET localhost:3000/things
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le piège : une fois que tu dis à Claude Code de toujours utiliser &lt;code&gt;--ignore-stdin&lt;/code&gt;, il va
aussi l&amp;rsquo;utiliser quand tu pipes des données, ce qui brise complètement ce cas d&amp;rsquo;utilisation :&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTTPie interprète les clés numériques comme des index de tableau, brise les mises à jour de champs personnalisés Asana</title>
      <link>https://christianroy.dev/fr/til/httpie-asana-custom-fields-oom/</link>
      <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/httpie-asana-custom-fields-oom/</guid>
      <description>&lt;p&gt;Les GID de champs personnalisés Asana sont de longues chaînes numériques. Quand tu les passes
comme clés imbriquées avec la syntaxe bracket d&amp;rsquo;HTTPie, HTTPie voit une clé numérique et suppose
que tu construis un tableau, puis essaie d&amp;rsquo;allouer de la mémoire jusqu&amp;rsquo;à cet index. Avec un GID
à 16 chiffres, c&amp;rsquo;est suffisant pour faire planter le processus en OOM.&lt;/p&gt;
&lt;p&gt;Ça brise :&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https --session pat PUT https://app.asana.com/api/1.0/tasks/1208765432100001 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  data&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;custom_fields&lt;span class=&#34;o&#34;&gt;][&lt;/span&gt;1205432109876543&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1205432109876544&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;HTTPie lit &lt;code&gt;1205432109876543&lt;/code&gt; comme un index de tableau et tente de construire un tableau
sparse de cette taille. Il n&amp;rsquo;arrive même jamais à faire la requête.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code tourne nativement comme GitHub Action</title>
      <link>https://christianroy.dev/fr/til/claude-code-gha/</link>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/claude-code-gha/</guid>
      <description>&lt;p&gt;Anthropic livre une &lt;code&gt;claude-code-action&lt;/code&gt; officielle qui fait tourner Claude Code à l&amp;rsquo;intérieur
d&amp;rsquo;un workflow GitHub Actions. Elle peut lire ton repo, écrire des fichiers, exécuter des commandes
et committer, tout ça déclenché par un commentaire sur une PR ou selon un horaire planifié.&lt;/p&gt;
&lt;p&gt;Ce qui est intéressant : elle utilise le même Claude Code que tu lances localement, donc tes
instructions dans &lt;code&gt;CLAUDE.md&lt;/code&gt; s&amp;rsquo;appliquent. L&amp;rsquo;action respecte le même modèle de permissions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>L&#39;essaim d&#39;agents de Kimi deploie jusqu&#39;a 100 sous-agents en parallele pour contourner les limites de fenetre de contexte</title>
      <link>https://christianroy.dev/fr/til/kimi-agent-swarm-parallel-sub-agents/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/kimi-agent-swarm-parallel-sub-agents/</guid>
      <description>&lt;p&gt;La partie interessante n&amp;rsquo;est pas le parallelisme lui-meme, c&amp;rsquo;est la raison qui le motive.
Un agent unique sur une tache longue finit par atteindre sa fenetre de contexte et commence
a compresser le contexte anterieur, degradant la qualite des sorties. La solution de Kimi:
deployer jusqu&amp;rsquo;a 100 sous-agents, chacun avec son propre contexte frais, coordonnes en essaim.&lt;/p&gt;
&lt;p&gt;Le systeme est auto-organise: il determine combien d&amp;rsquo;agents deployer et comment diviser le
travail selon la tache. Dans leurs benchmarks, ils citent des resultats 4,5 fois plus rapides
et plus de 1 500 appels d&amp;rsquo;outils par tache.&lt;/p&gt;</description>
    </item>
    <item>
      <title>glow enlève les couleurs quand appelé depuis un subprocess: forcer avec des variables d&#39;environnement</title>
      <link>https://christianroy.dev/fr/til/glow-ansi-subprocess/</link>
      <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/glow-ansi-subprocess/</guid>
      <description>&lt;p&gt;&lt;code&gt;glow&lt;/code&gt; détecte s&amp;rsquo;il écrit vers un vrai terminal. Quand il est appelé depuis un script ou un
subprocess (comme &lt;code&gt;subprocess.run&lt;/code&gt; en Python), il ne voit pas de TTY et enlève tous les codes
de couleur ANSI, tu te retrouves avec du texte plain.&lt;/p&gt;
&lt;p&gt;La correction se fait avec deux variables d&amp;rsquo;environnement :&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CLICOLOR_FORCE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;COLORTERM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;truecolor glow --style dark file.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;CLICOLOR_FORCE=1&lt;/code&gt; indique aux outils CLI qui gèrent les couleurs d&amp;rsquo;en émettre peu importe
la détection de TTY. &lt;code&gt;COLORTERM=truecolor&lt;/code&gt; dit à glow d&amp;rsquo;utiliser les couleurs 24 bits au lieu
de se rabattre sur le mode 8 couleurs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zvec est une base de donnees vectorielle embarquee qui vise a etre le SQLite de la recherche vectorielle</title>
      <link>https://christianroy.dev/fr/til/zvec-embedded-vector-database/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/zvec-embedded-vector-database/</guid>
      <description>&lt;p&gt;Zvec est une base de donnees vectorielle embarquee open source d&amp;rsquo;Alibaba, construite sur
leur moteur Proxima. Le positionnement est simple: une recherche vectorielle qui s&amp;rsquo;execute
en cours de processus, sans serveur, avec la meme facilite d&amp;rsquo;installation que SQLite.&lt;/p&gt;
&lt;p&gt;Le vide qu&amp;rsquo;il comble est reel. Faiss donne des index mais pas de CRUD ni de recuperation
apres crash. DuckDB-VSS a des fonctionnalites vectorielles limitees. Milvus necessite son
propre processus et un saut reseau. Zvec vise a etre l&amp;rsquo;option qui fonctionne simplement
quand on construit un pipeline RAG local, un outil en ligne de commande, ou n&amp;rsquo;importe
quoi en local ou on a besoin de recherche semantique sans infrastructure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Les LLM ont du mal avec le format rich text non standard d&#39;Asana</title>
      <link>https://christianroy.dev/fr/til/asana-rich-text-llm/</link>
      <pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/asana-rich-text-llm/</guid>
      <description>&lt;p&gt;L&amp;rsquo;API rich text d&amp;rsquo;Asana n&amp;rsquo;utilise pas du HTML standard. Elle accepte un sous-ensemble strict avec
des règles bien précises : seulement certaines balises sont permises, les règles d&amp;rsquo;imbrication
diffèrent de ce que les navigateurs tolèrent, et le format se rapproche plus du XML que du HTML,
ce qui veut dire que les balises non fermées, les attributs flottants, ou quoi que ce soit hors
de l&amp;rsquo;ensemble autorisé sera rejeté ou silencieusement déformé.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Les serveurs MCP supportent les prompts comme concept de premier ordre, distinct des outils</title>
      <link>https://christianroy.dev/fr/til/mcp-server-asana-1-1-0-prompts/</link>
      <pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/til/mcp-server-asana-1-1-0-prompts/</guid>
      <description>&lt;p&gt;Quand j&amp;rsquo;ai publié mcp-server-asana 1.1.0, l&amp;rsquo;ajout principal n&amp;rsquo;était pas les six nouveaux
outils Asana (dépendances de tâches, commentaires, sous-tâches, sections de projet).
C&amp;rsquo;était les prompts.&lt;/p&gt;
&lt;p&gt;Dans le protocole MCP, prompts et outils sont des concepts distincts. Les outils sont des
actions individuelles qu&amp;rsquo;un LLM peut invoquer: créer une tâche, ajouter une dépendance,
récupérer un commentaire. Les prompts sont des modèles de conversation prédéfinis:
paramétrables, réutilisables, que l&amp;rsquo;hôte MCP peut proposer directement à l&amp;rsquo;utilisateur.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://christianroy.dev/fr/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/contact/</guid>
      <description>&lt;p&gt;Je suis disponible pour des contrats, pas des postes permanents. Si vous avez
une opportunité de contrat (temps plein ou temps partiel soirs/fins de semaine),
n&amp;rsquo;hésitez pas à me contacter.&lt;/p&gt;
&lt;p&gt;La meilleure façon de me joindre est via &lt;a href=&#34;https://ca.linkedin.com/in/roychri&#34;&gt;mon profil LinkedIn&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Projets</title>
      <link>https://christianroy.dev/fr/projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://christianroy.dev/fr/projects/</guid>
      <description>&lt;p&gt;Une sélection de projets, open source et internes, parmi un ensemble de réalisations plus large.&lt;/p&gt;
&lt;h2 id=&#34;open-source&#34;&gt;Open Source&lt;/h2&gt;
&lt;h3 id=&#34;mcp-server-asana&#34;&gt;mcp-server-asana&lt;/h3&gt;
&lt;p&gt;Un serveur MCP (Model Context Protocol) qui intègre Asana avec des agents IA
et des outils LLM. Développé alors que MCP était tout nouveau ; a atteint
120+ étoiles sur GitHub par adoption organique de développeurs construisant
des workflows IA.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/roychri/mcp-server-asana&#34;&gt;Voir sur GitHub →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;outils-internes&#34;&gt;Outils internes&lt;/h2&gt;
&lt;p&gt;Ces outils ont été développés pour de vrais environnements de production.
Les détails des clients restent confidentiels.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
