Catalog and agents
Tier 1 curated catalog, Harbor factory breadth, and enforcement modes.
Tier 1 — Curated catalog
GET /sandbox/v1/catalog?kind=agent returns YAML-backed agents in infra/catalog/agents/.
Agent Runtime (POST /sandbox/agent/v1/runs) is always strict: unknown agent_id → 400.
Tier 2 — Harbor factory
GET /sandbox/agent/v1/agents returns catalog entries plus Harbor AgentFactory agents. Each item has source: catalog | harbor_factory.
Harbor datapoint uses SANDBOX_CATALOG_ENFORCE_AGENTS:
| Mode | Harbor datapoint | Agent Runtime |
|---|---|---|
strict | Unknown agent → 400 | strict |
warn (prod default) | Unknown catalog agent allowed if factory knows it | strict |
off | No catalog check | strict |
Tier 3 — harbor_extensions
Power-user passthrough on datapoint agent blocks and Agent Runtime bodies. The platform maps these fields to Harbor CLI flags on the worker — consumers do not invoke harbor run directly.
| JSON field | Harbor CLI | Purpose |
|---|---|---|
agent_env | --ae KEY=VAL | Per-agent environment (OpenCode, oracle, etc.) |
sandbox | -e <env> | Sandbox driver hint: docker, daytona, k8s, … |
n_concurrent | -n | Concurrent trials |
custom_agent_import | --custom-agent-import | Import path for custom Harbor agents |
agent_kwargs / agents[].params | --ak key=value | Agent constructor kwargs (params + extensions; extensions win) |
opencode_agent | (not Harbor CLI) | OpenCode default_agent in opencode.json (plan | build) when agent is opencode |
opencode_config | (not Harbor CLI) | Deep-merge into opencode.json (e.g. agent.review.mode=subagent) — see Harbor and OpenCode flags |
Top-level datapoint field sandbox (same values) selects the Harbor environment when not nested under harbor_extensions.
Daytona example (worker must have DAYTONA_API_KEY):
{
"task_slug": "my-task",
"sandbox": "daytona",
"agents": [{ "name": "a", "harbor_agent": "oracle" }]
}Full flag matrix + OpenCode Plan/Build: Harbor and OpenCode flags.
See Agent Runtime and Harbor datapoint.
Recommended default
opencode is the platform default for ad-hoc agent runs when no product-specific agent is required.