AgenticBeingsInc/reachy-aivah
Reachy Mini Controller (React + Vite + LiveKit)
Control your Reachy Mini directly from the browser with live camera, precise manual pose controls, and natural voice conversation powered by LiveKit Agents.
- Uses the official
@pollen-robotics/reachy-mini-sdk@1.8.0+ host shell (OAuth + robot picker) - Live video + atomic head/antenna/body commands via WebRTC data channel
- LiveKit voice AI panel: talk to an agent that can intelligently drive the robot
- Works as a static Hugging Face Space (
sdk: static)
Quick start (local)
npm install
cp .env.local.example .env.local # add your HF token + username
npm run devOpen http://localhost:3000 — with VITE_HF_TOKEN set you skip OAuth and go straight to the robot picker.
Do not put `VITE_HF_TOKEN` on HF Space — production uses per-user OAuth (hf_oauth: true).
Reachy auth (dev)
- Get a token: https://huggingface.co/settings/tokens (read scope is enough)
- Add to
.env.local:
VITE_HF_TOKEN=hf_...
VITE_HF_USERNAME=yournameThe host shell will sign you in automatically.
Testing with local simulation (no physical robot)
Local simulation (reachy-mini-daemon --sim) runs a MuJoCo robot but does not appear in the official host shell robot picker (the "No Reachy online" screen), because discovery goes through Hugging Face's central signaling server.
Fastest way to test the controller UI:
Visit:
http://localhost:5173/?demo=1This bypasses the host shell and loads your actual control panel + LiveKit voice UI with a mock reachy.
- Sliders and presets log to the browser console.
- No real video (simulation has none) — you'll see a placeholder.
- You can still run the LiveKit voice agent and have it drive the real simulation via the Python SDK in another terminal.
Run simulation in parallel:
reachy-mini-daemon --sim --scene minimal
# or on macOS:
mjpython -m reachy_mini.daemon.app.main --simThen use your normal Python scripts or the official Control app to verify motion while you develop the web UI.
LiveKit voice AI (dev)
- Create a free project at https://cloud.livekit.io/
- In project Settings, enable the sandbox token server and copy the ID.
- Add to
.env.local:
VITE_LK_SANDBOX_ID=your-sandbox-id- Run a LiveKit Agent (Python recommended) that has tools using the Reachy Python SDK.
Speak commands like "nod your head", "look left", "do a little dance".
Project structure (must follow contract)
index.html– exact theme + HF OAuth bootstrapsrc/dispatch.ts– loads SDK on window + chooses host vs embedsrc/embed.tsx– your app (receives fully connectedreachy)public/icon.svg– used for top bar + catalog + favicon
See the official APP_CREATION_GUIDE.
Deploy to HF Spaces
Full guide: [DEPLOY.md](./DEPLOY.md)
Quick path:
# Pre-built deploy (local build → upload dist to Space root)
chmod +x scripts/deploy-hf-prebuilt.sh
HF_TOKEN=hf_... npm run deploy:hf
# 2. Space Settings → Repository secrets (see DEPLOY.md)
# 3. GCP chatbot-api: AGENT_NAME=reachy-agent, CORS allows *.hf.space
# 4. Robot owner runs: reachy-mini-daemonThe README frontmatter (sdk: docker, app_port: 7860, hf_oauth: true) serves the pre-built bundle via nginx. No app_build_command — avoids static SDK config errors on org Spaces.
Physical Reachy Mini
- Connect robot (Lite USB or Wireless WiFi)
- Run
reachy-mini-daemonon the robot owner's machine - Open the Space URL → HF login → select the online robot from the picker
Simulation (reachy-mini-daemon --sim) does not appear in the robot picker — use ?demo=1 for local UI testing only.
Controls
Reachy panel
- Live video (
attachVideo) - Head RPY / antennas / body yaw sliders + presets
- Mutes + live state
LiveKit AI panel
- Mic on → speak to agent
- Agent can move robot while you watch
Manual controls always available.
Notes
enableMicrophone: falseon Reachy host (LiveKit owns the mic)- Animation helper not in published package exports – simple reset used on leave
- Big bundles are normal (host + sdk)
References
- Reachy JS SDK + guide
- LiveKit React voice AI quickstart (MCP)
