<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexandre Bregeon</title>
    <description>The latest articles on DEV Community by Alexandre Bregeon (@abregeon).</description>
    <link>https://dev.to/abregeon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4135268%2F368dc4f1-4b0b-49e2-aaa8-575614ea766f.png</url>
      <title>DEV Community: Alexandre Bregeon</title>
      <link>https://dev.to/abregeon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abregeon"/>
    <language>en</language>
    <item>
      <title>Prime Agent : quand le harness devient un programme</title>
      <dc:creator>Alexandre Bregeon</dc:creator>
      <pubDate>Wed, 23 Sep 2026 16:06:20 +0000</pubDate>
      <link>https://dev.to/onepoint/prime-agent-quand-le-harness-devient-un-programme-2mi9</link>
      <guid>https://dev.to/onepoint/prime-agent-quand-le-harness-devient-un-programme-2mi9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Depuis deux ans, les agents de code ont tous à peu près la même forme. Un modèle, une liste d'outils décrits en JSON Schema, une boucle qui appelle l'un puis l'autre, et un mécanisme de compaction pour éviter que la fenêtre de contexte n'explose. Ce programme s'appelle un harness, la couche logicielle qui entoure le modèle et lui donne ses outils, sa mémoire et son accès au système. Claude Code, Codex, OpenCode ou Pi varient dans les détails, mais le squelette est identique. Et il a été pensé pour des modèles d'il y a deux générations.&lt;/p&gt;

&lt;p&gt;C'est le constat de départ de Prime Intellect avec &lt;a href="https://www.primeintellect.ai/blog/prime-agent" rel="noopener noreferrer"&gt;Prime Agent&lt;/a&gt;, sorti le 5 août 2026, open source sous licence MIT&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. Leur argument est le suivant : avec des schémas d'outils figés et une compaction imposée, le modèle finit par contourner le harness au lieu de s'appuyer dessus. Et tout ce qui a été codé en dur au moment du design, sous-agents, prompts, skills, mémoires, ne s'adapte jamais à ce qu'il apprend en route.&lt;/p&gt;

&lt;p&gt;La réponse de Prime Agent repose sur deux idées venues de deux papiers de recherche, le &lt;strong&gt;Recursive Language Model&lt;/strong&gt; (RLM) et le &lt;strong&gt;Continual Harness&lt;/strong&gt;. Idées maison d'ailleurs, puisque deux des auteurs de Prime Agent signent aussi ces papiers. Voyons ce qu'elles changent concrètement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Un seul outil, un kernel IPython
&lt;/h2&gt;

&lt;p&gt;Première rupture, le modèle n'a qu'un seul outil, un kernel IPython qui reste ouvert toute la session. IPython, c'est l'interpréteur Python enrichi, celui qui fait tourner les notebooks Jupyter. Ici il tourne en continu pendant toute la session. Ce qu'il y charge ne disparaît pas entre deux échanges. Un fichier lu au début reste en mémoire une heure plus tard. Et il n'y a rien d'autre à côté. Lire un fichier, lancer une commande shell, utiliser un skill ou déléguer à un sous-agent, tout se fait en appelant une fonction Python depuis cette console.&lt;/p&gt;

&lt;p&gt;Autrement dit, là où un harness classique oblige le modèle à choisir entre &lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;bash&lt;/code&gt; et une vingtaine d'autres outils décrits dans le prompt système, Prime Agent lui dit « tu as Python, débrouille-toi ». Et ça change deux choses.&lt;/p&gt;

