Wrong assumptions
Open VLAs expect continuous joints and standard datasets. TonyPi has action groups and a gripper. Nothing fits out of the box.
[ docs ]
~/bruhos $ ./wake --body tonypi --lang en
The skill OS that stands next to the robot.
It hears you, runs skills, gets back up, and leaves a trace.
open brains in → skills out → control stays on the body
NVIDIA · LeRobot · open VLMs plug in as planners & data engines
The missing piece isn't another model. GR00T, Cosmos, Isaac Lab, LeRobot, openpi, Qwen-VL — the brains are already open. They plan, simulate, emit action chunks. Meanwhile the TonyPi side is loose action groups, cloud chat, and demos nobody can reproduce.
Two ends that don't connect. Three kinds of waste:
Open VLAs expect continuous joints and standard datasets. TonyPi has action groups and a gripper. Nothing fits out of the box.
Big models can't run on a Pi 5. From the cloud, they hallucinate servos. Either way the body gets hurt.
A successful run leaves no standard trajectory. No eval, no LeRobot re-ingest, no chain. The data dies at the terminal.
bruhOS plugs the brains that are already open into this body — without rewriting their training code. Runtime owns observation, skills, recovery, trace. The Brain is swappable. The body interface never changes.
EN-first ASR / TTS / prompts. Short commands, no mixed-language guessing on the hot path.
Pluggable adapters: OpenAI-compatible API, local Qwen-VL on vLLM, LeRobot policy svc, GR00T System 2. Same schema in, skill calls out.
observe · dispatch · recover · trace. Compressed observation JSON, whitelisted skills only. stop never waits on a cloud or a block.
TonyPi action groups run the skill. Every run writes a LeRobot-aligned, hashable trace — sim and real share one schema.
open models must emit this schema. the runtime is never rewritten to fit a checkpoint's action dims.
every open model gets its own throwaway demo
one skill JSON + one observation schema
the model drives servos → hallucination → the robot eats floor
whitelisted skills only, nothing else moves
raw video shoved into an LLM while the body is still moving
observation compressed on-body, then decided
a fall means the task is dead
recover, then finish the job
mixed-language ASR chaos
EN-first speech, end to end
execution ends as a video clip
LeRobot-compatible trace — simulate it, hash it, chain it
none of this runs on a Pi. workstation / cluster side — where it belongs.
Non-negotiable. Every task writes instruction, skills, observations, outcome.
Schema aligned now, packaged next — community training tools eat it directly.
Synthetic failure cases augment real-hardware acceptance. Never replace it.
On-chain goes trace_root + version hashes of models and skill packs. Not video. Never control.
The control loop never blocks on block production or Cosmos inference. stop goes through the Runtime — and only the Runtime.
TonyPi + Qwen-VL / API brains, LeRobot schema, local trace. Ships with a 20-prompt real-hardware eval — completion rate is reported, not vibed.
TONYPI · QWEN-VL · TRACEIsaac Lab regression on the same 20 prompts. Cosmos fills the failure data. GR00T S2 adapter goes live as an option.
ISAAC LAB · COSMOS · GR00T S2Two machines: TonyPi runs skills, the arm runs π0.5 / SmolVLA. ChainSink can be switched on.
DUAL BODY · π0.5 · CHAINSINKJetson-class compute first, then on-device VLA talk. Still no GR00T full-body action head on a Pi 5. Ever.
JETSON · APXINFruns like
your bruhhh.
bruhOS exists because open brains have nowhere to stand on a real body. It plugs NVIDIA, LeRobot, and open VLMs into TonyPi as planners and data engines — while the robot itself only runs skills, speaks English, gets back up, and leaves a trace.