> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/gym/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/gym/_mcp/server.

# nemo_gym.registry

Read-only catalog for manifest-backed and legacy environments and benchmarks.

## Module Contents

### Classes

| Name                                                                    | Description                                                                   |
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [`EnvironmentCatalogEntry`](#nemo_gym-registry-EnvironmentCatalogEntry) | A discovered runnable unit and its lightweight catalog metadata.              |
| [`EnvironmentEntry`](#nemo_gym-registry-EnvironmentEntry)               | A discovered environment: its name, where it lives, and lightweight metadata. |
| [`RegistryError`](#nemo_gym-registry-RegistryError)                     | A catalog entry is invalid or cannot be selected unambiguously.               |

### Functions

| Name                                                                                | Description                                                                                 |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| [`_discover_environments_in_dir`](#nemo_gym-registry-_discover_environments_in_dir) | Map environment name to its effective manifest or legacy entry under one directory.         |
| [`_discover_registry_tree`](#nemo_gym-registry-_discover_registry_tree)             | Discover one catalog tree without importing or resolving runnable components.               |
| [`_discover_resource_workloads`](#nemo_gym-registry-_discover_resource_workloads)   | Discover legacy runnable workloads colocated with resources servers.                        |
| [`_enum_value`](#nemo_gym-registry-_enum_value)                                     | -                                                                                           |
| [`_legacy_config_paths`](#nemo_gym-registry-_legacy_config_paths)                   | -                                                                                           |
| [`_legacy_entry`](#nemo_gym-registry-_legacy_entry)                                 | -                                                                                           |
| [`_manifest_entry`](#nemo_gym-registry-_manifest_entry)                             | -                                                                                           |
| [`_path_identity`](#nemo_gym-registry-_path_identity)                               | -                                                                                           |
| [`_resource_workload_identity`](#nemo_gym-registry-_resource_workload_identity)     | -                                                                                           |
| [`_runnable_resource_config`](#nemo_gym-registry-_runnable_resource_config)         | Read a resource-tree config that carries its own runnable workload.                         |
| [`discover_environment_catalog`](#nemo_gym-registry-discover_environment_catalog)   | Discover manifest and legacy runnable units across all workload locations.                  |
| [`discover_environments`](#nemo_gym-registry-discover_environments)                 | Discover environments with standard component-root precedence.                              |
| [`read_environment_details`](#nemo_gym-registry-read_environment_details)           | Deep-parse an environment config for the `gym list environments &lt;name&gt;` inspect view. |
| [`resolve_catalog_entry`](#nemo_gym-registry-resolve_catalog_entry)                 | Resolve a catalog name, requiring its kind only for a cross-kind collision.                 |

### Data

[`BENCHMARKS_SUBDIR`](#nemo_gym-registry-BENCHMARKS_SUBDIR)

[`CatalogKind`](#nemo_gym-registry-CatalogKind)

[`CatalogStatus`](#nemo_gym-registry-CatalogStatus)

[`ENVIRONMENTS_DIR`](#nemo_gym-registry-ENVIRONMENTS_DIR)

[`ENVIRONMENTS_SUBDIR`](#nemo_gym-registry-ENVIRONMENTS_SUBDIR)

[`ENVIRONMENT_CONFIG_FILENAME`](#nemo_gym-registry-ENVIRONMENT_CONFIG_FILENAME)

[`MANIFEST_FILENAME`](#nemo_gym-registry-MANIFEST_FILENAME)

[`RESOURCES_SERVERS_SUBDIR`](#nemo_gym-registry-RESOURCES_SERVERS_SUBDIR)

### API

```python
class nemo_gym.registry.EnvironmentCatalogEntry(
    name: str,
    config_path: pathlib.Path,
    path: pathlib.Path,
    description: typing.Optional[str] = None,
    domain: typing.Optional[str] = None,
    kind: nemo_gym.registry.CatalogKind = 'environment',
    status: nemo_gym.registry.CatalogStatus = 'no-manifest',
    manifest_path: typing.Optional[pathlib.Path] = None,
    version: typing.Optional[str] = None,
    integration_profile: typing.Optional[str] = None,
    modality: typing.Optional[str] = None,
    licensing: typing.Optional[str] = None,
    lifecycle: typing.Optional[str] = None,
    resources_server_selector: typing.Optional[str] = None
)
```

Dataclass

A discovered runnable unit and its lightweight catalog metadata.

**`config_path`** `Path`

---

**`description`** `Optional[str] = None`

---

**`domain`** `Optional[str] = None`

---

**`integration_profile`** `Optional[str] = None`

---

**`kind`** `CatalogKind = 'environment'`

---

**`licensing`** `Optional[str] = None`

---

**`lifecycle`** `Optional[str] = None`

---

**`manifest_path`** `Optional[Path] = None`

---

**`modality`** `Optional[str] = None`

---

**`name`** `str`

---

**`path`** `Path`

---

**`resources_server_selector`** `Optional[str] = None`

---

**`status`** `CatalogStatus = 'no-manifest'`

---

**`version`** `Optional[str] = None`

---

```python
class nemo_gym.registry.EnvironmentEntry(
    name: str,
    config_path: pathlib.Path,
    path: pathlib.Path,
    description: typing.Optional[str] = None,
    domain: typing.Optional[str] = None,
    kind: nemo_gym.registry.CatalogKind = 'environment',
    status: nemo_gym.registry.CatalogStatus = 'no-manifest',
    manifest_path: typing.Optional[pathlib.Path] = None,
    version: typing.Optional[str] = None,
    integration_profile: typing.Optional[str] = None,
    modality: typing.Optional[str] = None,
    licensing: typing.Optional[str] = None,
    lifecycle: typing.Optional[str] = None,
    resources_server_selector: typing.Optional[str] = None
)
```

Dataclass

**Bases:** [EnvironmentCatalogEntry](#nemo_gym-registry-EnvironmentCatalogEntry)

A discovered environment: its name, where it lives, and lightweight metadata.

**`kind`** `CatalogKind = field(default='environment', init=False)`

---

```python
class nemo_gym.registry.RegistryError()
```

**Bases:** [ConfigError](/nemo-gym/nemo_gym/config_types#nemo_gym-config_types-ConfigError)

A catalog entry is invalid or cannot be selected unambiguously.

```python
nemo_gym.registry._discover_environments_in_dir(
    environments_dir: pathlib.Path
) -> typing.Dict[str, nemo_gym.registry.EnvironmentEntry]
```

Map environment name to its effective manifest or legacy entry under one directory.

```python
nemo_gym.registry._discover_registry_tree(
    tree_dir: pathlib.Path,
    kind: nemo_gym.registry.CatalogKind,
    claimed: frozenset[tuple[nemo_gym.registry.CatalogKind, str]] = frozenset()
) -> typing.Dict[tuple[nemo_gym.registry.CatalogKind, str], nemo_gym.registry.EnvironmentCatalogEntry]
```

Discover one catalog tree without importing or resolving runnable components.

```python
nemo_gym.registry._discover_resource_workloads(
    resources_dir: pathlib.Path,
    claimed: frozenset[tuple[nemo_gym.registry.CatalogKind, str]] = frozenset()
) -> typing.Dict[tuple[nemo_gym.registry.CatalogKind, str], nemo_gym.registry.EnvironmentCatalogEntry]
```

Discover legacy runnable workloads colocated with resources servers.

```python
nemo_gym.registry._enum_value(
    value: object
) -> typing.Optional[str]
```

```python
nemo_gym.registry._legacy_config_paths(
    tree_dir: pathlib.Path,
    kind: nemo_gym.registry.CatalogKind
) -> typing.Iterable[tuple[str, pathlib.Path]]
```

```python
nemo_gym.registry._legacy_entry(
    name: str,
    config_path: pathlib.Path,
    kind: nemo_gym.registry.CatalogKind
) -> nemo_gym.registry.EnvironmentCatalogEntry
```

```python
nemo_gym.registry._manifest_entry(
    tree_dir: pathlib.Path,
    manifest_path: pathlib.Path,
    expected_kind: nemo_gym.registry.CatalogKind
) -> nemo_gym.registry.EnvironmentCatalogEntry
```

```python
nemo_gym.registry._path_identity(
    tree_dir: pathlib.Path,
    manifest_path: pathlib.Path
) -> str
```

```python
nemo_gym.registry._resource_workload_identity(
    resources_dir: pathlib.Path,
    config_path: pathlib.Path
) -> tuple[str, str]
```

```python
nemo_gym.registry._runnable_resource_config(
    config_path: pathlib.Path
) -> tuple[nemo_gym.registry.CatalogKind, typing.Optional[str], typing.Optional[str]] | None
```

Read a resource-tree config that carries its own runnable workload.

```python
nemo_gym.registry.discover_environment_catalog() -> tuple[nemo_gym.registry.EnvironmentCatalogEntry, ...]
```

Discover manifest and legacy runnable units across all workload locations.

```python
nemo_gym.registry.discover_environments() -> typing.Dict[str, nemo_gym.registry.EnvironmentEntry]
```

Discover environments with standard component-root precedence.

```python
nemo_gym.registry.read_environment_details(
    config_path: pathlib.Path
) -> typing.Dict[str, object]
```

Deep-parse an environment config for the `gym list environments &lt;name&gt;` inspect view.

Returns `domain`, `description` (via :func:`~nemo_gym.discovery.read_config_metadata`), plus
`value`, `resources_servers` (names), `agent` (the agent type), and dataset `names` read from
the config's server blocks. Never raises: an unreadable config yields empty/None fields.

```python
nemo_gym.registry.resolve_catalog_entry(
    name: str,
    kind: nemo_gym.registry.CatalogKind | str | None = None,
    entries: typing.Iterable[nemo_gym.registry.EnvironmentCatalogEntry] | None = None
) -> nemo_gym.registry.EnvironmentCatalogEntry
```

Resolve a catalog name, requiring its kind only for a cross-kind collision.

```python
nemo_gym.registry.BENCHMARKS_SUBDIR = 'benchmarks'
```

```python
nemo_gym.registry.CatalogKind = Literal['environment', 'benchmark']
```

```python
nemo_gym.registry.CatalogStatus = Literal['experimental', 'no-manifest']
```

```python
nemo_gym.registry.ENVIRONMENTS_DIR = PARENT_DIR / ENVIRONMENTS_SUBDIR
```

```python
nemo_gym.registry.ENVIRONMENTS_SUBDIR = 'environments'
```

```python
nemo_gym.registry.ENVIRONMENT_CONFIG_FILENAME = 'config.yaml'
```

```python
nemo_gym.registry.MANIFEST_FILENAME = 'manifest.yaml'
```

```python
nemo_gym.registry.RESOURCES_SERVERS_SUBDIR = 'resources_servers'
```