[ docs ]

~/bruhos $ ./wake --body tonypi --lang en

bruhOS

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

STATE: WALKING GAIT 1.4Hz · IMU OK · SKILL walk_toward BODY: TONYPI · RUNTIME: PI-5
failure is a first-class citizen — watch him fall → stand_up() → keep going
/01

Open brains have nowhere to stand on a real body.

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:

01

Wrong assumptions

Open VLAs expect continuous joints and standard datasets. TonyPi has action groups and a gripper. Nothing fits out of the box.

02

Wrong altitude

Big models can't run on a Pi 5. From the cloud, they hallucinate servos. Either way the body gets hurt.

03

Wrong ending

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.

/02

One command through the loop.
Zero hallucinated servos.

"Put the red one in the box."
EARS

English in

EN-first ASR / TTS / prompts. Short commands, no mixed-language guessing on the hot path.

BRAIN — off the loop

Plans, only plans

Pluggable adapters: OpenAI-compatible API, local Qwen-VL on vLLM, LeRobot policy svc, GR00T System 2. Same schema in, skill calls out.

RUNTIME — Pi 5, on body

Owns the body

observe · dispatch · recover · trace. Compressed observation JSON, whitelisted skills only. stop never waits on a cloud or a block.

BODY + TRACE

Executes & remembers

TonyPi action groups run the skill. Every run writes a LeRobot-aligned, hashable trace — sim and real share one schema.

→ ["detect", "walk_toward(red_block)", "grab", "walk_toward(box)", "release"]
⊘ FORBIDDEN: GR00T action chunk → 16 servos. Adapters are reused — other people's joint definitions are not.
/03

The unit of this system is a skill,
not a chat reply.

open models must emit this schema. the runtime is never rewritten to fit a checkpoint's action dims.

/04

What actually changes

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

/05

Standing on the open stack.
Not rewriting it. Not training a base model.

NOW / v0.1

Hugging Face LeRobot
traces & teach sessions export as LeRobot Datasets — swap arms and policies later
Qwen2.5/3-VL
instruction + observation JSON → skill calls, local on vLLM
OpenAI-compatible API
same schema; swapping the endpoint is the whole migration
Hiwonder TonyPi
action groups, camera, IMU, RPC, voice box
YOLO / MediaPipe / OpenCV
on-body perception — raw video is never the only input

NVIDIA / wired v0.1 · paying off v0.2+

none of this runs on a Pi. workstation / cluster side — where it belongs.

Isaac Sim + Isaac Lab
digital twin of the tabletop task; planning & recovery tested before hardware
Lab-Arena + LeRobot EnvHub
the same 20 English prompts regress in sim — brain changes stop breaking robots
Isaac GR00T N1.7
System 2 only — task decomposition. Its DiT action head never touches servos
Cosmos 3
generated occlusions, shoves, displacements — failure data you can't film enough of
Isaac Teleop · Jetson Thor
reserved for the arm era and future compute

WHEN EARNED

openpi π0 / π0.5
System 1 for the arm, once NexArm / SO-ARM101 lands
SmolVLA
light language-conditioned policy on the arm — never full-body on TonyPi
APXInf
edge inference engine, Jetson era
AgiBot World / GO-1
research reference only — NC licenses stay out of default product weights
/06

Execution == data

v0.1

Local trace

Non-negotiable. Every task writes instruction, skills, observations, outcome.

v0.1→0.2

LeRobot export

Schema aligned now, packaged next — community training tools eat it directly.

v0.2

Cosmos / Isaac loop-back

Synthetic failure cases augment real-hardware acceptance. Never replace it.

v0.3

Hash + ChainSink

On-chain goes trace_root + version hashes of models and skill packs. Not video. Never control.

// HARD RULE

The control loop never blocks on block production or Cosmos inference. stop goes through the Runtime — and only the Runtime.

/07

Roadmap — keep scrolling →

v0.1

The English skill OS

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 · TRACE
v0.2

Change the brain without risking the robot

Isaac Lab regression on the same 20 prompts. Cosmos fills the failure data. GR00T S2 adapter goes live as an option.

ISAAC LAB · COSMOS · GR00T S2
v0.3

Walk, see, speak / grasp — split

Two machines: TonyPi runs skills, the arm runs π0.5 / SmolVLA. ChainSink can be switched on.

DUAL BODY · π0.5 · CHAINSINK

Edge VLA, when the hardware earns it

Jetson-class compute first, then on-device VLA talk. Still no GR00T full-body action head on a Pi 5. Ever.

JETSON · APXINF
/08

Success is written down before the demo.

  1. C1Swapping the Brain adapter (API ↔ Qwen-VL ↔ GR00T S2 stub) changes zero skill names.
  2. C2Completion rate on 20 English real-hardware prompts is reportable — the sim suite runs the same prompts.
  3. C3Shove-recovery rate is accounted separately. Getting back up is a metric, not a blooper reel.
  4. C4Every task exports a hash; fields map onto LeRobot; killing Isaac or the chain module never affects stop.
  5. Chinese-default ASR / an unregistered skill / GR00T joints straight to servos — any of these = test failure. Full stop.

runs 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.