"The single launchd-owned process is the whole product body. UI actions call into it; they never spawn a second daemon."
A Speaker Is a Single Resource
The audio output is one physical thing. Two processes both trying to own it is a recipe for stutter, races, and audio that overlaps or drops. So Bellows runs as exactly one production process, managed by launchd. That process is the entire product body: it serves the API, serves the built UI, and owns the audio worker inside its own lifespan. There is no separate audio daemon and no side socket — the shape the retired predecessor had, deliberately folded into one.
launchd Keeps It Alive, the App Keeps It Single
The launchd job is set to start at load and stay alive — if the process dies, launchd brings it back. That handles availability. The other half is a rule the app enforces on itself: UI actions never fork a shadow daemon to "help." Every request drives the one existing worker. Availability is launchd's job; singularity is the app's discipline. Together they mean there is always exactly one owner of the speaker, and it's always the same one.
Why Shadow Daemons Are the Enemy
The tempting bug is a background helper spun up for a specific task — a quick second process to do playback, or a worker forked per request. Each one is a new claimant on the single audio device, and now "who is playing right now" has more than one answer. Keeping the process count at exactly one, enforced from both sides, is what makes the audio behave like it has a single, sober owner.