Architecture
Two cooperating processes over one streaming WebSocket protocol: a local edge and an always-on brain.
EDGE — laptop / phone / glasses (where you are)
Mic -> wake word (openWakeWord) -> VAD (Silero) -> STT (Deepgram/Whisper)
-> [BrainBridge] --WebSocket--+
Speaker <- TTS (ElevenLabs/Piper) <-+ (barge-in, smart turn-taking, AEC)
|
streaming events | (Tailnet + Bearer-token auth)
v
BRAIN — always-on host / VPS (24/7)
Agent loop: own LLM (+fallback chain) - tool-calling - session + memory
Confirmation tier ENFORCED in code - smart idle session reset
Tools: vault(r/w) - web - telegram - gmail - calendar - notion - smart-home
- utilities - system/PC-control - browser - reminders - coding/git
Memory L0-L5 - proactive tick (durably logged) - scheduler - audit - health
HTTP sidecar: /talk (iPhone Siri voice) - /control (remote PC executor)Why the split
- Edge (
src/jarvis/edge/) keeps audio + STT/TTS local for privacy and low mic latency. - Brain (
src/jarvis/brain/) holds the 24/7 obligations — reasoning, memory, scheduler, channels — so they survive the laptop being off. - The Pipecat “LLM stage” is replaced by a thin
BrainBridgeprocessor, so swapping reasoning backends or transports never touches the audio pipeline. - The brain can run in-process (single machine) or as a shared WebSocket server so every device shares one brain and one memory.
Memory — six layers
| Layer | What | Where |
|---|---|---|
| L0 Working | live conversation; smart-reset on long idle | RAM |
| L1 Learned | durable facts (remember/recall/forget) | memory/learned/ |
| L2 Journal | daily summaries + a durable log of proactive nudges | memory/journal/ |
| L3 Vault | your Obsidian KB — read always, write on the authoritative host | JARVIS_VAULT_PATH |
| L4 Hot-cache | fronts slow paths (search, utilities) | in-process + optional Redis |
| L5 Semantic | recall by meaning, not just keywords | optional local embedder |
Smart session reset. After a long idle gap (
JARVIS_SESSION_IDLE_RESET_MINUTES) the brain journals the prior conversation and clears working memory, so a fresh conversation hours later doesn't drag stale context or anaphora (“set it back” pointing at a “it” from this morning). Durable memory is untouched — Watari forgets the thread, not the person.Proactivity that remembers
A background tick weighs signals and may speak unprompted within a budget and quiet hours. Every proactive line is recorded into both working memory (so you can answer “yes, do it” at once) and the L2 journal (so you can refer back days later). See Security for the enforced confirmation tier that gates anything it tries to act on.