Runs one Harbor task on its own EC2 box with full observability: everything about the trial lands in S3 for post-mortem analysis. The box deletes itself.
uv, the AWS CLI v2 andssh.- AWS credentials that can launch EC2 boxes (one-time setup in ec2/) and either call
sts:GetFederationTokenor take on a role that can write your bucket. - An OpenAI-compatible endpoint the box can reach. To reach a model on a private machine, put it on your tailnet with tailscale_relay.
./run examples/tasks/hello examples/run_configs/oracle.toml # prints <trial-id> <ip> <record-url>Copy a file from examples/run_configs/ to write your own; its comments explain every field.
RECORD_ROLE=<role-arn>: if only a role can write your bucket.TS_AUTHKEY=<key>: if the endpoint is only on your tailnet.
source ec2/env.sh && ssh "${SSH_OPTS[@]}" root@<ip> journalctl -fu trial # follow the trial
bash ec2/terminate_one.sh <ip> # stop it early; its record is lost<record>/<trial-id>/
├── spec.json the run config, plus the trial id, task name and launch time
├── task/ the task as it ran
├── runner/ the box scripts that ran it
├── harbor/ Harbor's trial folder: result.json (the reward), agent/, verifier/, trial.log
├── model_calls/ every model call, one file per call, written as it happens
├── services/ each container's output and settings, the images, each image build's log
├── box/ the machine: facts, usage every second, kernel log; steps/ has each step's log
└── upload.json every file uploaded and its size; written last, so it marks the record complete