Experimental, not tested on hardware. Nothing on this page has been tried on a real phone. The Hermes Termux page currently says the Termux package does not work and a fix is in progress. Use the normal setup unless you want to experiment.
The idea: Hermes Agent and the Car Voice bridge both run in Termux on the same
Android phone as the app, and the app connects to http://127.0.0.1:8787. Plain http is allowed only for
127.0.0.1 and localhost; that traffic never leaves the phone.
http://127.0.0.1:<port> and http://localhost:<port> as bridge address; every other address
must be https.http://127.0.0.1:8787/readyz once (1 second, no token).
If a Car Voice bridge answers, it offers: “A Car Voice bridge is running on this phone. Use it?” That fills
the address; the token is still needed.The bridge. In another Termux session, with Termux’ own Python (3.11 or newer):
pkg install python git
git clone https://github.com/Vantix-Wealth-Labs/hermes-car-voice.git ~/car-voice
cd ~/car-voice/backend
python -m venv .venv
.venv/bin/pip install edge-tts==7.3.1 segno==1.6.6
This installs only what an OpenAI-compatible speech service needs. Local Whisper (faster-whisper, which
needs native CTranslate2 and numpy builds) is not expected to install on Android and was not tried. The
bridge only loads it with HERMES_BRIDGE_STT_PROVIDER=local. Whether edge-tts and its dependencies
install in Termux was not tried either.
Configuration, e.g. in ~/car-voice/bridge.env:
HERMES_BRIDGE_HOST=127.0.0.1
HERMES_BRIDGE_PORT=8787
HERMES_BRIDGE_DATA_DIR=/data/data/com.termux/files/home/car-voice/data
HERMES_BRIDGE_TOKENS_FILE=/data/data/com.termux/files/home/car-voice/data/tokens.json
HERMES_API_BASE_URL=http://127.0.0.1:8642
HERMES_API_ALLOW_INTERNAL_HTTP=true
HERMES_API_KEY=<the API_SERVER_KEY of Hermes>
HERMES_BRIDGE_STT_PROVIDER=openai
HERMES_BRIDGE_STT_API_BASE=https://api.groq.com/openai/v1
HERMES_BRIDGE_STT_API_KEY=<key>
Create the data directory (mkdir -p ~/car-voice/data). This file has no JSON values, so
set -a; . ~/car-voice/bridge.env; set +a loads it into the shell.
.venv/bin/python -m hermes_voice_bridge serve..venv/bin/python -m hermes_voice_bridge pair --origin http://127.0.0.1:8787. You cannot scan a
QR code on the screen of the phone that shows it, so copy the printed token instead. In Car Voice, tap
“Use this bridge” (or type http://127.0.0.1:8787), paste the token and tap Save and verify.termux-wake-lock, which help but do not guarantee anything.127.0.0.1:8787. They still need the token, but if the bridge is
not running another app could listen on that port and receive the token when Car Voice connects. Only use
this while you run the bridge yourself.