Devices
One brain, reached many ways — all sharing memory, all over your Tailnet. All seven setups are wired and tested.
| Setup | Connects via | Barge-in | Notes |
|---|---|---|---|
| Laptop (Windows/Linux) | jarvis.edge.assistant → brain WS | off | baseline; open speakers run half-duplex |
| Mac (macOS) | jarvis.edge.assistant → brain WS | off | same Python/PyAudio edge, runs natively |
| Laptop/Mac + headphones | same, auto-routes to headphones | on | private endpoint; interrupt mid-sentence |
| iPhone (no app) | “Hey Siri, Watari” → /talk | n/a | Siri dictation → spoken reply |
| Android (no app) | Assistant/Tasker → /talk, or Termux edge-lite | n/a | dictation → spoken reply; or full mic stream |
| Phone + headphones | same shortcut, android-headphones/phone-headphones hint | on | reply plays in the earbuds |
| Mentra OS glasses | TS bridge → brain WS | scaffold | needs MentraOS SDK wiring (see glasses/README) |
| Home Assistant | brain → HA REST (local) | n/a | states + control; locks confirm-gated |
| Remote PC control | host executor → brain /control | n/a | brain drives a laptop from anywhere |
Every setup is modelled in src/jarvis/edge/device_profile.py(SUPPORTED_DEVICES: laptop, mac, iphone, android, airpods, mentra) and verified inbench/test_phase6_multidevice.py.
Laptop / Mac & headphones
uv run python -m jarvis.edge.assistantThe voice edge is pure Python + PyAudio, so it runs natively on Windows, macOS, and Linux — the same command on a MacBook gives you a local Watari (on macOS, grant microphone permission to your terminal the first time). With headphones/AirPods connected to the host, output auto-routes to them and barge-in turns on (a private endpoint), so you can talk over Watari mid-sentence. On open speakers it runs half-duplex so it never transcribes its own voice. Each turn logs a TTFW latency number; aim for ~10 turns to get a stable mean.
Phone & phone + headphones (iPhone, no app, no page)
Run the brain reachable over the tailnet, then build a one-time Siri Shortcut:
# on the brain host:
JARVIS_BRAIN_HOST=0.0.0.0 uv run python -m jarvis.brain.server- Dictate Text
- Get Contents of URL →
http://<brain-tailnet-ip>:8766/talk?token=<JARVIS_API_AUTH_TOKEN>, method POST, body JSON, fieldtext= the Dictated Text variable - Play the response (Watari's voice,
audio/mpeg) - Name the shortcut “Watari” → say “Hey Siri, Watari”.
With AirPods connected to the phone, the same shortcut plays the reply in the AirPods — nothing extra to configure. iOS bans background mic for web pages, so a Siri Shortcut is the no-app, no-page path; Telegram voice notes are the backup.
Android (no app, no page)
Two ways, both over the tailnet:
- No-app voice (simplest): use Google Assistant routines or Tasker / HTTP Shortcuts to POST your dictated text to
http://<brain-tailnet-ip>:8766/talk?token=…and play the audio reply — the exact mirror of the iPhone Siri Shortcut. Declare the listening endpoint with theandroidorandroid-headphonesdevice hint. - Full mic stream (Termux edge-lite): install Termux + Termux:Boot, run the Python edge there, and it streams mic → brain and plays TTS like the laptop — wake word and barge-in included. Disable battery optimisation so it stays alive.
With earbuds on the phone, the android-headphones hint makes the session private (barge-in on) and the reply plays in the earbuds.
Mentra OS glasses (scaffold)
The glasses/ TypeScript bridge is a scaffold, not yet runnable: the brain link and device routing are implemented, but the device-side MentraOS SDK calls (speak / HUD display / transcription stream) are TODO stubs. To finish it, register an app in the MentraOS console and fill the two TODO(MentraOS SDK) blocks — glasses/README.md has the exact steps. The companion phone must be on the tailnet.
Home Assistant
Create a long-lived access token in HA (Profile → Security) and set JARVIS_HA_URL + JARVIS_HA_TOKEN. Watari reads device states (“is the door locked?”) and calls services (lights/scenes/climate/locks) — locks, alarms, and covers are confirm-gated. Local-first: the brain talks straight to your HA box over the tailnet/LAN, nothing via the cloud.
Remote PC control
An edge executor (jarvis.edge.pc_agent) connects out to the brain's /control socket, so the 24/7 brain can drive your laptop end-to-end from your phone — open apps, manage processes, run scripts. On Windows it installs as an elevated scheduled task. Every action still passes the enforced confirmation tier and the path/secret guards.
TODO-NOW.md §3.