Sandbox API

Harbor datapoint

Async Harbor runs, job polling, SSE, and artifacts.

Job flow

Set SANDBOX_GATEWAY_URL once (local default http://localhost:8780):

export SANDBOX_GATEWAY_URL="${SANDBOX_GATEWAY_URL:-http://localhost:8780}"

Enqueue (v2)

Send x-correlation-id on enqueue so the same id appears in logs, worker traces, and Langfuse (trace.id). See Observability.

curl -sS -H "X-Api-Key: dev-local-key" \
  -H "x-correlation-id: my-eval-run-42" \
  -H "Content-Type: application/json" \
  -d '{
    "task_slug": "my-task",
    "metadata": {"task_archive_url": "https://..."},
    "agents": [{
      "name": "a",
      "harbor_agent": "oracle",
      "harbor_extensions": {"agent_env": {"FOO": "bar"}}
    }]
  }' \
  "$SANDBOX_GATEWAY_URL/sandbox/harbor/v2/run/datapoint"

Returns job_id (202). Poll GET /sandbox/harbor/v2/jobs/{job_id}.

Langfuse groups LLM spans under session_id = job_id when tracing is enabled.

SSE events

curl -N -H "X-Api-Key: dev-local-key" \
  "$SANDBOX_GATEWAY_URL/sandbox/harbor/v2/jobs/{job_id}/events"

Artifacts

  • GET .../jobs/{job_id}/artifacts — inventory
  • GET .../jobs/{job_id}/artifacts/archive — presigned archive URL

See Harbor v2 API reference for full schemas.