NOOA : et si un agent IA n'était qu'un objet Python ?

par Pierre
NOOA : et si un agent IA n'était qu'un objet Python ?

Analyse — septembre 2026

NVIDIA Labs a sorti en juillet un framework qui fait exactement l’inverse de ce que tout le monde construit depuis deux ans. Pas de graphe d’orchestration. Pas de YAML. Pas de schémas JSON d’outils écrits à la main. Pas de fichiers de prompts qui traînent à côté du code. Un agent, c’est une classe Python, point.

Ça s’appelle NOOA (NVIDIA Object-Oriented Agents), c’est en Apache 2.0, et le papier est là : arXiv 2607.20709.

Spoiler : la vraie question n’est pas « est-ce qu’on migre ». C’est quelles idées de NOOA vont finir par devenir la norme partout, et lesquelles il vaut mieux regarder de loin encore un peu.

1. Le principe : quatre correspondances et un caractère

Tout tient dans un tableau de correspondances :

PythonAgent
ClasseL’agent
MéthodeUne action que le modèle peut prendre
Champ typéL’état de l’agent
DocstringLe prompt de cette action
Annotation de typeUn contrat validé à l’exécution
Corps ...Cette étape part au LLM
Corps normalPython déterministe, zéro appel modèle
from nooa import Agent


class FeedbackAgent(Agent, llm=llm):
    """Tu es un agent spécialisé dans l'analyse de retours clients."""

    async def analyze_feedback(self, text: str) -> str:
        """Analyse le sentiment et les sujets clés en une phrase."""
        ...

Renommez la méthode, et la sortie change. Normal : le nom, les paramètres et la docstring sont le prompt. Et la frontière entre « c’est le modèle qui décide » et « c’est le code qui décide » tient littéralement en trois points de suspension.

C’est là que c’est malin. La plupart des bugs d’agents ne viennent pas du modèle, ils viennent de l’orchestration : quelque chose qui devait être déterministe est passé par un LLM parce que c’était plus simple à câbler. NOOA rend le déterminisme gratuit et l’appel modèle explicite. Il faut le demander.

2. Les six capacités revendiquées

Le papier annonce six idées que NOOA serait le premier à réunir au même endroit : I/O typées, passage par référence sur objets vivants, code comme action, boucle programmable, état d’objet explicite, et des API de harness que le modèle peut appeler lui-même pour le contexte et les événements. NVIDIA a aussi noté quatorze autres frameworks sur les mêmes axes (LangGraph, Google ADK, PydanticAI, smolagents, Claude Agent SDK, OpenAI Codex, OpenHands…) et ne trouve partout ailleurs qu’une couverture partielle.

La plus intéressante, et de loin, c’est le passage par référence. Les arguments arrivent comme de vrais objets Python vivants. Le modèle ne voit qu’un aperçu : le type, la longueur réelle, un échantillon début/fin. Une liste de cent éléments tient en une trentaine de tokens, la variable complète reste dans le REPL. Le contexte, lui, est découpé en un préfixe statique cacheable, un historique d’événements typés en append-only, et des blocs dynamiques à la fin — ce qui garde le cache KV réutilisable d’un tour à l’autre.

Traduction : on arrête de balancer des payloads entiers dans la fenêtre de contexte. C’est structurel, pas cosmétique.

3. Les chiffres, et ce qu’ils valent vraiment

NVIDIA annonce 82,2 % sur SWE-bench Verified avec GPT-5.5, 86,8 % sur CyberGym L1 réseau coupé, 85,1 % de RHAE moyen sur ARC-AGI-3. Le tout avec un agent générique de 253 lignes, contre 78,6 % pour OpenCode et 78,2 % pour PI sur le même modèle. Et 79,8 % avec Claude Opus 4.6.

Mais le chiffre qui compte n’est pas la précision. C’est l’efficience : environ 1,1 million de tokens et 28 appels modèle par tâche, contre 2,2 millions et 66 appels pour les approches comparées. La moitié. L’analyse des traces attribue une partie du gain à la terminaison validée : les autres harnesses s’arrêtent quand le modèle répond sans appeler d’outil, NOOA exige un TaskResult typé avec une preuve et une commande de vérification.

Deux lectures, les deux honnêtes. La sympa : 3,6 points d’écart à modèle identique, c’est un vrai résultat, et l’obtenir en 253 lignes suggère que l’abstraction enlève de la complexité au lieu de la déplacer. La méfiante : SWE-bench Verified, c’est du patch sur dépôts Python, les scores de harness y sont hypersensibles au scaffolding, et ce sont des chiffres publiés par le fournisseur lui-même.

Le vrai bon signal, c’est l’écart GPT-5.5 / Opus 4.6 : 2,4 points. Les frameworks qui se disent « agnostiques » s’écroulent généralement dès qu’on change de modèle, parce qu’ils ont été réglés sur les tics d’un seul. Pas là.

4. Ce qui est vraiment bien

  • On n’apprend rien. Aucun vocabulaire de framework. Un dev Python lit la classe et a tout compris en une minute.
  • Tout l’outillage existant remarche. pytest, ruff, pyright, git diff, tracing. C’est probablement l’argument le plus sous-estimé du lot.
  • Des contrats, plus des prompts défensifs. Les annotations sont validées, pas suggérées. Une grosse part de la fiabilité vient de là, pas du modèle.
  • L’économie de contexte est gratuite. Les gros objets restent dans le REPL, ils ne transitent pas.
  • Agnostique pour de vrai. Open source, aucun besoin de GPU ni de matériel NVIDIA, n’importe quel LLM local ou API via LiteLLM.
  • Lisible par les agents eux-mêmes. Du Python ordinaire, c’est ce sur quoi les modèles ont été entraînés. Un agent de code comprend un agent NOOA infiniment mieux qu’un DSL de graphe.