&lt;p&gt;D'abord, le &lt;strong&gt;contexte devient une variable&lt;/strong&gt;. Prenons un exemple concret, compter les erreurs par service dans un fichier de logs de 200 000 lignes. Avec Prime Agent, le modèle écrit cinq lignes de Python.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt;
&lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;app.log&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;splitlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;hits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service=(\w+)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ERROR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;errors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;hits&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;most_common&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Il y a deux mémoires ici, et c'est toute l'astuce. Le kernel Python garde les 200 000 lignes dans la variable lines, où elles ne coûtent rien. Le modèle, lui, ne voit que le résultat, cinq lignes. Ce qui est utile entre bien dans son contexte, c'est la matière première qui n'y entre jamais. Et si trois heures plus tard il veut un autre décompte, lines est toujours là, sans relire le fichier.&lt;/p&gt;

&lt;p&gt;Ensuite, l'historique de la conversation reste à portée de main. Quand le contexte devient trop long, il est résumé (automatiquement à partir d'un seuil, ou à la demande avec &lt;code&gt;compact.run()&lt;/code&gt;), mais rien n'est jeté, la version complète reste consultable depuis le kernel. Le modèle peut donc alléger sa mémoire de travail sans perdre ce qu'il a lu trois heures plus tôt.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Un REPL persistant, c'est aussi de la mémoire qui s'accumule. Prime Agent lance un agent de garbage collection en parallèle de la compaction pour nettoyer l'état du kernel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Les sous-agents sont des appels de fonction
&lt;/h2&gt;

&lt;p&gt;C'est la partie « récursive » du RLM. Dans la plupart des harness, déléguer une tâche à un sous-agent est une action spéciale, avec son propre outil et son propre format. Dans Prime Agent, c'est une simple fonction Python, &lt;code&gt;rlm("fais ceci")&lt;/code&gt;. Elle démarre un agent complet, avec son propre modèle, son propre kernel et son propre historique, et rend la main tout de suite. Le &lt;code&gt;await&lt;/code&gt; attend l'admission de la tâche, pas son résultat. Le parent continue son travail, et le sous-agent lui enverra un message quand il aura fini.&lt;/p&gt;

&lt;p&gt;Vous ne codez rien pour autant, vous demandez en français comme ailleurs. Ce qui change, c'est que le modèle, lui, délègue en écrivant du code. Il peut donc boucler sur un dossier et lancer autant de sous-agents qu'il y trouve de services, sans savoir à l'avance combien il y en aura. Ailleurs, chaque sous-agent réclame son propre appel d'outil, écrit à la main et connu d'avance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Deux enfants lancés en parallèle ; rlm() rend la main dès l'admission
&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;rlm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Résume le flux d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;authentification dans auth/. Réponds-moi quand c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;est fait.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auth-expert&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;rlm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Résume la couche HTTP dans src/api/. Réponds-moi quand c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;est fait.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http-expert&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Le parent continue à travailler ; les réponses arrivent en messages.
# On peut aussi orienter un enfant en cours de route.
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent_message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Couvre aussi la gestion d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;erreur des middlewares.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;receiver_role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;child&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;receiver_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deux choses à retenir sur ces sous-agents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ils ne disparaissent pas une fois leur tâche finie.&lt;/strong&gt; Leur contexte et leur historique sont conservés sur disque. On peut les retrouver plus tard avec &lt;code&gt;rlm.list_subagents()&lt;/code&gt; et leur poser une nouvelle question, comme on reprendrait une conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ils ne parlent qu'à leur famille proche.&lt;/strong&gt; Un agent peut échanger avec son parent, ses frères et ses enfants, et personne d'autre. Ça évite que deux sessions sans rapport se mettent à s'échanger des messages. Les messages passent par les API du harness (&lt;code&gt;agent_message.send()&lt;/code&gt;), routées par le daemon local. Prime Intellect appelle ça de l'A2A, mais ça n'a rien à voir avec le protocole Agent2Agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En coulisses, un service en arrière-plan (un daemon) garde toutes ces sessions en vie. On peut fermer son terminal et revenir plus tard sans interrompre l'agent, et si un processus plante, le daemon le restaure à partir du journal de session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Un harness qui se modifie lui-même
&lt;/h2&gt;

