VERSE : un optimiseur qui teste ses propres modifications avant de les soumettre
Un nouvel article arXiv laisse le programme qui réécrit le harnais d’un agent se réécrire lui-même, et constate que cela n’aide que s’il peut d’abord exécuter ses brouillons.

Un agent, c’est un modèle plus un harnais : prompts, outils, mémoire et logique de contrôle. Depuis peu, un second modèle lit les échecs de l’agent et modifie ce harnais. VERSE pose la question suivante. Et si ce second modèle pouvait aussi réécrire ses propres outils, qu’est-ce qui l’empêche de s’écrire n’importe quoi ?
En bref
L’article « VERSE: Verified Self-Evolving Optimizer for Agent Harnesses » (arXiv 2610.02616, soumis le 2 octobre 2026) indique que l’auto-évolution du harnais de l’optimiseur n’aidait pas seule, et aidait dès que l’optimiseur pouvait exécuter un brouillon avant de le soumettre. Sur SWE-rebench, son meilleur harnais atteint 42,3 % sur un test dans la distribution et 37,7 % sur des tâches plus récentes en cinq langages, contre 39,2 % et 29,3 % pour la meilleure référence. Les auteurs placent le code sur github.com/wzekai/VERSE. J’ai lu l’article ; je n’ai pas exécuté le code.
Ce que l’article affirme
Deux rôles. L’exécutant est un modèle gelé qui tente des tâches de code dans un harnais. L’optimiseur lit les trajectoires échouées et modifie le harnais de l’exécutant sur plusieurs tours. Les systèmes précédents gardent l’optimiseur fixe. VERSE lui laisse réviser ses propres prompts, compétences, outils, hooks et notes, tandis que les poids des deux modèles restent gelés.
La première étude est la plus intéressante. Avec un optimiseur Qwen3.8-Flash-Next et un exécutant Qwen3.8-27B, ajouter l’auto-évolution à Meta-Harness a dégradé le résultat : aucun tour n’a battu le harnais initial en validation. Selon les auteurs, l’optimiseur s’écrivait des leçons non testées et ne pouvait pas savoir lesquelles étaient fausses. Avec un outil pour exécuter un brouillon sur une tâche d’entraînement, le même montage a atteint 41,05 % de précision au test, le meilleur chiffre de ce tableau.
Comment fonctionne VERSE
Avant de soumettre une modification, l’optimiseur peut rejouer un échec, réduire une trajectoire ratée aux quelques étapes qui comptent et perturber une étape suspecte pour voir si le résultat change. Entre les tours, il tient un registre : tâches corrigées, tâches régressées, corrections annulées ensuite. Dans une seconde étude avec cinq exécutants, l’optimiseur auto-évolutif a construit 51 artefacts, de quatre sortes : attribution des causes d’échec, vérification, audit d’entraînement et règles de flux de travail, comme des rappels de budget.
Esquisse de la boucle
# Illustration of verify-before-submit. Not the authors' code and not run.
def improve_harness(harness, failures, budget):
for round_no in range(budget):
cause = rank_causes(failures) # attribution
draft = edit(harness, cause)
passed_before = [t for t in tasks if run(harness, t)]
ok_target = run(draft, cause.task) # replay the failure
ok_old = all(run(draft, t) for t in passed_before[:5]) # regressions
if ok_target and ok_old:
return draft
return harnessLes chiffres
| Optimiseur hôte | Dans la distribution (108 tâches) | Hors distribution (107 tâches) | ||||
|---|---|---|---|---|---|---|
| Référence | VERSE sans auto-évolution | VERSE avec auto-évolution | Référence | VERSE sans auto-évolution | VERSE avec auto-évolution | |
| Meta-Harness | 39.20 | 34.57 | 42.28 | 28.66 | 28.35 | 37.69 |
| AHE | 33.95 | 37.96 | 35.19 | 26.17 | 35.51 | 30.22 |
| Self-Harness | 29.63 | 40.12 | 34.88 | 29.28 | 31.78 | 30.22 |
| HarnessX | 32.72 | 38.89 | 35.80 | 27.41 | 27.10 | 37.69 |
Le résumé de l’article tient : VERSE avec auto-évolution bat sa propre référence dans les 16 comparaisons du tableau, de 0,6 à 10,3 points. Une lecture attentive ajoute une réserve. Sur quatre hôtes, le meilleur harnais dans la distribution vient de VERSE sans auto-évolution pour trois d’entre eux, et le meilleur hors distribution vient de la version auto-évolutive pour deux. Les outils de vérification font donc l’essentiel du travail dans la distribution, et l’argument pour l’auto-évolution repose surtout sur les tâches récentes et multilingues.
Là où les preuves sont minces
Chaque ligne est une seule exécution d’évolution. Les barres d’erreur sont l’écart sur trois évaluations de test de cette exécution, pas sur des exécutions indépendantes. Le test dans la distribution compte 108 tâches : une tâche vaut environ 0,9 point, et plusieurs écarts du tableau représentent deux ou trois tâches. Toutes les tâches d’entraînement et de validation sont en Python ; sur les 107 tâches hors distribution, plus récentes, 87 sont en Go, Java, Rust ou TypeScript. Les auteurs précisent aussi que les outils de vérification sont fixes, que chaque action est journalisée et que l’exécutant n’a pas de réseau. Cela borne l’auto-modification chez eux, et c’est la partie qu’un praticien devrait reconstruire.
Qui doit s’y intéresser
Les équipes qui règlent un harnais d’agent à la main ou avec un optimiseur. La leçon pratique survit aux réserves : donnez à un éditeur automatique le moyen d’exécuter sa modification et de vérifier que les tâches déjà réussies passent encore, avant de la garder. L’article note que l’optimiseur fixe ne testait souvent que des tâches que le harnais actuel rate, ce qui ne peut pas révéler une régression.
Sources et limites
Les faits viennent du résumé, du texte et du tableau 2 de l’article, lus le 5 octobre 2026. La lecture du tableau est mon analyse. Je n’ai pas exécuté le code publié ni reproduit un seul chiffre.