5. Ce qui coince

  • La sécurité : ce n’est pas un sandbox. NVIDIA le dit noir sur blanc. La validation AST et les deny-lists de modules, c’est de la défense en profondeur, pas un périmètre de confinement. Et ils expliquent pourquoi : un vérificateur statique sur Python ne peut pas garantir ça. open() donne un accès fichier arbitraire, importlib charge un module depuis un chemin, et la réflexion fait le reste. Le confinement, c’est un conteneur ou une VM, il n’y a pas de raccourci. Le scénario à craindre, d’ailleurs, ce n’est pas un modèle malveillant : c’est l’injection de prompt indirecte. L’agent lit un fichier, un commentaire d’issue ou une page web bricolés pour l’orienter, et génère du code qui obéit.
  • On perd la carte. LangGraph fait du flux de contrôle un objet de première classe : on le rend, on le diffuse, on raisonne sur chaque arête avant d’exécuter quoi que ce soit. NOOA le planque dans des appels de méthode. Bien plus lisible, beaucoup plus dur à visualiser ou analyser statiquement. Pour de l’audit ou du branchement vraiment complexe, le graphe reste plus honnête.
  • C’est jeune. Research preview, classée alpha sur PyPI, v0.0.8, Python 3.12–3.13, API publique pas stabilisée et qui peut bouger d’une release à l’autre. À encapsuler derrière une interface applicative — surtout pas à importer partout dans le code métier.
  • L’interop. NOOA définit ses outils par ses méthodes, alors que l’écosystème s’est largement rangé derrière MCP. Les outils natifs au framework sont agréables ; ceux natifs au protocole sont portables. Il faut choisir.
  • Python et rien d’autre. Aucune porte d’entrée TypeScript ou navigateur. Sur une stack front lourde (WebXR, three.js), NOOA reste un sujet strictement backend.
  • Le non-déterminisme devient invisible. Un ... ressemble à du code. Sauf qu’il coûte des tokens, de la latence, et qu’il peut échouer différemment à chaque exécution. La lisibilité gagnée peut faire oublier le prix réel de la ligne.

6. Ce que ça change pour le développement

Au-delà du sort de NOOA lui-même, quatre mouvements de fond :

  1. Le harness devient un poste d’ingénierie mesurable. Plusieurs points de benchmark à modèle constant et la moitié des tokens : l’architecture autour du modèle n’est plus un détail d’intégration. C’est un levier avec un ROI direct sur la facture d’inférence.
  2. Les contrats typés remplacent le prompt défensif. Un -> TicketTypé validé à l’exécution bat trois paragraphes qui supplient le modèle de respecter un format. Le prompt engineering glisse vers le design d’interfaces.
  3. Le code comme action grignote les schémas d’outils. Un menu figé d’outils sérialisés, c’est cher et contraignant. Laisser le modèle écrire du Python qui appelle les méthodes de l’objet, c’est bien plus expressif — au prix exact d’un sandbox non négociable.
  4. Les agents entrent dans le CI. Si un agent est du code ordinaire, il se teste, se versionne, se relit en review. C’est la condition pour qu’un agent arrive en production sans être une boîte noire.

NVIDIA le reconnaît d’ailleurs : la communauté converge déjà sur plusieurs de ces idées, souvent sous forme de features partielles ou expérimentales, et la comparaison est publiée justement pour pousser l’adoption. C’est probablement le scénario le plus crédible — une abstraction qui paraît bizarre au début et devient évidente ensuite, que ce soit sous ce nom ou dans les frameworks qu’on utilise déjà.

À retenir

NOOA est l’abstraction agentique la plus intéressante de 2026, et pour une raison rare : elle enlève des concepts au lieu d’en ajouter. Le gain de fiabilité ne vient pas d’une astuce de prompting, il vient d’une décision d’architecture — rendre le déterminisme gratuit et l’appel modèle explicite.

Une règle reste non négociable quand même : un framework qui exécute du Python généré est puissant exactement à la mesure des dégâts qu’il peut causer.

Sources

Sources primaires

Analyses et couverture tierces

  • MarkTechPostNVIDIA AI Releases NOOA: An Object-Oriented Python Framework That Turns an AI Agent Into a Single Python Class, Asif Razzaq, 7 août 2026 (détail des benchmarks, stratégies PredictStrategy / CodeActStrategy, sous-système mémoire) — marktechpost.com
  • CodeOxiNVIDIA NOOA: AI Agents as One Python Class, 8 août 2026 (comparaison LangGraph, lecture critique du 82,2 %, modèle de menace) — codeoxi.com/blog/nvidia-nooa-python-agents
  • WavectNVIDIA NOOA Review: Object-Oriented AI Agents, 9 août 2026 (angle achat/pilote, encapsulation derrière une interface applicative) — wavect.io
  • Cobus Greyling (Medium)NVIDIA-labs Object Oriented Agent Framework (NOOA), août 2026 (positionnement vs smolagents et LangGraph, montée en stack de NVIDIA) — cobusgreyling.medium.com
  • DEV CommunityNOOA: What If an AI Agent Was Just a Python Object?, Gaurav Talesara, 12 août 2026 (maturité 0.x, stabilité de l’API) — dev.to
  • AI WeeklyNVIDIA open-sources NOOA, a single-class Python agent framework, 10 août 2026 (lecture efficience tokens) — aiweekly.co
  • AI Wiki — fiche NOOA (synthèse des six capacités et des quatorze frameworks comparés) — aiwiki.ai/wiki/nooa

Chiffres et versions vérifiés en septembre 2026. NOOA étant une research preview, l’API et les résultats peuvent évoluer.

Related Content