Voicesinmyhead: I gave every agent a voice, then stopped listening

Checked 22 Sep 2026 · By Luke Czak

ArticleOpinionFree to read

Distinct voices genuinely solved the problem of not knowing which agent just spoke. Then I worked out that speech was the wrong surface for the message.

When three agents finish at the same moment and all announce it in the same system voice, you have to go and look to find out which one spoke, which defeats the point of being told. Voicesinmyhead leases each agent its own distinct voice, gives the same agent the same voice every time, and reclaims a voice when the process holding it dies. That fixes the identification problem outright.

It is built better than it strictly needed to be. There are several quality tiers, from zero-install system voices up to local neural ones. The priority queue has real semantics: ordinary messages queue in order, urgent ones jump to the head of the queue but wait for whatever is being spoken to finish, and the top level interrupts the current speech and speaks immediately. Concurrent lease requests are locked properly, so two agents cannot be handed the same voice.

Then I hit the thing it does not do, and the failure was mine. There is no per-message deduplication, no cooldown and no message key. I had a status app announcing on a poll loop, and it re-announced the same weekly usage figure every single cycle, because the state that was supposed to make it fire only once reset whenever the app restarted. The fix belonged in my caller, as a cooldown that survives a restart. Anything that speaks on a timer has to throttle itself.

The larger conclusion is about the surface rather than the tool. Speech interrupts on its own schedule, repeats itself, and carries no state, so the same fact arrives forever and none of it is there when you come back to look. Anything that needs my attention now goes to a dashboard that is always open and always current. The only honest job left for a voice is to say go and look at the board. Never the finding itself.

Comments (0)

Sign in to comment.