> 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.environment.scaffold

Generate manifest-backed environment and benchmark skeletons.

## Module Contents

### Classes

| Name                                                                            | Description                                      |
| ------------------------------------------------------------------------------- | ------------------------------------------------ |
| [`ScaffoldConflictError`](#nemo_gym-environment-scaffold-ScaffoldConflictError) | Generated files would replace different content. |
| [`ScaffoldError`](#nemo_gym-environment-scaffold-ScaffoldError)                 | A scaffold request cannot be completed safely.   |
| [`ScaffoldResult`](#nemo_gym-environment-scaffold-ScaffoldResult)               | Files handled by a scaffold operation.           |
| [`_Composition`](#nemo_gym-environment-scaffold-_Composition)                   | -                                                |
| [`_ReusedVerifier`](#nemo_gym-environment-scaffold-_ReusedVerifier)             | -                                                |

### Functions

| Name                                                                                                        | Description                                                     |
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| [`_agent_app`](#nemo_gym-environment-scaffold-_agent_app)                                                   | -                                                               |
| [`_agent_files`](#nemo_gym-environment-scaffold-_agent_files)                                               | -                                                               |
| [`_asset_config`](#nemo_gym-environment-scaffold-_asset_config)                                             | -                                                               |
| [`_asset_readme`](#nemo_gym-environment-scaffold-_asset_readme)                                             | -                                                               |
| [`_benchmark_prepare`](#nemo_gym-environment-scaffold-_benchmark_prepare)                                   | -                                                               |
| [`_benchmark_prompt`](#nemo_gym-environment-scaffold-_benchmark_prompt)                                     | -                                                               |
| [`_class_name`](#nemo_gym-environment-scaffold-_class_name)                                                 | -                                                               |
| [`_composition`](#nemo_gym-environment-scaffold-_composition)                                               | -                                                               |
| [`_environment_example`](#nemo_gym-environment-scaffold-_environment_example)                               | -                                                               |
| [`_gym_checkout_root`](#nemo_gym-environment-scaffold-_gym_checkout_root)                                   | -                                                               |
| [`_license_header`](#nemo_gym-environment-scaffold-_license_header)                                         | -                                                               |
| [`_manifest`](#nemo_gym-environment-scaffold-_manifest)                                                     | -                                                               |
| [`_manifest_resources_server_config`](#nemo_gym-environment-scaffold-_manifest_resources_server_config)     | -                                                               |
| [`_parse_kind`](#nemo_gym-environment-scaffold-_parse_kind)                                                 | -                                                               |
| [`_parse_profile`](#nemo_gym-environment-scaffold-_parse_profile)                                           | -                                                               |
| [`_render_manifest_composition`](#nemo_gym-environment-scaffold-_render_manifest_composition)               | -                                                               |
| [`_require_fixture_export`](#nemo_gym-environment-scaffold-_require_fixture_export)                         | -                                                               |
| [`_requirements`](#nemo_gym-environment-scaffold-_requirements)                                             | -                                                               |
| [`_resolve_reused_verifier`](#nemo_gym-environment-scaffold-_resolve_reused_verifier)                       | -                                                               |
| [`_resolve_root`](#nemo_gym-environment-scaffold-_resolve_root)                                             | -                                                               |
| [`_resource_component_files`](#nemo_gym-environment-scaffold-_resource_component_files)                     | -                                                               |
| [`_resources_server_app`](#nemo_gym-environment-scaffold-_resources_server_app)                             | -                                                               |
| [`_resources_server_test`](#nemo_gym-environment-scaffold-_resources_server_test)                           | -                                                               |
| [`_rollout_driver`](#nemo_gym-environment-scaffold-_rollout_driver)                                         | -                                                               |
| [`_server_entries`](#nemo_gym-environment-scaffold-_server_entries)                                         | -                                                               |
| [`_standalone_data_gitignore`](#nemo_gym-environment-scaffold-_standalone_data_gitignore)                   | -                                                               |
| [`_standalone_resources_server_config`](#nemo_gym-environment-scaffold-_standalone_resources_server_config) | -                                                               |
| [`_standalone_resources_server_files`](#nemo_gym-environment-scaffold-_standalone_resources_server_files)   | -                                                               |
| [`_standalone_resources_server_readme`](#nemo_gym-environment-scaffold-_standalone_resources_server_readme) | -                                                               |
| [`_validate_name`](#nemo_gym-environment-scaffold-_validate_name)                                           | -                                                               |
| [`_validate_target`](#nemo_gym-environment-scaffold-_validate_target)                                       | -                                                               |
| [`_verifier_cases`](#nemo_gym-environment-scaffold-_verifier_cases)                                         | -                                                               |
| [`_write_files`](#nemo_gym-environment-scaffold-_write_files)                                               | -                                                               |
| [`scaffold_environment`](#nemo_gym-environment-scaffold-scaffold_environment)                               | Create a profile-aware skeleton without replacing user content. |
| [`scaffold_resources_server`](#nemo_gym-environment-scaffold-scaffold_resources_server)                     | Create a standalone resources-server scaffold.                  |

### Data

[`_NAME_PATTERN`](#nemo_gym-environment-scaffold-_NAME_PATTERN)

[`_TODO`](#nemo_gym-environment-scaffold-_TODO)

[`__all__`](#nemo_gym-environment-scaffold-__all__)

### API

```python
class nemo_gym.environment.scaffold.ScaffoldConflictError(
    paths: tuple[pathlib.Path, ...]
)
```

**Bases:** [ScaffoldError](#nemo_gym-environment-scaffold-ScaffoldError)

Generated files would replace different content.

```python
class nemo_gym.environment.scaffold.ScaffoldError()
```

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

A scaffold request cannot be completed safely.

```python
class nemo_gym.environment.scaffold.ScaffoldResult(
    asset_dir: pathlib.Path,
    created: tuple[pathlib.Path, ...],
    existing: tuple[pathlib.Path, ...]
)
```

Dataclass

Files handled by a scaffold operation.

**`asset_dir`** `Path`

---

**`created`** `tuple[Path, ...]`

---

**`existing`** `tuple[Path, ...]`

---

```python
class nemo_gym.environment.scaffold._Composition(
    kind: nemo_gym.environment.manifest.EnvironmentKind,
    name: str,
    profile: nemo_gym.environment.manifest.IntegrationProfile,
    module_name: str,
    asset_dir: pathlib.Path,
    resource_implementation: str,
    resource_instance: str,
    agent_implementation: str,
    agent_instance: str,
    dataset: nemo_gym.environment.manifest.ManifestDataset,
    reward: nemo_gym.environment.manifest.Reward,
    config_reference: str,
    prompt_path: str | None,
    rollout_driver: str | None,
    reused_verifier: nemo_gym.environment.scaffold._ReusedVerifier | None
)
```

Dataclass

**`agent_implementation`** `str`

---

**`agent_instance`** `str`

---

**`asset_dir`** `Path`

---

**`config_reference`** `str`

---

**`dataset`** `ManifestDataset`

---

**`kind`** `EnvironmentKind`

---

**`module_name`** `str`

---

**`name`** `str`

---

**`profile`** `IntegrationProfile`

---

**`prompt_path`** `str | None`

---

**`resource_implementation`** `str`

---

**`resource_instance`** `str`

---

**`reused_verifier`** `_ReusedVerifier | None`

---

**`reward`** `Reward`

---

**`rollout_driver`** `str | None`

---

```python
class nemo_gym.environment.scaffold._ReusedVerifier(
    selector: str,
    config_reference: str,
    resource_instance: str,
    agent_instance: str | None
)
```

Dataclass

**`agent_instance`** `str | None`

---

**`config_reference`** `str`

---

**`resource_instance`** `str`

---

**`selector`** `str`

---

```python
nemo_gym.environment.scaffold._agent_app(
    module_name: str,
    profile: nemo_gym.environment.manifest.IntegrationProfile
) -> str
```

```python
nemo_gym.environment.scaffold._agent_files(
    root: pathlib.Path,
    directory: pathlib.Path,
    composition: nemo_gym.environment.scaffold._Composition
) -> dict[pathlib.Path, str]
```

```python
nemo_gym.environment.scaffold._asset_config(
    composition: nemo_gym.environment.scaffold._Composition
) -> str
```

```python
nemo_gym.environment.scaffold._asset_readme(
    composition: nemo_gym.environment.scaffold._Composition
) -> str
```

```python
nemo_gym.environment.scaffold._benchmark_prepare(
    name: str
) -> str
```

```python
nemo_gym.environment.scaffold._benchmark_prompt() -> str
```

```python
nemo_gym.environment.scaffold._class_name(
    module_name: str
) -> str
```

```python
nemo_gym.environment.scaffold._composition(
    root: pathlib.Path,
    kind: nemo_gym.environment.manifest.EnvironmentKind,
    name: str,
    profile: nemo_gym.environment.manifest.IntegrationProfile,
    reused: nemo_gym.environment.scaffold._ReusedVerifier | None,
    reward: nemo_gym.environment.manifest.Reward
) -> nemo_gym.environment.scaffold._Composition
```

```python
nemo_gym.environment.scaffold._environment_example(
    agent_instance: str
) -> str
```

```python
nemo_gym.environment.scaffold._gym_checkout_root(
    root: pathlib.Path
) -> pathlib.Path | None
```

```python
nemo_gym.environment.scaffold._license_header() -> str
```

```python
nemo_gym.environment.scaffold._manifest(
    composition: nemo_gym.environment.scaffold._Composition
) -> nemo_gym.environment.manifest.EnvironmentManifest
```

```python
nemo_gym.environment.scaffold._manifest_resources_server_config(
    composition: nemo_gym.environment.scaffold._Composition
) -> str
```

```python
nemo_gym.environment.scaffold._parse_kind(
    value: nemo_gym.environment.manifest.EnvironmentKind | str
) -> nemo_gym.environment.manifest.EnvironmentKind
```

```python
nemo_gym.environment.scaffold._parse_profile(
    value: nemo_gym.environment.manifest.IntegrationProfile | str
) -> nemo_gym.environment.manifest.IntegrationProfile
```

```python
nemo_gym.environment.scaffold._render_manifest_composition(
    root: pathlib.Path,
    composition: nemo_gym.environment.scaffold._Composition
) -> dict[pathlib.Path, str]
```

```python
nemo_gym.environment.scaffold._require_fixture_export(
    app_path: pathlib.Path,
    selector: str
) -> None
```

```python
nemo_gym.environment.scaffold._requirements(
    directory: pathlib.Path,
    checkout_root: pathlib.Path | None
) -> str
```

```python
nemo_gym.environment.scaffold._resolve_reused_verifier(
    root: pathlib.Path,
    selector: str
) -> nemo_gym.environment.scaffold._ReusedVerifier
```

```python
nemo_gym.environment.scaffold._resolve_root(
    root: str | pathlib.Path | None
) -> pathlib.Path
```

```python
nemo_gym.environment.scaffold._resource_component_files(
    directory: pathlib.Path,
    module_name: str,
    config: str,
    readme: str,
    requirements: str
) -> dict[pathlib.Path, str]
```

```python
nemo_gym.environment.scaffold._resources_server_app(
    module_name: str
) -> str
```

```python
nemo_gym.environment.scaffold._resources_server_test() -> str
```

```python
nemo_gym.environment.scaffold._rollout_driver() -> str
```

```python
nemo_gym.environment.scaffold._server_entries(
    raw: typing.Mapping[str, typing.Any],
    server_type: str
) -> list[tuple[str, str, typing.Mapping[str, typing.Any]]]
```

```python
nemo_gym.environment.scaffold._standalone_data_gitignore() -> str
```

```python
nemo_gym.environment.scaffold._standalone_resources_server_config(
    module_name: str
) -> str
```

```python
nemo_gym.environment.scaffold._standalone_resources_server_files(
    directory: pathlib.Path,
    module_name: str,
    checkout_root: pathlib.Path | None
) -> dict[pathlib.Path, str]
```

```python
nemo_gym.environment.scaffold._standalone_resources_server_readme() -> str
```

```python
nemo_gym.environment.scaffold._validate_name(
    name: str,
    requires_python_module: bool
) -> None
```

```python
nemo_gym.environment.scaffold._validate_target(
    root: pathlib.Path,
    path: pathlib.Path
) -> None
```

```python
nemo_gym.environment.scaffold._verifier_cases() -> str
```

```python
nemo_gym.environment.scaffold._write_files(
    root: pathlib.Path,
    asset_dir: pathlib.Path,
    files: typing.Mapping[pathlib.Path, str]
) -> nemo_gym.environment.scaffold.ScaffoldResult
```

```python
nemo_gym.environment.scaffold.scaffold_environment(
    kind: nemo_gym.environment.manifest.EnvironmentKind | str,
    name: str,
    profile: nemo_gym.environment.manifest.IntegrationProfile | str = IntegrationProfile.CUSTOM_G...,
    reuse_verifier: str | None = None,
    reward_range: tuple[float, float] | None = None,
    higher_is_better: bool | None = None,
    root: str | pathlib.Path | None = None
) -> nemo_gym.environment.scaffold.ScaffoldResult
```

Create a profile-aware skeleton without replacing user content.

Profiles select authoring extension points only. The generated `config.yaml`
remains the sole source of runtime wiring. Custom-loop templates delegate to
default behavior until their generated extension point is replaced.

```python
nemo_gym.environment.scaffold.scaffold_resources_server(
    directory: str | pathlib.Path,
    checkout_root: str | pathlib.Path | None = None
) -> nemo_gym.environment.scaffold.ScaffoldResult
```

Create a standalone resources-server scaffold.

```python
nemo_gym.environment.scaffold._NAME_PATTERN = re.compile('^[a-z0-9][a-z0-9._-]*$')
```

```python
nemo_gym.environment.scaffold._TODO = 'TODO'
```

```python
nemo_gym.environment.scaffold.__all__ = ['ScaffoldConflictError', 'ScaffoldError', 'ScaffoldResult', 'scaffold_environme...
```