> Overview

JARVIS is a local AI assistant for macOS — talk to it or type to it, and it can chat, answer questions, and control the machine it's running on. Everything runs locally: the language model, the speech-to-text, and the text-to-speech, with no cloud dependency required. It streams responses over a WebSocket to a lightweight single-page UI that opens automatically in the browser.

> How It's Built

- LLM — DeepSeek, served locally through Ollama (swappable for any model Ollama supports, e.g. Llama 3 or Mistral)
- Speech-to-text — Whisper, running entirely locally
- Text-to-speech — macOS's built-in say command by default, with an optional upgrade to an ElevenLabs voice if an API key is configured
- Backend — FastAPI with a WebSocket connection for streaming
- Memory — a SQLite database that remembers conversation context between sessions
- Wake word — an optional listener for "Hey Jarvis" to trigger voice input hands-free

> Plugins

Voice or typed commands are matched against a small plugin system that controls the Mac directly:

"What time is it?"          -> reads the time
"Open Safari"                -> opens any app
"Volume up / down / mute"    -> controls system volume
"Dark mode" / "Light mode"   -> toggles macOS appearance
"Take a screenshot"          -> saves to Desktop
"Lock the screen"            -> locks the Mac
"Empty the trash"            -> empties Finder trash
"Search for black holes"     -> opens a Google search

New plugins are just a small Python class with a regex pattern and an execute() method, registered with the plugin manager — adding a new voice command takes a few lines of code.

> Features

- Typed and voice chat in one interface
- Fully local LLM + speech-to-text, no cloud round-trip required
- Hands-free wake-word activation
- Persistent memory across sessions
- Extensible plugin architecture for system control

> Why I Built This

I wanted a Siri/Alexa-style assistant without handing every conversation to a cloud provider — something that keeps my data on my own machine, that I can extend with my own plugins, and that I actually understand end to end because I built every layer of it.