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— inventoryGET .../jobs/{job_id}/artifacts/archive— presigned archive URL
See Harbor v2 API reference for full schemas.