A voice agent for the house, on a Mac you already own.
It listens for a wake word, answers out loud, controls Home Assistant and reaches anything else through MCP. A small local model handles the house. A cloud model handles the questions the local one should not attempt, and only ever receives the sentence, never the audio.
What happens when you speak
- “Hey Jarvis” openWakeWord, in process, always on this machine
- Record stops itself after 800 ms of silence
- Speech to text whisper.cpp, kept warm so it answers in under a second
- The model a local model with tools: the house over MCP, timers, search, your connected accounts
- Hand over to Claude, only when the local model says it is out of its depth
- Speech Kokoro, in process, sentence by sentence while the rest is still being made
- The speakers or whichever room asked
Nothing leaves the house
The wake word, the transcription, the model and the voice all run on the one machine. There is no account and no server of ours. Escalation to the cloud is a decision the local model makes, per question, and it hands over text.
Every stage is a provider
Wake word, speech to text, the models, the voice, search: each is chosen by name in one config
file. The built-in ones are the fastest thing that runs on Apple silicon. A different one is an
npm package that exports a definition, and parlour doctor will tell you whether it is
working.
One server, any number of rooms
One Mac runs the models and holds the tokens. Everything else with a microphone is a satellite that finds it with Bonjour: another Mac, a phone holding a button, a Voice PE through Home Assistant, or a board you soldered yourself streaming raw audio to a socket. Automations get an endpoint that takes text and returns text.
Built for Home Assistant, not bolted on
Home Assistant's MCP Server integration publishes whatever you have exposed to voice assistants as tools, so Parlour can do exactly what you have allowed and nothing you have not. Expose a light and it can turn it on; do not, and it cannot. A mute switch in the house, not on the Mac, stops it acting while everyone is asleep. Point the OpenAI Conversation integration at Parlour and the satellites you already own start using it as their brain.
Ten minutes, one terminal
npm install -g parlour
parlour init # dependencies, models, questions, done
parlour text # try it without a microphone
parlour start # the real thing
macOS with Node 22 and Homebrew. init fetches ffmpeg, whisper.cpp and the models, asks
for your Home Assistant token and an Anthropic key if you want the cloud behind it, and offers to
run at login. Prefer a window? There is a
menu bar app that does the same thing
with buttons.
Open source, and open to a hand
Parlour is MIT licensed. The most useful contribution is a provider: a new voice, a different speech to text engine, a Linux service manager. The provider guide walks through one end to end, and contributing covers the rest.