<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog Maguyva</title><description>Analyses techniques approfondies sur l&apos;intelligence de code MCP, l&apos;architecture des agents IA, et les leçons tirées de la construction d&apos;une plateforme de recherche de code multi-langages.</description><link>https://maguyva.ai/fr/blog</link><language>fr</language><atom:link href="https://maguyva.ai/fr/rss.xml" rel="self" type="application/rss+xml"/><item><title>Un contexte qui voyage</title><link>https://maguyva.ai/fr/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/context-that-travels</guid><description>L&apos;indexeur de Cursor est excellent dans Cursor. Maguyva est la carte MCP hébergée que le même agent peut interroger depuis d&apos;autres éditeurs, CLI et environnements CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;L’indexeur de Cursor est excellent dans Cursor. La complétion, l’édition en ligne, le chat et l’agent dans cette fenêtre s’appuient déjà sur un index de projet que Cursor gère pour l’espace de travail ouvert. Si Cursor est la seule surface où vous écrivez, et que cet index trouve déjà les bons fichiers, restez-y. C’est le cas honnête du « restez où vous êtes » , et c’est à raison la première phrase de cette page.&lt;/p&gt;
&lt;p&gt;Ce texte parle de l’autre moitié d’une semaine ordinaire. Le même dépôt est aussi ouvert dans Claude Code, interrogé depuis Codex CLI, revu sur une seconde machine, ou consulté par un agent tournant en CI. La question n’est pas « quel indexeur est le meilleur » . La question est de savoir si la carte à laquelle l’agent fait confiance dans une fenêtre est la même que celle à laquelle il fait confiance dans la suivante.&lt;/p&gt;
&lt;p&gt;Maguyva est cette carte qui voyage. C’est une couche de contexte de code MCP distante. L’agent l’interroge de la même façon qu’il interroge tout autre outil MCP. Les résultats reviennent sous forme de chemins classés avec des numéros de ligne. Cursor reste l’éditeur. Le contexte est ce qui se déplace.&lt;/p&gt;
&lt;h2 id=&quot;à-quoi-sert-lindexeur-de-cursor&quot;&gt;À quoi sert l’indexeur de Cursor&lt;/h2&gt;
&lt;p&gt;L’indexation intégrée de Cursor existe pour que le chat, l’agent et la recherche dans l’éditeur puissent récupérer du code pertinent au lieu de dépendre uniquement de ce qui tient dans la fenêtre de contexte brute du modèle. C’est le bon design pour un IDE. L’index est natif à Cursor. Ce n’est pas un serveur MCP et il n’est accessible depuis aucun autre client.&lt;/p&gt;
&lt;p&gt;Voici comment cela fonctionne, tel que décrit dans la documentation publique de Cursor et par Cursor elle-même au moment de la rédaction : le chemin de recherche principal n’est plus un index d’embeddings dans le cloud. L’équipe de Cursor a déclaré sur son forum communautaire que la recherche sémantique/par embeddings dédiée est progressivement abandonnée au profit d’une récupération basée sur grep, car les modèles actuels explorent suffisamment bien un arbre vivant par eux-mêmes. À sa place se trouve Instant Grep, un index de recherche local construit à partir de n-grammes, de listes inversées et de filtres de Bloom, conservé dans une table de correspondance mappée en mémoire, de sorte que les requêtes se résolvent sur la machine du développeur plutôt que sur un serveur.&lt;/p&gt;
&lt;p&gt;L’index lui-même vit dans le propre répertoire &lt;code&gt;.git/cursor/&lt;/code&gt; du dépôt, ancré à un commit git précis ; les modifications depuis ce commit se superposent au lieu de déclencher une nouvelle analyse, et l’index ne se reconstruit que lorsque l’état local a fortement dérivé de ce sur quoi il a été construit. Comme il se trouve dans &lt;code&gt;.git&lt;/code&gt;, il n’est jamais suivi ni poussé — supprimez le dossier, et l’index disparaît. &lt;code&gt;.gitignore&lt;/code&gt; est respecté par construction, puisque seul le contenu suivi par git est éligible, et &lt;code&gt;.cursorignore&lt;/code&gt; est appliqué sur le chemin de lecture. Il n’y a plus d’étape d’embedding côté serveur ni de base de données vectorielle distante dans ce chemin. La documentation antérieure décrivait une conception assistée par le cloud — chiffrement des blocs, synchronisation par arbre de Merkle, réutilisation d’index entre coéquipiers — et l’équipe de Cursor a depuis indiqué que cette conception est abandonnée, donc ce texte ne la décrit plus comme actuelle.&lt;/p&gt;
&lt;p&gt;Un atout dans l’éditeur est le sous-agent Explore de Cursor. Il peut lancer plusieurs recherches parallèles dans sa propre fenêtre de contexte, sur un modèle plus rapide, et ne renvoyer que les résultats pertinents, de sorte que la conversation principale ne gonfle pas avec des résultats de recherche. C’est une vraie force propre à l’éditeur. Gardez-la.&lt;/p&gt;
&lt;p&gt;Les espaces de travail multi-racines sont pris en charge : le contexte de chaque dossier ouvert est disponible pour l’agent. Certaines fonctionnalités dépendantes de git, comme les worktrees, sont désactivées dans les configurations multi-racines, et les Cloud Agents ne prennent pas du tout en charge les espaces de travail multi-racines.&lt;/p&gt;
&lt;p&gt;Rien de tout cela n’est une raison de quitter Cursor. C’est une description précise d’une carte excellente là où elle vit.&lt;/p&gt;
&lt;h2 id=&quot;ce-que--voyager--signifie-vraiment&quot;&gt;Ce que « voyager » signifie vraiment&lt;/h2&gt;
&lt;p&gt;Une carte voyage quand les mêmes questions renvoient le même type de réponse, avec des citations que vous pouvez ouvrir, depuis plus d’un client.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dans Cursor : « Où &lt;code&gt;parseConfig&lt;/code&gt; est-il défini, et qui l’appelle ? »&lt;/li&gt;
&lt;li&gt;Dans Claude Code, sur le même dépôt : la même question.&lt;/li&gt;
&lt;li&gt;Dans Codex CLI, sur une machine de revue qui n’a jamais ouvert la fenêtre Cursor : la même question.&lt;/li&gt;
&lt;li&gt;Dans un agent CI qui parle MCP : la même question, contre le même instantané hébergé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si chaque surface construit son propre index privé, vous n’avez pas une carte. Vous avez plusieurs caches qui divergent. L’index de l’éditeur peut être à jour pour l’arbre sur le disque. La session CLI peut avoir un jour de retard. Le job CI peut regarder un checkout différent. L’agent continuera pourtant de paraître sûr de lui.&lt;/p&gt;
&lt;p&gt;L’indexeur de Cursor n’est pas censé résoudre cela. Comme il vit dans l’éditeur, le contexte qu’il construit est pour cet éditeur. Un lecteur qui a aussi besoin d’une CLI, d’un pipeline CI ou d’un autre éditeur a besoin d’un outil séparé pour ces surfaces. C’est un fait de périmètre, pas un défaut. Maguyva est cet outil séparé.&lt;/p&gt;
&lt;p&gt;Un nombre de langages publié pour l’indexeur de Cursor n’est pas indiqué dans les notes que ce texte est autorisé à utiliser. Maguyva publie plus de 279 langages et technologies textuelles. Les tarifs de Cursor ne sont pas non plus repris ici ; voir leur page de tarification. Maguyva facture par espace de travail, pas par siège, avec des offres publiées à 0 $, 19 $, 49 $ et 149 $ selon l’empreinte indexée et la taille de l’espace de travail.&lt;/p&gt;
&lt;h2 id=&quot;une-carte-hébergée-tous-les-clients-mcp&quot;&gt;Une carte hébergée, tous les clients MCP&lt;/h2&gt;
&lt;p&gt;Maguyva est un serveur MCP distant. Vous connectez GitHub, choisissez les dépôts, et le pipeline cloud construit les symboles, les arêtes du graphe et une carte classée. Vous ajoutez une clé API à la configuration MCP du client que vous utilisez déjà. Maguyva propose des guides de configuration pour 24 clients MCP documentés — Cursor inclus — et peut se connecter à d’autres clients compatibles MCP prenant en charge la configuration standard.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/fr/for-cursor&quot;&gt;page de configuration Cursor&lt;/a&gt; est le chemin spécifique à l’éditeur si c’est là que vous travaillez. Le même serveur répond à Claude Code, VS Code, Windsurf, Codex CLI et les autres. Vous ne changez pas d’éditeur. Vous donnez à chaque agent la même surface d’outils : 11 outils MCP orientés client à travers la recherche, les symboles, l’analyse de dépendances, la récupération de fichiers, le contexte de dépôt et des workflows utilitaires déterministes. Les récupérations sémantique, structurelle, par graphe et textuelle sont fusionnées en résultats classés.&lt;/p&gt;
&lt;p&gt;C’est là l’avantage de la portabilité. Les citations que vous avez vérifiées dans Cursor ce matin ont la même forme que celles que Codex CLI renverra ce soir. Chemin de fichier et numéro de ligne. Ouvrez-les. Si elles sont fausses, vous le voyez. Si elles sont justes, la prochaine modification a un endroit où atterrir. L’affirmation validée est moins de modifications hallucinées, pas la promesse que chaque modification est correcte.&lt;/p&gt;
&lt;p&gt;La fraîcheur est publiée. Les instantanés sont horodatés, afin que l’agent sache quelle version de l’arbre il lit. La cadence de reconstruction est quotidienne sur le plan gratuit et horaire sur les plans payants. La limite honnête est le travail local non synchronisé : une modification qui n’existe que dans un arbre de travail n’est pas encore dans la carte hébergée. Cette limite est la même quel que soit le client depuis lequel vous interrogez, et c’est justement le point. La dérive entre clients n’est plus une seconde limite cachée.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/fr/docs&quot;&gt;documentation&lt;/a&gt; donne la boucle d’activation qui s’applique à chaque client : indexer un dépôt que vous connaissez déjà, connecter le client, poser une question que vous pouvez vérifier. Faites-le une fois dans Cursor. Refaites-le depuis la CLI que vous utilisez réellement les jours de revue. Si les deux réponses citent le même gestionnaire, la carte a voyagé.&lt;/p&gt;
&lt;h2 id=&quot;comment-les-deux-cartes-coexistent&quot;&gt;Comment les deux cartes coexistent&lt;/h2&gt;
&lt;p&gt;Utilisez les deux. Ce ne sont pas des alternatives au sens d’une page de comparaison.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Gardez l’indexeur de Cursor actif pour le projet sur le disque. Laissez Explore, Instant Grep et l’agent dans l’éditeur l’utiliser. Cette boucle est native et rapide.&lt;/li&gt;
&lt;li&gt;Ajoutez Maguyva comme serveur MCP dans Cursor pour que la même session puisse aussi interroger la carte d’espace de travail hébergée. Cursor est un client Maguyva documenté. Vous ne choisissez pas un index en supprimant l’autre.&lt;/li&gt;
&lt;li&gt;Ajoutez le même serveur Maguyva à Claude Code, Codex CLI, ou tout autre client MCP qui touche le dépôt. Une seule forme de clé API. Un seul espace de travail.&lt;/li&gt;
&lt;li&gt;Si un agent CI est compatible MCP, pointez-le vers le même serveur. Il lira le même instantané horodaté que le portable.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’index de l’éditeur reste le meilleur outil pour « ce qui est sur le disque dans cette fenêtre, maintenant » . La carte hébergée est le meilleur outil pour « à quoi ressemble cet espace de travail pour chaque agent qui le touchera aujourd’hui » . Ces phrases ne sont pas en concurrence.&lt;/p&gt;
&lt;p&gt;Les quotas d’espace de travail sont publiés sur la &lt;a href=&quot;https://maguyva.ai/fr/pricing&quot;&gt;page de tarification&lt;/a&gt; : dépôts, lignes indexées et utilisateurs, facturés par espace de travail. Agents et humains partagent le même compte d’utilisateurs. Commencez gratuitement sur un dépôt que vous savez déjà évaluer. Augmentez l’espace de travail seulement après que les citations ont survécu au contact avec l’arbre.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-cette-page-naffirme-pas&quot;&gt;Ce que cette page n’affirme pas&lt;/h2&gt;
&lt;p&gt;Elle n’affirme pas que l’indexeur de Cursor est faible, incomplet, ou une raison de changer d’éditeur. La première phrase de ce texte est l’inverse.&lt;/p&gt;
&lt;p&gt;Elle n’affirme pas que Maguyva remplace Instant Grep ou le sous-agent Explore. Ce sont des fonctionnalités de Cursor. Elles restent dans Cursor.&lt;/p&gt;
&lt;p&gt;Elle n’invente pas de nombre de langages, de chiffre de latence, ni d’économie de tokens pour l’un ou l’autre produit. Les chiffres inconnus restent non publiés.&lt;/p&gt;
&lt;p&gt;Elle ne prétend pas que le travail local non poussé se trouve dans la carte hébergée. Les instantanés horodatés rendent cette limite visible. Ils ne la suppriment pas.&lt;/p&gt;
&lt;p&gt;Le test est ordinaire. Indexez un dépôt que vous connaissez déjà. Posez une question que vous pouvez vérifier, d’abord dans Cursor, puis dans un second client MCP. Un contexte qui voyage, c’est la même citation aux deux endroits.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>D&apos;abord la carte, ensuite la revue</title><link>https://maguyva.ai/fr/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/map-first-review-second</guid><description>Ancrez l&apos;agent de code dans une carte du dépôt avant qu&apos;il n&apos;écrive. Laissez Greptile relire la pull request ensuite. Un duo complémentaire, pas un remplacement.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Deux tâches différentes se situent de part et d’autre d’une pull request. Avant que l’agent n’écrive, il a besoin d’une carte de l’arbre qu’il s’apprête à modifier. Une fois que l’agent a ouvert une PR, quelque chose devrait lire ce changement au regard du reste du système et laisser des commentaires qu’un humain peut exploiter.&lt;/p&gt;
&lt;p&gt;Ces tâches se ressemblent de loin car toutes deux impliquent de « comprendre la base de code » . Ce ne sont pas le même produit. L’une répond à « où cette modification devrait-elle atterrir ? » . L’autre répond à « qu’est-ce que ce diff a cassé qu’un linter ligne par ligne va manquer ? » . Les confondre produit un premier jet plus mauvais et une revue plus bruyante.&lt;/p&gt;
&lt;p&gt;Ce texte est un guide de workflow conjoint. Maguyva est la carte que l’agent interroge en premier. Greptile est l’agent de revue qui commente la PR ensuite. Le duo est complémentaire par construction : Maguyva ne relit pas les pull requests, et Greptile ne remplace pas la couche de contexte que l’agent a utilisée pour les écrire.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-cette-répartition-est-utile&quot;&gt;Pourquoi cette répartition est utile&lt;/h2&gt;
&lt;p&gt;Un agent de code qui part de priors d’entraînement plus quelques fichiers collés inventera un chemin plausible et le modifiera. C’est l’échec du mauvais fichier, et c’est un problème de récupération. Maguyva est une couche de contexte de code MCP distante : récupération sémantique, structurelle (AST), par graphe/dépendance et textuelle, fusionnée en résultats classés, plus recherche de symboles et récupération de fichiers. Les réponses fondées reviennent sous forme de &lt;code&gt;path/file.ext:line&lt;/code&gt;, afin que vous puissiez rejeter une erreur avant qu’un correctif n’existe. L’affirmation reste modeste : moins de modifications hallucinées. Le modèle peut toujours deviner. La première étape cesse simplement d’être une supposition.&lt;/p&gt;
&lt;p&gt;Greptile est un agent de revue de code par IA. Selon leurs propres mots, il relit automatiquement chaque pull request avec une compréhension complète de la base de code, et positionne cela face aux linters traditionnels qui vérifient les fichiers isolément plutôt que le système entier. La configuration consiste à installer l’application GitHub ou GitLab et à sélectionner des dépôts. Il n’y a aucun index local à faire tourner. L’hébergement se fait sur Greptile Cloud (ils déclarent une conformité SOC 2 Type II, avec un rapport disponible sur demande), avec une option auto-hébergée offerte aux entreprises.&lt;/p&gt;
&lt;p&gt;Leur propre déroulé numéroté est : se connecter et construire un graphe de dépendances de chaque fonction, classe et dépendance ; à chaque pull request, analyser le changement en utilisant ce graphe complet du dépôt et publier les résultats sous forme de commentaires de PR avec des corrections suggérées, en environ trois minutes ; chaque commentaire peut transmettre le problème à un agent de code que l’équipe utilise déjà. Ils déclarent aussi lire les commentaires humains passés sur les PR au fil du temps pour apprendre les standards de code d’une équipe et réduire les suggestions bruyantes. Leur système d’apprentissage aurait, selon eux, besoin de 2 à 3 semaines pour s’adapter.&lt;/p&gt;
&lt;p&gt;C’est de la revue, pas de la rédaction. L’atout de Greptile est le contexte du graphe complet du dépôt sur le changement déjà atterri dans une PR, puis une boucle fermée qui envoie le résultat à Claude Code, Codex, Conductor, Cursor ou Devin. L’atout de Maguyva est la carte classée que l’agent a interrogée avant que ce changement ne soit écrit. Utilisez les deux. Ne demandez à aucun des deux de faire le travail de l’autre.&lt;/p&gt;
&lt;p&gt;Une intégration produit de première partie Maguyva–Greptile n’est pas annoncée. Vous n’en avez pas besoin. Maguyva parle à l’agent via MCP. Greptile parle à GitHub ou GitLab via son application. Ils se rencontrent au niveau de la pull request. Pas de script de liaison, pas de cron qui relie un outil à l’autre. Le duo se passe de bash parce que chaque produit occupe déjà la surface qui lui appartient.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-ceci-nest-pas&quot;&gt;Ce que ceci n’est pas&lt;/h2&gt;
&lt;p&gt;Ce n’est pas un dénigrement de Greptile. Ce n’est pas une page « changez de relecteur » . Greptile a été lancé sur Hacker News le 5 mars 2024 en tant qu’entreprise Y Combinator W24, et ce fil de discussion est la façon dont beaucoup de gens ont découvert le produit. Si c’est comme cela que vous les avez trouvés, gardez-les. Cette page est la moitié avant manquante de cette boucle : ancrer l’agent pour que la PR que Greptile voit vise déjà les bons fichiers.&lt;/p&gt;
&lt;p&gt;Les supports marketing de Greptile mettent en avant des affirmations de vitesse de revue et de détection de bugs. Traitez-les comme les propres affirmations de Greptile, pas comme des chiffres vérifiés indépendamment. Ce texte ne les répète pas comme des faits.&lt;/p&gt;
&lt;p&gt;La couverture linguistique relève de la même honnêteté. Greptile présente son support comme couvrant tous les langages de programmation plutôt qu’une liste énumérée ; un chiffre précis n’est pas indiqué. Maguyva publie plus de 279 langages et technologies textuelles, avec une distinction technique (AST soutenu par un parseur contre texte seul) sur le site quand la question est technique. Ce sont des produits différents qui font des affirmations différentes. Ne les mélangez pas.&lt;/p&gt;
&lt;p&gt;Les tarifs de Greptile ne sont pas indiqués dans les notes que ce texte est autorisé à utiliser. Des plans payants existent ; voir leur page de tarification. Maguyva facture par espace de travail, pas par siège. Les plans démarrent gratuitement. La &lt;a href=&quot;https://maguyva.ai/fr/pricing&quot;&gt;page de tarification&lt;/a&gt; liste les niveaux publiés si vous avez besoin des chiffres d’espace de travail.&lt;/p&gt;
&lt;h2 id=&quot;workflow&quot;&gt;Workflow&lt;/h2&gt;
&lt;p&gt;Trois étapes nommées. Exécutez-les dans cet ordre. N’en sautez aucune la première fois que vous essayez ce duo.&lt;/p&gt;
&lt;h3 id=&quot;1-contexte-maguyva&quot;&gt;1. Contexte Maguyva&lt;/h3&gt;
&lt;p&gt;Indexez un dépôt que vous connaissez déjà. Connectez le client MCP dans lequel vous écrivez déjà — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, ou un autre client compatible MCP. Maguyva propose des guides de configuration pour 24 clients MCP documentés et peut se connecter à d’autres clients prenant en charge la configuration MCP standard.&lt;/p&gt;
&lt;p&gt;Posez une question que vous pouvez évaluer avant que quiconque n’écrive une ligne. « Où l’expiration de session est-elle gérée, et qu’est-ce qui l’appelle ? » est un meilleur premier mouvement que « corrige l’authentification » . Exigez des citations. Ouvrez les résultats &lt;code&gt;file.ext:line&lt;/code&gt;. Suivez le symbole. Confirmez la dépendance que vous êtes sur le point de toucher.&lt;/p&gt;
&lt;p&gt;Maguyva expose 11 outils MCP orientés client à travers la recherche, les symboles, l’analyse de dépendances, la récupération de fichiers, le contexte de dépôt et des workflows utilitaires déterministes. Quatre modes de récupération sont fusionnés en résultats classés ; &lt;code&gt;find_symbol&lt;/code&gt; est un outil séparé quand vous connaissez déjà le nom. La &lt;a href=&quot;https://maguyva.ai/fr/docs&quot;&gt;documentation&lt;/a&gt; décrit le chemin le plus court : commencer gratuitement, indexer un dépôt que vous connaissez déjà, connecter le client, puis poser une question que vous pouvez vérifier.&lt;/p&gt;
&lt;p&gt;Les instantanés sont horodatés, afin que l’agent puisse dire quelle version de l’arbre il lit. La limite honnête est le travail local non synchronisé. Si la modification n’existe que dans un arbre de travail et n’a pas été poussée, la carte hébergée ne la contient pas encore. Les fichiers d’instructions (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) ont toujours leur place ici, pour les conventions et ce qu’il ne faut pas toucher. Ce ne sont pas une carte vivante. Utilisez-les pour le comportement. Utilisez Maguyva pour les faits.&lt;/p&gt;
&lt;p&gt;Ne laissez pas l’agent ouvrir une PR avant que les citations n’aient survécu au contact avec le dépôt. Cette barrière est tout l’intérêt de cette étape.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-de-lagent&quot;&gt;2. PR de l’agent&lt;/h3&gt;
&lt;p&gt;Le même agent écrit maintenant le changement dans le client pour lequel vous payez déjà. Maguyva n’est ni un éditeur ni un relecteur. L’agent produit toujours le diff. Vous ouvrez toujours la pull request sur GitHub ou GitLab comme vous le faites déjà.&lt;/p&gt;
&lt;p&gt;Ce qui devrait être différent, c’est le premier fichier. La PR devrait nommer le gestionnaire qui implémente réellement le comportement, l’appelant qui va casser, et le test qui échouera si le changement est faux. Si l’étape 1 a été sautée, l’étape 3 passera ses commentaires sur un changement atterri dans le mauvais paquet. Greptile peut quand même trouver des problèmes systémiques. Il ne devrait pas en plus avoir à se remettre d’un chemin halluciné.&lt;/p&gt;
&lt;p&gt;Gardez la PR ciblée. Un premier fichier fondé n’est pas une licence pour réécrire le module. Le duo complémentaire fonctionne quand l’agent a fait un travail avec une carte, puis a demandé à un relecteur de faire un autre travail sur un diff délimité.&lt;/p&gt;
&lt;h3 id=&quot;3-revue-greptile&quot;&gt;3. Revue Greptile&lt;/h3&gt;
&lt;p&gt;Greptile est déjà connecté au dépôt via l’application GitHub ou GitLab. Sur la nouvelle pull request, il analyse le changement en utilisant le graphe complet du dépôt qu’il a construit et publie des résultats sous forme de commentaires avec des corrections suggérées. Leurs propres supports situent ce passage à environ trois minutes.&lt;/p&gt;
&lt;p&gt;Lisez les commentaires comme vous liriez un coéquipier attentif : ouvrez l’emplacement cité, décidez si le constat est réel, puis agissez. Là où Greptile propose « Fix with your Agent » , il envoie le problème — chemins de fichiers, numéros de ligne, code suggéré — à Claude Code, Codex, Conductor, Cursor ou Devin. « Fix All » envoie tous les problèmes de la revue d’un coup. Ils livrent aussi un MCP Greptile et un plugin Claude Code pour cette transmission. Maguyva ne figure pas sur cette liste de cibles nommées ; cette absence n’est pas un problème. Maguyva a déjà fait son travail à l’étape 1. L’agent de code qui a écrit la PR est celui qui devrait recevoir la charge utile de correction.&lt;/p&gt;
&lt;p&gt;Attendez-vous à du bruit pendant les 2 à 3 premières semaines pendant que le système d’apprentissage de Greptile s’adapte aux commentaires que votre équipe laisse réellement. C’est leur calendrier déclaré, pas un défaut du duo. La revue humaine reste dans la boucle. Greptile est le premier passage automatisé, pas le bouton de fusion.&lt;/p&gt;
&lt;p&gt;Si un commentaire de Greptile pointe vers un fichier que l’agent n’a jamais interrogé à l’étape 1, c’est un signal utile. Soit la carte a manqué un appelant, soit l’agent a sauté une citation. Corrigez le brouillon en fonction du commentaire. Ne désactivez pas le relecteur.&lt;/p&gt;
&lt;h2 id=&quot;comment-garder-ce-duo-honnête&quot;&gt;Comment garder ce duo honnête&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva d’abord, toujours. Une revue d’une PR au mauvais fichier reste une revue du mauvais fichier.&lt;/li&gt;
&lt;li&gt;Greptile ensuite, toujours. Un brouillon bien cité a quand même besoin d’une lecture du diff à l’échelle du système entier.&lt;/li&gt;
&lt;li&gt;Ne demandez pas à Maguyva de publier des commentaires de PR. Il ne le fait pas.&lt;/li&gt;
&lt;li&gt;Ne demandez pas à Greptile d’être la première couche de récupération de l’agent pendant qu’il choisit encore un chemin. Ce n’est pas le travail pour lequel leur application GitHub ou GitLab est câblée.&lt;/li&gt;
&lt;li&gt;N’inventez pas un pipeline bash qui les « synchronise » . La PR est l’interface.&lt;/li&gt;
&lt;li&gt;Vérifiez les deux côtés indépendamment. Indexez un dépôt que vous connaissez déjà. Posez une question que vous pouvez vérifier. Puis ouvrez une petite PR et lisez ce que Greptile commente réellement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La boucle est ordinaire une fois qu’on la nomme. D’abord la carte. Puis la PR de l’agent. Puis la revue. Chaque produit reste du côté de la pull request où il excelle.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Donner à un agent IA le contexte d&apos;un grand dépôt sans indexeur local</title><link>https://maguyva.ai/fr/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/large-repo-context-without-a-local-indexer</guid><description>Comment donner à un agent de code une carte interrogeable d&apos;un grand dépôt depuis le cloud, sans faire tourner d&apos;indexeur local sur votre portable.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un grand dépôt ne tient pas dans une fenêtre de contexte, et si vous avez déjà pointé un indexeur local vers un vrai monorepo, vous savez qu’il n’y tient pas non plus confortablement — la RAM explose, le premier index prend une heure, et votre agent commence encore la session suivante en devinant quels fichiers comptent.&lt;/p&gt;
&lt;p&gt;La réponse habituelle est de faire tourner un indexeur à côté de l’éditeur, et pour un dépôt qui tient confortablement sur une seule machine, c’est une bonne réponse. Si votre monorepo s’indexe déjà rapidement dans Cursor et que c’est le seul endroit où vous avez besoin de la carte, ce texte n’a rien à ajouter — passez votre chemin.&lt;/p&gt;
&lt;p&gt;Ce texte parle de l’autre cas — quand un agent a besoin d’une carte interrogeable d’un grand dépôt, et que vous ne voulez pas faire tourner d’indexeur local pour l’obtenir.&lt;/p&gt;
&lt;h2 id=&quot;quand-un-indexeur-local-est-le-mauvais-outil&quot;&gt;Quand un indexeur local est le mauvais outil&lt;/h2&gt;
&lt;p&gt;Un index local suppose que le code vit sur la machine qui l’interroge, et à l’échelle d’un vrai monorepo, cette hypothèse tend même à l’intérieur d’un seul éditeur. Le dépôt est tout simplement plus grand que ce que vous voulez garder au chaud sur un portable : vous travaillez dans un paquet pendant que le rayon d’impact se trouve trois répertoires plus loin, et un premier index à froid d’un arbre de deux millions de lignes n’est pas quelque chose que vous voulez subir deux fois — ni sur votre machine, ni sur un runner CI qui n’a jamais cloné l’arbre auparavant. Ou un coéquipier devrait pouvoir interroger la même carte que vous, sans attendre que sa propre machine traverse péniblement le même index.&lt;/p&gt;
&lt;p&gt;Rien de tout cela n’est une raison de jeter un bon indexeur d’éditeur. C’est une raison d’avoir aussi une carte hébergée que n’importe lequel de vos agents peut interroger via MCP.&lt;/p&gt;
&lt;p&gt;Et le problème d’échelle va plus loin que « trop de fichiers à coller » . Sur un grand arbre, la question intéressante n’est presque jamais « montre-moi ce fichier » — c’est quel fichier, quel symbole, quels appelants, quels tests. Un agent qui commence en listant &lt;code&gt;src/&lt;/code&gt; et en lisant les trois premiers résultats manquera allègrement le gestionnaire dans &lt;code&gt;apps/api&lt;/code&gt; et le client généré dans &lt;code&gt;packages/sdk&lt;/code&gt;. Ce qu’il vous faut, c’est une récupération construite depuis l’arbre entier, puis classée, puis citée.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-signifie-vraiment--le-contexte-dun-grand-dépôt-&quot;&gt;Ce que signifie vraiment « le contexte d’un grand dépôt »&lt;/h2&gt;
&lt;p&gt;Déverser des fichiers dans le prompt n’est pas du contexte — c’est une copie plus petite et moins bonne de l’arbre. Ce dont votre agent a réellement besoin, c’est de poser des questions et d’obtenir des réponses citées en retour : où ce symbole est-il défini et qui l’appelle, qu’est-ce qui dépend du module que je m’apprête à modifier, quel fichier de test couvre ce comportement, et à quoi ressemble l’arbre &lt;em&gt;maintenant&lt;/em&gt;, pas le trimestre dernier.&lt;/p&gt;
&lt;p&gt;Ces réponses doivent venir d’un index construit à partir de votre dépôt plutôt que de la mémoire du modèle sur les dépôts des autres, et l’index doit vivre ailleurs que dans la fenêtre de contexte de l’agent. Pour ce problème, il devrait aussi vivre ailleurs que sur votre portable.&lt;/p&gt;
&lt;p&gt;Une autre chose que les fichiers d’instructions ne peuvent pas faire pour vous : &lt;code&gt;CLAUDE.md&lt;/code&gt; et &lt;code&gt;AGENTS.md&lt;/code&gt; sont le bon endroit pour les conventions et le comportement, mais ce ne sont pas une carte vivante, classée et interrogeable d’un arbre de deux millions de lignes. Utilisez les règles pour le comportement ; utilisez l’intelligence du dépôt pour les faits.&lt;/p&gt;
&lt;h2 id=&quot;construire-la-carte-dans-le-cloud-linterroger-depuis-nimporte-quel-client&quot;&gt;Construire la carte dans le cloud, l’interroger depuis n’importe quel client&lt;/h2&gt;
&lt;p&gt;Maguyva est une couche de contexte de code MCP distante. Vous connectez GitHub, choisissez vos dépôts, et vous partez pendant que les pipelines cloud analysent l’arbre, construisent les symboles et les arêtes du graphe, et maintiennent une carte classée — sans indexeur local, jamais.&lt;/p&gt;
&lt;p&gt;Quand vous poussez du code, les fichiers modifiés sont analysés de façon incrémentale, et les couches de graphe et de classement se reconstruisent selon un calendrier : quotidien sur le plan gratuit, horaire sur les plans payants. Chaque instantané est horodaté, afin que votre agent puisse dire quelle version de l’arbre il lit. La limite honnête ici est le travail local non synchronisé — une modification qui n’existe que dans votre arbre de travail, jamais poussée, n’est pas encore dans la carte hébergée.&lt;/p&gt;
&lt;p&gt;Ensuite, vous connectez le client que vous utilisez déjà en ajoutant une clé API à sa configuration MCP. Il existe des guides de configuration pour 24 clients MCP documentés, et tout autre client compatible MCP prenant en charge la configuration standard peut aussi se connecter. Si Cursor est votre environnement, la &lt;a href=&quot;https://maguyva.ai/fr/for-cursor&quot;&gt;page Cursor&lt;/a&gt; trace ce chemin ; le même serveur répond à Claude Code, VS Code, Windsurf, Codex CLI et les autres.&lt;/p&gt;
&lt;p&gt;Vous ne changez pas d’éditeur. Vous donnez à votre agent une surface d’outils — 11 outils MCP à travers la recherche, les symboles, l’analyse de dépendances, la récupération de fichiers et le contexte de dépôt — avec une couverture de plus de 279 langages et technologies textuelles, ce qui compte plus qu’on ne le pense sur un monorepo qui a cessé d’être un seul langage il y a des années.&lt;/p&gt;
&lt;p&gt;Les réponses reviennent fondées, sous forme de chemins de fichiers avec numéros de ligne. Les récupérations sémantique, structurelle, par graphe et textuelle sont fusionnées en résultats classés, de sorte qu’une question comme « qu’est-ce qui dépend de parseConfig » ne vous donne ni un déversement grep ni un seul fragment sémantique, mais la poignée d’endroits qui comptent réellement.&lt;/p&gt;
&lt;h2 id=&quot;un-guide-concret&quot;&gt;Un guide concret&lt;/h2&gt;
&lt;p&gt;Ne commencez pas par indexer toute l’entreprise. Voici le chemin qui fonctionne :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Choisissez un dépôt que vous connaissez déjà bien — un paquet que vous pouvez évaluer à la main vaut mieux que le plus grand arbre que vous avez.&lt;/li&gt;
&lt;li&gt;Commencez gratuitement : 3 dépôts, 50 000 lignes indexées, les 11 outils, aucun quota de requêtes mensuel. Si votre dépôt représentatif est plus grand, la &lt;a href=&quot;https://maguyva.ai/fr/pricing&quot;&gt;page de tarification&lt;/a&gt; liste les niveaux d’espace de travail (0 $, 19 $, 49 $, 149 $) par empreinte indexée — pas par nombre de sièges.&lt;/li&gt;
&lt;li&gt;Connectez GitHub et attendez la fin du premier index. Vous ne compilez rien localement.&lt;/li&gt;
&lt;li&gt;Connectez le client MCP — quelques lignes de configuration. Maguyva est un serveur MCP distant, donc il n’y a ni plugins, ni extensions, ni second éditeur à adopter.&lt;/li&gt;
&lt;li&gt;Posez une question que vous pouvez vérifier. « Qu’est-ce qui dépend de parseConfig ? » ou « Où est géré l’expiration de session de connexion ? » Ouvrez ensuite les résultats &lt;code&gt;file.ext:line&lt;/code&gt; cités et vérifiez-les contre l’arbre devant vous.&lt;/li&gt;
&lt;li&gt;Ce n’est qu’après que les citations ont survécu à ce contact que vous laissez l’agent modifier.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si le premier dépôt convient bien et que votre arbre est grand, augmentez l’espace de travail pour correspondre à vos lignes indexées et à la cadence de reconstruction. Humains et agents partagent le même compte d’utilisateurs — Maguyva facture par espace de travail, pas par siège — donc ajouter un troisième agent à la boucle ne vous coûte rien.&lt;/p&gt;
&lt;p&gt;Le test d’activation est le même que celui que la &lt;a href=&quot;https://maguyva.ai/fr/docs&quot;&gt;documentation&lt;/a&gt; recommande pour tout premier lancement : indexer un dépôt que vous connaissez déjà, poser une question que vous pouvez vérifier. Un grand dépôt ne change pas le test ; il rend seulement un premier fichier erroné plus coûteux.&lt;/p&gt;
&lt;h2 id=&quot;à-surveiller-une-fois-connecté&quot;&gt;À surveiller une fois connecté&lt;/h2&gt;
&lt;p&gt;Gardez un œil sur trois choses. Fraîcheur : les plans payants se reconstruisent toutes les heures, les plans gratuits tous les jours, et le travail local non poussé ne sera pas dans la carte — c’est le compromis que vous acceptez. Périmètre : indexez un ensemble représentatif de dépôts, pas chaque fork archivé ; le niveau gratuit est délibérément dimensionné pour découvrir si les réponses valent la peine d’être conservées. Et vérification : une carte de grand dépôt qui ne peut pas citer chemins et numéros de ligne n’est qu’un moteur de devinette plus lent, donc faites montrer à votre agent l’endroit avant qu’il livre le correctif.&lt;/p&gt;
&lt;p&gt;Exécutez ensuite le même test que vous feriez sur un petit dépôt. Indexez un dépôt que vous connaissez déjà. Posez une question que vous pouvez vérifier. Si la carte est réelle, votre agent cesse de partir d’un arbre froid.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Pourquoi votre agent de code IA hallucine des chemins de fichiers</title><link>https://maguyva.ai/fr/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>Les agents de code IA inventent des chemins de fichiers quand ils n&apos;ont pas de vraie carte du dépôt. Voici pourquoi cela arrive, et comment l&apos;ancrage mène à moins de modifications hallucinées.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Le signe révélateur n’est pas un corps de fonction erroné. C’est une modification assurée d’un fichier qui n’existe pas, ou d’un fichier qui existe mais n’est pas celui qui implémente le comportement.&lt;/p&gt;
&lt;p&gt;Vous avez demandé une correction d’expiration de session. L’agent a ouvert &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Ce chemin est plausible. Il est aussi faux. Le vrai gestionnaire vit dans &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, renommé il y a deux refactorisations. L’agent ne vous a pas menti. Il a complété une chaîne en forme de chemin à partir de priors d’entraînement plus tout ce qui se trouvait déjà dans la fenêtre de contexte.&lt;/p&gt;
&lt;p&gt;C’est le mode d’échec courant sur un dépôt réel. Le modèle sait écrire du code. L’erreur est de choisir le mauvais endroit où l’écrire.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-les-agents-inventent-des-chemins&quot;&gt;Pourquoi les agents inventent des chemins&lt;/h2&gt;
&lt;p&gt;Un agent de code est un modèle de prédiction de token suivant, doté d’outils. Quand vous dites « corrige l’expiration de session » , il doit nommer un fichier avant de pouvoir lire ou corriger quoi que ce soit. S’il n’a pas déjà une carte fondée, il construit un chemin à partir de :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Conventions de nommage qu’il a vues dans d’autres dépôts. &lt;code&gt;src/auth/session.ts&lt;/code&gt; est une forme fréquente.&lt;/li&gt;
&lt;li&gt;Fichiers déjà présents dans la conversation, qui sont peut-être ceux que vous avez collés la semaine dernière, pas ceux qui comptent maintenant.&lt;/li&gt;
&lt;li&gt;Listes de répertoires qu’il a exécutées par hasard, incomplètes sur un grand arbre.&lt;/li&gt;
&lt;li&gt;Fichiers d’instructions. &lt;code&gt;CLAUDE.md&lt;/code&gt; et &lt;code&gt;AGENTS.md&lt;/code&gt; disent à l’agent comment se comporter. Ce ne sont pas un index vivant des symboles, des appelants ou des chemins actuels.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aucune de ces sources n’est une carte de ce dépôt, aujourd’hui. Le modèle comble le vide comme il comble tout vide : avec une continuation hautement probable. Cette continuation ressemble souvent à un vrai chemin. Parfois le fichier existe et se trouve à côté du bon. Parfois il existait sur une branche fusionnée le mois dernier. Parfois il n’a jamais existé.&lt;/p&gt;
&lt;p&gt;Grep ne vous sauve pas ici si l’agent ne recherche jamais la bonne chaîne. L’agent a deviné un chemin, puis a lu ce que ce chemin retournait, puis l’a modifié. La première étape erronée était le chemin, pas le correctif.&lt;/p&gt;
&lt;p&gt;Lire des fichiers n’est pas non plus la même chose que trouver les bons. Claude Code, Cursor, Codex et des outils similaires peuvent ouvrir tout ce vers quoi vous les pointez. La question est de savoir s’ils trouvent de façon fiable les bons fichiers, les symboles importants, les dépendances, les tests, et le rayon d’impact avant de modifier. L’accès aux fichiers sans carte commence toujours par une supposition.&lt;/p&gt;
&lt;h2 id=&quot;la-modification-du-mauvais-fichier-est-un-problème-de-récupération&quot;&gt;La modification du mauvais fichier est un problème de récupération&lt;/h2&gt;
&lt;p&gt;Traitez le chemin inventé comme un échec de récupération, pas comme un défaut de caractère.&lt;/p&gt;
&lt;p&gt;Si l’agent devait renvoyer &lt;code&gt;path/file.ext:line&lt;/code&gt; avant d’être autorisé à modifier, deux choses se produiraient. D’abord, vous pourriez ouvrir la citation et rejeter le travail en dix secondes. Ensuite, l’agent devrait interroger quelque chose qui connaît réellement l’arbre.&lt;/p&gt;
&lt;p&gt;C’est le travail d’une couche de contexte de code. La recherche sémantique seule ne suffit pas. Un fragment qui « sonne comme l’expiration de session » peut quand même atterrir dans un paquet obsolète. Vous avez aussi besoin de texte exact quand vous connaissez la chaîne, de recherche de symboles quand vous connaissez le nom, de recherche structurelle quand vous connaissez la forme, et d’un graphe de dépendances quand vous avez besoin des appelants et du rayon d’impact.&lt;/p&gt;
&lt;p&gt;Maguyva est cette couche pour les agents de code compatibles MCP. Ce n’est pas un éditeur. Claude Code, Cursor, Codex CLI, VS Code, Windsurf et les autres clients MCP restent où ils sont. L’agent interroge une carte classée avant de toucher une ligne.&lt;/p&gt;
&lt;p&gt;L’affirmation est délibérément modeste : moins de modifications hallucinées. Maguyva ne retire pas au modèle sa capacité à deviner. Il change la première étape par défaut, qui passe d’ « inventer un chemin plausible » à « demander des emplacements classés et cités » .&lt;/p&gt;
&lt;h2 id=&quot;à-quoi-ressemble-une-réponse-fondée&quot;&gt;À quoi ressemble une réponse fondée&lt;/h2&gt;
&lt;p&gt;Une réponse utile à « où l’expiration de session est-elle gérée » n’est pas un paragraphe. C’est une courte liste d’emplacements :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - le gestionnaire&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - l’appelant&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - le test qui échouera si le changement est faux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous pouvez ouvrir ces lignes. Si elles sont fausses, vous vous arrêtez. Si elles sont justes, l’agent peut modifier. La vérification est le but, pas un slogan.&lt;/p&gt;
&lt;p&gt;Maguyva expose 11 outils MCP orientés client à travers la recherche, les symboles, l’analyse de dépendances, la récupération de fichiers, le contexte de dépôt et des workflows utilitaires déterministes. Quatre modes de récupération (sémantique, structurel, graphe/dépendance et texte) sont fusionnés en résultats classés ; la recherche de symboles est un outil MCP séparé (&lt;code&gt;find_symbol&lt;/code&gt;). Les réponses fondées reviennent avec des chemins de fichiers et des numéros de ligne, afin que vous puissiez les évaluer contre l’arbre devant vous.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/fr/docs&quot;&gt;documentation&lt;/a&gt; décrit le chemin le plus court : commencer gratuitement, indexer un dépôt que vous connaissez déjà, connecter le client, puis poser une question que vous pouvez vérifier.&lt;/p&gt;
&lt;h2 id=&quot;une-boucle-qui-change-la-première-modification&quot;&gt;Une boucle qui change la première modification&lt;/h2&gt;
&lt;p&gt;Vous n’avez pas besoin d’une nouvelle religion de workflow. Vous avez besoin d’une étape supplémentaire avant la première écriture.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Posez une question que vous pouvez déjà évaluer. « Quel code gère la connexion et l’expiration de session ? » vaut mieux que « corrige l’authentification » .&lt;/li&gt;
&lt;li&gt;Exigez des citations. Chemin de fichier et numéro de ligne, pas un résumé du « module d’authentification » .&lt;/li&gt;
&lt;li&gt;Ouvrez les fichiers cités. Suivez le symbole. Confirmez la dépendance que vous êtes sur le point de toucher.&lt;/li&gt;
&lt;li&gt;Ce n’est qu’ensuite que vous laissez l’agent corriger.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si l’étape 2 ne renvoie rien d’utile, l’agent n’a pas le droit d’improviser un chemin. Il recherche à nouveau, ou vous l’orientez. Cette seule barrière est ce qui produit moins de modifications hallucinées. Le modèle est le même modèle. La carte est ce qui a changé.&lt;/p&gt;
&lt;p&gt;Les fichiers d’instructions comptent toujours. Gardez-les. Utilisez-les pour les conventions, les règles de revue et ce qu’il ne faut pas toucher. Ne leur demandez pas d’être l’index. Un &lt;code&gt;CLAUDE.md&lt;/code&gt; qui liste trois répertoires importants sera obsolète la semaine suivant une scission de paquet. Une carte interrogeable se met à jour quand le dépôt se met à jour.&lt;/p&gt;
&lt;p&gt;Un échec apparenté est le fichier presque-bon : l’agent ouvre &lt;code&gt;auth.ts&lt;/code&gt; alors que le comportement vit dans &lt;code&gt;auth-client.ts&lt;/code&gt;, ou modifie un fichier généré au lieu de la source, ou modifie la copie dans &lt;code&gt;packages/legacy&lt;/code&gt; parce que le nom correspondait. Les citations ne rendent pas ces erreurs impossibles. Elles les rendent visibles avant que le diff n’atterrisse.&lt;/p&gt;
&lt;h2 id=&quot;ce-quune-carte-ne-résoudra-pas-pour-vous&quot;&gt;Ce qu’une carte ne résoudra pas pour vous&lt;/h2&gt;
&lt;p&gt;Soyez lucide sur ce que vous obtenez. Une carte fondée ne rendra pas chaque modification correcte — votre agent peut toujours écrire un mauvais correctif dans exactement le bon fichier. Si votre base de code s’appuie sur le dispatch dynamique, la réflexion ou le monkey-patching, certaines recherches de symboles reviendront plus maigres que vous ne le souhaiteriez, parce que c’est ce que l’indirection à l’exécution fait à tout index statique. Et si vous espérez un pourcentage — « chemins hallucinés réduits de X % » — vous ne le trouverez pas ici, parce que personne ne peut honnêtement mesurer ce chiffre pour votre dépôt, sauf vous.&lt;/p&gt;
&lt;p&gt;Ce que vous pouvez attendre est plus étroit et plus utile : l’agent cesse d’ouvrir ses modifications avec un chemin deviné. Cette première étape est ancrée dans une vraie carte, et c’est de là que viennent moins de modifications hallucinées. Tout ce qui suit la citation — lire le diff, juger le correctif — reste votre travail, comme cela l’a toujours été.&lt;/p&gt;
&lt;p&gt;Le test ne vous coûte presque rien : indexez un dépôt que vous connaissez déjà et posez une question que vous pouvez vérifier. Commencez par un chemin qui vous a déjà brûlé. Si les citations sont fausses, vous le verrez immédiatement. Si elles sont justes, la prochaine modification de votre agent a un meilleur endroit où atterrir.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Pourquoi nous avons fait évoluer la recherche de code vers voyage-4-large</title><link>https://maguyva.ai/fr/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/upgrading-code-search-to-voyage-4-large</guid><description>Nous avons migré nos embeddings de code vers voyage-4-large — actuellement en tête du classement public RTEB pour la récupération de code. La version honnête : le compromis que nous faisons, ce que nous indexons réellement, et pourquoi nous payons pour des embeddings premium.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de benchmark de cet article reflètent les classements RTEB au moment de la publication (juin 2026). Les classements évoluent ; considérez-les comme un instantané, pas comme un fait permanent.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une recherche sémantique ne vaut que ce que valent les embeddings qui la sous-tendent.&lt;/p&gt;
&lt;p&gt;Quand un agent demande à Maguyva « où gérons-nous les nouvelles tentatives », il ne cherche pas avec grep le mot « retry ». Il demande le &lt;em&gt;sens&lt;/em&gt; — la boucle de backoff, le disjoncteur (circuit breaker), la chose qui enveloppe un appel instable. Cette question trouve sa réponse grâce à un modèle vectoriel qui transforme le code en un point dans l’espace et trouve ses voisins. Choisissez un meilleur modèle, et chaque requête sémantique du produit devient discrètement plus fine.&lt;/p&gt;
&lt;p&gt;Nous avons donc changé le nôtre. Depuis juin 2026, les embeddings de code de Maguyva tournent sur &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, en remplacement de &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;le-benchmark&quot;&gt;Le benchmark&lt;/h2&gt;
&lt;p&gt;Nous n’avons pas pris cette décision à l’instinct. Le &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; public classe les modèles d’embedding sur de vraies tâches de récupération, et sur son classement &lt;strong&gt;Code&lt;/strong&gt;, &lt;code&gt;voyage-4-large&lt;/code&gt; se trouve &lt;strong&gt;1er au classement global (90,86)&lt;/strong&gt; — devant &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) et, notamment, devant le modèle que nous utilisions déjà, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, 3e place).&lt;/p&gt;
&lt;p&gt;C’est un petit écart en valeur absolue. Mais c’est un écart dans la bonne direction, sur un benchmark public, sur exactement la tâche qui nous intéresse : récupérer du code par le sens.&lt;/p&gt;
&lt;h2 id=&quot;le-compromis-que-nous-acceptons--la-quantification-binaire&quot;&gt;Le compromis que nous acceptons : la quantification binaire&lt;/h2&gt;
&lt;p&gt;Voici la partie que la plupart des articles « nous avons mis à niveau notre modèle » passent sous silence.&lt;/p&gt;
&lt;p&gt;Maguyva ne stocke pas de vecteurs en pleine précision. Nous stockons des embeddings &lt;strong&gt;quantifiés en binaire&lt;/strong&gt; : chaque vecteur à 2048 dimensions se réduit à une signature de 2048 bits — &lt;strong&gt;256 octets par vecteur&lt;/strong&gt;. Ces signatures sont recherchées par distance de Hamming, indexées et partitionnées par tenant.&lt;/p&gt;
&lt;p&gt;C’est un compromis délibéré. La quantification binaire sacrifie un peu de précision de récupération en échange d’un stockage nettement plus petit et d’un calcul de distance rapide et peu coûteux, sans base de données vectorielle séparée à exploiter. Pour un produit qui indexe des dépôts entiers par espace de travail, cette économie compte plus que grappiller le dernier centième d’un point de benchmark.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; s’inscrit dans cette conception sans forcer une migration de la couche de stockage : il produit une sortie à 2048 dimensions, soit le même nombre de dimensions que &lt;code&gt;voyage-code-3&lt;/code&gt;, donc nos colonnes &lt;code&gt;bit(2048)&lt;/code&gt; et notre chemin de recherche par distance de Hamming n’ont pas changé. Le modèle s’est amélioré ; le schéma est resté en place.&lt;/p&gt;
&lt;h2 id=&quot;le-code-nétait-quun-début&quot;&gt;Le code n’était qu’un début&lt;/h2&gt;
&lt;p&gt;Maguyva est un outil d’intelligence du code. Mais nous sommes aussi notre propre client zéro, et nous le pointons vers autre chose : le markdown qui vit dans nos dépôts aux côtés du code. Fiches de décision architecturale, runbooks, contrats, documents financiers et de politique — tout cela versionné dans Git, tout cela derrière le même serveur MCP, un index sémantique sur les &lt;em&gt;documents&lt;/em&gt;, pas seulement sur la source.&lt;/p&gt;
&lt;p&gt;C’est exactement pourquoi l’étendue de voyage-4-large compte. Sur la même famille de classements RTEB, il est &lt;strong&gt;1er en finance, 1er en santé, et 1er en récupération de texte globale&lt;/strong&gt; — devant Gemini Embedding de Google, Embed v4 de Cohere, et text-embedding-3-large d’OpenAI. (Voyage est co-créateur de RTEB, nous le lisons donc comme un signal public fort plutôt que comme un arbitre parfaitement neutre — mais il est comparé tête-à-tête à tous les grands modèles commerciaux, sur des jeux de données privés tenus en réserve.) Le même index qui trouve la bonne fonction pour un agent trouve la bonne clause dans un contrat, ou la bonne ligne dans une politique — et sur ces domaines, voyage-4-large n’est pas un compromis, c’est le leader.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-nous-payons-pour-des-embeddings-premium&quot;&gt;Pourquoi nous payons pour des embeddings premium&lt;/h2&gt;
&lt;p&gt;Il existe une façon moins chère de faire de la recherche, et une bonne partie en est gratuite. La recherche lexicale — BM25 et ses cousins — fait correspondre des mots-clés, tourne localement, et ne coûte rien. Des modèles d’embedding open source comme BGE, Nomic et embeddinggemma offrent une récupération sémantique réellement &lt;em&gt;correcte&lt;/em&gt;, et on peut les auto-héberger pour le prix d’un GPU. Maguyva utilise aussi le côté gratuit : chaque requête fusionne recherche textuelle, AST, graphe et sémantique. Ce sur quoi nous ne lésinons pas, c’est la couche sémantique.&lt;/p&gt;
&lt;p&gt;Nous payons au token pour des embeddings premium — &lt;code&gt;voyage-4-large&lt;/code&gt; — plutôt que d’auto-héberger un modèle gratuit, pour deux raisons. Premièrement, la recherche par mots-clés seule ne peut pas répondre à « où gérons-nous les nouvelles tentatives » quand le code dit &lt;code&gt;backoff&lt;/code&gt; et &lt;code&gt;circuit breaker&lt;/code&gt; sans jamais dire le mot « retry » — le sens est tout l’intérêt de l’embedding, et sur les domaines que nous servons, les modèles ouverts restent en retrait par rapport aux modèles premium : quelques points de retard sur le texte général, et davantage sur des niches comme le code, les contrats et la finance. Deuxièmement, d’après notre expérience, la qualité de la récupération façonne la réponse finale plus que ne le fait le modèle en bout de chaîne — un agent puissant à qui l’on donne le mauvais contexte répond quand même mal, et il ne voit jamais le document qu’on ne lui a jamais fourni.&lt;/p&gt;
&lt;p&gt;Les embeddings premium représentent donc une facture au token qui grandit avec chaque dépôt et chaque document que nous indexons — et nous la payons délibérément. Pour le résultat obtenu par nos utilisateurs, la bonne fonction ou la bonne clause, nous pensons que ce compromis en vaut la peine.&lt;/p&gt;
&lt;h2 id=&quot;la-partie-honnête&quot;&gt;La partie honnête&lt;/h2&gt;
&lt;p&gt;La documentation de Voyage elle-même désigne toujours &lt;code&gt;voyage-code-3&lt;/code&gt; comme le modèle optimisé pour le code. Alors pourquoi changer ?&lt;/p&gt;
&lt;p&gt;Parce que nous lisons le benchmark public, pas seulement le tableau de modèles du fournisseur, et que le benchmark place &lt;code&gt;voyage-4-large&lt;/code&gt; en tête pour la récupération de code. C’était un pari tourné vers l’avenir : prendre le modèle plus récent, généralement plus puissant, et le valider face à un classement public sur les tâches qui comptent. Nous sommes à l’aise avec ce pari, car les résultats couvrent de nombreux domaines — voyage-4-large ne gagne pas seulement sur le code, il mène aussi en finance, en santé et en récupération globale.&lt;/p&gt;
&lt;h2 id=&quot;les-fondations-discrètes&quot;&gt;Les fondations discrètes&lt;/h2&gt;
&lt;p&gt;Chaque outil que nous exposons — recherche sémantique, collecte de contexte de tâche, questions-réponses ancrées dans le code — se ramène en dernière analyse à la récupération. Quand le moteur de récupération s’améliore, l’agent en bout de chaîne obtient de meilleures preuves, fait moins de faux pas, et ancre ses réponses dans le bon code — ou la bonne clause, ou la bonne politique. Un modèle d’embedding plus fin n’est pas une fonctionnalité tape-à-l’œil. Ce sont les fondations de tout le reste, et nous venons de les renforcer. Vous ne le remarquerez pas. C’est bien le but.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Auto-amélioration récursive de la prise en charge des langages : affiner l&apos;intelligence du code sur environ 280 langages</title><link>https://maguyva.ai/fr/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/autonomous-quality-loops-language-grind</guid><description>Nous prenons en charge l&apos;intelligence du code pour environ 280 langages. Aucun humain ne peut auditer cela à la main. Nous avons donc construit une boucle d&apos;auto-amélioration récursive de la prise en charge des langages — contrôle ponctuel, LLM en tant que juge, correction d&apos;un seul élément, revalidation — et nous la faisons tourner avec une flotte d&apos;agents isolés jusqu&apos;à ce que l&apos;extraction soit vraiment correcte, pas seulement au vert.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de cet article reflètent le système au moment de la publication (mai 2026). Consultez notre &lt;a href=&quot;https://maguyva.ai/fr/team&quot;&gt;page équipe&lt;/a&gt; pour les chiffres actuels.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva extrait symboles, références et graphe de dépendances à partir du code source dans environ 280 langages. Chaque langage repose sur un handler tree-sitter sur mesure — requêtes, heuristiques, cas limites — et chaque handler peut se tromper subtilement, à sa manière propre. Un appel de méthode émis comme une lecture. Une fonction attribuée à la mauvaise portée englobante. Une relation qui, tout simplement, n’existe pas.&lt;/p&gt;
&lt;p&gt;On ne peut pas auditer cela à la main. Aucune équipe ne peut lire la sortie d’extraction sur 280 grammaires et repérer les mauvaises arêtes. La question intéressante n’est donc pas « notre extraction est-elle correcte » — c’est « comment &lt;em&gt;découvrir&lt;/em&gt; qu’elle est fausse, à cette échelle, sans un humain dans chaque boucle ». Notre réponse est l’auto-amélioration récursive de la prise en charge des langages : une boucle de qualité pilotée par des agents de langage, un LLM agissant comme juge, et une règle que nous réapprenons sans cesse : le vert n’est pas synonyme de correct.&lt;/p&gt;
&lt;h2 id=&quot;le-vert-nest-pas-correct&quot;&gt;Le vert n’est pas correct&lt;/h2&gt;
&lt;p&gt;Chaque langage dispose d’une suite de fixtures, et un contrôle préalable à la mise en production l’évalue sur cinq dimensions — exactitude, intégrité structurelle, exhaustivité, qualité et performance. Un langage passe au &lt;strong&gt;VERT&lt;/strong&gt; seulement quand, sur ses fixtures, la précision ≥ 0,95, le rappel ≥ 0,99 et le F1 ≥ 0,97, avec au moins 20 arêtes attendues pour la confiance statistique. En dessous, c’est JAUNE ou ROUGE, et cela ne part pas en production.&lt;/p&gt;
&lt;p&gt;Ce contrôle est nécessaire, mais pas suffisant. Les fixtures valident par rapport à des fixtures &lt;em&gt;que nous avons écrites&lt;/em&gt;. Elles encodent les cas auxquels nous avons déjà pensé. Un handler peut être irréprochable sur ses fixtures et malgré tout massacrer un schéma qui n’apparaît que dans du code réel — un idiome de macro, une méthode soumise à des contraintes sur ses types génériques, une fonctionnalité de langage pour laquelle personne n’a écrit de fixture. VERT signifie que les fixtures passent. Cela ne signifie pas qu’un dépôt réel s’extrait proprement. La boucle doit donc laisser les fixtures de côté et regarder dans la nature.&lt;/p&gt;
&lt;h2 id=&quot;la-boucle-interne--contrôle-ponctuel-jugement-correction-preuve&quot;&gt;La boucle interne : contrôle ponctuel, jugement, correction, preuve&lt;/h2&gt;
&lt;p&gt;La boucle centrale fait tourner un langage à la fois :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quelques principes permettent à cette boucle d’avancer plutôt que de s’agiter en vain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le juge, c’est l’agent, pas un appel d’API.&lt;/strong&gt; Quand nous disons « LLM en tant que juge », nous voulons dire que l’agent de langage lit lui-même chaque arête échantillonnée face à la source réelle, et la classe selon une grille fixe à cinq catégories : cette arête est-elle correcte, un faux positif, la bonne relation avec le mauvais type, rattachée à la mauvaise portée, ou porteuse de métadonnées erronées ? Cette grille, c’est tout l’enjeu — un « taux d’erreur de 23 % » ne veut rien dire tant qu’on ne sait pas s’il s’agit de vrais défauts ou d’un mauvais comptage du juge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corriger une chose, puis le prouver.&lt;/strong&gt; Chaque itération modifie exactement un actif éditable, puis relance les tests avec le même dispositif de validation et ne conserve le changement que si le F1 s’améliore et que la reclassification paraît meilleure. Sinon, elle est annulée. Pas de lot de modifications spéculatives, pas de « ça devrait aller mieux ». Un changement gagne sa place ou il disparaît. Et quand une correction tient, elle est promue dans la suite de fixtures — pour que le bug qu’elle a corrigé ne puisse jamais revenir en silence. C’est cette étape de promotion qui rend la boucle &lt;em&gt;récursive&lt;/em&gt; plutôt que simplement répétitive : chaque passage renforce l’oracle qui servira de référence à la validation du passage suivant.&lt;/p&gt;
&lt;h2 id=&quot;la-leçon-que-nous-réapprenons-sans-cesse--les-métriques-surestiment&quot;&gt;La leçon que nous réapprenons sans cesse : les métriques surestiment&lt;/h2&gt;
&lt;p&gt;Voici le piège, et nous y sommes tombés tête baissée. Les métriques secondaires de corpus — à quelle fréquence une cible extraite n’a aucun symbole résolvable, combien de symboles paraissent « orphelins », et ainsi de suite — surestiment massivement les problèmes. Ce sont surtout des &lt;em&gt;artefacts de paradigme&lt;/em&gt;, pas des bugs.&lt;/p&gt;
&lt;p&gt;L’exemple le plus net : &lt;code&gt;llvm&lt;/code&gt; a un jour affiché un taux de « source sans symbole » de 73 % et a été catalogué comme catastrophique. Nous avons creusé. La précision réelle était de &lt;strong&gt;98,5 %&lt;/strong&gt;. Les « symboles manquants » étaient presque tous des références externes légitimes — des appels vers la bibliothèque standard, vers des frameworks, vers du code qui vit hors du dépôt. La métrique mesurait une propriété du langage, pas un défaut du handler. Des langages comme Zig, COBOL et Odin affichent des taux « orphelins » de 65 à 70 % et sont pourtant entièrement corrects ; COBOL n’avait aucune vraie erreur.&lt;/p&gt;
&lt;p&gt;Si nous avions laissé ces chiffres piloter le travail, nous aurions passé des semaines à « corriger » des handlers déjà justes, en ignorant les langages porteurs de vrais bugs discrets. La conclusion est brutale : les métriques agrégées sont, au mieux, un signal de tri grossier. &lt;strong&gt;Le vrai signal de qualité est le contrôle ponctuel avec classification des arêtes&lt;/strong&gt; — regarder les arêtes réelles dans des dépôts réels et les juger une par une. Les données plutôt que l’intuition, mais seulement une fois qu’on sait quelles données disent la vérité.&lt;/p&gt;
&lt;h2 id=&quot;la-boucle-externe--une-flotte-pas-un-marathon&quot;&gt;La boucle externe : une flotte, pas un marathon&lt;/h2&gt;
&lt;p&gt;Un langage à la fois prendrait une éternité sur 280 d’entre eux, donc la boucle interne est enveloppée dans une boucle externe qui en fait tourner beaucoup en parallèle.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Chaque agent travaille dans un worktree jetable, pour qu’ils ne puissent pas se marcher dessus. L’orchestrateur intègre leurs corrections une par une, chacune derrière un contrôle de régression sur l’ensemble du manifeste : un changement qui aide son propre langage mais casse discrètement trois autres ne passe pas. L’intégration est verrouillée et confirmée avant que quoi que ce soit ne soit poussé — le contrôle de régression décide de ce qui est &lt;em&gt;sûr&lt;/em&gt;, un humain décide toujours de ce qui &lt;em&gt;part en production&lt;/em&gt;. Puis le pool bascule vers le lot de langages suivant, et tout recommence.&lt;/p&gt;
&lt;h2 id=&quot;ce-qui-reste-imparfait&quot;&gt;Ce qui reste imparfait&lt;/h2&gt;
&lt;p&gt;Le juge peut se tromper, et l’erreur a une direction : un agent qui tourne avec trop peu de contexte &lt;em&gt;surestime&lt;/em&gt; les problèmes. Sur un lot, huit langages ont été signalés avec un taux d’erreur de 5 à 20 % ; à l’examen, un seul était un vrai bug propre au langage — le reste venait d’erreurs du juge par méconnaissance de la sémantique propre au langage (une seule ligne source émettant légitimement plusieurs arêtes, des liaisons de paramètres modélisées comme des affectations, des langages à référence par identifiant). C’est pourquoi nous échantillonnons avec deux graines aléatoires et procédons à des vérifications croisées, et pourquoi un désaccord entre le juge et les fixtures est traité comme le signal &lt;em&gt;le plus&lt;/em&gt; intéressant, pas comme un verdict définitif — parfois, c’est la fixture qui a tort.&lt;/p&gt;
&lt;p&gt;Nous sommes aussi honnêtes sur l’objectif. Le but est zéro erreur réelle, point final — mais « zéro » est une direction vers laquelle nous nous acharnons, langage par langage, pas une case que l’on coche. Il y a toujours un autre dépôt avec un autre idiome.&lt;/p&gt;
&lt;h2 id=&quot;la-justesse-se-mérite-elle-ne-se-décrète-pas&quot;&gt;La justesse se mérite, elle ne se décrète pas&lt;/h2&gt;
&lt;p&gt;Tout ce que Maguyva fait pour un agent — trouver un symbole, tracer une dépendance, répondre à une question avec du code cité — repose sur la justesse de l’extraction sous-jacente. Sur 280 langages, cette justesse ne peut pas être affirmée ; elle doit être &lt;em&gt;méritée&lt;/em&gt; en continu face au code réel. La boucle est notre façon de la mériter : un cycle autonome de contrôle ponctuel et de correction qui se méfie de ses propres métriques, prouve chaque changement, et transforme chaque correction en garde-fou contre la prochaine régression. Ce n’est pas glamour. C’est le travail qui nous permet de dire « nous prenons en charge votre langage » et de le penser vraiment. Le vert est facile. La justesse se mérite.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Recherche par fusion multimodale : choisir le bon moteur de récupération pour chaque requête</title><link>https://maguyva.ai/fr/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/multi-modal-fusion-search</guid><description>Une requête comme « où est défini parseConfig » appelle une recherche différente de « comment fonctionne l&apos;authentification ». Maguyva classe l&apos;intention, pondère en conséquence quatre modalités de récupération, puis fusionne les résultats avec une Reciprocal Rank Fusion pondérée.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Note sur la conception historique : cet article d’avril 2026 décrit la conception du routage à cette époque, pas le comportement par défaut actuel. La correction de septembre ci-dessous porte uniquement sur une affirmation de mesure. Pour le routage actuel, les préréglages et les commandes explicites des modalités, voir &lt;a href=&quot;https://maguyva.ai/fr/docs/how-it-works&quot;&gt;Comment ça marche&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une requête de recherche n’est pas une chose unique.&lt;/p&gt;
&lt;p&gt;« où est défini &lt;code&gt;parseConfig&lt;/code&gt; » veut un symbole exact — un emplacement précis, vite. « comment fonctionne l’authentification » veut du sens — l’ensemble du code apparenté qui explique un concept. « qu’est-ce qui casse si je modifie cette fonction » veut le graphe de dépendances. « trouver la chaîne &lt;code&gt;ECONNREFUSED&lt;/code&gt; » veut une correspondance littérale, rien de plus subtil.&lt;/p&gt;
&lt;p&gt;Grep excelle pour les correspondances littérales et se révèle utile pour certaines chasses aux références, mais ce n’est pas un graphe de dépendances et il ne comprend pas le sens. Les embeddings couvrent le versant sémantique, mais ce sont le mauvais outil pour les chaînes exactes et l’analyse d’impact. La plupart des outils de recherche de code choisissent un seul moteur et font vivre chaque requête avec ce choix. Maguyva ne choisit pas. Il détermine quel type de question vous avez posée, puis mélange quatre moteurs de récupération dans la proportion que cette question mérite.&lt;/p&gt;
&lt;h2 id=&quot;quatre-modalités&quot;&gt;Quatre modalités&lt;/h2&gt;
&lt;p&gt;Sous le capot, il existe quatre façons indépendantes de trouver du code :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sémantique&lt;/strong&gt; — recherche vectorielle sur des embeddings binaires Voyage ; trouve le code par le sens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;textuelle&lt;/strong&gt; — correspondance de trigrammes ; trouve les littéraux, les chaînes d’erreur, les identifiants exacts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;structurelle&lt;/strong&gt; — requêtes AST ; trouve les définitions, les signatures et les constructions du langage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;par graphe&lt;/strong&gt; — le graphe de dépendances ; trouve les appelants, les appelés et le rayon d’impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chacune excelle sur une classe de question différente. L’astuce consiste à décider dans quelle mesure faire confiance à chacune pour la requête que l’on a sous les yeux.&lt;/p&gt;
&lt;h2 id=&quot;classification-dintention&quot;&gt;Classification d’intention&lt;/h2&gt;
&lt;p&gt;Avant tout lancement de récupération, un classificateur léger trie la requête dans l’une de six intentions, avec un score de confiance. Il est délibérément peu coûteux — des heuristiques ordonnées, la première correspondance l’emporte — car il s’exécute sur le chemin critique et n’ajoute qu’une milliseconde ou deux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;commence par &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (confiance 0,95)&lt;/li&gt;
&lt;li&gt;« who calls » (qui appelle), « usages of » (usages de), « references to » (références à) → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;« impact », « blast radius » (rayon d’impact), « what depends on » (qu’est-ce qui dépend de) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;une chaîne entre guillemets &lt;code&gt;&quot;string&quot;&lt;/code&gt; ou un jeton d’erreur comme &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;un identifiant &lt;code&gt;CamelCase&lt;/code&gt; ou &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;« how » (comment), « why » (pourquoi), « explain » (expliquer), « architecture » → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;rien ne correspond → &lt;strong&gt;understand_code&lt;/strong&gt;, faible confiance (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chaque intention porte un profil de pondération réparti sur les quatre modalités. Voici les chiffres réels :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intention&lt;/th&gt;
&lt;th&gt;sémantique&lt;/th&gt;
&lt;th&gt;textuelle&lt;/th&gt;
&lt;th&gt;structurelle (AST)&lt;/th&gt;
&lt;th&gt;graphe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,3&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ainsi, « où est défini &lt;code&gt;parseConfig&lt;/code&gt; » s’appuie fortement sur l’AST (0,6). « comment fonctionne l’authentification » s’appuie sur les vecteurs sémantiques (0,5). « qu’est-ce qui dépend de ceci » est presque entièrement du graphe (0,7). « trouver &lt;code&gt;ECONNREFUSED&lt;/code&gt; » est presque entièrement du trigramme (0,9), le modèle d’embedding étant entièrement désactivé — parce que la similarité sémantique est précisément le mauvais outil pour une chaîne exacte.&lt;/p&gt;
&lt;h2 id=&quot;le-chemin-rapide-et-le-chemin-fusionné&quot;&gt;Le chemin rapide, et le chemin fusionné&lt;/h2&gt;
&lt;p&gt;Quand le classificateur est confiant — score ≥ 0,85 — et que la requête est ordinaire, Maguyva saute entièrement la fusion et route directement vers l’unique modalité dominante. « où est défini X » n’a pas besoin de quatre moteurs de récupération ; il lui faut l’index AST, tout de suite. Ce chemin direct est renvoyé sous la mention &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tout ce qui est ambigu passe par la fusion. Les quatre modalités (ou trois, sur le préréglage par défaut) s’exécutent en parallèle, chacune renvoyant sa propre liste classée, et nous les combinons.&lt;/p&gt;
&lt;h2 id=&quot;reciprocal-rank-fusion-pondérée&quot;&gt;Reciprocal Rank Fusion pondérée&lt;/h2&gt;
&lt;p&gt;Fusionner des moteurs de récupération hétérogènes est plus difficile qu’il n’y paraît : une similarité cosinus de 0,82, un score de trigramme de 137 et une centralité de graphe de 0,004 ne sont pas sur la même échelle, donc on ne peut pas simplement les additionner. La Reciprocal Rank Fusion contourne le problème en jetant les scores bruts et en ne conservant que le &lt;strong&gt;rang&lt;/strong&gt; attribué par chaque moteur. La contribution d’un résultat pour une modalité est :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;où &lt;code&gt;rank&lt;/code&gt; est sa position dans la liste de cette modalité et &lt;code&gt;k&lt;/code&gt; est une constante de lissage. Les contributions sont sommées entre modalités pour tout résultat trouvé par plus d’un moteur — l’accord entre moteurs de récupération remonte naturellement vers le haut. Nous utilisons &lt;strong&gt;k = 40&lt;/strong&gt; sur le préréglage par défaut et 60 sur &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; tourne uniquement en sémantique, donc la fusion n’y intervient jamais). Les travaux originaux sur la RRF ont retenu k = 60 pour la récupération généraliste ; notre valeur par défaut est légèrement plus tranchante, ce qui donne un peu plus de poids à l’accord entre modalités sur les résultats les mieux classés — et nous ne recommandons pas de la régler manuellement.&lt;/p&gt;
&lt;p&gt;En plus de cela, les résultats portent un &lt;strong&gt;bonus d’importance de graphe&lt;/strong&gt;. Un nœud central — une fonction sur laquelle s’appuie toute la base de code — devrait devancer un nœud feuille peu connu même à pertinence textuelle égale, donc nous multiplions chaque contribution par :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La centralité provient des métriques PageRank / degré précalculées du pipeline, et le bonus est plafonné à 1,5× pour qu’une fonction populaire ne puisse pas complètement enterrer une fonction obscure plus pertinente. Enfin, nous rétrogradons les résultats issus des chemins vendor, build et archive, et nous dédupliquons pour ne garder que le meilleur segment par fichier.&lt;/p&gt;
&lt;h2 id=&quot;ce-qui-reste-imparfait&quot;&gt;Ce qui reste imparfait&lt;/h2&gt;
&lt;p&gt;Le classificateur d’intention est un ensemble d’expressions régulières, pas un modèle entraîné. Il traite les formes courantes de requêtes par des heuristiques, et une requête ambiguë se rabat sur &lt;code&gt;understand_code&lt;/code&gt; et un mélange à dominante sémantique. Une version antérieure de cet article présentait comme obtenue une baisse du taux de requêtes sans résultat d’environ 15 % à moins de 5 %. La proposition de décembre 2025 indiquait en réalité une valeur initiale estimée et un objectif ; aucun jeu de requêtes ni relevé de mesure à l’appui n’est fourni. Nous retirons cette affirmation d’amélioration obtenue ; voir les &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;preuves sources et la correction&lt;/a&gt;. Nous n’avons pas remplacé le classificateur par un modèle entraîné parce que la version économique est rapide et suffisante pour son rôle de routage prévu, et parce qu’un classificateur erroné mais sûr de lui est pire qu’un repli honnête. Les poids sont des hypothèses initiales choisies à la main, pas des valeurs apprises à partir de données de clics que nous ne collectons pas.&lt;/p&gt;
&lt;h2 id=&quot;poser-la-question-pas-choisir-loutil&quot;&gt;Poser la question, pas choisir l’outil&lt;/h2&gt;
&lt;p&gt;Un agent ne devrait pas avoir à savoir s’il faut recourir à grep, aux embeddings ou au graphe d’appels — il devrait poser sa question en termes simples et obtenir la bonne réponse. La fusion multimodale est ce qui permet à &lt;code&gt;find_symbol&lt;/code&gt;, à la recherche sémantique et à l’analyse de dépendances d’être accessibles via une seule interface de requête : le système lit la forme de la question et assemble discrètement le bon moteur de récupération pour elle. Le modèle qui note les embeddings compte, mais savoir quand &lt;em&gt;ne pas&lt;/em&gt; les utiliser compte tout autant. Choisir le bon outil pour chaque requête est une forme de qualité à part entière, et c’est une responsabilité que nous préférons assumer plutôt que de la reporter sur l’appelant.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Observabilité des agents : hooks, Alloy et Grafana</title><link>https://maguyva.ai/fr/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/agent-observability-hooks-alloy-grafana</guid><description>Nous avons relié Claude Code et Codex à une seule pile Grafana avec OpenTelemetry et Alloy, puis utilisé traces et logs pour repérer et corriger les problèmes de comportement des agents à la source.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Les systèmes d’agents échouent de façons étranges.&lt;/p&gt;
&lt;p&gt;Parfois, c’est le modèle qui pose problème. Parfois, c’est l’outil. Parfois votre serveur MCP fonctionne très bien, mais l’agent a choisi le mauvais spécialiste, ou a passé la moitié de la session à faire du travail shell que vous n’attendiez pas, ou a silencieusement brûlé du budget dans une boucle qui paraissait productive de l’extérieur.&lt;/p&gt;
&lt;p&gt;Si vous ne pouvez pas voir la différence, vous n’opérez pas vraiment un système d’agents. Vous devinez.&lt;/p&gt;
&lt;p&gt;Nous avons donc construit une pile d’observabilité pour notre propre flux de travail : Claude Code, Codex, les événements de hooks Claude, les événements de notification Codex, OpenTelemetry natif, Grafana Alloy, et Grafana Cloud de l’autre côté.&lt;/p&gt;
&lt;p&gt;La partie intéressante n’est pas « nous avons créé un tableau de bord ». La partie intéressante est que nous avons dû scinder la télémétrie en deux flux distincts, parce qu’aucune source unique ne nous donnait la vue d’ensemble.&lt;/p&gt;
&lt;h2 id=&quot;le-problème--la-télémétrie-des-agents-est-fragmentée&quot;&gt;Le problème : la télémétrie des agents est fragmentée&lt;/h2&gt;
&lt;p&gt;Les agents de codage modernes émettent déjà une certaine télémétrie. C’est utile, mais insuffisant.&lt;/p&gt;
&lt;p&gt;OTEL natif répond bien à des questions comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Combien de requêtes avons-nous effectuées ?&lt;/li&gt;
&lt;li&gt;Combien a coûté une session ?&lt;/li&gt;
&lt;li&gt;Où se trouvent les spans et les traces ?&lt;/li&gt;
&lt;li&gt;La latence a-t-elle connu un pic ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il répond beaucoup moins bien à des questions comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sur quel serveur MCP l’agent s’est-il appuyé ?&lt;/li&gt;
&lt;li&gt;Cet échec s’est-il produit dans &lt;code&gt;Bash&lt;/code&gt;, un outil de fichiers intégré, ou un appel MCP ?&lt;/li&gt;
&lt;li&gt;Quelle compétence s’est réellement activée ?&lt;/li&gt;
&lt;li&gt;Quel type de sous-agent a été dépêché ?&lt;/li&gt;
&lt;li&gt;La session accomplissait-elle un travail utile, ou se débattait-elle simplement ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette seconde catégorie de questions relève davantage des hooks que des traces.&lt;/p&gt;
&lt;p&gt;Mais l’inverse est vrai aussi : certaines des questions de performance les plus importantes relèvent davantage des traces que des hooks.&lt;/p&gt;
&lt;p&gt;Si vous voulez savoir où la latence s’est réellement accumulée, quels spans étaient lents, ou si la session a passé du temps dans des appels de modèle plutôt que dans l’exécution d’outils, vous avez besoin de données de trace autant que d’événements sémantiques.&lt;/p&gt;
&lt;h2 id=&quot;larchitecture-à-laquelle-nous-avons-abouti&quot;&gt;L’architecture à laquelle nous avons abouti&lt;/h2&gt;
&lt;p&gt;Nous faisons tourner deux chemins de télémétrie en parallèle.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette scission est délibérée.&lt;/p&gt;
&lt;p&gt;Elle est aussi asymétrique. Claude Code nous offre une interface de hooks de cycle de vie beaucoup plus riche. Codex nous offre de l’OTEL natif plus une interface de notification, donc nous normalisons des événements de fin de tour plus légers vers le même schéma de log, plutôt que de prétendre que les deux runtimes exposent les mêmes contrôles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’OTEL natif&lt;/strong&gt; nous donne le flux de référence : logs et traces issus du runtime lui-même, plus des métriques là où le runtime les émet réellement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les événements de hooks et de notification&lt;/strong&gt; nous donnent la couche sémantique : des éléments comme &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, et les métadonnées classifiées qui nous intéressent réellement lors du débogage du comportement des agents. Claude Code apporte ici le flux d’événements le plus riche. Codex apporte un flux normalisé plus léger, mais tout de même utile.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-les-hooks-existent-tout-court&quot;&gt;Pourquoi les hooks existent tout court&lt;/h2&gt;
&lt;p&gt;Notre pipeline de hooks enrichit les événements avant qu’ils n’atteignent Loki.&lt;/p&gt;
&lt;p&gt;Au lieu de simplement dire « un outil s’est exécuté », nous classons l’événement dans des champs comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt; : builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt; : quel backend MCP a traité l’appel&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt; : la famille de commande shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt; : quel type de spécialiste a été dépêché&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt; : si la source était Claude Code ou Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela signifie que nous pouvons poser des questions qui comptent sur le plan opérationnel :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce ne sont pas des champs de façade. Ils font toute la différence entre « l’agent semblait lent » et « l’agent a passé les dix dernières minutes dans des opérations git riches en commandes shell, avec un taux d’échec d’outils élevé ».&lt;/p&gt;
&lt;p&gt;Un détail d’implémentation qui paraît plus étrange qu’il ne l’est vraiment : le flux Loki partagé utilise toujours &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; comme label, même quand l’événement provient de Codex. La véritable scission entre les runtimes se fait sur &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-alloy-se-trouve-au-milieu&quot;&gt;Pourquoi Alloy se trouve au milieu&lt;/h2&gt;
&lt;p&gt;Dans ce dispositif, Grafana Alloy n’est pas un simple relais. C’est le point d’application des règles.&lt;/p&gt;
&lt;p&gt;Nous dirigeons le flux OTEL natif de Claude Code et Codex vers un proxy Alloy local sur &lt;code&gt;localhost:4318&lt;/code&gt;, puis laissons Alloy nettoyer la charge utile avant de la transmettre à Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Cela compte, car la télémétrie brute des agents regorge de champs à forte cardinalité, utiles pour l’analyse mais désastreux comme labels indexés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;les comptages de tokens&lt;/li&gt;
&lt;li&gt;les durées&lt;/li&gt;
&lt;li&gt;les blobs de paramètres d’outils&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous indexez tout, vous obtenez une explosion de labels et une mauvaise journée.&lt;/p&gt;
&lt;p&gt;Alloy fait donc trois choses pour nous :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Il maintient indexé un tout petit ensemble de labels à faible cardinalité.&lt;/li&gt;
&lt;li&gt;Il déplace les champs bruyants mais utiles vers des métadonnées structurées.&lt;/li&gt;
&lt;li&gt;Il élimine purement et simplement le bruit pur.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’idée importante est simple : &lt;strong&gt;observer davantage, indexer moins&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-le-flux-de-hooks-contourne-alloy&quot;&gt;Pourquoi le flux de hooks contourne Alloy&lt;/h2&gt;
&lt;p&gt;Le flux de hooks est déjà façonné pour Loki.&lt;/p&gt;
&lt;p&gt;Au moment où &lt;code&gt;send_event.py&lt;/code&gt; pousse un événement, nous avons déjà décidé quels champs méritent un traitement en label et lesquels appartiennent au corps JSON structuré. Ce flux part directement vers la passerelle OTLP de Grafana Cloud, sans repasser par Alloy.&lt;/p&gt;
&lt;p&gt;Le système présente donc une répartition claire des tâches :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; dompte le flux OTEL natif brut.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L’enrichissement par hooks&lt;/strong&gt; rend les événements sémantiques interrogeables.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela garde l’architecture plus simple que si l’on tentait de tout faire passer par un seul chemin.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-montre-réellement-le-tableau-de-bord&quot;&gt;Ce que montre réellement le tableau de bord&lt;/h2&gt;
&lt;p&gt;La capture d’écran ci-dessous provient de l’un des tableaux de bord d’observabilité qui sous-tendent notre flux de travail d’agents. Ce n’est pas un benchmark, et les chiffres ne sont qu’un instantané à un moment donné. Ce qui compte, c’est la forme des données : flux d’activité, appels d’outils, échecs, prompts, et répartitions par agent, outils intégrés, usage MCP, commandes shell et compétences.&lt;/p&gt;
&lt;p&gt;Ce qui est utile, c’est que ce tableau de bord vit sur la même pile Grafana que le reste de la télémétrie des agents. Nous pouvons filtrer par agent source et famille d’outils, et regarder à travers les runtimes sans inventer une histoire d’observabilité différente pour chaque système.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Ouvrir la capture d&apos;écran du tableau de bord d&apos;observabilité en pleine résolution&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Tableau de bord Grafana montrant un flux d&apos;activité, le nombre d&apos;appels d&apos;outils, les échecs, les prompts, et des répartitions par agents, outils intégrés, usage MCP, commandes CLI et compétences pour un flux de travail d&apos;agent.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    L&apos;un des tableaux de bord en direct qui sous-tendent notre flux de travail d&apos;agents. Cette capture d&apos;écran n&apos;est qu&apos;une tranche d&apos;une pile Grafana partagée qui reçoit aussi la télémétrie de nos autres runtimes et systèmes d&apos;agents. Cliquez sur l&apos;image pour la version en pleine résolution.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;pourquoi-les-traces-comptent-plus-quil-ny-paraît-au-premier-abord&quot;&gt;Pourquoi les traces comptent plus qu’il n’y paraît au premier abord&lt;/h2&gt;
&lt;p&gt;Les logs nous disent quelle catégorie de travail a eu lieu. Les traces nous disent comment ce travail s’est déroulé dans le temps.&lt;/p&gt;
&lt;p&gt;Cette distinction compte dans les systèmes d’agents, parce que « lent » est un terme trop grossier pour être utile.&lt;/p&gt;
&lt;p&gt;Une trace peut nous dire si la douleur venait :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de la latence du modèle&lt;/li&gt;
&lt;li&gt;du temps d’exécution des outils&lt;/li&gt;
&lt;li&gt;de tentatives répétées&lt;/li&gt;
&lt;li&gt;d’une interaction MCP particulièrement coûteuse&lt;/li&gt;
&lt;li&gt;d’une longue traîne de petites opérations qui paraissaient inoffensives isolément&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En pratique, nous utilisons ensemble le flux de hooks et les traces Tempo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Les logs de hooks&lt;/strong&gt; répondent : quel genre de chose s’est produit ?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les traces&lt;/strong&gt; répondent : où le temps est-il passé ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette combinaison est ce qui transforme l’observabilité d’un tableau de bord en une explication.&lt;/p&gt;
&lt;h2 id=&quot;où-se-situe-codex&quot;&gt;Où se situe Codex&lt;/h2&gt;
&lt;p&gt;Codex fait partie de la même pile, mais il n’est pas identique à Claude Code.&lt;/p&gt;
&lt;p&gt;Pour Codex, nous relions deux éléments :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L’OTEL natif de Codex vers Alloy&lt;/li&gt;
&lt;li&gt;Un webhook de notification vers &lt;code&gt;codex_notify.py&lt;/code&gt;, qui fait correspondre les fins de tour au même schéma Loki que celui utilisé pour les événements de hooks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela nous donne un filtre unifié comme &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; à l’intérieur du même flux de logs.&lt;/p&gt;
&lt;p&gt;La réserve honnête : la charge utile de notification de Codex est aujourd’hui plus légère que la charge utile de hooks de Claude Code, car ce n’est pas le même type d’interface d’intégration. Dans notre configuration actuelle, les fins de tour de Codex peuvent être normalisées dans le schéma partagé, mais une extraction riche outil par outil reste meilleure dans le flux OTEL natif que dans le pont de notification.&lt;/p&gt;
&lt;p&gt;Ce n’est pas une raison d’éviter le sujet. C’est justement le propos de cet article. Les vrais systèmes d’observabilité s’assemblent à partir de signaux imparfaits.&lt;/p&gt;
&lt;h2 id=&quot;grafana-via-mcp-change-la-donne&quot;&gt;Grafana via MCP change la donne&lt;/h2&gt;
&lt;p&gt;Le changement le plus important est que Grafana n’est plus seulement un lieu que les humains visitent dans un navigateur.&lt;/p&gt;
&lt;p&gt;Dans ce dépôt, nous exposons aussi Grafana via MCP. Cela signifie qu’un agent peut interroger Loki, Prometheus et Tempo directement, au lieu d’attendre qu’un humain inspecte d’abord manuellement les tableaux de bord.&lt;/p&gt;
&lt;p&gt;Cela transforme l’observabilité en une entrée active du flux de travail.&lt;/p&gt;
&lt;p&gt;Un agent peut demander :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quelles familles d’outils ont le plus échoué au cours de la dernière heure ?&lt;/li&gt;
&lt;li&gt;Quel serveur MCP a dominé une session ?&lt;/li&gt;
&lt;li&gt;Les changements récents ont-ils réduit les échecs d’outils, ou simplement déplacé le travail vers des chemins plus riches en shell avec les mêmes erreurs ?&lt;/li&gt;
&lt;li&gt;Quelles traces montrent la latence la plus élevée ou des tentatives répétées ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une fois que vous avez cela, vous êtes très proche d’une boucle d’auto-amélioration.&lt;/p&gt;
&lt;h2 id=&quot;du-tableau-de-bord-à-la-boucle-de-rétroaction&quot;&gt;Du tableau de bord à la boucle de rétroaction&lt;/h2&gt;
&lt;p&gt;C’est la partie que nous trouvons la plus intéressante.&lt;/p&gt;
&lt;p&gt;Une fois que la pile d’observabilité devient interrogeable depuis la couche agent, la télémétrie cesse d’être une surface de reporting passive et devient un signal de contrôle.&lt;/p&gt;
&lt;p&gt;La boucle ressemble à ceci :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L’activité des agents émet des traces, des métriques et des logs de hooks enrichis.&lt;/li&gt;
&lt;li&gt;Grafana stocke les preuves dans Loki, Tempo et Prometheus, là où les métriques existent.&lt;/li&gt;
&lt;li&gt;Les agents interrogent ces preuves via Grafana MCP.&lt;/li&gt;
&lt;li&gt;Le système identifie un mauvais mélange d’outils, des compétences fragiles, un routage faible, ou des flux de travail riches en shell qui continuent de produire des erreurs évitables.&lt;/li&gt;
&lt;li&gt;Les agents ou les opérateurs ajustent les prompts, les configurations d’agents, les descriptions de compétences, les règles de routage ou les accès aux outils.&lt;/li&gt;
&lt;li&gt;La session suivante produit une nouvelle forme de télémétrie, et le cycle se répète.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;C’est ainsi que l’on passe d’un « tableau de bord intéressant » à un « système d’amélioration mesurable ».&lt;/p&gt;
&lt;p&gt;L’objectif n’est pas de maximiser une seule catégorie d’outils. C’est de trouver le bon mélange de CLI, d’outils intégrés, d’appels MCP et de compétences pour le travail réellement effectué.&lt;/p&gt;
&lt;h2 id=&quot;les-questions-auxquelles-cela-nous-permet-de-répondre&quot;&gt;Les questions auxquelles cela nous permet de répondre&lt;/h2&gt;
&lt;p&gt;Une fois que les deux runtimes atterrissent dans la même pile Grafana, nous pouvons répondre bien plus vite à des questions opérationnelles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les échecs sont-ils concentrés dans une seule famille d’outils ?&lt;/li&gt;
&lt;li&gt;Les flux de travail riches en shell créent-ils des erreurs évitables là où un outil de plus haut niveau devrait exister ?&lt;/li&gt;
&lt;li&gt;Quels serveurs MCP portent la charge de travail ?&lt;/li&gt;
&lt;li&gt;Payons-nous pour une activité d’agent qui ne produit pas de progrès significatif ?&lt;/li&gt;
&lt;li&gt;Une session est-elle malsaine à cause du modèle, des outils, ou de la couche d’orchestration ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C’est particulièrement utile dans les flux de travail multi-agents, où « l’agent était occupé » ne vous apprend presque rien.&lt;/p&gt;
&lt;p&gt;Si un spécialiste continue d’être dépêché et produit des taux d’échec élevés, c’est un problème de routage ou de façonnage des prompts.&lt;/p&gt;
&lt;p&gt;Si un seul serveur MCP domine tous les appels, cela peut être une bonne architecture, ou un signe que tout le reste est du poids mort.&lt;/p&gt;
&lt;p&gt;Si les échecs d’outils grimpent en flèche pendant que le coût reste élevé, vous avez un problème opérationnel, pas un problème de qualité.&lt;/p&gt;
&lt;p&gt;Si le travail shell continue d’échouer de façon prévisible et évitable là où un outil de plus haut niveau devrait exister, c’est un signal produit.&lt;/p&gt;
&lt;p&gt;Si une compétence s’active constamment sans améliorer les résultats, c’est un signal de prompt ou de routage.&lt;/p&gt;
&lt;h2 id=&quot;la-véritable-leçon&quot;&gt;La véritable leçon&lt;/h2&gt;
&lt;p&gt;La leçon la plus profonde ici est que l’observabilité des agents a besoin à la fois de &lt;strong&gt;télémétrie runtime&lt;/strong&gt; et de &lt;strong&gt;télémétrie de flux de travail&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La télémétrie runtime vous dit ce que le système a fait.&lt;/p&gt;
&lt;p&gt;La télémétrie de flux de travail vous dit ce que l’agent pensait être en train de faire.&lt;/p&gt;
&lt;p&gt;Nous avons besoin des deux.&lt;/p&gt;
&lt;p&gt;Si vous ne gardez que les traces et les compteurs, vous manquez la couche sémantique. Si vous ne gardez que les événements de hooks, vous manquez la latence, les spans et la vue d’ensemble du runtime.&lt;/p&gt;
&lt;p&gt;Et si vous gardez les deux sans jamais les reboucler vers la couche agent, vous avez de la surveillance, pas de l’adaptation.&lt;/p&gt;
&lt;p&gt;C’est cette combinaison qui rend le système suffisamment explicable pour être opéré, et suffisamment réglable pour être amélioré.&lt;/p&gt;
&lt;h2 id=&quot;ce-qui-reste-imparfait&quot;&gt;Ce qui reste imparfait&lt;/h2&gt;
&lt;p&gt;Il subsiste des aspérités.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tous les événements de hooks n’incluent pas les données de durée et de tokens que nous souhaiterions.&lt;/li&gt;
&lt;li&gt;Certaines des meilleures vues de chronométrage viennent encore des traces Tempo, pas des logs de hooks.&lt;/li&gt;
&lt;li&gt;Codex est aujourd’hui moins riche sémantiquement que Claude Code dans le flux d’événements enrichi.&lt;/li&gt;
&lt;li&gt;La capture d’écran du tableau de bord est une surface d’exploitation en direct, pas un artefact marketing poli.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point est volontaire. Nous préférons montrer le véritable tableau de bord de pilotage plutôt que de prétendre que les systèmes d’agents s’expliquent magiquement d’eux-mêmes.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-cela-compte-pour-maguyva&quot;&gt;Pourquoi cela compte pour Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva a pour vocation de donner aux agents une meilleure intelligence du code. Mais une fois que les agents accomplissent réellement un travail utile, une nouvelle exigence apparaît immédiatement : il faut voir comment ils se comportent.&lt;/p&gt;
&lt;p&gt;La qualité de la recherche, la qualité du routage, la sélection des outils et l’efficacité du contexte deviennent tous des problèmes observables.&lt;/p&gt;
&lt;p&gt;C’est pourquoi nous pensons que cela vaut la peine d’en parler. La pile d’agents de demain n’est pas seulement faite de prompts et d’outils. Elle est faite de prompts, d’outils, et de la couche d’instrumentation qui vous dit si l’ensemble fonctionne réellement.&lt;/p&gt;
&lt;p&gt;Si vous construisez des flux de travail d’agents sérieux, l’observabilité n’est pas une infrastructure optionnelle. Elle fait partie du produit.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Exploiter l&apos;historique pour refermer la boucle : comment les changements deviennent mémoire institutionnelle</title><link>https://maguyva.ai/fr/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/mining-workflow-closing-the-loop</guid><description>Les commits Git deviennent des entrées de changelog structurées et des fiches de décision architecturale, puis reviennent nourrir les agents IA sous forme de mémoire institutionnelle interrogeable.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de cet article reflètent le système au moment de la publication (février 2026). Consultez notre &lt;a href=&quot;https://maguyva.ai/fr/team&quot;&gt;page équipe&lt;/a&gt; pour les chiffres actuels.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Chaque équipe d’ingénierie fait face au même défi : les changements se produisent en continu, mais le &lt;em&gt;pourquoi&lt;/em&gt; derrière ces changements disparaît. Six mois plus tard, quelqu’un demande « pourquoi avons-nous adopté DuckDB pour les étapes du pipeline ? », et la réponse ne vit que dans la tête de la personne qui a pris cette décision — si elle est encore là.&lt;/p&gt;
&lt;p&gt;Nous avons construit un flux de travail de minage qui referme cette boucle. Les changements transitent par les commits Git, sont traités par notre pipeline de minage, deviennent des entrées de changelog structurées et des fiches de décision architecturale, puis reviennent nourrir nos agents IA via des requêtes en ligne de commande. Le résultat : une mémoire institutionnelle accessible aussi bien aux humains qu’à l’IA.&lt;/p&gt;
&lt;h2 id=&quot;le-problème--les-décisions-sévaporent&quot;&gt;Le problème : les décisions s’évaporent&lt;/h2&gt;
&lt;p&gt;Considérez un scénario typique. Un développeur commite :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce commit représente un choix architectural significatif. L’équipe a évalué des options, pesé des compromis, et opté pour DuckDB pour des raisons précises. Mais tout ce contexte vit dans :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un fil Slack (probablement supprimé)&lt;/li&gt;
&lt;li&gt;La mémoire de quelqu’un (qui s’estompe assurément)&lt;/li&gt;
&lt;li&gt;Un commentaire dans le code (peut-être, si vous avez de la chance)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Trois mois plus tard, un nouveau membre de l’équipe demande : « Dois-je utiliser DuckDB ou SQLite pour cette nouvelle étape ? » Sans mémoire institutionnelle, il réinvente la roue ou fait des choix incohérents.&lt;/p&gt;
&lt;h2 id=&quot;la-boucle--des-commits-au-contexte&quot;&gt;La boucle : des commits au contexte&lt;/h2&gt;
&lt;p&gt;Notre flux de travail de minage transforme l’historique Git en savoir interrogeable :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L’idée clé : les entrées de changelog et les décisions architecturales découlent toutes deux du même historique Git, traité par un pipeline unifié. Cela garantit que rien ne passe entre les mailles du filet.&lt;/p&gt;
&lt;h2 id=&quot;comment-fonctionne-le-minage&quot;&gt;Comment fonctionne le minage&lt;/h2&gt;
&lt;h3 id=&quot;étape-1--synchroniser-lindex&quot;&gt;Étape 1 : synchroniser l’index&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande scanne l’historique Git et construit un index de tous les commits. Elle extrait de chaque commit des signaux structurés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Type de commit selon Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Portée (quel package ou quelle zone)&lt;/li&gt;
&lt;li&gt;Marqueurs de changement cassant&lt;/li&gt;
&lt;li&gt;Fichiers touchés et métriques de complexité&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;étape-2--vérifier-le-statut-de-couverture&quot;&gt;Étape 2 : vérifier le statut de couverture&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Voici à quoi ressemble notre statut actuel :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15 637 commits traités. 476 sont devenus des décisions architecturales. 6 799 sont devenus des entrées de changelog. Chaque commit est classé.&lt;/p&gt;
&lt;h3 id=&quot;étape-3--obtenir-des-candidats-à-relire&quot;&gt;Étape 3 : obtenir des candidats à relire&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela fait remonter les commits pas encore traités, avec le contexte complet pour la classification :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les signaux aident à guider la classification : &lt;code&gt;is_releasable_type: true&lt;/code&gt; suggère que ceci devrait apparaître dans le changelog. Le grand nombre d’insertions et les fichiers d’infrastructure suggèrent que cela pourrait aussi être une décision architecturale.&lt;/p&gt;
&lt;h3 id=&quot;étape-4--classer-les-commits&quot;&gt;Étape 4 : classer les commits&lt;/h3&gt;
&lt;p&gt;Deux chemins divergent ici : les entrées de changelog et les décisions architecturales.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour les entrées de changelog :&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela enregistre que le commit &lt;code&gt;abc123&lt;/code&gt; doit apparaître dans le changelog sous la catégorie « Ajouté ».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour les décisions architecturales :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;D’abord, obtenez un véritable identifiant de décision :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis classez avec cet identifiant de décision :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela relie le commit à une fiche de décision qui sera créée ou mise à jour.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour le traitement par lots (ce que nous faisons réellement) :&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le format JSONL prend en charge les deux domaines en un seul passage :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;étape-5--générer-les-sorties&quot;&gt;Étape 5 : générer les sorties&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela génère, à partir du registre, des fichiers &lt;code&gt;CHANGELOG.md&lt;/code&gt; par package. Les changelogs sont des artefacts dérivés — supprimez-les, et ils se régénèrent parfaitement à partir du registre source.&lt;/p&gt;
&lt;h2 id=&quot;la-structure-dune-fiche-de-décision&quot;&gt;La structure d’une fiche de décision&lt;/h2&gt;
&lt;p&gt;Les décisions extraites deviennent des fichiers YAML dotés de métadonnées riches :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Chaque décision renvoie à ses commits sources. Chaque décision précise quels fichiers elle affecte. Les relations entre décisions sont explicites.&lt;/p&gt;
&lt;h2 id=&quot;intégration-cli--interroger-la-mémoire-institutionnelle&quot;&gt;Intégration CLI : interroger la mémoire institutionnelle&lt;/h2&gt;
&lt;p&gt;C’est ici que la boucle se referme. Les agents peuvent interroger les décisions via la CLI :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Renvoie les décisions liées à la logique de nouvelle tentative, à la gestion des erreurs, aux schémas de récupération.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Renvoie la fiche de décision complète, avec contexte, justification et impact.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Montre quels choix architecturaux ont été faits récemment.&lt;/p&gt;
&lt;h3 id=&quot;comment-les-agents-utilisent-cela&quot;&gt;Comment les agents utilisent cela&lt;/h3&gt;
&lt;p&gt;Les instructions de base de notre orchestrateur incluent :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quand un agent reçoit la demande d’implémenter quelque chose lié à DuckDB, il peut d’abord vérifier :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et découvrir DEC-PL-142, apprenant ainsi :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pourquoi nous avons choisi DuckDB (context)&lt;/li&gt;
&lt;li&gt;Comment l’utiliser correctement (agent_guidance)&lt;/li&gt;
&lt;li&gt;Quels fichiers consulter (files)&lt;/li&gt;
&lt;li&gt;Quelles décisions connexes existent (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’agent ne réinvente pas la roue. Il s’appuie sur des schémas déjà établis.&lt;/p&gt;
&lt;h2 id=&quot;le-test-des-trois-questions&quot;&gt;Le test des trois questions&lt;/h2&gt;
&lt;p&gt;Tout commit ne mérite pas une fiche de décision. Nous utilisons le test des trois questions pour filtrer :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Était-ce difficile à décider ?&lt;/strong&gt; Cela a-t-il exigé une analyse significative, une évaluation de compromis, ou un débat ?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Est-ce coûteux à changer ?&lt;/strong&gt; Revenir sur cette décision exigerait-il un travail de refonte important ?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A-t-elle un impact à l’échelle du système ?&lt;/strong&gt; Affecte-t-elle plusieurs packages, ou établit-elle des schémas que d’autres suivront ?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si un commit répond « oui » à au moins une de ces questions, il est candidat à l’extraction en décision. Notre taux habituel : 1 à 4 décisions pour 100 commits (environ 1 à 4 %).&lt;/p&gt;
&lt;p&gt;Pour les entrées de changelog, la barre est plus basse : tout changement visible par l’utilisateur (fonctionnalités, corrections, améliorations) est enregistré. Les tâches internes, les mises à jour de documentation et les refactorisations sont généralement écartées. Notre taux habituel : 30 à 50 entrées de changelog pour 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;stockage-des-données--registres-en-ajout-seul&quot;&gt;Stockage des données : registres en ajout seul&lt;/h2&gt;
&lt;p&gt;Le système de minage utilise des registres JSONL en ajout seul, pour un fonctionnement multi-agents sans conflit :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le format JSONL, avec &lt;code&gt;merge=union&lt;/code&gt; dans &lt;code&gt;.gitattributes&lt;/code&gt;, signifie que plusieurs agents peuvent classer des commits simultanément sans conflit de fusion. Chaque ligne est indépendante.&lt;/p&gt;
&lt;h2 id=&quot;contrôles-de-validation&quot;&gt;Contrôles de validation&lt;/h2&gt;
&lt;p&gt;Avant toute session de minage, nous exécutons une validation :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela vérifie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La validité du format SHA&lt;/li&gt;
&lt;li&gt;La conformité du format d’identifiant de décision&lt;/li&gt;
&lt;li&gt;L’absence d’entrées en double pour un même SHA&lt;/li&gt;
&lt;li&gt;L’existence réelle des décisions référencées&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Après la classification, nous validons à nouveau avant de commiter les changements.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-cela-compte&quot;&gt;Pourquoi cela compte&lt;/h2&gt;
&lt;p&gt;La boucle de rétroaction que nous avons construite résout plusieurs problèmes :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour les nouveaux membres de l’équipe :&lt;/strong&gt; au lieu de demander « pourquoi avons-nous fait X ? », ils peuvent chercher dans le registre des décisions. Le contexte est préservé.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour les agents IA :&lt;/strong&gt; ils n’opèrent pas dans le vide. Ils peuvent interroger le savoir institutionnel avant de formuler des recommandations. Quand on leur demande d’ajouter une nouvelle étape de pipeline, ils peuvent découvrir le schéma DuckDB et le suivre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour la cohérence architecturale :&lt;/strong&gt; les décisions sont explicites et interrogeables. Quand quelqu’un propose une approche qui contredit une décision existante, le système peut faire remonter le conflit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour la génération du changelog :&lt;/strong&gt; les notes de version ne sont pas une course de dernière minute. Elles sont un sous-produit de la classification continue pendant le développement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour l’intégration :&lt;/strong&gt; les nouveaux agents héritent du contexte complet de la base de code. Ils ne voient pas seulement le code — ils voient les décisions qui l’ont façonné.&lt;/p&gt;
&lt;h2 id=&quot;état-actuel&quot;&gt;État actuel&lt;/h2&gt;
&lt;p&gt;À ce jour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15 637 commits&lt;/strong&gt; traités par le pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 décisions architecturales&lt;/strong&gt; extraites et documentées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 799 entrées de changelog&lt;/strong&gt; enregistrées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100 % de couverture&lt;/strong&gt; sur les deux domaines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chaque commit depuis nos débuts a été classé. La mémoire institutionnelle est complète et interrogeable.&lt;/p&gt;
&lt;h2 id=&quot;pour-commencer&quot;&gt;Pour commencer&lt;/h2&gt;
&lt;p&gt;Si vous voulez implémenter quelque chose de similaire :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Commencez par des commits au format Conventional Commits.&lt;/strong&gt; Le pipeline de minage fonctionne mieux quand les commits ont des préfixes structurés (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Définissez vos domaines.&lt;/strong&gt; Nous utilisons des domaines comme &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Ils organisent les décisions par zone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Construisez l’habitude de classification.&lt;/strong&gt; Le minage fonctionne quand les équipes classent régulièrement les commits. Le traitement par lots assisté par LLM aide à passer à l’échelle.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rendez les décisions interrogeables.&lt;/strong&gt; La valeur s’accumule quand les agents peuvent chercher les décisions via la CLI. Structurez votre sortie pour une consommation par machine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Refermez la boucle.&lt;/strong&gt; Les décisions doivent influencer le travail futur. Incluez des références aux décisions dans les instructions des agents et les listes de vérification de revue de code.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’objectif n’est pas une documentation parfaite. C’est de rendre le &lt;em&gt;pourquoi&lt;/em&gt; derrière les changements accessible, à la fois aux humains et à l’IA, aujourd’hui comme dans six mois. Quand les changements deviennent mémoire institutionnelle, les équipes construisent sur des schémas établis plutôt que de les réinventer.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Le flux de travail de minage fait partie de notre moteur d’orchestration, plus précisément du module de moteur de contexte de notre package d’orchestration.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Extraction de compétences : de 3 500 candidates à 466 capacités</title><link>https://maguyva.ai/fr/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/skill-mining-3500-and-counting</guid><description>Nous avons passé au crible 3 500 compétences candidates et en avons adopté 466. Une boucle systématique d&apos;extraction et d&apos;ingestion pour construire, à grande échelle, une bibliothèque de compétences d&apos;agents IA cohérente.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de cet article reflètent le système au moment de la publication (janvier 2026). Consultez notre &lt;a href=&quot;https://maguyva.ai/fr/team&quot;&gt;page équipe&lt;/a&gt; pour les chiffres actuels.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;le-problème-des-3-500-compétences&quot;&gt;Le problème des 3 500 compétences&lt;/h2&gt;
&lt;p&gt;Quand nous avons commencé à construire un système d’orchestration d’agents, nous avons fait face à un défi intéressant : des milliers de compétences potentielles sont éparpillées dans tout l’écosystème IA. Dépôts GitHub, documentation d’éditeurs, projets communautaires, schémas internes — les compétences existent partout. Mais lesquelles comptent ? Lesquelles fonctionnent ? Et comment maintenir une bibliothèque de compétences cohérente que les agents peuvent réellement utiliser ?&lt;/p&gt;
&lt;p&gt;Notre réponse : une boucle systématique d’extraction et d’ingestion.&lt;/p&gt;
&lt;h2 id=&quot;les-chiffres-aujourdhui&quot;&gt;Les chiffres aujourd’hui&lt;/h2&gt;
&lt;p&gt;À peine plus de trois mois après le lancement des Agent Skills par Anthropic le 16 octobre 2025, voici où nous en étions à la publication de cet article, le 27 janvier 2026 :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrique&lt;/th&gt;
&lt;th&gt;Nombre&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Candidates identifiées&lt;/td&gt;
&lt;td&gt;plus de 3 500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compétences adoptées&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compétences d’éditeurs&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compétences internes&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Éditeurs actifs&lt;/td&gt;
&lt;td&gt;plus de 25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens moyens par compétence&lt;/td&gt;
&lt;td&gt;2 834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outils référencés&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tags uniques&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nous avons passé en revue plus de 3 500 compétences candidates. Nous en avons adopté 466. Cela représente un taux d’adoption de 13 % — et cette sélectivité est voulue.&lt;/p&gt;
&lt;h2 id=&quot;le-système-de-paliers-de-connaissance&quot;&gt;Le système de paliers de connaissance&lt;/h2&gt;
&lt;p&gt;Toutes les compétences ne se valent pas. Nous les organisons en cinq couches de connaissance (K0-K4), chacune représentant une portée d’applicabilité différente :&lt;/p&gt;
&lt;h3 id=&quot;k0--fondations-universelles&quot;&gt;K0 : Fondations (universelles)&lt;/h3&gt;
&lt;p&gt;Des compétences que chaque agent devrait posséder. Elles représentent des capacités de « bon penseur » qui fonctionnent partout.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les compétences K0 sont portables vers n’importe quel projet, domaine ou pile technologique. Elles encodent des schémas cognitifs universels.&lt;/p&gt;
&lt;h3 id=&quot;k1--identités-discipline&quot;&gt;K1 : Identités (discipline)&lt;/h3&gt;
&lt;p&gt;Des compétences de « bon ingénieur » ou de « bon chercheur » qui s’appliquent à travers les projets au sein d’une discipline.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2--domaines-expertise-sur-un-sujet&quot;&gt;K2 : Domaines (expertise sur un sujet)&lt;/h3&gt;
&lt;p&gt;Des compétences de « bon expert base de données » ou de « bon ingénieur sécurité », portables au sein d’un domaine.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3--piles-techniques-technologie&quot;&gt;K3 : Piles techniques (technologie)&lt;/h3&gt;
&lt;p&gt;Des compétences de « bon utilisateur Supabase » ou de « bon développeur Cloudflare » pour des piles technologiques spécifiques.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4--projet-organisation&quot;&gt;K4 : Projet (organisation)&lt;/h3&gt;
&lt;p&gt;Des compétences propres à notre organisation et à nos flux de travail.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;la-boucle-dextraction&quot;&gt;La boucle d’extraction&lt;/h2&gt;
&lt;h3 id=&quot;phase-1--découverte&quot;&gt;Phase 1 : découverte&lt;/h3&gt;
&lt;p&gt;Les compétences viennent de partout :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dépôts d’éditeurs&lt;/strong&gt; : AWS, Anthropic, Cloudflare, Supabase et des contributeurs communautaires publient des collections de compétences. Nous suivons plus de 25 racines d’éditeurs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Projets communautaires&lt;/strong&gt; : GitHub regorge de templates Claude Code, de schémas d’agents et de définitions de flux de travail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schémas internes&lt;/strong&gt; : à mesure que notre équipe résout des problèmes, des schémas émergent. Ils sont formalisés en compétences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extraction depuis la documentation&lt;/strong&gt; : la documentation technique contient souvent des compétences implicites — procédures, listes de vérification, arbres de décision.&lt;/p&gt;
&lt;p&gt;La découverte est continue. Nous utilisons un backlog de compétences pour suivre les candidates avant évaluation formelle.&lt;/p&gt;
&lt;h3 id=&quot;phase-2--évaluation&quot;&gt;Phase 2 : évaluation&lt;/h3&gt;
&lt;p&gt;Chaque candidate passe par la même grille :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les cinq critères produit doivent tous être satisfaits. C’est pourquoi 87 % des candidates sont rejetées.&lt;/p&gt;
&lt;p&gt;Ensuite, chaque candidate passe par une revue de confiance distincte. Nous ne traitons pas un dépôt officiel d’éditeur, un mainteneur communautaire bien connu et un dépôt GitHub aléatoire comme des sources de vérité équivalentes.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les éditeurs de confiance bénéficient d’une revue de provenance plus légère, mais pas d’un laissez-passer. Les sources non fiables ou inconnues subissent un audit manuel plus approfondi, et nous n’exécutons pas les scripts intégrés avant qu’ils n’aient été lus, délimités, et classés comme sûrs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analyse d’écart&lt;/strong&gt; : avant d’adopter, nous cherchons dans notre registre :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si nous l’avons déjà, nous n’en avons pas besoin. Si nous avons quelque chose de proche, nous pourrions fusionner plutôt qu’adopter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notation de profondeur et de conformité aux standards&lt;/strong&gt; : nous notons aussi à quel point une candidate exploite pleinement le modèle agent-compétence. Un simple &lt;code&gt;SKILL.md&lt;/code&gt; isolé peut rester utile, mais des compétences plus profondes ont plus de valeur quand elles séparent instructions, références, scripts et actifs comme le recommande &lt;code&gt;agentskills.io&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les étoiles GitHub peuvent légèrement rehausser un score de crédibilité, mais elles ne sauvent jamais une compétence superficielle ou dangereuse. Un dépôt très étoilé avec un seul &lt;code&gt;SKILL.md&lt;/code&gt; vague et des scripts opaques obtient une moins bonne note qu’un plus petit dépôt avec une description précise, des &lt;code&gt;references/&lt;/code&gt; soignées, et des utilitaires atomiques qui exploitent réellement toute la capacité du modèle de compétence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analyse structurelle&lt;/strong&gt; : nous vérifions la qualité de la compétence :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si une candidate inclut des scripts, cette revue devient plus stricte. Une bonne compétence n’est pas seulement utile ; elle doit être lisible, délimitée et sûre à confier à un agent. Ce seul filtre de sécurité disqualifie une part significative de candidates par ailleurs intéressantes.&lt;/p&gt;
&lt;h3 id=&quot;phase-3--ingestion&quot;&gt;Phase 3 : ingestion&lt;/h3&gt;
&lt;p&gt;Quand une compétence passe l’évaluation, elle entre dans le registre. Mais les compétences ne sont jamais adoptées sans modification. Elles sont adaptées à notre système.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifications lors de l’adoption&lt;/strong&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Normalisation des métadonnées&lt;/strong&gt; : chaque compétence reçoit notre schéma de frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attribution du palier K&lt;/strong&gt; : les compétences sont placées dans la couche de connaissance appropriée&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enrichissement des tags&lt;/strong&gt; : des tags sont ajoutés pour la découverte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Déclaration des outils&lt;/strong&gt; : les outils autorisés sont explicitement déclarés&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alignement des sections&lt;/strong&gt; : le contenu est restructuré pour correspondre à notre modèle&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un YAML de compétence typique après ingestion :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;phase-4--attribution-de-portée&quot;&gt;Phase 4 : attribution de portée&lt;/h3&gt;
&lt;p&gt;Les compétences sont attribuées à des portées — des catégories qui déterminent quels agents chargent quelles compétences :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les agents déclarent leurs portées, et les compétences sont attribuées automatiquement :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;phase-5--matérialisation&quot;&gt;Phase 5 : matérialisation&lt;/h3&gt;
&lt;p&gt;Les compétences ne vivent pas en YAML en production. Elles sont rendues en fichiers SKILL.md que Claude Code peut charger :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lit toutes les définitions YAML de compétences&lt;/li&gt;
&lt;li&gt;Les rend via des templates Jinja&lt;/li&gt;
&lt;li&gt;Écrit les fichiers SKILL.md dans &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organise par palier K (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La structure de sortie finale :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;le-schéma-des-portées-dormantes&quot;&gt;Le schéma des portées dormantes&lt;/h2&gt;
&lt;p&gt;L’un de nos schémas les plus puissants est celui des compétences « adoptées mais non chargées ». Nous appelons cela des portées dormantes.&lt;/p&gt;
&lt;p&gt;Prenez les compétences de calcul scientifique du dépôt k-dense-scientific. Nous avons adopté plus de 120 compétences couvrant la bio-informatique, la chimie, l’informatique quantique et l’informatique clinique. Mais la plupart de nos agents n’ont pas besoin d’amarrage moléculaire ni d’analyse d’expression génique.&lt;/p&gt;
&lt;p&gt;Au lieu de charger les 120 compétences dans chaque agent (ce qui gonflerait les fenêtres de contexte), nous :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Adoptons&lt;/strong&gt; les compétences avec une portée spécifique (par exemple, &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Les gardons &lt;strong&gt;dormantes&lt;/strong&gt; — enregistrées mais non chargées&lt;/li&gt;
&lt;li&gt;Les &lt;strong&gt;activons&lt;/strong&gt; seulement quand un agent déclare cette portée&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce schéma nous permet d’avoir 466 compétences dans le registre, tandis qu’un agent typique n’en charge que 40 à 60 pertinentes.&lt;/p&gt;
&lt;h2 id=&quot;types-de-compétences&quot;&gt;Types de compétences&lt;/h2&gt;
&lt;p&gt;Les compétences suivent trois schémas cognitifs :&lt;/p&gt;
&lt;h3 id=&quot;flux-de-travail&quot;&gt;Flux de travail&lt;/h3&gt;
&lt;p&gt;Des étapes procédurales ordonnées : « 1. Faire X, 2. Puis Y, 3. Enfin Z »&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discipline&quot;&gt;Discipline&lt;/h3&gt;
&lt;p&gt;Des garde-fous comportementaux : « Toujours X », « Jamais Y », « Préférer Z »&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;liste-de-vérification&quot;&gt;Liste de vérification&lt;/h3&gt;
&lt;p&gt;Des critères de vérification : « Confirmer X », « Vérifier Y », « Contrôler Z »&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;contrôles-qualité&quot;&gt;Contrôles qualité&lt;/h2&gt;
&lt;p&gt;Chaque compétence doit passer une validation avant de partir en production :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les descriptions doivent compter de 50 à 400 caractères, avec des phrases de déclenchement (« À utiliser quand… », « Quand vous avez besoin de… ») pour que Claude Code sache quand les suggérer.&lt;/p&gt;
&lt;p&gt;Nous validons en continu :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;lécosystème-déditeurs&quot;&gt;L’écosystème d’éditeurs&lt;/h2&gt;
&lt;p&gt;Nos 373 compétences d’éditeurs viennent de :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fournisseur&lt;/th&gt;
&lt;th&gt;Compétences&lt;/th&gt;
&lt;th&gt;Domaine&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Services cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Génération de documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Base de données&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;plus de 100&lt;/td&gt;
&lt;td&gt;Calcul scientifique&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Data science&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;plus de 45&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Automatisation navigateur&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Chaque racine d’éditeur est déclarée dans metadata.yaml :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quand &lt;code&gt;orkestra sync&lt;/code&gt; s’exécute, les compétences d’éditeurs sont liées par symlink dans &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; avec leur espace de noms fournisseur.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-nous-avons-appris&quot;&gt;Ce que nous avons appris&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La sélectivité paie.&lt;/strong&gt; Il est tentant d’adopter tout ce qui paraît utile. Mais chaque compétence coûte des tokens. Avec 2 834 tokens en moyenne par compétence, le gonflement fait mal vite. Notre taux d’adoption de 13 % garde les agents légers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La structure permet la découverte.&lt;/strong&gt; Le système de paliers K n’est pas qu’une question d’organisation — c’est une question de portabilité. Les compétences K0 sont réutilisables partout. Les compétences K4 sont intentionnellement propres au projet. Cette clarté aide les humains comme les agents à trouver ce dont ils ont besoin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les portées dormantes passent à l’échelle.&lt;/strong&gt; Vous pouvez adopter des centaines de compétences sans toutes les charger. Les portées vous permettent de construire un registre exhaustif tout en gardant maniables les fenêtres de contexte de chaque agent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La modification lors de l’adoption est essentielle.&lt;/strong&gt; Les compétences brutes d’éditeurs correspondent rarement à votre système. Le processus d’ingestion — ajouter des métadonnées, attribuer des paliers, enrichir les tags — fait fonctionner les compétences externes en interne.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’extraction est continue.&lt;/strong&gt; Le chiffre de 3 500 continue de croître. De nouveaux dépôts d’éditeurs apparaissent. Des schémas communautaires émergent. Des flux de travail internes se solidifient. La boucle ne s’arrête jamais.&lt;/p&gt;
&lt;h2 id=&quot;et-ensuite&quot;&gt;Et ensuite&lt;/h2&gt;
&lt;p&gt;Nous travaillons sur plusieurs améliorations :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Détection automatisée d’écarts&lt;/strong&gt; : alerter quand des échecs courants d’agents pourraient être résolus par une compétence non adoptée&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flux de travail de dépréciation des compétences&lt;/strong&gt; : un processus formel pour retirer les compétences supplantées ou inutilisées&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dépendances entre compétences&lt;/strong&gt; : déclaration explicite des prérequis d’une compétence&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytique d’usage&lt;/strong&gt; : suivre quelles compétences les agents invoquent réellement, par opposition à celles qu’ils se contentent de charger&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La boucle d’extraction de compétences est de l’infrastructure. Ce n’est pas glamour. Mais c’est ce qui fait que 41 agents travaillent de façon cohérente avec 466 capacités, tout en restant dans les limites de contexte.&lt;/p&gt;
&lt;p&gt;Voilà l’histoire de comment 3 500 devient 466. Pas en ignorant 3 000 — en les évaluant systématiquement et en n’adoptant que ce qui fonctionne.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Vous voulez voir le système de compétences en action ? Consultez &lt;code&gt;uv run orkestra skills list&lt;/code&gt; pour explorer notre registre actuel.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Divulgation progressive : des fenêtres CLI sur les systèmes d&apos;agents</title><link>https://maguyva.ai/fr/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/progressive-disclosure-cli-into-agents</guid><description>Les systèmes d&apos;agents sont opaques par défaut. La divulgation progressive offre aux opérateurs des vues CLI en couches, des contrôles d&apos;état rapides jusqu&apos;au détail interne complet des agents et aux traces de décision.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de cet article reflètent le système au moment de la publication (janvier 2026). Consultez notre &lt;a href=&quot;https://maguyva.ai/fr/team&quot;&gt;page équipe&lt;/a&gt; pour les chiffres actuels.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les systèmes d’agents sont opaques par conception. Ils prennent des décisions, invoquent des outils et coordonnent le travail entre des dizaines de spécialistes. Mais quand quelque chose tourne mal — ou quand vous voulez simplement comprendre ce qui se passe — où regarder ?&lt;/p&gt;
&lt;p&gt;La réponse, c’est la divulgation progressive : une interface en couches qui révèle exactement autant de complexité que nécessaire, exactement au moment où c’est nécessaire.&lt;/p&gt;
&lt;h2 id=&quot;le-problème-de-lopacité&quot;&gt;Le problème de l’opacité&lt;/h2&gt;
&lt;p&gt;Un système moderne d’orchestration d’agents peut compter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plus de 40 agents spécialistes, chacun doté de capacités distinctes&lt;/li&gt;
&lt;li&gt;Plus de 700 compétences couvrant l’automatisation interne et les intégrations tierces&lt;/li&gt;
&lt;li&gt;Plus de 470 décisions architecturales façonnant le comportement&lt;/li&gt;
&lt;li&gt;Des dizaines de serveurs d’outils MCP fournissant des capacités externes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette complexité est intentionnelle. Les agents ont besoin d’accéder à un contexte riche — savoir de domaine, intelligence du code, schémas de base de données — pour prendre de bonnes décisions. Mais cette même richesse crée un problème de visibilité.&lt;/p&gt;
&lt;p&gt;Comment savoir quel agent gère les migrations de base de données ? Quelles décisions ont façonné le comportement de classement du système de recherche ? À quels outils le conseiller en architecture a-t-il accès ?&lt;/p&gt;
&lt;p&gt;Sans accès structuré, il ne vous reste plus qu’à lire le code source ou espérer que la documentation est à jour.&lt;/p&gt;
&lt;h2 id=&quot;la-divulgation-progressive-comme-architecture&quot;&gt;La divulgation progressive comme architecture&lt;/h2&gt;
&lt;p&gt;La divulgation progressive n’est pas qu’un schéma d’interface utilisateur. C’est un principe architectural : organiser l’information en couches, chacune plus profonde que la précédente, pour que les utilisateurs puissent s’arrêter au niveau qui répond à leur question.&lt;/p&gt;
&lt;p&gt;Pour les systèmes d’agents, cela se traduit par des commandes CLI à des profondeurs croissantes :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Niveau&lt;/th&gt;
&lt;th&gt;Commande&lt;/th&gt;
&lt;th&gt;Question à laquelle on répond&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tout va-t-il bien ?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quels agents existent ?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Que fait cet agent ?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pourquoi fonctionne-t-il ainsi ?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Outils MCP de Maguyva&lt;/td&gt;
&lt;td&gt;Montrez-moi le code.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Chaque niveau répond à une question de suivi naturelle. Vous avez rarement besoin de sauter directement au niveau 5.&lt;/p&gt;
&lt;h2 id=&quot;niveau-1--santé-du-système&quot;&gt;Niveau 1 : santé du système&lt;/h2&gt;
&lt;p&gt;La première question est toujours : tout fonctionne-t-il ?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Une seule commande. Quatre chiffres. Suffisant pour savoir que le système est configuré et que les registres sont peuplés.&lt;/p&gt;
&lt;p&gt;Si le nombre d’agents chute de façon inattendue, ou si des compétences échouent à se charger, vous le voyez ici en premier. Pas besoin de plonger dans les logs.&lt;/p&gt;
&lt;h2 id=&quot;niveau-2--inventaire-des-agents&quot;&gt;Niveau 2 : inventaire des agents&lt;/h2&gt;
&lt;p&gt;Une fois que vous savez que le système est en bonne santé, la question suivante est : qu’y a-t-il de disponible ?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela renvoie des données structurées — noms d’agents, descriptions, préférences de modèle, couverture de domaine. La sortie est en JSON par défaut, ce qui la rend facile à faire transiter par &lt;code&gt;jq&lt;/code&gt; pour du filtrage :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous voulez des agents qui gèrent le travail base de données ? La commande de recherche réduit le champ :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela scanne les noms, descriptions et capacités. Vous trouvez le bon spécialiste sans lire 40 définitions d’agents.&lt;/p&gt;
&lt;h2 id=&quot;niveau-3--plongée-dans-un-agent&quot;&gt;Niveau 3 : plongée dans un agent&lt;/h2&gt;
&lt;p&gt;Vous avez trouvé un agent qui semble pertinent ? La commande &lt;code&gt;info&lt;/code&gt; révèle tout :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La sortie inclut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Métadonnées&lt;/strong&gt; : nom, catégorie, préférence de modèle, description&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domaines&lt;/strong&gt; : quelles zones de savoir cet agent couvre&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identité&lt;/strong&gt; : traits de caractère (architecte, stratège, architecte-connaissances)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guides d’outils&lt;/strong&gt; : quelle documentation d’outil est injectée dans le contexte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outils&lt;/strong&gt; : la liste complète des outils MCP disponibles pour cet agent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voici un échantillon de ce que vous voyez :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela vous indique exactement ce que l’agent peut faire. Aucun code source requis.&lt;/p&gt;
&lt;h2 id=&quot;niveau-4--archéologie-des-décisions&quot;&gt;Niveau 4 : archéologie des décisions&lt;/h2&gt;
&lt;p&gt;Les agents se comportent selon des décisions documentées. Quand vous devez comprendre &lt;em&gt;pourquoi&lt;/em&gt; quelque chose fonctionne d’une manière particulière, le registre des décisions est la source de vérité.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela renvoie les décisions architecturales correspondantes :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Chaque décision dispose d’une provenance complète — quand elle a été prise, pourquoi, quels compromis ont été considérés, quels commits l’ont mise en œuvre :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C’est de la documentation architecturale qui reste à jour, parce qu’elle est extraite des commits, pas maintenue manuellement.&lt;/p&gt;
&lt;h2 id=&quot;niveau-5--intelligence-du-code-directe&quot;&gt;Niveau 5 : intelligence du code directe&lt;/h2&gt;
&lt;p&gt;Quand vous devez voir l’implémentation réelle — pas des métadonnées à son sujet — les outils MCP de Maguyva fournissent un accès direct.&lt;/p&gt;
&lt;p&gt;Depuis une session d’agent :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela route automatiquement entre recherche sémantique, textuelle et AST pour trouver le code pertinent. Pour des symboles spécifiques :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour l’analyse de dépendances :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce ne sont pas de simples remplacements de grep. Ils tiennent compte du graphe, sont indexés sémantiquement, et intégrés à la même intelligence du code qui alimente les agents eux-mêmes.&lt;/p&gt;
&lt;h2 id=&quot;recherche-unifiée-entre-registres&quot;&gt;Recherche unifiée entre registres&lt;/h2&gt;
&lt;p&gt;Parfois, vous ne savez pas quel registre détient la réponse. La recherche unifiée couvre tout :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 correspondances sur cinq registres. Le résumé vous indique où creuser. Retirez &lt;code&gt;--summary&lt;/code&gt; pour des résultats détaillés, ou ajoutez &lt;code&gt;--limit 5&lt;/code&gt; pour garder une sortie maniable.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-cela-compte&quot;&gt;Pourquoi cela compte&lt;/h2&gt;
&lt;p&gt;La divulgation progressive ne concerne pas que la commodité. Elle change la façon dont vous interagissez avec des systèmes complexes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le débogage devient maîtrisable.&lt;/strong&gt; Quand un agent prend une décision inattendue, vous ne fouillez pas les logs à coups de grep. Vous vérifiez à quels outils il a accès (&lt;code&gt;agents info&lt;/code&gt;), quelles décisions façonnent son comportement (&lt;code&gt;decisions search&lt;/code&gt;), et tracez l’implémentation si nécessaire (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’intégration s’accélère.&lt;/strong&gt; Les nouveaux membres de l’équipe n’ont pas besoin de lire toute la base de code. Ils commencent avec &lt;code&gt;system status&lt;/code&gt;, explorent avec &lt;code&gt;agents list&lt;/code&gt;, et n’approfondissent que quand ils tombent sur quelque chose qu’ils ne comprennent pas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La documentation reste à jour.&lt;/strong&gt; Parce que la CLI lit dans les mêmes registres qui configurent les agents, la sortie est toujours exacte. Il n’y a pas de dérive entre ce que dit la documentation et ce que fait le système.&lt;/p&gt;
&lt;h2 id=&quot;la-cli-comme-interface&quot;&gt;La CLI comme interface&lt;/h2&gt;
&lt;p&gt;Nous aurions pu construire un tableau de bord web. Nous aurions pu écrire une documentation exhaustive. Au lieu de cela, nous avons construit une CLI qui lit directement dans la source de vérité.&lt;/p&gt;
&lt;p&gt;La CLI a des avantages :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Composable&lt;/strong&gt; : faire transiter la sortie par &lt;code&gt;jq&lt;/code&gt;, s’intégrer à des scripts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scriptable&lt;/strong&gt; : automatiser des vérifications, générer des rapports&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rapide&lt;/strong&gt; : pas de chargement de page, pas de flux d’authentification&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exacte&lt;/strong&gt; : lit la configuration réelle, pas une représentation mise en cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour les systèmes où la justesse compte plus que l’esthétique, la CLI l’emporte.&lt;/p&gt;
&lt;h2 id=&quot;construire-votre-propre-divulgation-progressive&quot;&gt;Construire votre propre divulgation progressive&lt;/h2&gt;
&lt;p&gt;Si vous construisez des systèmes d’agents, réfléchissez à la façon dont les utilisateurs les inspecteront :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Commencez par des contrôles de santé.&lt;/strong&gt; Une commande qui vous dit si tout fonctionne.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fournissez des vues d’inventaire.&lt;/strong&gt; Listez ce qui existe avant d’expliquer ce que cela fait.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activez des requêtes ciblées.&lt;/strong&gt; La recherche l’emporte sur la navigation à grande échelle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exposez la provenance.&lt;/strong&gt; Laissez les utilisateurs tracer les décisions jusqu’à leurs origines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connectez-vous à l’intelligence du code.&lt;/strong&gt; Au bout du compte, les utilisateurs doivent voir l’implémentation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Chaque couche répond à une question de suivi. Construisez-les par ordre de fréquence — la plupart des utilisateurs s’arrêtent au niveau 2 ou 3. Seuls les utilisateurs avancés atteignent le niveau 5.&lt;/p&gt;
&lt;p&gt;L’objectif n’est pas de tout exposer. C’est d’exposer exactement ce qui est nécessaire, exactement quand c’est nécessaire. C’est la divulgation progressive appliquée à l’architecture d’agents.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Vérités de terrain : ancrer les agents IA dans la réalité</title><link>https://maguyva.ai/fr/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/ground-truths-anchoring-ai-to-reality</guid><description>Les agents IA hallucinent avec assurance. Les vérités de terrain sont des faits versionnés et délimités qui ancrent le comportement des agents dans la réalité. Voici comment nous les avons construites et les faisons respecter.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de cet article reflètent le système au moment de la publication (janvier 2026). Consultez notre &lt;a href=&quot;https://maguyva.ai/fr/team&quot;&gt;page équipe&lt;/a&gt; pour les chiffres actuels.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les agents IA sont remarquablement capables. Ils savent raisonner, synthétiser et générer. Mais ils ont une faiblesse fondamentale : ils inventent des choses. Pas par malveillance, mais avec assurance. Un agent peut inventer des paramètres d’API qui n’existent pas, référencer des configurations qui n’ont jamais été définies, ou appliquer des schémas issus de ses données d’entraînement qui contredisent votre architecture réelle.&lt;/p&gt;
&lt;p&gt;La parade habituelle est de « donner plus de contexte à l’agent ». Mais le contexte peut être contradictoire. La documentation dérive par rapport à l’implémentation. Les commentaires mentent. Même le code peut induire en erreur quand on le lit sans comprendre l’intention.&lt;/p&gt;
&lt;p&gt;Il nous fallait quelque chose de plus explicite. Quelque chose qui ne puisse être ni ignoré ni mal interprété. Quelque chose qui ancre les agents dans une réalité vérifiable.&lt;/p&gt;
&lt;p&gt;Nous les appelons les Vérités de terrain.&lt;/p&gt;
&lt;h2 id=&quot;quest-ce-quune-vérité-de-terrain-&quot;&gt;Qu’est-ce qu’une vérité de terrain ?&lt;/h2&gt;
&lt;p&gt;Une vérité de terrain est un énoncé de fait explicite et versionné que les agents doivent respecter. Ce n’est pas de la documentation. Ce n’est pas un commentaire. C’est une entité à part entière dans le système, dotée de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Un identifiant unique&lt;/strong&gt; (comme &lt;code&gt;GT-MAG-015&lt;/code&gt; ou &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un statut de cycle de vie&lt;/strong&gt; (actuelle, provisoire ou obsolète)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Une portée&lt;/strong&gt; (à l’échelle de la plateforme, spécifique à un package, ou liée à un domaine)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Des preuves&lt;/strong&gt; (chemins de fichiers, URL ou références qui étayent l’énoncé)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Des consignes pour l’agent&lt;/strong&gt; (instructions explicites à faire ou à éviter)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voici un exemple tiré de notre plateforme d’intelligence du code Maguyva :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce n’est pas de la prose. C’est un contrat. Quand un agent rencontre cette vérité de terrain, il sait :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Le comportement par défaut est déterministe (résultats vides, pas de suppositions floues)&lt;/li&gt;
&lt;li&gt;Il existe des paramètres spécifiques (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) au comportement défini&lt;/li&gt;
&lt;li&gt;Des preuves existent dans des fichiers précis, vérifiables&lt;/li&gt;
&lt;li&gt;L’énoncé a été vérifié à une date précise&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;lanatomie-dun-registre-de-vérités-de-terrain&quot;&gt;L’anatomie d’un registre de vérités de terrain&lt;/h2&gt;
&lt;p&gt;Les vérités de terrain vivent dans des registres YAML sous &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Chaque package ou domaine peut avoir son propre registre. La structure est la suivante :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le registre inclut des métadonnées sur la collection elle-même, une configuration de rendu pour la génération de documentation, et les énoncés eux-mêmes. Chaque énoncé suit un schéma strict validé par des modèles Pydantic :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;comment-les-agents-accèdent-aux-vérités-de-terrain&quot;&gt;Comment les agents accèdent aux vérités de terrain&lt;/h2&gt;
&lt;p&gt;Les vérités de terrain sont exposées via plusieurs canaux :&lt;/p&gt;
&lt;h3 id=&quot;1-documentation-rendue&quot;&gt;1. Documentation rendue&lt;/h3&gt;
&lt;p&gt;La commande &lt;code&gt;orkestra sync&lt;/code&gt; transforme les registres YAML en markdown lisible :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela génère des fichiers &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; qui sont inclus dans le contexte de l’agent. Le rendu regroupe les énoncés par statut et par catégorie :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-recherche-en-ligne-de-commande&quot;&gt;2. Recherche en ligne de commande&lt;/h3&gt;
&lt;p&gt;Les agents disposant d’un accès shell peuvent rechercher des vérités de terrain de manière programmatique :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La fonction de recherche note les correspondances sur plusieurs champs avec une pertinence pondérée :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-composition-du-contexte&quot;&gt;3. Composition du contexte&lt;/h3&gt;
&lt;p&gt;Quand les agents sont générés à partir de définitions YAML, leur contexte peut référencer des registres de vérités de terrain :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela garantit que les vérités de terrain pertinentes sont chargées avant que l’agent ne commence à travailler.&lt;/p&gt;
&lt;h2 id=&quot;catégories-de-vérités-de-terrain&quot;&gt;Catégories de vérités de terrain&lt;/h2&gt;
&lt;p&gt;En parcourant nos registres, les vérités de terrain se regroupent en plusieurs schémas :&lt;/p&gt;
&lt;h3 id=&quot;principes-produit&quot;&gt;Principes produit&lt;/h3&gt;
&lt;p&gt;Des contraintes sur ce que le produit est et n’est pas :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Maguyva est en lecture seule vis-à-vis des dépôts des utilisateurs ; le seul actif non reconstructible est le cache d’embeddings payant. » (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;frontières-architecturales&quot;&gt;Frontières architecturales&lt;/h3&gt;
&lt;p&gt;Où vivent les responsabilités, et pourquoi :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Les frontières entre pipeline et Maguyva sont intentionnelles : pipeline est réutilisable, Maguyva porte la logique propre au code, et le CQRS sépare les écritures des étapes des lectures du serveur. » (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;règles-anti-hallucination&quot;&gt;Règles anti-hallucination&lt;/h3&gt;
&lt;p&gt;Des mandats explicites qui gardent les contrats d’outils déterministes plutôt qu’inférés :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« La correspondance floue de symboles est optionnelle via &lt;code&gt;find_similar=true&lt;/code&gt;. Le comportement par défaut renvoie des résultats vides pour les symboles inexistants ; &lt;code&gt;exact_match=true&lt;/code&gt; impose une correspondance stricte et désactive tous les replis flous. » (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;contrôles-qualité&quot;&gt;Contrôles qualité&lt;/h3&gt;
&lt;p&gt;Des standards à maintenir :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Les modifications de l’infrastructure partagée (post_filters.py, extracteurs de relations, handlers partagés) DOIVENT être validées face à TOUS les langages pris en charge, via une génération complète du manifeste, avant tout commit. Une validation sur un seul langage est insuffisante pour du code partagé. » (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;schémas-de-code&quot;&gt;Schémas de code&lt;/h3&gt;
&lt;p&gt;Des exigences d’implémentation :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Utilisez &lt;code&gt;asyncio.to_thread()&lt;/code&gt; pour le travail lié au CPU dans des contextes asynchrones ; le schéma déprécié &lt;code&gt;loop.run_in_executor()&lt;/code&gt; ne doit pas être utilisé dans du nouveau code. » (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;le-cycle-de-vie-dune-vérité-de-terrain&quot;&gt;Le cycle de vie d’une vérité de terrain&lt;/h2&gt;
&lt;p&gt;Les vérités de terrain ne sont pas statiques. Elles évoluent selon un cycle de vie défini :&lt;/p&gt;
&lt;h3 id=&quot;provisoire&quot;&gt;Provisoire&lt;/h3&gt;
&lt;p&gt;Une vérité proposée, en cours d’évaluation. L’énoncé est enregistré mais peut changer :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;actuelle&quot;&gt;Actuelle&lt;/h3&gt;
&lt;p&gt;Une vérité vérifiée que les agents doivent respecter. Les preuves ont été validées :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;obsolète&quot;&gt;Obsolète&lt;/h3&gt;
&lt;p&gt;Une vérité qui ne s’applique plus. Conservée à titre de référence historique, avec un pointeur vers ce qui l’a remplacée :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;pourquoi-pas-simplement-de-la-documentation-&quot;&gt;Pourquoi pas simplement de la documentation ?&lt;/h2&gt;
&lt;p&gt;La documentation sert un autre objectif. Elle explique. Elle enseigne. Elle peut être vague, utiliser des qualificatifs comme « généralement » ou « typiquement ».&lt;/p&gt;
&lt;p&gt;Les vérités de terrain ne peuvent pas être vagues. Ce sont des assertions. Elles s’appliquent, ou elles ne s’appliquent pas.&lt;/p&gt;
&lt;p&gt;Considérez la différence :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentation :&lt;/strong&gt; « L’API renvoie généralement des résultats vides quand un symbole n’est pas trouvé, bien que la correspondance floue puisse être activée dans certaines configurations. »&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vérité de terrain :&lt;/strong&gt; « Le comportement par défaut renvoie des résultats vides pour les symboles inexistants ; &lt;code&gt;exact_match=true&lt;/code&gt; impose une correspondance stricte et désactive tous les replis flous. »&lt;/p&gt;
&lt;p&gt;La première est utile pour les humains qui apprennent le système. La seconde est exploitable pour les agents qui prennent des décisions.&lt;/p&gt;
&lt;h2 id=&quot;consignes-pour-lagent--à-faire-et-à-éviter&quot;&gt;Consignes pour l’agent : à faire et à éviter&lt;/h2&gt;
&lt;p&gt;Certaines vérités de terrain incluent des consignes explicites pour l’agent :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela lève toute ambiguïté. Un agent qui lit cela sait non seulement ce qui est vrai, mais aussi quelles actions cette vérité implique.&lt;/p&gt;
&lt;h2 id=&quot;vérification-et-maintenance&quot;&gt;Vérification et maintenance&lt;/h2&gt;
&lt;p&gt;Les vérités de terrain demandent de la maintenance. Nous suivons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt; : la date à laquelle quelqu’un a confirmé que l’énoncé tient toujours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt; : les fichiers qui étayent l’énoncé (leur existence peut être vérifiée)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt; : d’où vient la vérité (inspection en CLI, revue d’architecture, apprentissage post-incident)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une vérité de terrain dont les dates de vérification sont anciennes ou dont les liens de preuve sont rompus est un signal à investiguer. Soit la vérité est toujours valide et a besoin d’être revérifiée, soit la réalité a changé et la vérité doit être mise à jour.&lt;/p&gt;
&lt;h2 id=&quot;exemples-réels-tirés-de-la-production&quot;&gt;Exemples réels tirés de la production&lt;/h2&gt;
&lt;h3 id=&quot;frontière-de-sécurité&quot;&gt;Frontière de sécurité&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette vérité de terrain empêche une catégorie de fausses « améliorations de sécurité » qui casseraient le produit.&lt;/p&gt;
&lt;h3 id=&quot;précision-au-moment-de-lextraction&quot;&gt;Précision au moment de l’extraction&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela vient d’une expérience douloureuse. Des agents corrigeaient des packs de langage défaillants en ajoutant des filtres réservés au validateur, qui faisaient paraître le harnais de test plus vert, alors que l’extracteur Maguyva en production continuait d’émettre les mauvaises arêtes. La règle force les corrections à revenir dans le vrai chemin : configuration YAML, requêtes, ou handlers.&lt;/p&gt;
&lt;h3 id=&quot;filtrage-multi-niveaux&quot;&gt;Filtrage multi-niveaux&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela empêche les agents d’ajouter des filtres au mauvais endroit, une erreur courante qui a provoqué des régressions de précision.&lt;/p&gt;
&lt;h2 id=&quot;intégration-avec-le-système-dorchestration&quot;&gt;Intégration avec le système d’orchestration&lt;/h2&gt;
&lt;p&gt;Les vérités de terrain sont une couche parmi d’autres d’un système de contexte plus large :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Décisions architecturales (ADR)&lt;/strong&gt; — enregistrent pourquoi nous avons choisi l’approche A plutôt que B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vérités de terrain&lt;/strong&gt; — énoncent ce qui est établi avec certitude à ce jour&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Schémas de domaine&lt;/strong&gt; — décrivent comment bien faire les choses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-schémas&lt;/strong&gt; — décrivent ce qu’il faut éviter, et pourquoi&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un agent qui travaille dans le système a accès aux quatre. Les vérités de terrain fournissent l’ancrage factuel, tandis que les décisions expliquent l’historique, les schémas guident l’implémentation, et les anti-schémas préviennent des pièges.&lt;/p&gt;
&lt;h2 id=&quot;mesurer-limpact&quot;&gt;Mesurer l’impact&lt;/h2&gt;
&lt;p&gt;Depuis l’introduction des vérités de terrain, nous avons observé :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Moins de cycles « corriger la correction hallucinée »&lt;/li&gt;
&lt;li&gt;Une prise de décision plus assurée des agents quand les faits sont clairs&lt;/li&gt;
&lt;li&gt;De meilleures revues de PR, parce que les attentes sont explicites&lt;/li&gt;
&lt;li&gt;Un temps d’intégration réduit pour les nouveaux agents (et les nouveaux humains)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’investissement dans la maintenance des vérités de terrain se traduit par moins de débogage et des frontières système plus claires.&lt;/p&gt;
&lt;h2 id=&quot;pour-commencer&quot;&gt;Pour commencer&lt;/h2&gt;
&lt;p&gt;Pour ajouter une vérité de terrain à votre système :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Créez un &lt;code&gt;ground_truths.yaml&lt;/code&gt; dans le répertoire &lt;code&gt;ai_assets/reference/&lt;/code&gt; de votre package&lt;/li&gt;
&lt;li&gt;Définissez les métadonnées et la configuration de rendu&lt;/li&gt;
&lt;li&gt;Ajoutez les énoncés en suivant le schéma&lt;/li&gt;
&lt;li&gt;Exécutez &lt;code&gt;uv run orkestra sync&lt;/code&gt; pour générer la documentation&lt;/li&gt;
&lt;li&gt;Incluez le registre dans la composition du contexte de l’agent&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Commencez par les faits qui provoquent le plus de confusion, ou les contraintes les plus souvent violées. Ce sont vos vérités de terrain les plus précieuses.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Les agents IA vont halluciner. C’est leur nature. Mais nous pouvons créer des environnements où l’hallucination est contrainte, où certains faits ne sont pas négociables, où les agents peuvent confronter leurs suppositions à une réalité vérifiée.&lt;/p&gt;
&lt;p&gt;Les vérités de terrain ne sont pas une solution complète. Elles demandent de la maintenance. Elles peuvent devenir obsolètes. Elles ajoutent une charge au processus de développement.&lt;/p&gt;
&lt;p&gt;Mais elles apportent quelque chose de précieux : un vocabulaire partagé de faits auquel humains et agents peuvent tous deux faire confiance. Dans un monde où les agents participent de plus en plus au développement logiciel, ce socle commun devient essentiel.&lt;/p&gt;
&lt;p&gt;L’alternative, ce sont des cycles sans fin d’agents commettant des erreurs avec assurance et d’humains les corrigeant. Les vérités de terrain brisent ce cycle en rendant les corrections explicites et durables.&lt;/p&gt;
&lt;p&gt;Vos agents méritent de savoir ce qui est vrai. Dites-le-leur.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra : orchestrer des agents IA à grande échelle</title><link>https://maguyva.ai/fr/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/fr/blog/orkestra-agent-orchestration</guid><description>Un orchestrateur unique répartit le travail entre des agents IA spécialistes, chacun doté de compétences et d&apos;une mémoire distinctes. Comment Orkestra coordonne 46 agents et 466 compétences en production.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les chiffres de cet article reflètent le système au moment de la publication (janvier 2026). Consultez notre &lt;a href=&quot;https://maguyva.ai/fr/team&quot;&gt;page équipe&lt;/a&gt; pour les chiffres actuels.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quand nous avons commencé à construire avec Claude Code, nous nous sommes heurtés à un problème que toute équipe utilisant des assistants de codage IA finit par rencontrer : un seul agent ne peut pas tout bien faire.&lt;/p&gt;
&lt;p&gt;Vous pouvez demander à un agent d’être un spécialiste base de données. Ou un auditeur de sécurité. Ou un ingénieur frontend. Mais dès l’instant où vous lui demandez d’être les trois à la fois, la qualité en souffre. Le contexte se dilue. Les instructions entrent en conflit. L’agent devient un généraliste médiocre en tout.&lt;/p&gt;
&lt;p&gt;Nous avons donc construit Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;quest-ce-quorkestra-&quot;&gt;Qu’est-ce qu’Orkestra ?&lt;/h2&gt;
&lt;p&gt;Orkestra est un système d’orchestration d’agents pour Claude Code et les outils de codage IA similaires. Il coordonne plusieurs agents spécialisés, chacun doté d’une expertise distincte, sous un orchestrateur unique qui répartit le travail vers le bon spécialiste.&lt;/p&gt;
&lt;p&gt;Imaginez-le comme une agence de placement pour agents IA. L’orchestrateur reçoit une tâche, identifie quel spécialiste doit la traiter, et délègue avec le bon contexte. Une fois le travail fait, les résultats remontent vers l’orchestrateur pour synthèse.&lt;/p&gt;
&lt;p&gt;Les chiffres parlent d’eux-mêmes :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Composant&lt;/th&gt;
&lt;th&gt;Nombre&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agents spécialistes&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compétences réutilisables&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archétypes d’identité&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;États d’esprit&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styles de communication&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domaines de connaissance&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;le-système-de-personnage--le-dd-des-agents&quot;&gt;Le système de personnage : le D&amp;amp;D des agents&lt;/h2&gt;
&lt;p&gt;L’idée centrale derrière Orkestra est que le comportement d’un agent émerge de trois primitives composables :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’identité&lt;/strong&gt; définit &lt;em&gt;ce que&lt;/em&gt; l’agent est. Un architecte conçoit des structures système. Un débogueur remonte des échecs jusqu’à leurs causes racines. Un gardien fait respecter la conformité et les frontières de sécurité. Nous avons 27 archétypes d’identité qui peuvent être combinés.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’état d’esprit&lt;/strong&gt; définit &lt;em&gt;comment&lt;/em&gt; l’agent pense. Un état d’esprit analytique ancre les affirmations dans des preuves et quantifie l’incertitude. Un état d’esprit sceptique interroge les hypothèses et recherche des preuves contradictoires. Un état d’esprit exploratoire embrasse l’ambiguïté et essaie plusieurs approches.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le style&lt;/strong&gt; définit &lt;em&gt;comment&lt;/em&gt; l’agent communique. Un style technique inclut des valeurs exactes et référence des fichiers précis. Un style concis élimine le superflu et commence par la réponse. Un style diplomatique équilibre honnêteté et tact.&lt;/p&gt;
&lt;p&gt;Un agent combine ces primitives :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette composition crée un agent qui conçoit des systèmes (architecte), relie les connaissances entre domaines (architecte-connaissances), fixe une direction stratégique (stratège), pense en preuves et en données (analytique), et communique sans superflu (concis).&lt;/p&gt;
&lt;p&gt;La puissance vient de l’explosion combinatoire. 27 identités multipliées par 11 états d’esprit multipliées par 10 styles donnent près de 3 000 personnalités d’agent possibles. Mais vous ne définissez que les combinaisons qui comptent pour votre travail.&lt;/p&gt;
&lt;h2 id=&quot;compétences--des-modules-de-capacité-réutilisables&quot;&gt;Compétences : des modules de capacité réutilisables&lt;/h2&gt;
&lt;p&gt;Les compétences sont le savoir et les flux de travail que les agents peuvent invoquer. Elles suivent un système par paliers fondé sur la portée :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Palier&lt;/th&gt;
&lt;th&gt;Nom&lt;/th&gt;
&lt;th&gt;Portée&lt;/th&gt;
&lt;th&gt;Exemple&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Fondations&lt;/td&gt;
&lt;td&gt;Méthodologie universelle&lt;/td&gt;
&lt;td&gt;Discipline test-first, achèvement fondé sur les preuves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identités&lt;/td&gt;
&lt;td&gt;Flux de travail par rôle&lt;/td&gt;
&lt;td&gt;Standards d’interface CLI, guide de performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domaines&lt;/td&gt;
&lt;td&gt;Savoir spécifique à un domaine&lt;/td&gt;
&lt;td&gt;Schémas de migration de base de données, validation d’authentification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Piles techniques&lt;/td&gt;
&lt;td&gt;Spécifique à une technologie&lt;/td&gt;
&lt;td&gt;Déploiement Cloudflare, opérations Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Projet&lt;/td&gt;
&lt;td&gt;Cette base de code uniquement&lt;/td&gt;
&lt;td&gt;Flux de travail et conventions spécifiques au projet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Les compétences sont chargées à la demande. Un agent voit les noms et descriptions des compétences au démarrage, mais le contenu complet d’une compétence ne se charge que lorsqu’elle est déclenchée. Cela garde le contexte léger tout en rendant des centaines de compétences découvrables.&lt;/p&gt;
&lt;p&gt;Chaque compétence inclut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des conditions de déclenchement claires (« À utiliser lors de la migration de schémas de base de données »)&lt;/li&gt;
&lt;li&gt;Des consignes étape par étape&lt;/li&gt;
&lt;li&gt;Les outils autorisés pour le flux de travail&lt;/li&gt;
&lt;li&gt;Des critères de succès et des chemins de récupération en cas d’échec&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les 466 compétences de notre registre couvrent tout, de l’isolation par worktree Git aux flux de travail de recherche web, en passant par la validation de la santé des déploiements.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-lorchestration-compte&quot;&gt;Pourquoi l’orchestration compte&lt;/h2&gt;
&lt;p&gt;Les architectures à agent unique se heurtent vite à des murs :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dilution du contexte.&lt;/strong&gt; Une fenêtre de contexte de 200 000 tokens paraît vaste, jusqu’à ce que vous chargiez des schémas de base de données, de la documentation d’API, des fixtures de test et du savoir de domaine. Les spécialistes peuvent travailler avec un contexte ciblé.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conflits d’instructions.&lt;/strong&gt; Dire à un agent d’« être minutieux mais rapide » et de « tout vérifier sans sur-ingénierie » crée une tension. Les spécialistes résolvent cela en ayant une portée claire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Profondeur d’expertise.&lt;/strong&gt; Un agent généraliste sait un peu de tout. Un agent spécialiste, composé avec la bonne identité et les bonnes compétences, connaît son domaine en profondeur.&lt;/p&gt;
&lt;p&gt;Orkestra met en œuvre une orchestration plate : un orchestrateur coordonne plusieurs spécialistes. Les spécialistes ne peuvent pas engendrer de sous-spécialistes. Cela empêche l’explosion de complexité tout en permettant le travail parallèle.&lt;/p&gt;
&lt;p&gt;L’orchestrateur a accès à une capacité effective de 2,2 millions de tokens : sa propre fenêtre de 200 000 tokens, plus 10 sous-agents simultanés de 200 000 tokens chacun. Un travail qui épuiserait un agent unique tourne confortablement à travers la flotte.&lt;/p&gt;
&lt;h2 id=&quot;le-pipeline-de-rendu&quot;&gt;Le pipeline de rendu&lt;/h2&gt;
&lt;p&gt;Les définitions d’agents vivent en YAML. Claude Code lit du Markdown. Orkestra comble cet écart avec un pipeline de rendu déterministe :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les opérateurs modifient la source YAML, puis exécutent &lt;code&gt;orkestra sync&lt;/code&gt;. Le Markdown rendu apparaît dans &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code récupère les changements.&lt;/p&gt;
&lt;p&gt;Cette séparation sert des publics différents :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La source YAML&lt;/strong&gt; inclut les métadonnées de cycle de vie, les tags, les règles de validation et les notes de dépréciation pour l’outillage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le Markdown rendu&lt;/strong&gt; inclut seulement ce dont le modèle a besoin : description, outils, compétences et consignes de comportement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le pipeline compose identités, états d’esprit, styles et compétences en un seul prompt cohérent. Un agent architecte-analytique-concis reçoit un prompt système très différent d’un agent débogueur-sceptique-technique, même s’ils partagent certaines compétences sous-jacentes.&lt;/p&gt;
&lt;h2 id=&quot;savoir-de-domaine--le-schéma-en-quatre-fichiers&quot;&gt;Savoir de domaine : le schéma en quatre fichiers&lt;/h2&gt;
&lt;p&gt;Chaque domaine de connaissance suit une structure cohérente :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette structure sert le chargement du contexte des agents. Un agent qui travaille sur l’authentification charge &lt;code&gt;authentication/patterns.md&lt;/code&gt; pour s’orienter et &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; pour éviter les pièges connus. Les fichiers sont dimensionnés pour un chargement de contexte efficace : assez ciblés pour être utiles, assez complets pour faire autorité.&lt;/p&gt;
&lt;p&gt;Nous maintenons 21 domaines de premier niveau, incluant l’analytique, l’authentification, la data science, l’infrastructure, l’apprentissage automatique, la performance, la sécurité, et plus encore. Chaque domaine peut avoir des sous-domaines pour une granularité plus fine.&lt;/p&gt;
&lt;h2 id=&quot;valeurs--le-système-dexploitation&quot;&gt;Valeurs : le système d’exploitation&lt;/h2&gt;
&lt;p&gt;Tous les agents partagent une couche de base de valeurs qui définit comment ils opèrent :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La simplicité d’abord.&lt;/strong&gt; Utiliser la solution la plus simple qui fonctionne. N’ajouter de la complexité que lorsqu’elle est justifiée.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corriger les causes racines.&lt;/strong&gt; Ne jamais rafistoler autour des échecs. Si un pipeline échoue, déboguer le pipeline. Si un test échoue, corriger le code ou le test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fondé sur les preuves.&lt;/strong&gt; Étiqueter les affirmations comme « vérifiées » (avec des benchmarks) ou « estimées » (avec des hypothèses). Un schéma détecté n’équivaut pas à un problème confirmé.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Économie de contexte.&lt;/strong&gt; Les outils MCP coûtent 0,1 % du contexte. Les lectures de fichiers coûtent 2 % chacune. Appliquer l’expertise de domaine avant d’explorer le code.&lt;/p&gt;
&lt;p&gt;Ces valeurs se propagent à chaque spécialiste via le pipeline de rendu. Un agent ne peut pas les contourner par composition.&lt;/p&gt;
&lt;h2 id=&quot;cli--le-plan-de-contrôle&quot;&gt;CLI : le plan de contrôle&lt;/h2&gt;
&lt;p&gt;Orkestra est livré avec une CLI pour gérer l’écosystème d’agents :&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La CLI est la source de vérité pour savoir quels agents existent, quelles compétences ils possèdent, et si le système est en bonne santé. Elle exécute une validation avant la synchronisation pour détecter les problèmes tôt.&lt;/p&gt;
&lt;h2 id=&quot;considérations-open-source&quot;&gt;Considérations open source&lt;/h2&gt;
&lt;p&gt;Nous avons construit Orkestra pour résoudre notre propre problème : coordonner des agents IA à grande échelle pour une base de code complexe. Les schémas que nous avons découverts ne sont pas spécifiques à notre domaine.&lt;/p&gt;
&lt;p&gt;Le système de composition de personnage (identité + état d’esprit + style) s’applique à toute équipe qui définit des personnalités d’agent.&lt;/p&gt;
&lt;p&gt;Le système de paliers de compétences (K0-K4) fournit un modèle mental pour organiser des capacités réutilisables par portée.&lt;/p&gt;
&lt;p&gt;Le schéma de pipeline de rendu (source YAML + templates + artefacts générés) sépare les préoccupations entre l’outillage et la consommation par le modèle.&lt;/p&gt;
&lt;p&gt;Le modèle d’orchestration plate (un coordinateur, de nombreux spécialistes) évite la complexité tout en permettant le parallélisme.&lt;/p&gt;
&lt;p&gt;Qu’Orkestra devienne open source ou non dépend de la valeur de ces schémas pour d’autres équipes qui construisent avec Claude Code. Si vous vous heurtez aux murs que nous avons décrits, cette architecture pourrait vous aider.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-nous-avons-appris&quot;&gt;Ce que nous avons appris&lt;/h2&gt;
&lt;p&gt;Construire Orkestra nous a appris que l’orchestration ne consiste pas à rendre les agents plus intelligents. Elle consiste à les rendre plus concentrés.&lt;/p&gt;
&lt;p&gt;Un agent unique avec des instructions parfaites finit quand même par manquer de contexte. Un agent unique avec toutes les compétences hésite quand même sur les compétences à utiliser. Un agent unique qui essaie d’être tout produit des résultats médiocres partout.&lt;/p&gt;
&lt;p&gt;Quarante spécialistes, chacun excellent dans son domaine, coordonnés par un orchestrateur qui sait quand déléguer : voilà comment nous livrons.&lt;/p&gt;
&lt;p&gt;Les chiffres comptent moins que l’architecture. Vous pourriez avoir besoin de cinq agents, ou de cinquante. Le principe demeure : la composition plutôt que la capacité brute, la spécialisation plutôt que la généralisation, la coordination plutôt que l’héroïsme individuel.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra alimente l’écosystème d’agents derrière Maguyva, notre plateforme d’intelligence du code. Vous voulez en savoir plus ? Contactez l’équipe.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>