Install & run Watari

The complete command reference: install the stack you want, walk the setup wizard, switch on every capability, then run Watari once — or 24/7 on every device.

This page is the “what do I actually type” companion to Quick start (the 5-minute path) and Setup & keys (where each key comes from). All commands run from the repo root.

1 · Install the stack

uv sync installs only the extras you name and prunes the rest, so list the full set you intend to use in one command. The jarvis-setup wizard is installed with any set.

git clone https://github.com/iamvazghen/OpenWatari openwatari
cd openwatari

# Everything (cloud voice + 24/7 brain + channels + speaker-ID + dev tools):
uv sync --extra edge --extra cloud-voice --extra brain --extra channels --extra identity --extra browse --extra dev

# 100% local / offline voice instead of cloud: drop cloud-voice, add local-voice
uv sync --extra edge --extra local-voice --extra brain --extra channels --extra identity
ExtraTurns on
edgethe device loop: mic, wake word, VAD, audio I/O
cloud-voiceDeepgram STT + ElevenLabs TTS (fast, cloud)
local-voiceWhisper STT + Piper/Kokoro TTS (no keys, offline)
brainthe LLM agent loop, tools, memory L1–L5, scheduler
channelsTelegram, Gmail, Calendar, Notion, ntfy push
browsethe agentic web browser (local + Browserbase)
identityspeaker-ID — obey only your enrolled voice
devthe test suite + benchmarks

2 · Run the setup wizard

uv run jarvis-setup

A terminal UI walks every decision and writes a ready .env. It never prints a secret back, backs up an existing .env, and auto-generates your JARVIS_API_AUTH_TOKEN and all eight JARVIS_PROTOCOL_*_PASSWORD values — you don't fetch those anywhere.

StepIt asksTypical answer
Identitydisplay name + wake phraseyour name + hey jarvis
Voicecloud or localcloud = Deepgram + ElevenLabs keys; local = no keys
BrainLLM backendOpenAI-compatible URL + key, or local Ollama
Knowledgenotes folder for L3 memoryyour Obsidian/Markdown path
Deploymentsingle or vpssingle = loopback; vps = binds 0.0.0.0 + token for phones/glasses
IntegrationsTelegram, Tavily, Google, Notion, ntfyfill the ones you want; all optional
Behaviourproactivity on/offyour call; fleet stays off by default
Re-run any time. jarvis-setup is idempotent — run it again to change an answer; it backs up the old .env first. Or edit .env by hand (every key is prefixed JARVIS_; see Setup & keys).

3 · Switch on each capability

Everything degrades gracefully — do only the ones you want. Each is a one-time step.

# Speaker-ID — record your voiceprint, then only you are obeyed
uv run python bench/enroll_voice.py --script "to-read-script.md"
#   then set JARVIS_SPEAKER_ID_ENABLED=true in .env

# Telegram — one-time login, writes a reusable session file
uv run python bench/telegram_login.py

# Gmail + Calendar — one-time OAuth, writes the refresh token
uv run python bench/google_login.py

# Semantic recall (L5) — downloads a ~90 MB CPU model on first use
uv pip install sentence-transformers

# Redis cache (L4, optional) — otherwise an in-process cache is used
#   set JARVIS_REDIS_URL=redis://localhost:6379 in .env
Check what's live. uv run python bench/check_config.py prints which keys are set; uv run python bench/test_live_integrations.py actually exercises the ones you configured.

4 · Run Watari

The two core processes. On one machine you can run both; across devices the brain lives on your always-on host.

# The voice edge (mic + wake word + STT/TTS) on this device:
uv run python -m jarvis.edge.assistant

# The shared 24/7 brain (LLM, tools, memory, scheduler) — for phones/glasses over your tailnet:
uv run python -m jarvis.brain.server

# Optional, on the same laptop — let Watari control this PC (open apps, type, click):
uv run python -m jarvis.edge.pc_agent
Brain first. If the edge is configured for a remote brain (vps mode), start brain.server before edge.assistant so the edge links on boot. The edge auto-reconnects if the brain restarts.

5 · Run it 24/7 (autostart)

One idempotent installer registers Watari to start at login and stay alive — Scheduled Tasks on Windows, a systemd --user unit on Linux, a LaunchAgent on macOS.

uv run python -m jarvis.edge.autostart install      # edge + pc_agent, start at login
uv run python -m jarvis.edge.autostart install edge # just the voice edge
uv run python -m jarvis.edge.autostart status       # is it registered / running?
uv run python -m jarvis.edge.autostart uninstall    # remove it

On the always-on host, run the brain as a service so it survives reboots and logout. On Linux that's a systemd --user unit with lingering enabled:

loginctl enable-linger "$USER"
systemctl --user enable --now jarvis-brain.service
systemctl --user status jarvis-brain.service        # active? restarts?
journalctl --user -u jarvis-brain.service -f        # follow the log
curl -s http://127.0.0.1:8766/healthz               # should print: ok

6 · Verify

uv run python bench/run_all_tests.py        # the single gate — all green (offline; SKIP != FAIL)
uv run python bench/efficiency_report.py    # hot-path latency vs targets
Publish gate. Keep your repo private until the suite is green and the efficiency report meets its targets.

7 · Is it actually listening?

Say your wake phrase, then a command (“hey jarvis, what time is it?”). The listening ping is one soft tone at startup, then silent — it isn't a constant sound. If nothing reacts, tail the edge log: every detection prints wake: 'hey_jarvis' detected.

# Windows
Get-Content logs/edge.log -Tail 20 -Wait
# macOS / Linux
tail -f logs/edge.log
Symptom in the logCause & fix
no audio received / no wake … detectedtwo edges are fighting for the mic, or the wrong default input device. Stop every Watari process, confirm one edge, restart it.
timed out during opening handshake (Deepgram/ElevenLabs)a network blip reaching the cloud voice services — it auto-retries. Persistent? Check connectivity or switch to the local voice stack.
brain link: connected never appearsthe brain isn't running or the host/token is wrong — start brain.server, check the tailnet IP.

Next: personalize the voice and persona, wire integrations, and walk the production checklist before go-live.