Local audio-cue HTTP server for long-running agents.
| Endpoint | Behavior |
|---|---|
GET /alert_beep | Play alert_beep once. |
GET /alert_done | Play alert_done once. |
GET /alert_await | Play alert_await_user_input once. |
| Endpoint | Behavior |
|---|---|
GET /loop_beep | Loop alert_beep. Replaces any prior loop. |
GET /loop_done | Loop alert_done. Replaces any prior loop. |
GET /loop_await | Loop alert_await_user_input. Replaces any prior loop. |
Between iterations a single voice waits loop_alert_timeout_millis
before replaying. Stages 1–3 can override via
loop_alert_timeout_millis_{1,2,3} — each falls back to the
previous stage if unset, so the loop progressively speeds up as it
escalates. loop_alert_jitter_millis[_1|_2|_3] apply
+/- rand(0..=jitter) per sleep.
Escalation: after the loop starts, a second voice joins
at escalate_wait_1 seconds, a third at
escalate_wait_2, and a fourth at escalate_wait_3.
Each new voice is drawn from extra_alert_<state>_sounds;
when those run out the pool cycles, doubling already-playing voices.
All voices in a session share the current stage's gap, so existing
voices speed up too when the supervisor advances. Voices are
independent threads — they drift relative to one another.
| Endpoint | Behavior |
|---|---|
GET /stop | Stop all playback (loops and queued one-shots). |
| Endpoint | Behavior |
|---|---|
GET /state | JSON snapshot of audio engine + config. Does not change playback. |
The audio object shows the current loop (loop_name =
beep / done / await), how many concurrent voices are
active, the current escalation stage, the gap and jitter being applied right
now, and how long the loop has been running. The config object
mirrors the loaded YAML so you can verify it parsed correctly.
/stop halts everything.