OhhO OS · Open Source

The open engine
for any robot.

OhhO OS is the open-source, robot-agnostic engine the whole platform runs on. One runtime controls anything on wheels, legs or wings — with or without ROS — and carries the entire stack from perception to training. It is the engine under every OhhO product, and it is yours to install, self-host and extend.

$ pip install 'ohho-os[base]'
>>> from ohho import Robot
>>> bot = Robot.connect("omnibot") # ROS or no-ROS
v1.0.0

What's in the box

Six adapters, two runtimes, a real agent brain, the record→train→serve loop, a skill market, hardware profiles, and ten CLI commands — 151 tests, Apache-2.0.

Control
6 adapters · 2 runtimes

sim, serial base, bus-servo arm, DDS-native, ROS 2 topics, and composite (base+arm merge). Native runtime or ROS 2 — auto-detects which is available.

Agent
Real agent brain

HarnessBrain wires agent_engine — perceive→reason→act→reflect with LLM tool-calling. Tools built automatically from robot capabilities. ScriptedBrain fallback needs zero deps.

Train
Record → Train → Serve

Recorder captures 9-D state+action to LeRobot v2.0. finetune() delegates to lerobot_engine (smolvla/act/diffusion/openvla). FastAPI server with /predict endpoint.

Skills
Skill market

@skill decorator, ohho market list/run, 4 built-in skills (patrol, wave, stop, status). Capability-gated — a skill that needs manipulation won't run on a base-only robot.

Profiles
Hardware profiles

5 built-in profiles (pi_workstation, jetson_single, workstation_single, mac_dev, edge_cpu). ohho profile detect auto-detects your machine. device="auto" everywhere.

CLI
10 CLI commands

ohho doctor list version connect sim drive agent serve market profile — everything from diagnostics to serving a policy, from one command.

Why OhhO OS

Built differently from the rest

The market is full of robot frameworks and "agentic OS" projects. Here is what sets OhhO OS apart — no asterisks, no lock-in.

ROS optional — never required

Most agentic robot stacks force a choice: go all-in on ROS, or abandon it entirely. OhhO OS runs both ways — a lightweight pure-Python runtime or the full ROS 2 stack — and you switch with a single argument. get_runtime("auto") detects ROS 2 automatically.

Truly robot-agnostic

Write a behavior once and run it on a wheeled base, a quadruped, a humanoid or an arm. Capability-typed commands mean swapping hardware never means rewriting your application.

The whole lifecycle, one engine

Other frameworks stop at control. OhhO OS also carries the agent brain, data collection, training, serving, and skills — the same engine from first prototype to deployed fleet.

Agent-native by design

A continuous perceive → reason → act → reflect loop powered by agent_engine with an LLM tool-calling reasoner. Tools are built automatically from the robot's capabilities. ScriptedBrain fallback needs zero deps.

Training built in

Record demonstrations → fine-tune VLA policies (SmolVLA, ACT, diffusion, OpenVLA) → serve over REST → close the loop. All with device="auto" hardware detection. Mock mode for sim loops — no GPU needed.

Open source, zero lock-in

Apache-2.0 licensed. 151 tests passing. Self-host every line, bring your own models and data, and move to OhhO Cloud only when you want managed GPUs, training and fleet operations.

Choose your runtime

Run with ROS, or without it

OhhO OS ships two runtimes behind one identical API. Pick what fits — and switch later by changing a single argument. Your agent, training and application code never change.

No-ROS (native)
Best for: Getting started · single robot · non-ROS hardware · laptop / edge compute · Windows or macOS
  • Zero setup friction — pip install and go, no ROS distro
  • Lightweight, fast cold start, fewer moving parts
  • Pure Python — no workspaces, colcon or launch files
  • Talks DDS, MAVLink and firmware directly
  • Runs anywhere Python runs
$ pip install 'ohho-os[base]'
ROS 2
Best for: Production autonomy · Nav2 / SLAM / MoveIt · multi-robot or multi-machine · existing ROS fleets · Gazebo / Isaac sim
  • The entire mature ROS ecosystem — Nav2, SLAM, MoveIt 2
  • ros2_control, RViz, and thousands of community packages
  • Battle-tested multi-node / multi-machine over DDS
  • Industry-standard integration with existing fleets
  • The most capable navigation and manipulation stacks
$ pip install 'ohho-os[ros2]'

No wrong choice. Start native today and graduate to ROS 2 later — Robot.connect("omnibot", runtime="ros2") — without touching the rest of your code.

CapabilityNo-ROSROS 2
Installpip install — any OSUbuntu 24.04 + ROS 2 Jazzy
Drive · teleop · telemetryyesyes
Agent (Mind) · Train · Data · Serveyesyes
Direct DDS / MAVLink / firmwarenativevia bridge
Lightweight nav (built-in A*)yesyes
Nav2 full navigationnoyes
SLAM (slam_toolbox / 3-D)basicyes
MoveIt 2 manipulationnoyes
Multi-machine distributionpartialyes (DDS)
ToolingFoxgloveRViz + Foxglove + ecosystem
Footprint / cold startlight / fastheavy
OS supportWindows · macOS · LinuxLinux
Robot-agnostic

One engine, every robot

A capability model describes what a robot can do — not how it does it — so the same code runs across wildly different hardware, degrading gracefully when a capability is absent. Adapters translate each robot's native protocol underneath.

Robot categories
WheeledLeggedHumanoidIndustrial armMobile manipulatorDroneTrackedMarineDeliveryInspectionAgricultural+ more
Protocol adapters
SimulatorSerial baseBus-servo armDDS-nativeROS 2 topicsCompositeMAVLinkCANopenOPC UAPROFINETEtherNet/IPMQTTVDA 5050ModbusEtherCATROSBridgeWeb Serial+ more
The platform

Nineteen products. One engine.

Every OhhO product — from Build and Train to Autonomy, Mind and Fleet — is a console that runs on OhhO OS. Use the open engine on its own, or sign in to OhhO Cloud for the managed, hosted experience on top.

Explore all 19 products →
Get started

From install to a moving robot

  1. 1
    Install

    pip install 'ohho-os[base]' — add [serial], [arm], [unitree], [agent], [train], [serve] or [ros2] as you need them.

  2. 2
    Connect

    Robot.connect("omnibot") auto-detects the runtime, or pass transport="sim://" / "serial://" / "dds://" / "ros2://".

  3. 3
    Control

    bot.drive(vx=0.2), bot.move_joints([...]), bot.telemetry() — same API on any robot. Capability-gated, safe no-ops.

  4. 4
    Automate

    Agent(bot).run("explore the room") — perceive→reason→act→reflect loop with LLM tool-calling.

  5. 5
    Train & Serve

    Recorder → finetune() → ohho serve — record→train→serve loop with mock mode for sim (no GPU needed).

  6. 6
    Skills

    ohho market list / ohho market run omnibot patrol — 4 built-in skills, or write your own with @skill.