> This page is for version 0.4.0.
> 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.models

Pydantic mirror of Harbor's `task.toml` (schema 1.4).

Field names are Harbor's. Deprecated spellings (`version`, `memory`, `storage`,
`allow_internet`) are read and normalized but never written back. Keys
this mirror does not know are ignored, as Harbor ignores them; `HarborSettings.unknown_keys`
lists them so the loader can say so.

## Module Contents

### Classes

| Name                                                                       | Description                                      |
| -------------------------------------------------------------------------- | ------------------------------------------------ |
| [`HarborAgent`](#nemo_gym-tasks-harbor-models-HarborAgent)                 | -                                                |
| [`HarborEnvironment`](#nemo_gym-tasks-harbor-models-HarborEnvironment)     | `[environment]`: the sandbox the agent works in. |
| [`HarborHealthcheck`](#nemo_gym-tasks-harbor-models-HarborHealthcheck)     | -                                                |
| [`HarborMCPServer`](#nemo_gym-tasks-harbor-models-HarborMCPServer)         | -                                                |
| [`HarborPhaseSettings`](#nemo_gym-tasks-harbor-models-HarborPhaseSettings) | -                                                |
| [`HarborSettings`](#nemo_gym-tasks-harbor-models-HarborSettings)           | -                                                |
| [`HarborSolution`](#nemo_gym-tasks-harbor-models-HarborSolution)           | -                                                |
| [`HarborTaskConfig`](#nemo_gym-tasks-harbor-models-HarborTaskConfig)       | One `task.toml`.                                 |
| [`HarborVerifier`](#nemo_gym-tasks-harbor-models-HarborVerifier)           | -                                                |

### Functions

| Name                                                                 | Description |
| -------------------------------------------------------------------- | ----------- |
| [`_nested_settings`](#nemo_gym-tasks-harbor-models-_nested_settings) | -           |
| [`_size_to_mb`](#nemo_gym-tasks-harbor-models-_size_to_mb)           | -           |

### API

```python
class nemo_gym.tasks.harbor.models.HarborAgent()
```

**Bases:** [HarborPhaseSettings](#nemo_gym-tasks-harbor-models-HarborPhaseSettings)

**`timeout_sec`** `float = Field(default=28800, gt=0)`

---

**`user`** `str | int | None = None`

---

```python
class nemo_gym.tasks.harbor.models.HarborEnvironment()
```

**Bases:** [HarborPhaseSettings](#nemo_gym-tasks-harbor-models-HarborPhaseSettings)

`[environment]`: the sandbox the agent works in.

`docker_image` is optional. A task without one builds from
`environment/Dockerfile` or, when that file only names a base image, runs the
base image directly.

**`build_timeout_sec`** `float = Field(default=600, gt=0)`

---

**`cpus`** `int | None = None`

---

**`deprecated_keys`** `frozenset[str] = frozenset({'allow_internet', 'memory', 'storage'})`

---

**`docker_image`** `str | None = None`

---

**`env`** `dict[str, str] = Field(default_factory=dict)`

---

**`gpu_types`** `list[str] | None = None`

---

**`gpus`** `int | None = None`

---

**`healthcheck`** `HarborHealthcheck | None = None`

---

**`mcp_servers`** `list[HarborMCPServer] = Field(default_factory=list)`

---

**`memory_mb`** `int | None = None`

---

**`network_mode`** `Literal['public', 'no-network', 'allowlist'] = 'public'`

---

**`os`** `Literal['linux', 'windows'] = 'linux'`

---

**`skills_dir`** `str | None = None`

---

**`storage_mb`** `int | None = None`

---

**`workdir`** `str | None = None`

---

```python
nemo_gym.tasks.harbor.models.HarborEnvironment.read_deprecated_fields(
    data: typing.Any
) -> typing.Any
```

classmethod

```python
class nemo_gym.tasks.harbor.models.HarborHealthcheck()
```

**Bases:** [HarborSettings](#nemo_gym-tasks-harbor-models-HarborSettings)

**`command`** `str`

---

**`interval_sec`** `float = Field(default=5, ge=0)`

---

**`retries`** `int = Field(default=3, gt=0)`

---

**`start_interval_sec`** `float = Field(default=5, ge=0)`

---

**`start_period_sec`** `float = Field(default=0, ge=0)`

---

**`timeout_sec`** `float = Field(default=30, gt=0)`

---

```python
class nemo_gym.tasks.harbor.models.HarborMCPServer()
```

**Bases:** [HarborSettings](#nemo_gym-tasks-harbor-models-HarborSettings)

**`args`** `list[str] = Field(default_factory=list)`

---

**`command`** `str | None = None`

---

**`name`** `str`

---

**`transport`** `Literal['stdio', 'sse', 'streamable-http'] = 'sse'`

---

**`url`** `str | None = None`

---

```python
nemo_gym.tasks.harbor.models.HarborMCPServer.normalize_transport(
    data: typing.Any
) -> typing.Any
```

classmethod

```python
nemo_gym.tasks.harbor.models.HarborMCPServer.require_endpoint() -> nemo_gym.tasks.harbor.models.HarborMCPServer
```

```python
class nemo_gym.tasks.harbor.models.HarborPhaseSettings()
```

**Bases:** [HarborSettings](#nemo_gym-tasks-harbor-models-HarborSettings)

**`allowed_hosts`** `list[str] | None = None`

---

**`network_mode`** `Literal['public', 'no-network', 'allowlist'] | None = None`

---

```python
class nemo_gym.tasks.harbor.models.HarborSettings()
```

**Bases:** `BaseModel`

**`deprecated_keys`** `frozenset[str] = frozenset()`

---

**`model_config`** `= ConfigDict(extra='ignore', allow_inf_nan=False)`

---

```python
nemo_gym.tasks.harbor.models.HarborSettings.unknown_keys(
    data: typing.Any,
    prefix: str = ''
) -> list[str]
```

classmethod

Dotted paths of the keys in `data` that no field of this model tree declares.

```python
class nemo_gym.tasks.harbor.models.HarborSolution()
```

**Bases:** [HarborSettings](#nemo_gym-tasks-harbor-models-HarborSettings)

**`env`** `dict[str, str] = Field(default_factory=dict)`

---

```python
class nemo_gym.tasks.harbor.HarborTaskConfig()
```

**Bases:** [HarborSettings](#nemo_gym-tasks-harbor-models-HarborSettings)

One `task.toml`.

**`agent`** `HarborAgent = Field(default_factory=HarborAgent)`

---

**`artifacts`** `list[Any] = Field(default_factory=list)`

---

**`deprecated_keys`** `frozenset[str]`

---

**`environment`** `HarborEnvironment = Field(default_factory=HarborEnvironment)`

---

**`is_shared_verifier`** `bool`

Harbor runs the verifier in the agent's container unless a separate one is declared.

---

**`metadata`** `dict[str, Any] = Field(default_factory=dict)`

---

**`schema_version`** `str = '1.4'`

---

**`solution`** `HarborSolution = Field(default_factory=HarborSolution)`

---

**`source`** `str | None = None`

---

**`task`** `dict[str, Any] = Field(default_factory=dict)`

---

**`verifier`** `HarborVerifier = Field(default_factory=HarborVerifier)`

---

```python
nemo_gym.tasks.harbor.HarborTaskConfig.read_deprecated_fields(
    data: typing.Any
) -> typing.Any
```

classmethod

```python
class nemo_gym.tasks.harbor.models.HarborVerifier()
```

**Bases:** [HarborPhaseSettings](#nemo_gym-tasks-harbor-models-HarborPhaseSettings)

**`env`** `dict[str, str] = Field(default_factory=dict)`

---

**`environment`** `HarborEnvironment | None = None`

---

**`environment_mode`** `Literal['separate', 'shared'] | None = None`

---

**`timeout_sec`** `float = Field(default=600, gt=0)`

---

**`user`** `str | int | None = None`

---

```python
nemo_gym.tasks.harbor.models.HarborVerifier.shared_has_no_environment() -> nemo_gym.tasks.harbor.models.HarborVerifier
```

```python
nemo_gym.tasks.harbor.models._nested_settings(
    annotation: typing.Any
) -> type[nemo_gym.tasks.harbor.models.HarborSettings] | None
```

```python
nemo_gym.tasks.harbor.models._size_to_mb(
    raw: str
) -> int
```