Introduction
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.
C'est le constat de départ de Prime Intellect avec Prime Agent, sorti le 5 août 2026, open source sous licence MIT1. 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.
La réponse de Prime Agent repose sur deux idées venues de deux papiers de recherche, le Recursive Language Model (RLM) et le Continual Harness. Idées maison d'ailleurs, puisque deux des auteurs de Prime Agent signent aussi ces papiers. Voyons ce qu'elles changent concrètement.
Un seul outil, un kernel IPython
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.
Autrement dit, là où un harness classique oblige le modèle à choisir entre read_file, grep, bash 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.
D'abord, le contexte devient une variable. 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.
import re, collections
lines = open("app.log").read().splitlines()
hits = (re.search(r"service=(\w+)", l) for l in lines if "ERROR" in l)
errors = collections.Counter(m.group(1) for m in hits if m)
errors.most_common(5)
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.
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 compact.run()), 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.
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.
Les sous-agents sont des appels de fonction
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, rlm("fais ceci"). 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 await 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.
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.
# Deux enfants lancés en parallèle ; rlm() rend la main dès l'admission
auth = await rlm(
"Résume le flux d'authentification dans auth/. Réponds-moi quand c'est fait.",
name="auth-expert",
)
api = await rlm(
"Résume la couche HTTP dans src/api/. Réponds-moi quand c'est fait.",
name="http-expert",
)
# Le parent continue à travailler ; les réponses arrivent en messages.
# On peut aussi orienter un enfant en cours de route.
await agent_message.send(
"Couvre aussi la gestion d'erreur des middlewares.",
receiver_role="child",
receiver_name=api.name,
)
Deux choses à retenir sur ces sous-agents.
-
Ils ne disparaissent pas une fois leur tâche finie. Leur contexte et leur historique sont conservés sur disque. On peut les retrouver plus tard avec
rlm.list_subagents()et leur poser une nouvelle question, comme on reprendrait une conversation. -
Ils ne parlent qu'à leur famille proche. 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 (
agent_message.send()), routées par le daemon local. Prime Intellect appelle ça de l'A2A, mais ça n'a rien à voir avec le protocole Agent2Agent.
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.
Un harness qui se modifie lui-même
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 (create_memory, create_skill, create_subagent, create_prompt_note, leurs équivalents update_ et delete_, plus list et get).
# Créer une mémoire et un skill via la même interface
rlm.harness.create_memory("tests flaky", "relancer trois fois avant d'échouer")
rlm.harness.create_skill(
"retry-tests",
"Relance la suite de tests jusqu'à 3 fois. À utiliser quand un test "
"échoue de façon intermittente. Appeler retry_tests.run('npm test').",
reference={"type": "python", "import": "retry_tests"},
)
rlm.harness.list("memory")
rlm.harness.get("skill", "retry-tests")
Jusque-là, un fichier AGENTS.md bien tenu ferait la même chose. Ce qui change, c'est /refine. 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.
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 refine.run() 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.
await refine.run("promouvoir le pattern retry-on-flaky-test en skill")
Sessions longues et mode autonome
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 goal fixe l'objectif (« migrer vers Java 21, tous les tests passent ») et le rappelle à l'agent à chaque tour jusqu'à ce qu'il déclare goal.complete(). Des heartbeats 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 mode autonome l'empêche de s'arrêter dès qu'un tour ne produit rien.
Tout ça se pilote depuis la ligne de commande :
prime-agent \
--autonomous \
--autonomous-gate "./mvnw verify" \
--autonomous-max-turns 50 \
"Migre le projet vers Java 21 et corrige les tests cassés"
Le gate est la condition de sortie. Ici, ./mvnw verify 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 --autonomous-max-tokens et --autonomous-timeout-ms bornent le reste.
Et les chiffres ?
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 Prize2. Rien n'a changé côté modèle, tout a changé côté harness.
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.
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.
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é /refine 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.
Cinq points de vigilance avant de foncer
- Ce n'est pas un bac à sable. 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.
- L'anecdote Factorio n'est pas une anecdote. 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 technique3 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é.
-
C'est jeune. Sortie le 5 août 2026, rapport technique sur arXiv trois semaines plus tard3, projet construit au-dessus de
pi. 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. - Un runtime IPython à embarquer. 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.
- La facture. 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 outils1. 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.
Conclusion
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 /refine comme boucle d'amélioration en sont les trois traductions concrètes.
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.
Pour aller plus loin
- Kingy AI, Prime Agent Review: Self-Improving RLM Harness Explained, la revue la plus fouillée, avec installation locale et lecture du code
- Composio, Finding the Best Harness for DeepSeek V4 Flash, 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
- JustAI, Prime Agent : le harness open source qui dépasse l'expert humain sur ARC-AGI-3, en français, avec un angle souveraineté
-
Prime Intellect, Prime Agent: A self-improving RLM agent, billet d'annonce, 5 août 2026 ↩
-
ARC Prize Foundation, Claude Opus 5 - ARC-AGI Results, 24 juillet 2026 ↩
-
Karten et al., Prime Agent: A Self-Improving RLM Harness, rapport technique, arXiv, 24 août 2026 ↩
Top comments (0)