OhhO OS · Open Source

The open engine
for any robot.

OhhO OS 1.1.2 is ohho-os on PyPI. Engine: ohho-os. Client SDK: ohho-sdk. First robot: OmniBot, in simulation. There is no hosted service.

pip install ohho-os ohho doctor ohho sim --robot omnibot --seconds 2

Concept render — not footage of OmniBot

1.1.2

What's in the box

Six adapters, two runtimes, a real agent brain, the record→train→serve loop, a skill-registry prototype, hardware profiles, and the checked CLI commands. 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.

OmniBot today · roadmap for other robots

OmniBot is supported today with capability-typed commands. Adding future form factors — quadrupeds, humanoids, or other arms on the roadmap — 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 — one unified engine across your development lifecycle.

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. The package is ohho-os on PyPI. There is no hosted service.

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
  • ▸pip install ohho-os from PyPI
  • ▸Lightweight, fast cold start, fewer moving parts
  • ▸Pure Python — no workspaces, colcon or launch files
  • ▸Yahboom serial and ROS 2 topics; other protocols are roadmap
  • ▸Runs anywhere Python runs
$ pip install ohho-os
ROS 2
Best for: Nav2 / SLAM / MoveIt when you already run ROS 2. Works today: the public Gazebo lab world. Multi-machine and Isaac Sim are not built.
  • ▸The entire mature ROS ecosystem — Nav2, SLAM, MoveIt 2
  • ▸ros2_control, RViz, and thousands of community packages
  • ▸Multi-machine distribution is not built
  • ▸Simulation today is the public Gazebo lab world. Isaac Sim is not built.
  • ▸The most capable navigation and manipulation stacks
$ pip install ohho-os — the ros2 extra was not part of the checked install

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 ohho-ospip install ohho-os
Drive · teleop · telemetryyesyes
Agent (Mind) · Train · Data · Serveyesyes
DDS / MAVLinkroadmaproadmap
Lightweight nav (built-in A*)yesyes
Nav2 full navigationnoyes
SLAM (slam_toolbox / 3-D)basicyes
MoveIt 2 manipulationnoyes
Multi-machine distributionnot builtnot built
Simulationpublic Gazebo lab worldpublic Gazebo lab world; Isaac not built
ToolingFoxgloveRViz + Foxglove + ecosystem
Footprint / cold startlight / fastheavy
OS supportWindows · macOS · LinuxLinux
Roadmap

OmniBot today. More robots on the roadmap.

A capability model describes what a robot can do — not how it does it. OmniBot is supported today; other robot form factors and native protocol adapters are on the roadmap.

Robots with code today (C080)
Today: OmniBot mecanum base + SO-101 arm
Transports with code (C079)
ROS 2 topicsROSBridgeWeb SerialYahboom serial
Roadmap transports
Web Bluetooth (demo, source not public)DDS (experimental)MAVLinkCANopenOPC UAPROFINETEtherNet/IPMQTTVDA 5050ModbusEtherCAT
The platform

One engine. OmniBot today.

The engine does not power twenty shipped products. It drives OmniBot. The other product pages are prototypes or roadmap. There is no hosted service.

Read the product pages →
Get started

From install to a moving robot

  1. 1
    Install

    pip install ohho-os. The package is on PyPI. Engine: github.com/ohho-robotics/ohho-os. Client SDK: github.com/ohho-robotics/ohho-sdk. There is no ohho-os[base] extra.

  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.