Skip to main content

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.

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)

Source distribution for avervox-hermes 0.2.1
File Size Uploaded Provenance
avervox_hermes-0.2.1.tar.gz 10.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for avervox-hermes 0.2.1
File Interpreter ABI Platform
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.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page