Configuration

Everything is driven by JARVIS_-prefixed environment variables in a local .env. Run jarvis-setup to generate it; .env.example documents every knob inline.

Never commit .env — it's git-ignored. Keep your configured fork private if it carries personal data.

Core knobs

VariablePurpose
JARVIS_STT_PROVIDERdeepgram (cloud) / whisper / moonshine (local)
JARVIS_TTS_PROVIDERelevenlabs (cloud) / piper / kokoro (local)
JARVIS_LLM_BACKENDthe reasoning LLM: freellmapi / openai / ollama
JARVIS_WAKE_WORDSe.g. hey jarvis (pre-trained set; custom phrases need Porcupine)
JARVIS_VAULT_PATHyour Obsidian/Markdown notes folder (L3 memory)
JARVIS_BRAIN_HOST127.0.0.1 single-machine, 0.0.0.0 for multi-device
JARVIS_API_AUTH_TOKENbearer token required off-loopback (wizard generates it)
JARVIS_BRAIN_WS_URLedge → brain, e.g. ws://<tailnet-ip>:8765/voice

Safety & memory knobs

VariablePurpose
JARVIS_VAULT_WRITABLEtrue only on the host that owns the vault; enables write_vault. Off on the laptop (its mirror is clobbered by the one-way sync).
JARVIS_SESSION_IDLE_RESET_MINUTESafter this idle gap the brain journals the prior conversation and clears working memory (durable memory kept). 0 disables.
JARVIS_PROACTIVE_ENABLEDallow unprompted speech (within budget + quiet hours)
JARVIS_FLEET_AUTHORIZEDallow consulting the optional external fleet (off by default)
JARVIS_SPEAKER_ID_ENABLEDrespond only to your enrolled voice (off until enrolled)
JARVIS_PROTOCOL_*_PASSWORDpasswords for the eight privileged routines (wizard generates them)

What lives where

  • Characterpersonality/jarvis.md (edit to make Watari yours).
  • Knowledge — Markdown under memory/ + your vault.
  • Skills — on-demand playbooks in skills/*.md.

Nothing is hard-coded: the same codebase runs CPU-local-only or cloud-quality by flipping provider flags, and an unconfigured integration simply says “that isn't configured yet”.