StackMap
Subscribe
Explore / labs-OO-Agents
NVIDIA-NeMo

labs-OO-Agents

NVIDIA's object-oriented agent framework: an agent is a Python class — fields are state, docstrings are prompts, and a `...` method body becomes an LLM loop that acts by writing Python.

1,875 259 Python NOASSERTIONupdated today
View on GitHubDispute this mapping →
Curator's take

The bet is that agent code should be ordinary code: no prompt registry, no hand-written tool schemas, no graph DSL — one class you subclass, type-check, trace and refactor like the rest of the repo. The `...` body is the whole trick: leave a method unimplemented and the runtime hands it to an LLM that acts by writing Python in a REPL with `self` in scope, so composition and state sharing are just attribute access, and methods with type annotations are already callable tools. Use it if your team thinks in typed Python and wants agents to survive a refactor. NOT the pick if you want a visual builder, a managed runtime or a big integration catalogue — it is a library with a paper behind it, and the CLI, ACP, memory and bench pieces are separate distributions.

Mapped by ShipWithAI editors · links verified
README.md

NVIDIA-labs Object Oriented Agents

A Pythonic way to build AI agents.

NVIDIA Paper Blog License

Docs  ·  Quick Start  ·  Notebook Tutorials  ·  Examples  ·  Paper  ·  Blog


NVIDIA-labs Object Oriented Agents (NOOA) is a model-agnostic Python framework designed to support reliable AI agent development. Many agent frameworks represent prompts, tools, callbacks, and workflows as separate abstractions. NOOA offers an alternative object-oriented interface that brings these concepts together in a Python class. NOOA lets developers express an agent’s state, capabilities, prompts, and typed interfaces through a single Python class:

from nooa import Agent

# The agent is a Python object.
class SupportAgent(Agent):
    """You are a support agent."""

    # State lives on the object. Fields are typed.
    order_db: OrderDB

    # Ordinary method. Just Python.
    def is_refund_eligible(self, order: Order) -> bool:
        return order.delivered and order.days_since_delivery <= 30

    # Agentic method: the runtime hands this to an LLM.
    async def triage(self, message: str, order: Order) -> Ticket:
        """Create a typed support ticket."""
        ...

What's happening here:

  • Agents are Python objects. Fields are state, methods are capabilities, docstrings are prompts, type annotations are contracts.
  • ... bodies are LLM-driven. A method with ... becomes an agentic loop; a real body stays deterministic Python.
  • Code as action. The model acts by writing Python in a Jupyter-style REPL with access to self, imports, and helpers — Python methods and type annotations supply the callable interfaces, reducing the need to write separate tool-schema definitions.
  • Pythonic and agent-ready. Typed I/O with auto-retry, live-object arguments passed by reference, and model-callable context and event APIs — designed around agent-oriented Python workflows.

This design supports familiar Python testing, tracing, refactoring, and version-control workflows — just like the rest of your software. Read the paper for the design principles and evaluation results.

Want to see how th

Continue your stack

What teams reach for next — and why each earns a place beside labs-OO-Agents. Ranked by curator confidence.