Agent Notify Server

Local audio-cue HTTP server for long-running agents.

One-shot alerts

EndpointBehavior
GET /alert_beepPlay alert_beep once.
GET /alert_donePlay alert_done once.
GET /alert_awaitPlay alert_await_user_input once.

Looping alerts replaces existing loop

EndpointBehavior
GET /loop_beepLoop alert_beep. Replaces any prior loop.
GET /loop_doneLoop alert_done. Replaces any prior loop.
GET /loop_awaitLoop 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.

Stop

EndpointBehavior
GET /stopStop all playback (loops and queued one-shots).

State read-only

EndpointBehavior
GET /stateJSON 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.

Mixing rules