Linux that listens.
Heimdall is the watchman of the gods, posted at the head of Bifröst — he needs less sleep than a bird, sees a hundred leagues, and can hear the wool growing on the backs of sheep. This is the home's watchman: an ordinary Linux box turned always-listening voice satellite and synced multi-room speaker. It began as the Open Home Foundation's Linux Voice Assistant; this is my heavily modified fork of it — and it holds a special place in the flock.
Where the flock's voice began
Every project here has a first ancestor. For everything that talks and listens, this is it.
It started with a phone. Before any of this had a name, I was hacking on a way to run a Wyoming Satellite inside Termux on an Android handset — a terminal emulator standing in for real firmware, just to hear the house answer back. It worked well enough to prove the point and badly enough to want something better.
Then the Linux Voice Assistant appeared — the Open Home Foundation's successor to the Wyoming Satellite, built on a sharp idea: implement a small slice of the ESPHome protocol on Linux and reuse everything Home Assistant already knows how to do. I forked it almost immediately. It became the first permanent voice in the house — and the first time I went deep into someone else's open-source codebase and truly made it my own: not a weekend script, but a real fork I've carried and rebuilt across dozens of sessions.
And it was the proof. Before the GPUs, the agents, and the rest of the flock, this little Linux box answering out loud was what convinced me self-hosted, local, sovereign voice was actually viable — worth building for real. Everything that came after grew from it: the voice pipeline that feeds it, and Bifrost, which eventually did for Android natively what that first Termux experiment only gestured at.
A satellite that became a speaker — and stopped needing a wake word
Upstream gives a capable Assist satellite: ESPHome-native, on-device wake word, timers, announcements. These are the things I built on top.
▲ Sendspin multi-room audio
Taught the satellite to be a real synced media player. It joins a multi-room group and plays the same track in lockstep with every other room — the voice device and the speaker became one box.
▲ Duck, don't interrupt
When the assistant speaks over music, it ducks the audio instead of pausing it — smooth log-domain fades down and back, so a reply slips in over the song without a jarring stop-and-start, and stays group-synced throughout.
▲ Wake-word-free ambient mode
The headline change: an always-listening pipeline so you just talk — no "okay, computer" first. Voice-activity detection and a server-side one-shot decide when something was meant for the assistant, instead of waiting on a trigger phrase.
▲ Wired to the memory raven
Replies don't stop at Home Assistant's built-in intents. The transcript routes to Muninn — memory, web, tools, personality — and the spoken answer comes back to the room that asked, so the satellite speaks with the brain behind it.
▲ Clean, glitch-free playback
Real-time audio is unforgiving. Larger output buffering and coalesced underrun handling kill the bursty dropouts that plague a software audio path, so multi-room playback holds together under load.
▲ Old hardware, full voice
It runs on what you already have — a retired laptop, a mini-PC, an ARM board — using the machine's own compute for wake detection and audio processing. No microcontroller limits, no cloud account.
Two kinds of satellite, one fleet
Heimdall and Bifrost are the flock's two edge devices: Heimdall turns a Linux box into a native Home Assistant voice satellite and speaker; Bifrost does the same from an Android tablet. Both register over the ESPHome protocol, both duck-on-announce, both feed and are fed by the same self-hosted speech pipeline — the room hears you, the right device answers, and nothing leaves the house.
Built on the Open Home Foundation's work
Unlike the rest of the flock, Heimdall isn't written from scratch — and that's the point of including it. It's a fork of the Open Home Foundation's Linux Voice Assistant, an experimental project that does the hard, unglamorous work of speaking the ESPHome protocol and running local wake words on Linux. My additions — multi-room audio, ambient listening, the brain behind it — sit on top of that foundation, and the project stays under its original Apache-2.0 license. Credit where it's due: the satellite existed before I did anything to it.
My modified version is being prepared for release. Until then, the upstream project is linked above.