Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion skills/harbor-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,8 @@ Key flags: `--tasks-dir / -t` (default: `tasks`), `--registry / -r` (required),
| Backend | CLI value | Description |
|---------|-----------|-------------|
| Docker | `docker` | Default. Local containers |
| Daytona | `daytona` | Cloud sandbox with Docker-in-Docker |
| Daytona | `daytona` | Cloud sandbox with Docker-in-Docker; supports multi-container |
| Islo | `islo` | ISLO microVM cloud sandbox; supports multi-container |
| E2B | `e2b` | E2B cloud sandboxes |
| GKE | `gke` | Google Kubernetes Engine |
| Modal | `modal` | Serverless with GPU support |
Expand Down
3 changes: 3 additions & 0 deletions skills/harbor-task-creator/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ Place any files referenced by `COPY` in the `environment/` directory alongside t

For tasks requiring multiple services (databases, APIs, etc.), add `docker-compose.yaml` to the `environment/` directory. When Harbor detects this file, it switches to "compose mode" and uses `docker compose` to orchestrate all services.

**Cloud provider support:** Multi-container compose mode works with local Docker, **Daytona**, and **Islo**. Modal, E2B, Runloop, and Tensorlake do not support docker-compose — use single-container tasks with those providers, or switch to local Docker, Daytona, or Islo.

**Critical rule: the primary service must be named `main`.**

Harbor hardcodes the service name `main` for all `exec`, `upload`, and `download` operations. If your primary service has a different name, Harbor cannot interact with it. This is not configurable.
Expand Down Expand Up @@ -393,6 +395,7 @@ These are the mistakes that trip up task authors most often:
| Using `rewards.json` | Harbor looks for `reward.json` (singular) | Use `reward.txt` or `reward.json` |
| Missing output file path in instruction | Agent doesn't know where to write results | Explicitly state every file path the tests will check |
| Requesting GPUs on Docker | Runtime error: environment doesn't support GPUs | Use `--environment-type modal` or `gke` for GPU tasks |
| Using docker-compose with unsupported cloud provider | Compose tasks fail on Modal/E2B/Runloop/Tensorlake | Only local Docker, Daytona, and Islo support multi-container; switch providers or use a single-container design |

## Complete Example Walkthroughs

Expand Down
23 changes: 12 additions & 11 deletions skills/harbor-task-creator/references/task-toml-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Parsed into `EnvironmentConfig`. Specifies resource requirements and configurati
### GPU Notes

- Only `ModalEnvironment` and `GKEEnvironment` support GPUs (`supports_gpus = True`).
- `DockerEnvironment`, `DaytonaEnvironment`, `E2BEnvironment`, and `RunloopEnvironment` do NOT support GPUs.
- `DockerEnvironment`, `DaytonaEnvironment`, `IsloEnvironment`, `E2BEnvironment`, and `RunloopEnvironment` do NOT support GPUs.
- If `gpus > 0` and the environment doesn't support GPUs, Harbor raises a `RuntimeError` at startup.
- Modal uses only the first entry from `gpu_types` (it doesn't support multiple GPU type fallbacks). The config is passed as `"{gpu_type}:{count}"` (e.g., `"A100:1"`).
- CLI override: `--override-gpus 1` at trial/job time.
Expand Down Expand Up @@ -187,16 +187,17 @@ env = { DEBUG = "0" }

Harbor supports multiple environment backends, selected at runtime via `--environment-type`:

| Backend | Class | GPUs | Disable Internet | Description |
|---------|-------|------|-----------------|-------------|
| `docker` | `DockerEnvironment` | No | Yes | Local Docker (default) |
| `daytona` | `DaytonaEnvironment` | No | Yes | Cloud sandbox (DinD for multi-container) |
| `gke` | `GKEEnvironment` | Yes | — | Kubernetes |
| `modal` | `ModalEnvironment` | Yes | Yes | Serverless with GPU support |
| `e2b` | `E2BEnvironment` | No | — | E2B cloud sandbox |
| `runloop` | `RunloopEnvironment` | No | — | Runloop sandbox |

Select with `harbor trials start --environment-type modal` (or `docker`, `daytona`, `gke`, etc.).
| Backend | Class | GPUs | Disable Internet | Multi-Container | Description |
|---------|-------|------|-----------------|-----------------|-------------|
| `docker` | `DockerEnvironment` | No | Yes | Yes | Local Docker (default) |
| `daytona` | `DaytonaEnvironment` | No | Yes | Yes | Cloud sandbox (DinD) |
| `islo` | `IsloEnvironment` | No | Yes | Yes | ISLO microVM cloud sandbox |
| `gke` | `GKEEnvironment` | Yes | — | No | Kubernetes |
| `modal` | `ModalEnvironment` | Yes | Yes | No | Serverless with GPU support |
| `e2b` | `E2BEnvironment` | No | — | No | E2B cloud sandbox |
| `runloop` | `RunloopEnvironment` | No | — | No | Runloop sandbox |

Select with `harbor trials start --environment-type modal` (or `docker`, `daytona`, `islo`, `gke`, etc.).

## Reward File Reference

Expand Down