{"slug": "nvidia-s-nooa-turns-an-ai-agent-into-one-python-class", "title": "NVIDIA's NOOA turns an AI agent into one Python class", "summary": "NVIDIA Labs has open-sourced NOOA (NVIDIA Object-Oriented Agents), a framework that models AI agents as Python classes, eliminating the need for separate tool schemas and pipeline configurations. An engineer who tested the framework found that while it is not yet on PyPI and lacks Python 3.14 support, the core concept of using method signatures as tool definitions simplifies agent development. NVIDIA reports that a 253-line NOOA agent achieves 82.2% on SWE-bench Verified and 86.8% on CyberGym L1, though the engineer cautions against taking vendor benchmarks at face value and emphasizes the need for sandboxing due to the framework's use of LLM-generated code execution.", "body_md": "NVIDIA Labs open-sourced [NOOA](https://github.com/NVIDIA-NeMo/labs-OO-Agents) (NVIDIA Object-Oriented Agents) this week, and the pitch is unusually simple: an agent is a Python class. Not a graph, not a chain, not a YAML pipeline. A class.\n\nI cloned it and got it running the same day. Here's what it actually looks like, what broke, and why I think the core idea matters more than the framework itself.\n\n``` python\nfrom nooa import Agent\n\nclass InventoryAgent(Agent, llm=llm):\n    \"\"\"You are an agent that checks inventory using deterministic helper methods.\"\"\"\n\n    # Plain Python — automatically available as a tool for the LLM\n    def get_stock(self, item: str) -> int:\n        \"\"\"Get current stock for an item.\"\"\"\n        return self.inventory.get(item, {}).get(\"stock\", 0)\n\n    # `...` body — the LLM implements this at runtime, calling the methods above\n    async def can_fulfill_order(self, items: list[str], budget: float) -> Result:\n        \"\"\"Check if order can be fulfilled within budget.\"\"\"\n        ...\n```\n\nThat's from the repo's quickstart, lightly trimmed. The mapping is:\n\n`...`\n\nbodiesNo separate tool-schema JSON. No registration step. The model acts by writing Python in a REPL with access to `self`\n\n, so your method signatures *are* the tool definitions.\n\nThe README says `pip install nooa`\n\n. Two things I hit on a clean machine:\n\n**1. It's not on PyPI yet.** As of today, `pip install nooa`\n\nreturns `No matching distribution found`\n\n. Install from source instead:\n\n```\ngit clone https://github.com/NVIDIA-NeMo/labs-OO-Agents.git\nuv venv --python 3.13 && uv pip install ./labs-OO-Agents\n```\n\n**2. No Python 3.14 support.** The package pins `>=3.12,<3.14`\n\n. My default interpreter is 3.14, and the install fails with a version error. Use 3.12 or 3.13.\n\nAfter that, everything imported cleanly and defining an `Agent`\n\nsubclass with a generation method worked first try (version installed: `0.0.1.dev1`\n\n— this is early software, and it behaves like it).\n\nMost agent frameworks make you maintain two parallel worlds: your code, and a shadow copy of your code described in schemas, prompt templates, and callback wiring. Every refactor has to happen twice.\n\nNOOA's bet is that the language already has all the metadata an LLM needs — signatures, types, docstrings — so the shadow world can be deleted. Your agent diffs like code, tests like code, and refactors like code. `mypy`\n\nand your IDE understand it because there's nothing else to understand.\n\nThere's also a strategy layer worth knowing about: `PredictStrategy`\n\n(single completion) vs `CodeActStrategy`\n\n(iterative code execution, capped by `max_iterations`\n\n), swappable per method via a decorator. That's a clean answer to \"some steps need one LLM call, some need a loop\" without restructuring the agent.\n\nNVIDIA's paper claims a 253-line NOOA agent hits 82.2% on SWE-bench Verified and 86.8% on CyberGym L1. I haven't reproduced those numbers, and you shouldn't take vendor benchmarks at face value — but the interesting claim isn't the score, it's the line count.\n\nA NOOA agent acts by executing LLM-generated Python. With access to `self`\n\n, imports, and whatever your process can reach. NVIDIA's own docs tell you to run agents in a sandbox, and they mean it — this is `exec()`\n\nwith extra steps, by design. If you wouldn't run `curl | sh`\n\nfrom a model, don't run NOOA agents outside a container either.\n\nMy own bias here: I build AI products, and the biggest lesson from my last one was that quality came from composing many small, checkable steps — not from trusting one big end-to-end model call. Most agent frameworks fight that instinct: they want the composition described in *their* vocabulary of chains and graphs instead of the language I already work in. NOOA is the first design I've seen where the composition just *is* Python. Which is also why the sandbox warning matters double — when wiring agents into real systems gets this frictionless, you'll ship one faster than you audit it.\n\nToday: probably not in production. It's a `0.0.1.dev1`\n\nthat isn't on PyPI yet.\n\nBut I'd bet on the direction. We spent two years building agent frameworks that look like workflow engines, and the results are brittle in ways every practitioner knows. \"The programming language is the agent definition language\" is the first framing I've seen that gets *simpler* as your agent gets bigger. Worst case, NOOA becomes the CoffeeScript of agents: the thing itself fades, but every framework after it steals the idea.\n\nThe [examples directory](https://github.com/NVIDIA-NeMo/labs-OO-Agents/blob/main/examples/README.md) is a genuinely good progressive tutorial — 11 numbered files from first generation method to MCP tools. Start with `03_codeact_tools.py`\n\n; it's the one that made the design click for me.\n\nHave you tried collapsing your agent stack into plain code? I'd like to hear where it broke.", "url": "https://wpnews.pro/news/nvidia-s-nooa-turns-an-ai-agent-into-one-python-class", "canonical_source": "https://dev.to/frankchu/nvidias-nooa-turns-an-ai-agent-into-one-python-class-dm1", "published_at": "2026-08-10 21:46:05+00:00", "updated_at": "2026-08-10 22:17:24.689482+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "developer-tools", "large-language-models"], "entities": ["NVIDIA Labs", "NOOA", "SWE-bench Verified", "CyberGym L1"], "alternates": {"html": "https://wpnews.pro/news/nvidia-s-nooa-turns-an-ai-agent-into-one-python-class", "markdown": "https://wpnews.pro/news/nvidia-s-nooa-turns-an-ai-agent-into-one-python-class.md", "text": "https://wpnews.pro/news/nvidia-s-nooa-turns-an-ai-agent-into-one-python-class.txt", "jsonld": "https://wpnews.pro/news/nvidia-s-nooa-turns-an-ai-agent-into-one-python-class.jsonld"}}