View all articles
OpenJarvisOllamaVoice AssistantPrivacy

Build a Private Voice Assistant for the Office with OpenJarvis and Ollama

JG
Jacobo Gonzalez Jaspe
|

By the end of this post you will have a voice assistant on a machine in your office that transcribes speech, answers with a local model and speaks back, with a scan that shows where every byte goes. Cheapest place to start: a 16 GB laptop and a 4B or 9B model. Comfortable: 24 to 32 GB and a 26B or 35B model.

OpenJarvis is an open-source framework for personal AI agents from Stanford’s Hazy Research and Scaling Intelligence labs, Apache 2.0 licensed. It treats energy, latency and cost as first-class metrics next to accuracy, and it runs models locally by default. The source is Ollama’s post OpenJarvis: local-first personal AI (28 May 2026); we filled in the voice details from the project docs and the repository, checked on 2026-09-09.

What you need

  • Linux, macOS, or Windows (WSL2 or the desktop app). Python 3.10 to 3.13; the installer brings uv and a virtual environment (installation docs).
  • Ollama, installed by the OpenJarvis installer if missing. We used 0.30.10.
  • A microphone and a speaker. A USB conference speakerphone is the easiest office option.
  • Memory for the model (table below) plus a few gigabytes for the speech models.
  • About 15 minutes; the docs say the installer takes about three on broadband, with larger models downloading in the background.

Step 1: Install with one command

curl -fsSL https://open-jarvis.github.io/OpenJarvis/install.sh | bash
jarvis --version
jarvis doctor

Windows without WSL: irm https://open-jarvis.github.io/OpenJarvis/install.ps1 | iex. The installer sets up Python tooling, Ollama and a starter model, then jarvis starts a chat. jarvis doctor tells you what is missing; on Linux the usual gap is an audio library, which your package manager fixes.

Step 2: Point it at a local model that fits your machine

Ollama’s post uses qwen3.5:35b. Choose by memory:

jarvis model pull qwen3.5:9b          # 16 GB laptop, 6.6 GB download
jarvis model pull gemma4:26b          # 24 to 32 GB machine, 19 GB download
jarvis ask -m qwen3.5:9b "Summarise the three rules of a good meeting agenda."

Then make it the default in ~/.openjarvis/config.toml, exactly as the Ollama post shows:

[engine]
default = "ollama"

[intelligence]
default_model = "qwen3.5:9b"
preferred_engine = "ollama"

The configuration reference lists the rest: [server] binds to 127.0.0.1:8000 by default, [telemetry] writes to a local SQLite file, [traces] is off, and [security] starts in warn mode.

Step 3: Add speech in and speech out

Voice is an extra, and the local engines are open source. In the repository’s src/openjarvis/speech/ module the local pieces are faster_whisper.py (speech to text, default model size base, device auto, language auto-detected) and kokoro_tts.py (text to speech, default voice af_heart, 24 kHz, with a Spanish language code). Cloud engines (OpenAI, Deepgram, Cartesia) exist as options you do not have to touch.

pip install 'OpenJarvis[speech]'     # faster-whisper and audio capture
pip install kokoro                    # local TTS
jarvis                                # in the chat, press Enter on an empty line to record

How it works today: press Enter with nothing typed, speak, and recording stops on silence; the transcript goes to the model and the answer is spoken with Kokoro. The TTS backend order in the CLI is Kokoro first, then the cloud engines only if you configured them. There is no wake word in the repository as of today; we searched the source tree for one and found none, so plan for push-to-talk.

Whisper base has 74 million parameters (OpenAI Whisper model table) and Kokoro 82 million (Kokoro-82M model card), so both run on the CPU of a laptop. For Spanish offices, Whisper auto-detects the language and Kokoro has Spanish voices under language code e; set the voice in the config rather than accepting the English default.

Step 4: Prove where the data goes

This is the step that makes the assistant office-grade. OpenJarvis ships a data-boundary scan that audits where inference, memory, traces and connectors send data (security guide):

jarvis scan --data-boundaries
jarvis scan                           # host posture: disk encryption, open ports, remote access

Expected result with the configuration above: inference local (Ollama), memory local (SQLite), traces off, no cloud connectors. If you later run jarvis connect gdrive for the morning briefing preset, the scan will show Google as a boundary, which is the honest picture.

Ask your assistant to help here too: “Read this scan output and list every destination that is not localhost.”

What we measured

We measured the model side on our NVIDIA GB10 workstation (128 GB unified memory) with /api/generate on 2026-09-09. The speech models are small enough that the language model decides the response time.

ModelGeneration speedResident memoryTime to a 60-word spoken answer (about 80 tokens)
llama3.1:8b33.3 tokens/s4.9 GB fileabout 2.4 s of generation
qwen2.5-coder:7b34.1 tokens/s6.6 GBabout 2.3 s
gemma4:26b51.2 tokens/s, thinking on17 GB at 32k contextabout 1.6 s plus thinking
qwen3.6:35b51.4 tokens/s, thinking off23 GB at 32k contextabout 1.6 s

Add roughly a second for transcription and a second for speech synthesis on CPU, and a spoken answer arrives in three to five seconds on a 16 GB laptop. Third-party guides for the same Whisper + Ollama + Kokoro stack report one to two seconds of latency on a 12 GB GPU (Every Local AI). First loads are slower: gemma4:26b took 116 s to come off disk the first time, so keep the model warm.

Your machineModelNotes
16 GB laptopqwen3.5:4b or qwen3.5:9bSnappy answers; Whisper and Kokoro on CPU
Mac mini M4 24 GB, about EUR 920 (Compute Market)gemma4:12b or qwen3.5:9bSilent box for a meeting room
32 GB and upgemma4:26b or qwen3.5:35bThe model Ollama’s post uses

Where this fits, and the limits

A private voice assistant fits the tasks people already shout across the office: “what is on the calendar”, “read me the last message from the supplier”, “note that the invoice went out”. The morning-digest preset speaks a daily briefing, and deep-research answers questions with citations from documents you indexed with jarvis memory index ./docs/. The privacy property is simple: audio, transcript, model and telemetry stay on the machine, and the scan proves it.

Honest limits. No wake word means someone presses a key or clicks in the desktop app. Whisper base mishears names and product codes; move to small or medium if that matters, at the cost of a second or two. One microphone in a noisy open office will pick up everyone; a speakerphone near the person asking works better. And the model limits still apply: a 9B model answers office questions well and reasons about your contracts poorly, so give it documents through the memory index rather than expecting it to know your business.

Next steps

Work with us

We install voice assistants on hardware the client owns, with the data-boundary scan as part of the handover. If you want one in your meeting room, get in touch or see how our consulting works.

Share: LinkedIn X
Newsletter

Access exclusive resources

Subscribe to unlock 230+ workflows, 43 agents, and 26 professional templates. Weekly insights, no spam.

Bonus: Free EU AI Act checklist when you subscribe
Once a week No spam Unsubscribe anytime
EU AI Act is now in effect — Is your organization compliant?

Tell us what you want to run

Tell us what you want to run and on what budget. We will tell you which hardware you need, which model fits, and what to expect from it — before you spend anything.

Self-service Local-first Open-source toolkits

136 pages of free resources · 26 compliance templates · 22 certified devices