HarborBackend runs an Osmosis AgentWorkflow or a registered native Harbor agent inside a Harbor trial. Every rollout gets a copied task directory, a task-defined environment, and Harbor-managed agent and verifier phases.
Install and Import
Install the Harbor and rollout-server features:uv must also be on PATH: through v0.3.0rc3 the Harbor extra does not install it, and the backend runs uv build whenever it packages an AgentWorkflow or Grader bundle.
Import the backend from its Harbor submodule:
HarborBackend is not re-exported from osmosis_ai.rollout or osmosis_ai.rollout.backend. Do not install harbor[skypilot]; the managed rollout runtime supplies its compatible SkyPilot SDK.
Choose a Task Mode
task_mode determines who owns the instruction, how the default task is selected, and whether the request prompt reaches the task.
Both modes use Harbor trials and provide the same isolation. Mode selection changes task semantics, not the sandbox technology.
Template Mode
Template mode starts every rollout from one task directory. When the request contains a prompt, the backend copies the task and replacesinstruction.md with the serialized message list before Harbor starts the trial.
instruction.md file is optional for the configured template when every rollout supplies a prompt. Add a placeholder instruction if you also want the directory to pass Harbor’s standalone task validation. A tests/test.sh is optional when the backend supplies an Osmosis Grader.
LocalBackend: one workflow handles changing dataset prompts. Choose it when those prompts need the same isolated operating system, tools, services, or filesystem setup on every rollout.
Dataset Mode
Dataset mode treats each Harbor task as the complete unit of work. The task retains its owninstruction.md, environment, configuration, and verifier.
AgentWorkflow. The task’s verifier normally computes the reward; if tests/test.sh is absent, a configured Osmosis Grader supplies the verifier instead.
Integrate an Existing Harbor Dataset
If a local dataset already works withharbor run, its task directories are the reusable boundary:
1
Keep the task directories
Point
tasks_dir at the local dataset root. Each child must be a Harbor task with task.toml, instruction.md, an environment/, and the verifier files required by that task.2
Choose a supported agent track
Use
agent="terminus-2", "mini-swe-agent", or "oracle" when that registered native agent fits. Otherwise package your agent behavior as an Osmosis AgentWorkflow and pass its class or import path.3
Create the selector dataset
Upload an Osmosis metadata-mode dataset whose
harbor_task_id values match the task directory names. The Platform dataset selects trials; the Harbor task directories remain with the rollout code.4
Run evaluation before training
Confirm that the native verifier emits the
reward channel and that trainable agents produce a usable trajectory before starting training.This path reuses task content, not the complete Harbor job definition.
HarborBackend does not read Harbor JobConfig, dataset filters, attempt counts, arbitrary agent configs, or harbor run CLI flags. Osmosis supplies request scheduling, the model endpoint, callbacks, and rollout identity.Dynamic Task Sources
In either mode, a request can setmetadata["harbor_task"] instead of using the configured default selection:
Pin package references and Git commits for reproducibility. Instruction ownership still follows
task_mode: template mode replaces the fetched task’s instruction, while dataset mode keeps it.
Agent Tracks
agent selects one of two execution tracks:
An
AgentWorkflow project must contain pyproject.toml and an importable Python package, and the task image must support Python. Pass code_dir when the project cannot be inferred, or pass a prebuilt bundle wheel. Keep the task Dockerfile focused on task dependencies; the backend installs the rollout bundle and can preinstall its declared dependencies into the copied image.
Registered native names:
Use
workflow_config with an AgentWorkflow. Use native_agent_kwargs only with a registered native agent. model_name defaults to openai/osmosis-rollout; per-request metadata can override it with harbor_model.
Reward Source and Precedence
Harbor always treats a task-provided verifier as authoritative:
There is no
custom_tests_dir in v0.3. Keep native verifier files under each task’s tests/ directory. A native verifier must write Harbor’s reward channel, normally through /logs/verifier/reward.txt or reward.json with a reward key; the backend does not guess another channel.
Constructor Reference
Prewarming, Capacity, and Cancellation
prewarm() builds task images and runs agent setup before the server accepts traffic. Template mode prewarms its configured task; dataset mode requires the task IDs you want to prewarm.
TrialQueue(n_concurrent=<n>) controls Harbor trial concurrency. max_queue_depth limits waiting rollouts so the server can return HTTP 429 instead of growing an unbounded queue. rollout_status() reports queued, running, grading, or recently finished state; cancel_rollouts() cancels queued or running work by ID, prefix, or all.
Keep TrialQueue at its default RetryConfig(max_retries=0). Queue-level attempt retries are not supported by the backend’s terminal-event contract; resubmit with a new rollout ID instead.
Managed and Self-Hosted Environments
Osmosis Platform Harbor rollouts useEnvironmentType.SKYPILOT. The Platform builds the selected task’s Dockerfile and provides the compatible SkyPilot runtime; you do not build or push an image, configure registry credentials, or select a cluster.
EnvironmentType.DOCKER remains useful in a self-hosted SDK harness with a Docker daemon, but the managed rollout server does not provide that daemon.
Next Steps
Execution Backend Overview
Compare LocalBackend, Harbor template mode, and Harbor dataset mode.
v0.3 Migration
Replace the legacy Harbor constructor and execution model.