nemo_gym.agent_registry
nemo_gym.agent_registry
Registry of agent harnesses under responses_api_agents/<name>/.
An agent harness is one component of an environment (an environment = dataset + agent harness +
resources server [verifier and state] + model). This module maps an agent’s short <name> (the
directory name) to its config variant(s) so it can be enumerated by name (gym list agents) and
classified by how it composes. Resolving an agent name to a config for running belongs to the
config composer (via the CLI’s generic asset selectors), so this module is intentionally
discovery-only. The self_contained flag records only what the agent’s own config reveals about
its resources-server wiring:
- Wires a resources server itself (Pattern A,
self_contained=False): the config setsresponses_api_agents.<type>.resources_server, so the registry can see it pairs with a separate resources server + dataset (e.g. thesimple_agenttool-use pattern). - Does not wire one in its own config (Pattern B,
self_contained=True): the agent declares its ownagent_framework(e.g.swe_agents), drives an external LLM loop (e.g.claude_code_agentvia its own model key), or ships only an entrypoint whose resources-server pairing is supplied by a separate paired/benchmark config (e.g.gymnasium_agent+ theblackjackresources server). These agents are still composable — but within a type (gymnasium↔gymnasium-style, simple_agent↔simple_agent-style), not across types. Which pairings are actually compatible is the config composer’s call, not inferable from the agent config alone.
Discovery only reads config files; it never resolves interpolations or missing values and never starts servers, so it is safe to call when secrets/API keys referenced by a config are unset.
Module Contents
Classes
Functions
Data
API
A discovered agent: its name, where it lives, its config variants, and how it’s wired.
Map variant name (config filename stem) -> config path.
Return (self_contained, description) for an agent from its config variants.
A harness is NOT self-contained (Pattern A) when some variant references a separate resources
server, none declares an agent_framework, and none drives an external LLM loop (e.g. its own
Anthropic key) — it must be wired to a compatible resources server. Otherwise it is
self-contained (Pattern B). Agents with no parseable config are treated as Pattern A (their
wiring lives in a paired benchmark/resources-server config).
True if the file is a NeMo Gym agent config (a top-level block with responses_api_agents).
Filters out non-agent YAML that happens to live in an agent’s configs/ dir (e.g. a raw
harness config or an empty stub).
Yield each responses_api_agents.<type> mapping in a config (resolution-safe, best effort).
Map agent name -> :class:AgentEntry for every agent dir under responses_api_agents/.
The name is the directory name. A directory is an agent if it has an app.py or at least one
agent config. Returns an empty dict if the directory is missing.