Get voice notifications from DOS
DOS speaks phase transitions and completions out loud through a local endpoint, so you can walk away from long runs.
DOS uses your speakers as a second output channel. Start a long run, walk to the kitchen, hear it finish.
How it works
DOS posts short messages to http://localhost:8888/notify. A local voice service picks them up and speaks them via ElevenLabs. Nothing leaves your laptop except the text DOS chose.
The Algorithm calls this endpoint at every phase transition. NATIVE mode calls it once per invocation. You can call it from any skill, hook, or shell script.
The call
Three fields do the work:
message— the text to speak. One sentence.voice_id— ElevenLabs voice ID. The default DOS voice isfTtv3eikoepIosk8dTZ5.voice_enabled—falselogs without speaking. Useful for dashboard-only notifications.
Use cases
- Phase transitions on long runs. The Algorithm announces "Entering the Plan phase" and "Entering the Build phase" so you hear progress without looking.
- Completion alerts. End a build script with a notify call. Know it finished while you were in another window.
- Red alerts. Wire a hook to your test runner that speaks "tests failed" only on red. Stop tab-checking.
- Human-in-the-loop. Speak "waiting on your approval" when the Algorithm hits a plan-mode gate.
Silencing
Set voice_enabled: false on one call to log without audio. Silence a whole session with a user steering rule:
### No voice this session Do not make any curl calls to localhost:8888/notify.
Change the default voice by editing the voice service config, then add a user rule that tells DOS which voice ID to use in Algorithm announcements.
Only the primary agent speaks
Subagents spawned via Task must not hit the notify endpoint, or parallel work turns into a chorus of overlapping announcements. Bake this into your rules.
Speaking from a hook
Hooks must return fast. Background the curl and redirect output:
curl -s -X POST http://localhost:8888/notify \
-H "Content-Type: application/json" \
-d '{"message": "Build green", "voice_enabled": true}' \
> /dev/null 2>&1 &
The Algorithm uses synchronous calls because phase announcements are ritual. Hooks must never block a tool call.
Troubleshoot
- Nothing speaks. Is the voice service running?
curl http://localhost:8888/healthshould return OK. - Audio is delayed. Shorten the message or switch to a faster ElevenLabs voice model in the service config.
- Wrong voice. Copy the correct ID from your ElevenLabs dashboard into the call.
- It spoke twice. A subagent is calling notify. Add a rule forbidding subagent voice calls.
Next
Set steering rules
Silence, change, or shape DOS's voice with one rule.
Write a custom Hook
Wire notify calls into your own lifecycle events.
Was this page helpful?