Devices

One brain, reached many ways — all sharing memory, all over your Tailnet. All seven setups are wired and tested.

SetupConnects viaBarge-inNotes
Laptop (Windows/Linux)jarvis.edge.assistant → brain WSoffbaseline; open speakers run half-duplex
Mac (macOS)jarvis.edge.assistant → brain WSoffsame Python/PyAudio edge, runs natively
Laptop/Mac + headphonessame, auto-routes to headphonesonprivate endpoint; interrupt mid-sentence
iPhone (no app)“Hey Siri, Watari” → /talkn/aSiri dictation → spoken reply
Android (no app)Assistant/Tasker → /talk, or Termux edge-liten/adictation → spoken reply; or full mic stream
Phone + headphonessame shortcut, android-headphones/phone-headphones hintonreply plays in the earbuds
Mentra OS glassesTS bridge → brain WSscaffoldneeds MentraOS SDK wiring (see glasses/README)
Home Assistantbrain → HA REST (local)n/astates + control; locks confirm-gated
Remote PC controlhost executor → brain /controln/abrain 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.assistant

The 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
  1. Dictate Text
  2. Get Contents of URLhttp://<brain-tailnet-ip>:8766/talk?token=<JARVIS_API_AUTH_TOKEN>, method POST, body JSON, field text = the Dictated Text variable
  3. Play the response (Watari's voice, audio/mpeg)
  4. 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 tohttp://<brain-tailnet-ip>:8766/talk?token=… and play the audio reply — the exact mirror of the iPhone Siri Shortcut. Declare the listening endpoint with theandroid or android-headphones device 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.

Acceptance tests. Each setup has a step-by-step test (TTFW, auto-route, barge-in, Siri voice, music room, proactive voice, shared memory) in TODO-NOW.md §3.