◆ Heimdall · the watchman who hears all

Linux that listens.

A wake-word-free voice satellite & synced speaker, forked from the Open Home Foundation's Linux Voice Assistant

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.

first
the first satellite I forked and made my own — where local, sovereign voice took root.
ambient
a wake-word-free always-listening mode added on top of upstream — no "hey computer," just talk.
in sync
Sendspin multi-room audio makes it a speaker locked in time across every room.
Why it's special

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.

What I changed

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.

How it fits

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.

Honest credit

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.