Open-source package and runtime tooling for robot policies.
A policy is a trained, packaged, and published software program.
Researchers use runrobot to:
- package a policy with
policy.yaml,robot.yaml,scene.yaml, and a validator - validate the package locally
- run the same package in the browser, in simulation, and on a robot
- publish the exact package to RunRobot Cloud or an on-prem deployment of RunRobot Cloud
Developers use RunRobot Cloud SDKs and APIs to:
- build public browser run URLs for published policies
- publish scenes, robots, and policy artifacts
- automate hosted workflows such as SceneGen, arena, and leaderboard reads
It is too hard to ship robot policies.
Training stacks vary. Export formats vary. Runtime assumptions vary. Robot control semantics vary. Scene assumptions vary.
Observation order is often hidden in code. Joint ordering is often hidden in adapters. Reset behavior is often hidden in launch scripts. Control conversion is often hidden in robot-specific wrappers.
A browser demo is one system. Headless evaluation is another system. Hardware deployment is another system. They drift apart.
Preference data is hard to trust when it is not attached to the exact packaged policy that a human saw.
Most robotics teams still integrate one policy at a time. That does not scale.
runrobot is meant to fix that boundary. You should add runtimes rarely. You should add policies constantly.
The intended package layout is simple:
my-policy/
policy.yaml
robot.yaml
scene.yaml
validator.py
policy.yaml defines the policy runtime contract:
- runtime kind and version
- model locations
- optional auxiliary models
- observation term order, history, scaling, and clipping
- action decoding
- command schema
- latency and warmup expectations
- reset expectations
robot.yaml defines the robot contract:
- MuJoCo model and assets
- actuator semantics
- joint ordering
- sensors
- body names
- default pose
- camera mounts
- control conversion rules such as
joint_position_pdordirect_torque
scene.yaml defines the scene contract:
- MuJoCo XML path
- asset bundle
- randomization knobs
- spawn and reset rules
- deterministic seed inputs
The validator checks that the package is conformant before it reaches shared evaluation or deployment surfaces.
The target workflow is:
- Train a policy with any stack you want.
- Export into the runrobot package contract.
- Validate the package locally.
- Run the package locally in the browser.
- Publish the exact package to RunRobot Cloud or an on-prem deployment of RunRobot Cloud.
- Collect human preference data on that exact packaged policy when it runs on the platform.
policy.yaml
apiVersion: runrobot/v1alpha1
kind: Policy
metadata:
name: g1-walk
title: G1 Walk
runtime:
kind: browser.mujoco.onnx
version: "1"
adapter: onnx_metadata_v1
refs:
robot: ./robot.yaml
scene: ./scene.yaml
models:
policy: ./artifacts/policy.onnx
command:
schema: velocity_command_v1
fields: [lin_vel_x, lin_vel_y, ang_vel_z]robot.yaml
apiVersion: runrobot/v1alpha1
kind: Robot
metadata:
name: unitree-g1
title: Unitree G1
robot:
key: unitree/G1
control:
conversion: joint_position_pdscene.yaml
apiVersion: runrobot/v1alpha1
kind: Scene
metadata:
name: flat-ground
title: Flat Ground
mujoco:
xml: ./scenes/flat.xml
assetBundle: ./scenes/assetsrunrobot is the open-source package and runtime layer.
This repo is for:
- the package contract
- local validation
- reference browser and simulation runtimes
- package-level compatibility checks
- the path from local package to hosted preference collection on the RunRobot platform
This repo is not the hosted control plane.
runrobot-cloud is the canonical hosted production system.
It owns:
- hosted dashboards
- hosted APIs
- session serving
- public URL hosting
- arena orchestration
- production preference data storage
- vote filtering and ranking
- anti-abuse and anti-cheat systems
- private backend infrastructure
If you want the developer upload client for hosted RunRobot Cloud, use the JS or Python runrobot SDK that lives with the cloud product. This repo does not currently ship that SDK.
Human preference data collection is only supported when a packaged policy is running on RunRobot Cloud or an on-prem deployment of RunRobot Cloud.
Install:
pnpm installRun locally:
pnpm dev --port 3200Build:
pnpm buildChase Brignac
