AverVOX ↔ Hermes Agent
Use AverVOX (OSS or Pro) as the local TTS/STT backend for Hermes Agent.
Speech runs on the same machine as the agent: replies are never sent to a speech vendor, microphone audio is never uploaded, there is no per-character bill, and it all keeps working with the network down. With the warm bridge running, Hermes hears the first audio of a reply in about 0.32 s — see Latency.
Fastest path
Recent AverVOX builds write the config below and verify it for you:
avrvx --install-integration hermes
It synthesizes real audio afterwards and exits non-zero if anything is wrong,
and it never modifies an existing ~/.hermes/config.yaml — if you already have
one, it writes the snippet alongside for you to merge.
Recommended: command providers (no Python plugin required)
Requires AverVOX 0.5.0 or newer with avrvx on PATH:
# ~/.hermes/config.yaml (snippet — merge into your existing file)
tts:
provider: avervox
providers:
avervox:
type: command
command: "avrvx --synthesize --text-file {input_path} --output {output_path}"
output_format: wav
voice_compatible: true
timeout: 180
stt:
provider: avervox
providers:
avervox:
type: command
command: "avrvx --transcribe {input_path} > {output_path}"
format: txt
timeout: 300
A copy of this snippet lives at
hermes.config.snippet.yaml.
Verify:
avrvx --capabilities
hermes tools # pick AverVOX / avervox for TTS when using the Python plugin path
Optional: Python plugin
This directory is a Hermes plugin that registers TTS (and STT) providers named
avervox via register_tts_provider / register_transcription_provider.
Prefer the YAML command providers above unless you need picker metadata or
streaming hooks.
The plugin pipes reply text to avrvx over stdin rather than passing it as an
argument, so conversation text never appears in the process list. It caches the
--capabilities probe (the picker reads display_name repeatedly) and runs
avrvx in its own process group so a timeout also kills Piper or Whisper.
Install
pip install avervox-hermes
# then enable if required by your Hermes version
hermes plugins enable avervox
Install this into the same Python environment as Hermes Agent itself (it
registers a plugin entry point, so it must be importable from wherever
hermes runs) — if Hermes Agent lives in a virtual environment, activate that
environment first. If you get error: externally-managed-environment (PEP
668, common on Ubuntu 24.04, Debian 12+, and Linux Mint 22), it means Hermes
Agent itself is installed against the system Python; put both Hermes Agent
and this plugin in the same virtual environment rather than passing
--break-system-packages.
The package registers itself under the hermes_agent.plugins entry point
group, so Hermes discovers it without any path configuration.
To work on the plugin instead of just using it:
git clone https://github.com/avrvx/AverVOX-Integrations.git
pip install -e AverVOX-Integrations/hermes
Point Hermes at AverVOX:
tts:
provider: avervox
stt:
provider: avervox
AverVOX → Hermes (Converse)
In the AverVOX Dashboard (Pro) or Settings → LLM (OSS), add a profile:
| Field | Example |
|---|---|
| Label | Hermes Agent |
| API base | http://127.0.0.1:<hermes-port>/v1 |
| Session header | X-Hermes-Session-Id |
OSS vs Pro
One integration. Pro features (Kokoro, etc.) follow whatever AverVOX has
configured; avrvx --capabilities reports the edition.
Latency
Measured through Hermes' own registries on a 2017 laptop with Piper
en_US-lessac-high. "First audio" is the wait before playback can start on a
three-sentence reply; "whole reply" is the wait for a finished WAV.
| Spawn per call | Warm daemon | |
|---|---|---|
| First audio (streaming) | 2.6 s | 0.32 s |
| Whole reply (file) | 3.3 s | 0.77 s |
Two independent wins. avrvx --daemon removes the Python start and model load
from every call; see systemd/
for a user unit. Streaming then starts playback on the first sentence instead
of the last. Neither is required — without both, the first column applies and
everything still works.
Tested against
| Version | |
|---|---|
| Hermes Agent | 0.19.0 (commit 1161cc0) |
| AverVOX | OSS and Pro, 0.5.0 and newer |
| Python | 3.12 |
Verified by registering through Hermes' own agent.tts_registry and
agent.transcription_registry and then synthesizing from what came back out,
rather than by calling the provider classes directly. That distinction matters:
PluginContext.register_tts_provider isinstance-checks against
agent.tts_provider.TTSProvider and only logs a warning when the check fails,
so a provider that does not inherit the ABC is dropped without raising. The
streamer is resolved through tools.tts_streaming.resolve_streaming_provider
for the same reason.
Metadata
Release files for avervox-hermes 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| avervox_hermes-0.2.1.tar.gz | 10.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| avervox_hermes-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.6 kB
Release files / avervox_hermes-0.2.1.tar.gz
| Download URL | avervox_hermes-0.2.1.tar.gz |
|---|---|
| Size | 10.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a5dbf8243db5796c01562e29bbf914446b03b579ba5047e79e56444887b1a863
|
|
BLAKE2b-256 checksum How to use checksums |
4332cfa8ae77cffdeaf38fc7030a6053eb198c8080e40c7dfeff3f52fef92d44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / avervox_hermes-0.2.1-py3-none-any.whl
| Download URL | avervox_hermes-0.2.1-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7037cf95f36663c529ca76fbcb1700bf30a46f2454f64f0431b3af308ff36ecd
|
|
BLAKE2b-256 checksum How to use checksums |
cd2b408e1b41cb3f84b25fce33d8f25bdd2a8695abadd1da4f1efc83d518744b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for avervox-hermes 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.