OpenRange does not provide a gymnasium-style step / reset / observation / reward loop. The domain is arbitrary, so the API the agent talks to is the world's own surface — HTTP, MCP, a shell, a file path, a simulator's step function. The pack decides what that surface is, based on the manifest.
What OpenRange provides is the lifecycle around that surface, inspired by SkyRL-Agent:
- build — admission produces a frozen
Snapshotfrom manifest + pack. In a run,OpenRangeRunowns the dashboard event sink so pack loading, world generation, admission verdicts, and snapshot creation are visible while the build runs. See main doc. - snapshot — the world is brought to a known initial state for an episode from the admitted snapshot via
Pack.realize(graph, backing) -> RuntimeHandle. - get tasks — the harness reads
snapshot.tasksfor instructions, entrypoints, and goal nodes. See Task. - run — the agent acts through the entrypoints. OpenRange does not mediate the agent loop, but environment-owned runtimes can record public-interface evidence (e.g. HTTP access logs) and emit environment events for the dashboard. Episode termination is either agent stop (harness) or success event (world).
- check_success — the TaskFamily reads the realizer's final state (whatever
RuntimeHandle.collect()returned) against the world graph + task and returns a structuredEpisodeResult. See Episode checks and rewards. - report — outcome, lineage, final state, and environment-owned actor turns are available to the dashboard.
The harness owns the agent loop. OpenRange owns build, reset, success detection, structured result, and report. There is no observation API and no reward API; the agent interacts with the task-specific surface materialized by the pack's RuntimeHandle.