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

# nemoguardrails.manifests.catalog

Catalog construction and discovery for rail manifests and their surfaces.

Collects `RailManifestRecord` entries for built-in rails discovered under
`nemoguardrails/library` into an immutable `RailCatalog` that enforces global
uniqueness of rail names, config keys, flow names, action names, and surface
keys.

## Module Contents

### Classes

| Name                                                                         | Description                                                  |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------ |
| [`RailCatalog`](#nemoguardrails-manifests-catalog-RailCatalog)               | Immutable index of rail manifests keyed by name and surface. |
| [`RailManifestRecord`](#nemoguardrails-manifests-catalog-RailManifestRecord) | Manifest plus provenance recorded in a rail catalog.         |

### Functions

| Name                                                 | Description |
| ---------------------------------------------------- | ----------- |
| [`_claim`](#nemoguardrails-manifests-catalog-_claim) | -           |

### Data

[`_OwnerKey`](#nemoguardrails-manifests-catalog-_OwnerKey)

### API

```python
class nemoguardrails.manifests.catalog.RailCatalog(
    records: typing.Iterable[nemoguardrails.manifests.catalog.RailManifestRecord] = ()
)
```

Immutable index of rail manifests keyed by name and surface.

Constructing a catalog validates the combined set of records and raises
`ValueError` on any collision: duplicate manifest names, duplicate config
keys, flow names, action names, or two rails claiming the same `(direction,
surface name)`. It also rejects a surface whose action is not declared in
that surface's own manifest.

**`manifests`** `Mapping[str, RailManifest]`

Return rail manifests keyed by manifest name.

---

**`records`** `Mapping[str, RailManifestRecord]`

Return catalog records keyed by manifest name.

---

```python
nemoguardrails.manifests.catalog.RailCatalog.discover_built_ins(
    library_path: typing.Optional[pathlib.Path] = None
) -> nemoguardrails.manifests.catalog.RailCatalog
```

classmethod

Discover built-in manifests from `rail.py` modules under the library.

```python
nemoguardrails.manifests.catalog.RailCatalog.owner_for_flow(
    flow_name: str
) -> typing.Optional[str]
```

Return the manifest that owns a declared public flow name.

```python
nemoguardrails.manifests.catalog.RailCatalog.surfaces(
    direction: typing.Optional[nemoguardrails.manifests.manifest.RailDirection] = None
) -> typing.Dict[typing.Tuple[nemoguardrails.manifests.manifest.RailDirection, str], nemoguardrails.manifests.manifest.RailSurface]
```

Return declared surfaces, optionally filtered by direction.

```python
class nemoguardrails.manifests.catalog.RailManifestRecord(
    manifest: nemoguardrails.manifests.manifest.RailManifest,
    source: str
)
```

Dataclass

Manifest plus provenance recorded in a rail catalog.

**`manifest`** `RailManifest`

---

**`source`** `str`

---

```python
nemoguardrails.manifests.catalog._claim(
    owners: typing.Dict[nemoguardrails.manifests.catalog._OwnerKey, str],
    key: nemoguardrails.manifests.catalog._OwnerKey,
    manifest_name: str,
    label: str
) -> None
```

```python
nemoguardrails.manifests.catalog._OwnerKey = TypeVar('_OwnerKey')
```