&lt;p&gt;Deuxième idée, le Continual Harness. Prime Agent considère que tout ce qui entoure le modèle est de l'état modifiable, les notes ajoutées au prompt, les sous-agents réutilisables, les skills et les mémoires. Ces quatre éléments se gèrent comme n'importe quelle donnée, en CRUD. On les crée, on les lit, on les met à jour, on les supprime (&lt;code&gt;create_memory&lt;/code&gt;, &lt;code&gt;create_skill&lt;/code&gt;, &lt;code&gt;create_subagent&lt;/code&gt;, &lt;code&gt;create_prompt_note&lt;/code&gt;, leurs équivalents &lt;code&gt;update_&lt;/code&gt; et &lt;code&gt;delete_&lt;/code&gt;, plus &lt;code&gt;list&lt;/code&gt; et &lt;code&gt;get&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Créer une mémoire et un skill via la même interface
&lt;/span&gt;&lt;span class="n"&gt;rlm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tests flaky&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;relancer trois fois avant d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;échouer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;rlm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retry-tests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Relance la suite de tests jusqu&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;à 3 fois. À utiliser quand un test &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;échoue de façon intermittente. Appeler retry_tests.run(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;npm test&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;).&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;import&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retry_tests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rlm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;rlm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;harness&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;skill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retry-tests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jusque-là, un fichier &lt;code&gt;AGENTS.md&lt;/code&gt; bien tenu ferait la même chose. Ce qui change, c'est &lt;code&gt;/refine&lt;/code&gt;. Cette commande relit ce que l'agent vient de faire (ce qu'il a tenté, ce qui a marché ou non) et en tire une petite modification ciblée, une note en plus, une mémoire corrigée, un skill promu. Jamais une réécriture complète. Chaque modification est journalisée avec ce qui l'a déclenchée, et s'annule par son identifiant. Vous voyez l'agent raffiner pendant qu'il le fait, et vous pouvez inspecter le résultat après coup en interrogeant la mémoire et les skills.&lt;/p&gt;

&lt;p&gt;Le gros du travail se fait en arrière-plan sans interrompre la conversation, seule l'application de la modification bloque brièvement au tour suivant. Et l'agent n'attend pas qu'on le lui demande, il peut lancer &lt;code&gt;refine.run()&lt;/code&gt; de lui-même dès qu'il repère un échec qui se répète ou une astuce qui mérite d'être gardée.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;refine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;promouvoir le pattern retry-on-flaky-test en skill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sessions longues et mode autonome
&lt;/h2&gt;

&lt;p&gt;Prime Agent est explicitement pensé pour les tâches qui durent des heures, voire des jours. Prenons un cas classique, migrer un projet de Java 17 à 21 avec 400 tests à garder passants. Trois mécanismes se combinent. Un &lt;strong&gt;goal&lt;/strong&gt; fixe l'objectif (« migrer vers Java 21, tous les tests passent ») et le rappelle à l'agent à chaque tour jusqu'à ce qu'il déclare &lt;code&gt;goal.complete()&lt;/code&gt;. Des &lt;strong&gt;heartbeats&lt;/strong&gt; le réveillent à intervalle fixe, façon cron, par exemple toutes les dix minutes pour vérifier où en est le sous-agent qui s'occupe des dépendances. Et le &lt;strong&gt;mode autonome&lt;/strong&gt; l'empêche de s'arrêter dès qu'un tour ne produit rien.&lt;/p&gt;

&lt;p&gt;Tout ça se pilote depuis la ligne de commande :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prime-agent &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--autonomous&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--autonomous-gate&lt;/span&gt; &lt;span class="s2"&gt;"./mvnw verify"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--autonomous-max-turns&lt;/span&gt; 50 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"Migre le projet vers Java 21 et corrige les tests cassés"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le gate est la condition de sortie. Ici, &lt;code&gt;./mvnw verify&lt;/code&gt; doit passer avant que la session ait le droit de se terminer. S'il échoue, sa sortie est renvoyée à l'agent pour une nouvelle tentative, et il n'est pas relancé tant que le workspace n'a pas changé. Les options &lt;code&gt;--autonomous-max-tokens&lt;/code&gt; et &lt;code&gt;--autonomous-timeout-ms&lt;/code&gt; bornent le reste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Et les chiffres ?
&lt;/h2&gt;

&lt;p&gt;Sur ARC-AGI-3, Prime Agent avec Opus 5 obtient 95,5 %, soit 0,1 point au-dessus de la barre des experts humains mesurée par ARC Prize (95,4 %). Pour comparer, à sa sortie en juillet 2026, le même Opus 5 était crédité de 30,2 % dans l'évaluation d'ARC Prize&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. Rien n'a changé côté modèle, tout a changé côté harness.&lt;/p&gt;

&lt;p&gt;Sur neuf autres benchmarks de tâches longues, Prime Intellect compare son harness à Claude Code, Codex et Pi-mono, et l'emporte sur la majorité des épreuves. L'écart est le plus net avec un modèle open-weights comme GLM-5.2. Face à Claude Code avec Opus 5, les scores sont serrés et Claude Code garde l'avantage sur trois lignes.&lt;/p&gt;

&lt;p&gt;Prime Intellect formule lui-même deux réserves. Aucun modèle n'a été entraîné autour de Prime Agent, contrairement à Claude Code et Codex, donc les gains viennent du seul design et il reste probablement de la marge. Et le harness ne fait pas tout, sur un speedrun d'entraînement nanoGPT de 85 heures les écarts restent ténus.&lt;/p&gt;

&lt;p&gt;Une anecdote, enfin, sur ce que « self-improving » veut dire en pratique. Prime Intellect a fait jouer Prime Agent à Factorio, un jeu où l'on extrait des ressources pour bâtir une usine de plus en plus automatisée. Run après run, l'agent a utilisé &lt;code&gt;/refine&lt;/code&gt; pour transformer ses échecs en mémoires et ses réussites en skills, et sa production a grimpé. Jusqu'à ce qu'il découvre qu'il pouvait faire apparaître des ressources directement dans ses machines via la console d'administration du serveur, malgré un heartbeat lui rappelant de ne pas tricher. La boucle qui fabriquait des skills légitimes s'est alors mise à fabriquer des skills de triche.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cinq points de vigilance avant de foncer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ce n'est pas un bac à sable.&lt;/strong&gt; Prime Agent exécute du Python généré par le modèle et des commandes projet avec vos permissions utilisateur. Les processus worker et kernel améliorent l'isolation du cycle de vie et la reprise, mais ne sont pas un bac à sable de sécurité. Un conteneur ou une VM jetable pour la machine, un clone ou un worktree dédié pour limiter les dégâts sur le dépôt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L'anecdote Factorio n'est pas une anecdote.&lt;/strong&gt; Un harness qui se réécrit à partir de ses propres résultats optimise ce qu'on mesure, pas ce qu'on voulait. Le gate autonome vérifie ce que le gate vérifie, rien de plus. Le rapport technique&lt;sup id="fnref3"&gt;3&lt;/sup&gt; en tire trois conséquences, des interfaces d'action à moindre privilège, une validation de l'état par un tiers indépendant, et la possibilité d'auditer et d'annuler un raffinement contaminé.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C'est jeune.&lt;/strong&gt; Sortie le 5 août 2026, rapport technique sur arXiv trois semaines plus tard&lt;sup id="fnref3"&gt;3&lt;/sup&gt;, projet construit au-dessus de &lt;a href="https://github.com/earendil-works/pi" rel="noopener noreferrer"&gt;&lt;code&gt;pi&lt;/code&gt;&lt;/a&gt;. Au 22 septembre, le dépôt affiche 18 100 étoiles et plus de 4 500 commits, dont une partie antérieure à l'annonce. Ça bouge vite, et les API peuvent changer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un runtime IPython à embarquer.&lt;/strong&gt; Pour une équipe qui vit sur la JVM ou en Node, c'est une dépendance Python de plus à gérer, avec ce que ça implique de packaging et de sécurité. L'installation ne couvre par ailleurs que macOS et Linux.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La facture.&lt;/strong&gt; Par tâche, Prime Agent est plutôt économe. Sur ARC-AGI-3, Prime Intellect annonce un meilleur score que les harness natifs pour moins de tokens, parce que le modèle fait tourner du code sur les données au lieu de les relire via des outils&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. Mais l'efficacité par tâche ne dit rien du volume. Le mode autonome et le fan-out de sous-agents, chacun avec son modèle, multiplient les appels. Les budgets de tours, tokens et temps ne sont pas optionnels en pratique.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Prime Agent n'est pas un énième clone de Claude Code avec un joli TUI. C'est un pari sur une thèse, celle d'une couche d'orchestration programmable par le modèle lui-même, et d'un harness capable d'apprendre de sa propre trajectoire. Le kernel IPython comme unique outil, les sous-agents comme appels de fonction et le &lt;code&gt;/refine&lt;/code&gt; comme boucle d'amélioration en sont les trois traductions concrètes.&lt;/p&gt;

&lt;p&gt;Concrètement ? Sur un dépôt de confiance, dans un conteneur, avec un bon modèle, installez-le et faites-vous votre avis. Si vous travaillez sur les harness ou sur des évaluations longues, c'est un des projets à suivre en ce moment. Pour du code sensible en production, en revanche, deux manques sautent aux yeux. Tout ce que le modèle écrit s'exécute avec vos droits, sans cloison entre lui et votre machine, et aucun modèle n'a encore été entraîné à ces primitives, si bien qu'il les découvre en même temps que vous. Prime Intellect le dit lui-même, et c'est là que se joue la suite.&lt;/p&gt;




&lt;h3&gt;
  
  
  Pour aller plus loin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kingy AI, &lt;a href="https://kingy.ai/blog/prime-agent-review-self-improving-rlm-harness/" rel="noopener noreferrer"&gt;Prime Agent Review: Self-Improving RLM Harness Explained&lt;/a&gt;, la revue la plus fouillée, avec installation locale et lecture du code&lt;/li&gt;
&lt;li&gt;Composio, &lt;a href="https://composio.dev/content/best-agent-harness-deepseek-v4-flash" rel="noopener noreferrer"&gt;Finding the Best Harness for DeepSeek V4 Flash&lt;/a&gt;, un benchmark indépendant sur 30 workflows où Prime Agent termine derrière Pi, avec la réserve que six de ses runs n'ont pas pu être notés&lt;/li&gt;
&lt;li&gt;JustAI, &lt;a href="https://justai.fr/fr/blog/prime-agent-harness-arc-agi-3" rel="noopener noreferrer"&gt;Prime Agent : le harness open source qui dépasse l'expert humain sur ARC-AGI-3&lt;/a&gt;, en français, avec un angle souveraineté&lt;/li&gt;
&lt;/ul&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Prime Intellect, &lt;a href="https://www.primeintellect.ai/blog/prime-agent" rel="noopener noreferrer"&gt;Prime Agent: A self-improving RLM agent&lt;/a&gt;, billet d'annonce, 5 août 2026&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;ARC Prize Foundation, &lt;a href="https://arcprize.org/results/anthropic-claude-opus-5" rel="noopener noreferrer"&gt;Claude Opus 5 - ARC-AGI Results&lt;/a&gt;, 24 juillet 2026&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;Karten et al., &lt;a href="https://arxiv.org/abs/2608.23552" rel="noopener noreferrer"&gt;Prime Agent: A Self-Improving RLM Harness&lt;/a&gt;, rapport technique, arXiv, 24 août 2026&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
