> 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.cli.main

## Module Contents

### Classes

| Name                                                          | Description                                                                          |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| [`Command`](#nemo_gym-cli-main-Command)                       | -                                                                                    |
| [`Flag`](#nemo_gym-cli-main-Flag)                             | -                                                                                    |
| [`_GymArgumentParser`](#nemo_gym-cli-main-_GymArgumentParser) | ArgumentParser that appends a difflib "did you mean?" hint to invalid-choice errors. |

### Functions

| Name                                                            | Description                                                                                                   |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [`_add_leaf`](#nemo_gym-cli-main-_add_leaf)                     | -                                                                                                             |
| [`_asset_config_path`](#nemo_gym-cli-main-_asset_config_path)   | Map a named asset (`name` or `name/flavor`) to its config path.                                               |
| [`_asset_selector`](#nemo_gym-cli-main-_asset_selector)         | A `--&lt;flag&gt; NAME` selector that resolves the named asset to a config and adds it to +config\_paths.     |
| [`_bool_flag`](#nemo_gym-cli-main-_bool_flag)                   | A `--name` store\_true flag that maps to the Hydra override `+&lt;hydra_key&gt;=true` when set.               |
| [`_dataset_download`](#nemo_gym-cli-main-_dataset_download)     | -                                                                                                             |
| [`_dataset_upload`](#nemo_gym-cli-main-_dataset_upload)         | -                                                                                                             |
| [`_did_you_mean`](#nemo_gym-cli-main-_did_you_mean)             | A ` Did you mean \`X\`?`fragment for the closest candidate to`value`, or `""\` if none is close enough.       |
| [`_env_test`](#nemo_gym-cli-main-_env_test)                     | -                                                                                                             |
| [`_eval_run`](#nemo_gym-cli-main-_eval_run)                     | -                                                                                                             |
| [`_merge_config_paths`](#nemo_gym-cli-main-_merge_config_paths) | Coalesce all `+config_paths=[...]` tokens (from --config and asset selectors) into one (Hydra rejects dupes). |
| [`_value_flag`](#nemo_gym-cli-main-_value_flag)                 | A `--name VALUE` flag that maps to the Hydra override `+&lt;hydra_key&gt;=VALUE` (omitted when unset).        |
| [`build_parser`](#nemo_gym-cli-main-build_parser)               | -                                                                                                             |
| [`dispatch`](#nemo_gym-cli-main-dispatch)                       | -                                                                                                             |
| [`main`](#nemo_gym-cli-main-main)                               | -                                                                                                             |

### Data

[`BENCHMARK`](#nemo_gym-cli-main-BENCHMARK)

[`COMMANDS`](#nemo_gym-cli-main-COMMANDS)

[`CONFIG`](#nemo_gym-cli-main-CONFIG)

[`ENVIRONMENT`](#nemo_gym-cli-main-ENVIRONMENT)

[`GROUPS`](#nemo_gym-cli-main-GROUPS)

[`JSON`](#nemo_gym-cli-main-JSON)

[`MODEL`](#nemo_gym-cli-main-MODEL)

[`MODEL_API_KEY`](#nemo_gym-cli-main-MODEL_API_KEY)

[`MODEL_TYPE`](#nemo_gym-cli-main-MODEL_TYPE)

[`MODEL_URL`](#nemo_gym-cli-main-MODEL_URL)

[`QUERY`](#nemo_gym-cli-main-QUERY)

[`RESOURCES_SERVER`](#nemo_gym-cli-main-RESOURCES_SERVER)

[`RESOURCES_SERVER_CONFIG`](#nemo_gym-cli-main-RESOURCES_SERVER_CONFIG)

[`SEARCH_DIR`](#nemo_gym-cli-main-SEARCH_DIR)

[`STORAGE`](#nemo_gym-cli-main-STORAGE)

[`VERSION_TARGET`](#nemo_gym-cli-main-VERSION_TARGET)

[`_ASSETS`](#nemo_gym-cli-main-_ASSETS)

### API

```python
class nemo_gym.cli.main.Command(
    target: str | collections.abc.Callable[[argparse.Namespace, list[str]], None],
    summary: str | None = None,
    flags: tuple[nemo_gym.cli.main.Flag, ...] = tuple()
)
```

Dataclass

```python
class nemo_gym.cli.main.Flag(
    register: collections.abc.Callable[[argparse.ArgumentParser], None],
    translate_to_hydra: collections.abc.Callable[[argparse.Namespace], list[str]] = lambda args: []
)
```

Dataclass

```python
class nemo_gym.cli.main._GymArgumentParser()
```

**Bases:** `ArgumentParser`

ArgumentParser that appends a difflib "did you mean?" hint to invalid-choice errors.

Covers mistyped commands/groups and bad --flag choices (e.g. --storage), since argparse validates all of them
as choices against the registry baked into the parser.

```python
nemo_gym.cli.main._GymArgumentParser.error(
    message: str
) -> None
```

```python
nemo_gym.cli.main._add_leaf(
    subparsers: argparse._SubParsersAction,
    name: str,
    command: nemo_gym.cli.main.Command
) -> None
```

```python
nemo_gym.cli.main._asset_config_path(
    flag: str,
    value: str,
    search_dirs: tuple[str, ...] = ()
) -> str
```

Map a named asset (`name` or `name/flavor`) to its config path.

Searches the Gym install root (`PARENT_DIR` — where the built-in asset trees live in both
editable and wheel installs), then the current working directory (the user's project), then
any user-registered --search-dir roots. Searching `PARENT_DIR` is what lets built-ins resolve
by name from an arbitrary cwd (e.g. a wheel install), not just from inside the repo checkout.

```python
nemo_gym.cli.main._asset_selector(
    flag: str
) -> nemo_gym.cli.main.Flag
```

A `--&lt;flag&gt; NAME` selector that resolves the named asset to a config and adds it to +config\_paths.

```python
nemo_gym.cli.main._bool_flag(
    name: str,
    hydra_key: str,
    flag_help: str
) -> nemo_gym.cli.main.Flag
```

A `--name` store\_true flag that maps to the Hydra override `+&lt;hydra_key&gt;=true` when set.

```python
nemo_gym.cli.main._dataset_download(
    args: argparse.Namespace,
    overrides: list[str]
) -> None
```

```python
nemo_gym.cli.main._dataset_upload(
    args: argparse.Namespace,
    overrides: list[str]
) -> None
```

```python
nemo_gym.cli.main._did_you_mean(
    value: str,
    candidates: collections.abc.Iterable[str]
) -> str
```

A ` Did you mean \`X\`?`fragment for the closest candidate to`value`, or `""\` if none is close enough.

```python
nemo_gym.cli.main._env_test(
    args: argparse.Namespace,
    overrides: list[str]
) -> None
```

```python
nemo_gym.cli.main._eval_run(
    args: argparse.Namespace,
    overrides: list[str]
) -> None
```

```python
nemo_gym.cli.main._merge_config_paths(
    overrides: list[str]
) -> list[str]
```

Coalesce all `+config_paths=[...]` tokens (from --config and asset selectors) into one (Hydra rejects dupes).

```python
nemo_gym.cli.main._value_flag(
    name: str,
    hydra_key: str,
    flag_help: str,
    aliases: tuple[str, ...] = (),
    choices: tuple[str, ...] | None = None
) -> nemo_gym.cli.main.Flag
```

A `--name VALUE` flag that maps to the Hydra override `+&lt;hydra_key&gt;=VALUE` (omitted when unset).

```python
nemo_gym.cli.main.build_parser() -> argparse.ArgumentParser
```

```python
nemo_gym.cli.main.dispatch(
    target: str,
    overrides: list[str]
) -> None
```

```python
nemo_gym.cli.main.main() -> None
```

```python
nemo_gym.cli.main.BENCHMARK = _asset_selector('benchmark')
```

```python
nemo_gym.cli.main.COMMANDS = {'list benchmarks': Command(target='nemo_gym.cli.eval:list_benchmarks', summary=...
```

```python
nemo_gym.cli.main.CONFIG = Flag(register=(lambda p: p.add_argument('--config', action='append', metavar='PA...
```

```python
nemo_gym.cli.main.ENVIRONMENT = _asset_selector('environment')
```

```python
nemo_gym.cli.main.GROUPS = {'list': 'List available components (benchmarks, agents, environments).', 'datas...
```

```python
nemo_gym.cli.main.JSON = _bool_flag('json', 'json', 'Output as JSON for programmatic use.')
```

```python
nemo_gym.cli.main.MODEL = _value_flag('model', 'policy_model_name', 'Model name, HF id, or local checkpoin...
```

```python
nemo_gym.cli.main.MODEL_API_KEY = _value_flag('model-api-key', 'policy_api_key', 'Model server API key.')
```

```python
nemo_gym.cli.main.MODEL_TYPE = _asset_selector('model-type')
```

```python
nemo_gym.cli.main.MODEL_URL = _value_flag('model-url', 'policy_base_url', 'Model server base URL.')
```

```python
nemo_gym.cli.main.QUERY = Flag(register=(lambda p: p.add_argument('query', metavar='QUERY', help='Substrin...
```

```python
nemo_gym.cli.main.RESOURCES_SERVER = Flag(register=(lambda p: p.add_argument('--resources-server', metavar='NAME', he...
```

```python
nemo_gym.cli.main.RESOURCES_SERVER_CONFIG = _asset_selector('resources-server')
```

```python
nemo_gym.cli.main.SEARCH_DIR = Flag(register=(lambda p: p.add_argument('--search-dir', action='append', metavar...
```

```python
nemo_gym.cli.main.STORAGE = Flag(register=(lambda p: p.add_argument('--storage', choices=('hf', 'gitlab'), d...
```

```python
nemo_gym.cli.main.VERSION_TARGET = 'nemo_gym.cli.general:version'
```

```python
nemo_gym.cli.main._ASSETS = {'benchmark': ('benchmarks', '', 'config'), 'environment': ('environments', '', ...
```