Heads up This site is currently under heavy development.
← all tools
◆ AI Agent Frameworks

Object-Oriented Agents

v0.0.9 open-source

NVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.

Summary

Object-Oriented Agents (NOOA) is an open-source, Apache 2.0-licensed Python framework for building AI agents, distributed as a library you install with `pip install nooa` or `uv add nooa` and import into your own code. Rather than treating prompts, tools, callbacks, and workflows as separate abstractions, as many agent frameworks do, it lets a developer express an agent's state, capabilities, prompts, and typed interfaces as a single Python class, which makes it a fit for application developers building agentic systems rather than for security teams directly, though an included cybergym example shows it used to build a cybersecurity-oriented agent. Recent hardening work has removed an eval()-based code execution path in its CodeAct constructor, confined shell-tool file operations to the working directory, and added auth and CORS restrictions to its local trace viewer, work that suggests active, ongoing maintenance.

NVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.

What Object-Oriented Agents answers

Is it safe to let an agent run shell commands on its own machine?

shell-tool file operations are confined to the current working directory rather than the whole filesystem

Can I inspect what an agent did after a run without exposing that data?

the local trace viewer requires an auth token and restricts cross-origin requests, rather than being open by default

Do I need to build or clone the source to try it?

it installs from PyPI as a published package, with no separate build step

all 4 features, with the evidence for each →

Features

4 capabilities

Built from everything we hold on Object-Oriented Agents — every release we have summarised, its product documentation and how that documentation has changed, its README, its command-line surface and API, and runs we performed ourselves. Dates are when we first saw a capability, not when the vendor introduced it.

Capability area
All capabilities 4 capabilities
Agent sandbox hardening shipped Restricts agent-executed operations — including shell file access, LLM endpoint selection, and code evaluation — to bounded, pre-approved surfaces to limit the blast radius of agent actions. 3 releases · first seen Jul 2026

release

  • Constrains playground custom-model endpoint and api_key_env to server-declared pairs, preventing clients from supplying arbitrary LLM endpoints. v0.0.7 · Jul 2026 · source · release history
  • Replaces eval() in the CodeAct constructor-string coercion path with an AST decoder, removing arbitrary code execution from that code path. v0.0.7 · Jul 2026 · source · release history
  • Confines ShellTools file operations within the current working directory, limiting the filesystem surface available to agent-executed shell commands. v0.0.7 · Jul 2026 · source · release history
Trace viewer access controls shipped Secures the local trace-viewer API with auth tokens, CORS restrictions, and ingest-path resource limits to narrow its attack surface and cap resource consumption. 2 releases · first seen Jul 2026

release

  • Adds resource limits on the viewer ingest path to cap memory and request size for the trace-viewer API. v0.0.7 · Jul 2026 · source · release history
  • Requires an auth token and restricts CORS on the viewer API, narrowing the attack surface of the local trace viewer. v0.0.7 · Jul 2026 · source · release history
Cybersecurity agent examples shipped Provides a NOOA cybergym example demonstrating how to build a cybersecurity-oriented agent on the OO Agents framework. 1 release · first seen Jul 2026

release

  • Adds a NOOA cybergym agent example (examples/) demonstrating a cybersecurity-oriented agent built on the OO Agents framework. v0.0.7 · Jul 2026 · source · release history
PyPI package distribution shipped Publishes the framework as an installable Python package on PyPI via Trusted Publishing, enabling standard pip or uv installs from official GitHub Releases. 1 release · first seen Jul 2026

release

  • Publishes the package to PyPI via Trusted Publishing on GitHub Releases, enabling pip install nooa / uv add nooa installs from official releases. v0.0.7 · Jul 2026 · source · release history
Capability
Evidence

Lines in monospace are the tool's own words — help text parsed from its source, or an endpoint from its API document. Everything else is our summary of a dated release or documentation change, linked back to the source it came from.

