> This page is for version 0.5.1.
> For other versions, use one of these documentation indexes:
> - Main (default): https://docs.nvidia.com/nemo/gym/main/llms.txt
> - 0.7.0: https://docs.nvidia.com/nemo/gym/v0.7.0/llms.txt
> - 0.6.0: https://docs.nvidia.com/nemo/gym/v0.6.0/llms.txt
> - 0.5.1: https://docs.nvidia.com/nemo/gym/v0.5.1/llms.txt
> - 0.5.0: https://docs.nvidia.com/nemo/gym/v0.5.0/llms.txt
> - 0.4.0: https://docs.nvidia.com/nemo/gym/v0.4.0/llms.txt
> - 0.3.0: https://docs.nvidia.com/nemo/gym/v0.3.0/llms.txt
> - 0.2.1: https://docs.nvidia.com/nemo/gym/v0.2.1/llms.txt

> 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.tasks.harbor.scaffold

`gym dataset init`: a dataset folder in exactly the shape the loader accepts.

One task, ready to validate and run. Everything written here is read back by the loader in a
test, so the scaffold cannot drift from what `gym eval run` and `gym dataset validate` expect.

## Module Contents

### Functions

| Name                                                                       | Description                                                                                                   |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [`init_dataset`](#nemo_gym-tasks-harbor-scaffold-init_dataset)             | Write `&lt;root&gt;/&lt;name without org&gt;/` with `dataset.toml` and one task folder; refuses to overwrite. |
| [`split_dataset_name`](#nemo_gym-tasks-harbor-scaffold-split_dataset_name) | `org/name` as Harbor 0.22.0 requires it; a bare name gets `DEFAULT_ORG`.                                      |

### Data

[`DATASET_TOML`](#nemo_gym-tasks-harbor-scaffold-DATASET_TOML)

[`DEFAULT_IMAGE`](#nemo_gym-tasks-harbor-scaffold-DEFAULT_IMAGE)

[`DEFAULT_ORG`](#nemo_gym-tasks-harbor-scaffold-DEFAULT_ORG)

[`INSTRUCTION_MD`](#nemo_gym-tasks-harbor-scaffold-INSTRUCTION_MD)

[`SOLVE_SH`](#nemo_gym-tasks-harbor-scaffold-SOLVE_SH)

[`TASK_TOML`](#nemo_gym-tasks-harbor-scaffold-TASK_TOML)

[`TEST_SH`](#nemo_gym-tasks-harbor-scaffold-TEST_SH)

[`_NAME_SEGMENT`](#nemo_gym-tasks-harbor-scaffold-_NAME_SEGMENT)

### API

```python
nemo_gym.tasks.harbor.scaffold.init_dataset(
    root: pathlib.Path,
    name: str,
    image: str = DEFAULT_IMAGE,
    task: str = 'hello'
) -> pathlib.Path
```

Write `&lt;root&gt;/&lt;name without org&gt;/` with `dataset.toml` and one task folder; refuses to overwrite.

`name` is `org/name` or a bare name, which is written as `local/&lt;name&gt;` so that Harbor accepts the
manifest. The folder is the name without the org, as `harbor task init` does for a task.

```python
nemo_gym.tasks.harbor.scaffold.split_dataset_name(
    name: str
) -> tuple[str, str]
```

`org/name` as Harbor 0.22.0 requires it; a bare name gets `DEFAULT_ORG`.

Raises `ValueError` for a name Harbor's manifest would reject, so nothing is written for it.

```python
nemo_gym.tasks.harbor.scaffold.DATASET_TOML = '# Harbor\'s dataset file. The [dataset] table is Harbor\'s; the [gym] table is ...
```

```python
nemo_gym.tasks.harbor.scaffold.DEFAULT_IMAGE = 'python:3.12-slim'
```

```python
nemo_gym.tasks.harbor.scaffold.DEFAULT_ORG = 'local'
```

```python
nemo_gym.tasks.harbor.scaffold.INSTRUCTION_MD = 'Create a file called `hello.txt` in the working directory containing the single...
```

```python
nemo_gym.tasks.harbor.scaffold.SOLVE_SH = '#!/bin/bash\n# The reference solution `gym dataset validate` runs; it must scor...
```

```python
nemo_gym.tasks.harbor.scaffold.TASK_TOML = 'schema_version = "1.4"\n\n[task]\nname = "{org}/{task}"\n\n[environment]\ndocke...
```

```python
nemo_gym.tasks.harbor.scaffold.TEST_SH = '#!/bin/bash\n# Harbor\'s verifier contract: write the reward to /logs/verifier/...
```

```python
nemo_gym.tasks.harbor.scaffold._NAME_SEGMENT = re.compile('^[a-zA-Z0-9][a-zA-Z0-9._-]*$')
```