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

Speak a line from anywhere
$ curl -s -X POST http://localhost:8888/notify -H "Content-Type: application/json" -d '{"message": "Deploy finished", "voice_id": "fTtv3eikoepIosk8dTZ5", "voice_enabled": true}'

Three fields do the work:

  • message — the text to speak. One sentence.
  • voice_id — ElevenLabs voice ID. The default DOS voice is fTtv3eikoepIosk8dTZ5.
  • voice_enabledfalse logs 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/health should 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

Was this page helpful?