AIVG — AI Voice Gateway
AIVG is a platform-neutral voice satellite system: a thin, realtime voice transport (WebRTC / Opus) bridged into whichever agent platform plugin is configured (v1 canonical: Hermes; planned: OpenClaw). Satellites capture audio and play it back; STT, the agent loop, TTS, and end-of-utterance detection live in the upstream agent platform.
Install (PyPI)
pip install aivg
Supported: Python 3.11+ on Linux x86_64/aarch64, macOS arm64/x86_64.
⚠ Install into your existing Hermes virtualenv, not a fresh venv. The
aivg-satellite entry point is only discoverable by Hermes's plugin loader
if AIVG lives in the same venv Hermes runs from:
uv pip install --python ~/.hermes/hermes-agent/venv/bin/python aivg
Then add aivg-satellite under plugins.enabled: in ~/.hermes/config.yaml
and restart the gateway. Full setup flow: see docs/ or run
aivg setup --help.
Repo: https://github.com/cloudomate/aivg · Changelog: CHANGELOG.md · License: MIT.
Status
| Layer | State |
|---|---|
| Voice plane (WebRTC, Opus, server-side endpointing) | Implemented (features 001/005/006/008/010) |
| Management plane (registry, adoption, control WS, SSE logs) | Implemented (feature 011 Phases 1–4) |
aivg CLI + Hermes agent skill |
Implemented (feature 011 Phase 3+4) |
Quickstart
pip install -e . # picks up the renamed entry point
aivg --version # JSON envelope, contract_version 0.3.0
aivg list # see the fleet
aivg device get kitchen # full state of one device
aivg logs kitchen --follow
aivg onboard --ssid "MyWiFi" --password "..." --name "bedroom"
Repo layout
src/aivg_core/ # platform-neutral management plane
platforms/hermes/ # v1 Hermes plugin (Hermes-platform agent skill, bridge)
platforms/openclaw/ # planned plugin (stub)
webrtc/ # voice plane (WebRTC)
transports/ # additive non-WebRTC transports
esphome/ # ESPHome native API (feature 017)
grpc/ # gRPC bidi streaming (feature 021)
management/ # App. A REST + SSE + control WS
src/aivg_cli/ # `aivg` Typer CLI
proto/ # canonical cross-language wire schemas (gRPC transport)
skills/hermes-agent/ # Hermes-platform agent skill (invokes `aivg` CLI)
specs/ # Spec Kit features 001–021
docs/ # design notes, data-dir reference, rebrand allow-list
Transports
A satellite's audio plane can run over any of three transports; the gateway selects the best one each satellite advertises (no flag-day, no per-device branching):
| Transport | For | Notes |
|---|---|---|
| WebRTC | browser-tab satellites; legacy native | Opus, ICE/DTLS/SRTP. The only option a browser can open. |
| ESPHome native API | ESPHome voice devices (feature 017) | Additive; off by default. |
| gRPC | native satellites — RPi/ESP32 class (feature 021) | Bidi Audio.Stream (mic up, audio+transcripts+events down); optional Management service for the control plane. No ICE/DTLS to stall. |
The gRPC transport is off by default. Opt in via the satellite: block in
~/.hermes/config.yaml:
satellite:
enabled: true
transports:
grpc:
enabled: true
port: 8645 # audio plane (distinct from management 8643 / webrtc 8644)
tls: insecure # trusted-LAN default; "mtls" for fleet
downstream_codec: pcm # or "opus"
management_over_grpc: false # true => also serve the control plane over gRPC
The canonical wire schema lives at
proto/aivg/satellite/v1/ — the single source of
truth shared by the Python gateway and native C++ clients (in the companion
aivg-devices repo). Regenerate
the Python stubs with scripts/gen_proto.sh.
Hermes vs AIVG
| Use this | When you mean |
|---|---|
| AIVG | the product, the repo, the system as a whole |
| Hermes | the v1 agent-platform plugin (one of several AIVG supports) |
aivg |
the CLI binary |
aivg_core |
the platform-neutral Python package |
~/.aivg/ |
AIVG's operator data (state, firmware manifests) |
~/.hermes/ |
the Hermes plugin's data (provider config, secrets) |
Development
# Editable install with all dev deps (pytest, ruff, black, etc.)
pip install -e ".[dev]"
# or with uv:
uv pip install -e ".[dev]"
# Run the suite
pytest -q # 300+ tests
Runtime + dev deps are declared in pyproject.toml under
[project] and [project.optional-dependencies] respectively.
(The legacy requirements-dev.txt was removed in feature 018 —
single source of truth is the pyproject.toml extras now.)
See specs/ for the design history and the active feature
(currently 018-aivg-pypi-distribution).
Metadata
Release files for aivg 0.4.0
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 | Actions |
|---|---|---|---|---|
| aivg-0.4.0.tar.gz | 151.1 kB | Without provenance | Details for aivg-0.4.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aivg-0.4.0-py3-none-any.whl | Python 3 | none | any | Details for aivg-0.4.0-py3-none-any.whl |
Total release size: 334.3 kB
Release files / aivg-0.4.0.tar.gz
| Download URL | aivg-0.4.0.tar.gz |
|---|---|
| Size | 151.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
98a48330f915dee076266baa4909fff7b620a195d21ffcd89d9eaed767590d1e
|
|
BLAKE2b-256 checksum How to use checksums |
f8799838603a297d6266f5d458d4e1c22d57c8a74834afc7a61ff90a41defec8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / aivg-0.4.0-py3-none-any.whl
| Download URL | aivg-0.4.0-py3-none-any.whl |
|---|---|
| Size | 183.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ec17694e943f241ca24adf9a117481ee19aac9847280bd3e9c88f76500e2f5b
|
|
BLAKE2b-256 checksum How to use checksums |
5f731d0e7106b7013833ebc01edb53fd420d4f94760530541b9b5ccfae1fa782
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for aivg 0.4.0
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.