Overview
NVIDIA-labs Object Oriented Agents (NOOA) is a model-agnostic Python framework for building agents, published by NVIDIA under Apache-2.0 with an accompanying arXiv paper. Its argument is that most agent frameworks scatter prompts, tools, callbacks and workflows across separate abstractions, and that a plain Python class can hold all of them at once.
So in NOOA an agent is a class. Its fields are state and are typed. Its docstring is the system prompt. Ordinary methods with real bodies stay deterministic Python. A method whose body is `...` becomes an agentic loop: the runtime hands it to an LLM, and the type annotations act as the contract for what comes back, with automatic retry on typed I/O. The model acts by writing Python in a Jupyter-style REPL that has access to `self`, imports and helpers — so the methods and type annotations you already wrote supply the callable interfaces, and separate tool-schema definitions are largely unnecessary.
The practical consequence is that an agent is an ordinary software object: you can test it, trace it, refactor it and diff it with the tools you already use. The core `nooa` package installs on its own; a CLI with a trace viewer and eval runner, an Agent Client Protocol coding agent for hosts such as Zed, a long-term memory subsystem and a benchmark runner ship as separate distributions or extras. The repository also carries a documented ten-minute tour, notebook tutorials and examples, and an evaluation pipeline installable straight from the repo.
What it does
- Agents are Python classes: typed fields are state, methods are capabilities, docstrings are prompts, annotations are contracts
- A method body of `...` becomes an LLM-driven agentic loop; a real body stays deterministic Python in the same class
- Code-as-action — the model writes Python in a Jupyter-style REPL with access to `self`, imports and helpers, so tool schemas are mostly redundant
- Typed I/O with automatic retry, live objects passed by reference, and model-callable context and event APIs
- Optional sub-packages: `nooa-cli` (command, trace viewer, eval runner), `nooa-acp` (Agent Client Protocol coding agent), `nooa-memory`, `nooa-bench`
- Model-agnostic, Apache-2.0, with a published paper on the design and evaluation
Getting started
NOOA is a normal Python package. The commands below are from the repository's installation section; the class sketch is the README's own example.
Add the core framework
With uv, or with pip if you prefer.
uv init my-agent-project
cd my-agent-project
uv add nooa
# or: pip install nooaWrite an agent as a class
State is fields, prompts are docstrings, and the `...` body is what the runtime hands to a model.
from nooa import Agent
class SupportAgent(Agent):
"""You are a support agent."""
order_db: OrderDB
def is_refund_eligible(self, order: Order) -> bool:
return order.delivered and order.days_since_delivery <= 30
async def triage(self, message: str, order: Order) -> Ticket:
"""Create a typed support ticket."""
...Add the pieces you need
The CLI, ACP host integration, memory and benchmark packages are separate distributions, or extras of the core package.
uv add nooa-cli # or: uv add "nooa[cli]"
uv add nooa-acp # or: uv add "nooa[acp]"
uv add nooa-memory # or: uv add "nooa[memory]"
uv add "nooa[cli,memory]" # several at onceTake the tour
The repository's docs/tour.md walks from one thinking method through tools, typed contracts, deterministic orchestration and object composition; notebook tutorials and examples live alongside it, and the paper covers the design principles and evaluation.
Commands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Building agents you can unit-test, refactor and code-review like the rest of your Python
- Mixing deterministic logic and model-driven steps inside one object instead of splitting them across a graph
- Getting typed, retried outputs out of an agent without hand-writing tool schemas
- Running a coding agent inside an Agent Client Protocol host such as Zed via `nooa-acp`
How NOOA (NVIDIA Object Oriented Agents) compares
NOOA (NVIDIA Object Oriented Agents) alongside other open-source agent frameworks & builders tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| DeepSeek Harness | ★ 215k | DeepSeek AI's open-source agent harness (dsh), built on Cordis, where models, tools, skills, sessions, sandboxes, storage and the UI are all plugins composed through profiles. |
| AutoGPT | ★ 187k | One of the earliest autonomous agent projects, now a platform for building and running agents from reusable blocks and workflows. |
| DeerFlow | ★ 81.9k | ByteDance's open-source super agent harness built on LangGraph: skills, sub-agents, sandboxes, a filesystem and long-term memory for long-horizon research, coding and content tasks. |
| nanobot | ★ 47.9k | Lightweight self-hosted personal AI agent framework in Python, with a WebUI, terminal and chat-app channels, tools, long-term memory, MCP and scheduled automations. |
| Agno | ★ 42.1k | A fast Python framework (formerly Phidata) for building agents with memory, tools, and multimodal inputs, plus a runtime for deploying them in production. |
| LangGraph | ★ 41.2k | A library from the LangChain team for building stateful, graph-based agent workflows with explicit control over steps, memory, and human-in-the-loop checkpoints. |
| AgentGPT | ★ 36.3k | AgentGPT lets you name a custom AI, give it a goal, and watch it plan tasks, run them, and learn from the results, all from a web browser. |
| NOOA (NVIDIA Object Oriented Agents) | ★ 2k | NVIDIA's Python agent framework where an agent is a class and a method body of `...` becomes an LLM loop |