AgentWorkflow runs, how a request becomes an executable task, and where reward computation happens.
osmosis eval submit and osmosis train submit do not take a backend flag. Your rollout entrypoint constructs the backend when the Platform starts its rollout server. You also choose a backend when embedding the open source SDK in a self-hosted harness.Choose a Backend Path
TreatHarborBackend as two distinct paths. Both Harbor modes isolate every rollout in a Harbor trial, but they assign ownership of the instruction differently.
Template mode resembles
LocalBackend only in its input model: one rollout definition processes changing dataset prompts. Its execution model is still Harbor, with a separate task copy and sandboxed trial for every request.Shared Server Contract
All backends receive anExecutionRequest and return an ExecutionOutcome containing the workflow result and optional grader result for that rollout’s single sample. A server created with create_rollout_server() admits rollout requests, serves results to polling callers such as RolloutClient, and performs best-effort ATIF persistence after execution. Calling backend methods directly does not install that server lifecycle.
When the server shuts down, it stops admissions, cancels any rollouts that do not finish in time, and then awaits backend.shutdown(). The default ExecutionBackend.shutdown() does nothing, so existing custom backends keep working. Override it in a custom backend that owns persistent resources, such as sandboxes or worker pools. Your override should try to release every resource and print anything it could not clean up to stdout.
The server reports when each rollout’s agent started as agent_started_at in result responses. By default, it records that time when execute() begins. A custom backend that runs setup work first, such as provisioning a sandbox, can set the class attribute reports_agent_start = True. Once its agent starts, the backend awaits mark_agent_started() with a UTC datetime on the active RolloutContext. Only the first call is recorded. See RolloutClient for how callers use this field.
Backends do not discover workflow, grader, or config objects. The entrypoint selects them explicitly:
Decision Guide
1
Start in process
Use
LocalBackend while developing the workflow and grader. It gives you direct exceptions, breakpoints, and the shortest feedback loop.2
Add one reusable environment
Move to Harbor template mode when every row should run in the same task environment but needs an isolated filesystem, process tree, or dependency set.
3
Preserve authored Harbor tasks
Use Harbor dataset mode when each task already owns its instruction and usually its verifier. This is the closest path for integrating a local Harbor dataset that already works with
harbor run.Backend Guides
LocalBackend
Configure in-process execution, grading, concurrency, artifacts, and errors.
HarborBackend
Configure template or dataset mode, native agents, task verifiers, and sandbox capacity.