Hands-free voice into your own agent, as a real phone call.
Free Android app, made by Aurelius × Radix. The app's page is
https://aureliusxradix.com/work/radivoice/ and the manual is
https://aureliusxradix.com/work/radivoice/manual/. This is the RadiVoice of that site; the
radivoice dataset on Hugging Face is another person's work.
Point it at your own server. RadiVoice ships no server, no account and no default host — it is a client for infrastructure you already run.
A browser cannot do "phone on lock, still listening". A sleeping phone suspends the page, its
AudioContext and the websocket together. Keeping the screen awake defeats the point.
RadiVoice registers a self-managed ConnectionService, so a session is a real telecom call:
- lock-screen call UI, and the earbud button ends it
- the system routes Bluetooth SCO for you
- audio survives screen-off
MODE_IN_COMMUNICATIONengages hardware echo cancellation — without it the reply is picked straight back up by the mic and re-transcribed, and every answer starts a new turn
- Send gate — audio below a learned noise floor never leaves the phone. Keeps a 300 ms lead-in so the first syllable is not clipped, and an 800 ms tail so trailing words survive.
- Barge-in — start talking and the reply stops. No button. ~120 ms of sustained speech is required, so a cough will not cut it off.
- Mute that actually mutes — the system mute button stops the send, rather than only looking like it does.
- Discreet mode — a hidden foreground service instead of a call. Nothing on the lock screen. Android will not allow background microphone access without some notification; it can be hidden from the lock screen but not removed, and anything claiming otherwise is about to be killed by the OS.
Raw 16-bit mono PCM at 16 kHz over a websocket. That is the whole wire format.
Optional query parameters: ?target=<name>&voice=<key>.
Optional Cloudflare Access service-token headers (CF-Access-Client-Id /
CF-Access-Client-Secret), entered on the device — never compiled into the binary. Each
release is checked for that before it is published.
Obtainium → add by URL → this repository. Releases are signed with a stable key.
Personal software, published because someone else may want the same thing. No support implied.