Release history

  1. v0.0.9 Aug 18, 2026 · issue -001

    OO-Agents v0.0.9 adds plugin-based CLI extension, a portable journal exporter, callable LLM routing in @strategy, shared interactive sessions, and a CyberGym portfolio agent.

    └──▷ GET THIS VERSION
    $ git clone --branch v0.0.9 https://github.com/NVIDIA-NeMo/labs-OO-Agents.git
    # already have the repo? check out this version:
    $ git checkout v0.0.9
    • Enables external packages to add nooa subcommands via Python entry points, allowing third-party plugins to extend the CLI without forking.
    • Adds a portable journal file exporter for tracing, giving teams an offline-portable trace format independent of a remote viewer.
    • Allows a callable to be passed to @strategy(llm=...), enabling dynamic LLM selection per strategy invocation instead of a static reference.
    • Adds LLM routing metadata to generation observability, surfacing which backend was selected in trace output.
    • Adds a shared interactive session foundation, enabling multiple agents to collaborate within a single interactive context.
    +1 moreshow less
    • Adds a portfolio-based NOOA agent to the CyberGym benchmark environment.
    └──▷ BREAKING ON UPGRADE
    • !The nemo_flow_* namespace is renamed to nemo_relay_*; any code or config referencing nemo_flow_ names will break on upgrade.
  2. v0.0.9 Aug 18, 2026 · issue 001

    OO Agents v0.0.9 adds entry-point CLI extensibility, a callable @strategy(llm=...), a portable journal exporter, shared interactive sessions, and a CyberGym portfolio agent.

    └──▷ GET THIS VERSION
    $ git clone --branch v0.0.9 https://github.com/NVIDIA-NeMo/labs-OO-Agents.git
    # already have the repo? check out this version:
    $ git checkout v0.0.9
    └──▷ USE IT
    Dynamically select an LLM per-call (e.g. based on task complexity) instead of binding one model at class definition time.
    python
    from nooa import Agent
    from nooa.unifiedllm import get_llm_client
    
    def pick_llm():
        return get_llm_client("ollama_chat/qwen3:1.7b", api_base="http://localhost:11434")
    
    class AdaptiveAgent(Agent):
        @strategy(llm=pick_llm)
        async def analyze(self, text: str) -> str:
            """Analyze the text."""
            ...
    • Allows a callable to be passed to @strategy(llm=...) so LLM selection can be decided at runtime rather than at class-definition time.
    • Adds a portable journal file exporter for tracing, enabling offline and cross-environment trace storage.
    • Lets external packages register new nooa subcommands via Python entry points, making the nooa CLI extensible without modifying core.
    • Adds a portfolio-based NOOA agent to the CyberGym benchmark environment.
    • Adds LLM routing metadata to generation observability, surfacing which backend handled each LLM call in traces.
    └──▷ BREAKING ON UPGRADE
    • !All nemo_flow_* symbols are renamed to nemo_relay_*; any code importing or referencing nemo_flow_* names will break.
  3. v0.0.7 Jul 30, 2026 · issue -020

    v0.0.7 adds a CyberGym agent example, viewer ingest resource limits, and playground custom-model endpoint constraints.

    └──▷ GET THIS VERSION
    $ git clone --branch v0.0.7 https://github.com/NVIDIA-NeMo/labs-OO-Agents.git
    # already have the repo? check out this version:
    $ git checkout v0.0.7
    • Constrains playground custom-model endpoint and api_key_env to server-declared pairs, preventing arbitrary endpoint injection.
    • Adds resource limits on the Viewer ingest API to cap payload sizes and prevent abuse.
    • Adds a nooa CyberGym agent example demonstrating object-oriented agent patterns for cyber exercise environments.
    • Requires an auth token and restricts CORS on the viewer API, hardening the exposed surface.
    • Constrains ShellTools file operations to the current working directory, limiting lateral file access.
    +1 moreshow less
    • Replaces eval() in the CodeAct constructor-string coercion path with an AST decoder, removing arbitrary code execution risk in that call site.
  4. v0.0.7 Jul 30, 2026 · issue 001

    NOOA v0.0.7 adds auth-gated viewer API, secret redaction in telemetry, resource limits on viewer ingest, and a NOOA CyberGym agent example.

    └──▷ GET THIS VERSION
    $ git clone --branch v0.0.7 https://github.com/NVIDIA-NeMo/labs-OO-Agents.git
    # already have the repo? check out this version:
    $ git checkout v0.0.7
    • Adds authentication token requirement and CORS restrictions to the viewer API, preventing unauthenticated access to trace data.
    • Constrains playground custom-model endpoint and api_key_env fields to server-declared pairs, blocking arbitrary endpoint injection.
    • Enforces resource limits on viewer ingest to bound memory and CPU consumption under high trace volume.
    • Confines ShellTools file operations within the current working directory, reducing the blast radius of LLM-generated shell actions.
    • Adds an NOOA CyberGym agent example demonstrating how to build a cyber-domain agent with the OO Agents framework.
my-toolchain — 0 tools
paste an install list to detect your tools

A brew list, a Brewfile, requirements.txt, a Dockerfile — or just the product names, free-form. Nothing leaves your browser.

    browse all tools →