- The
subprocessruntime runs rollouts in local Python subprocesses. It is meant for debugging, since processes share your machine and can have side effects on one another (such as altering a harness’s config files). - The
dockerruntime runs rollouts in Docker containers on your local machine. - The
primeruntime runs rollouts in remote Prime sandboxes. It is meant for production workloads like training or high-concurrency evaluation. - A
customruntime loads another provider from your own package, without upstreaming it. See runtime plugins.
subprocess and docker runtimes are for quick local testing without billing, and support fewer features. subprocess refuses tasks that need an image, a network policy, or Compose services. Docker runs Compose services only for trusted tasks, with unrestricted networking. On Linux, an unrestricted Docker container shares the host network. On other platforms, Docker containers reach host services through host.docker.internal. A Docker container with a network policy runs on the bridge network, and its traffic goes through a verifiers proxy that enforces the policy.
The harness runs inside the rollout runtime to interact with the task. Rather than calling the model provider directly, the harness sends model traffic through verifiers’ interception server over a local connection or Prime Tunnel.
The interception server receives these requests and forwards them to the upstream provider using the API surface that the harness expects, such as OpenAI Responses for Codex or Anthropic Messages for Claude Code.
Routing traffic through the interception server enables several things beyond forwarding the provider response:
- Building traces live so trajectories and token usage are recorded as they happen. This also prevents agents tampering with their own traces
- Applying sampling parameters in harnesses that don’t expose those settings directly
- Running the task’s stop and interception hooks to inspect or rewrite tool responses and server-side web search results (for example, to block reward hacks)
Finishing a rollout
When the agent finishes its turn normally, the rollout collects artifacts and runs in-place grading before closing the harness session:task.finalizeruns and declared artifacts are collected, including the main service’s[[verifier.collect]]commands.- When grading runs in the agent’s own runtime (
sharedscoring), the task scores the workspace (task.score, followed byon_score). - The harness session closes, followed by the tool servers and the interception server.
- Harness metrics (
harness.score) run.