Releases: rusty4444/hermes-voice-ha-integration
v0.0.10 — Packaged Hermes plugin installer
What's Changed
- Added a packaged
hermes-ha-install-pluginsconsole command for installing the bundled Hermeshome_assistantandvoice_stackplugins into a Hermes Agent profile. - Plugin installs now replace existing plugin directories first, avoiding stale files during upgrades.
- Updated the README with the pip/GitHub install path and safer manual upgrade steps.
- Synced Home Assistant integration, add-on, and Hermes plugin metadata to
0.0.10.
Validation
python3 -m pytest -qpassed locally after installingpytest-asyncio: 128 passed.- GitHub CI passed on Python 3.11 and 3.12.
Addresses #30.
v0.0.9 — Fix conversation agent selectable (HA 2026.6+ compat)
What's Changed
🐛 Bug Fix — Conversation Agent Selectable Again (HA 2026.6+)
PR #31 fixes a regression where the Hermes conversation agent was greyed out and unselectable in the Assist pipeline dropdown on Home Assistant 2026.6.x.
Root cause: supported_languages in conversation.py was returning ["*"] (a list), but Home Assistant 2026.6+ requires the wildcard language marker to be the plain string "*". The list form caused the agent to appear greyed out.
Fix: Changed supported_languages to return "*" (plain string) instead of ["*"] (list).
How to Update
- HACS → Updates → Hermes Voice Assistant → Update to v0.0.9
- Restart Home Assistant
- Go to Settings → Voice assistants → Assist → select Hermes in the Conversation agent dropdown
Full Changelog: v0.0.8...v0.0.9
v0.0.8 — Assist Conversation Agent + WebSocket Reader Fix
What's Changed
🎙️ Assist Conversation Agent (#27, #28)
Hermes can now be selected as a conversation agent in Home Assistant Assist pipelines. The flow is: HA Voice wakes/listens → STT → Assist sends text to Hermes → Hermes responds → TTS speaks the response.
- Added
Platform.CONVERSATIONandHermesConversationAgentimplementingConversationEntity.async_process() - Text is forwarded to Hermes via WebSocket (
assist_query/assist_responsemessage types) - Graceful error handling with speech fallbacks when Hermes is unavailable
🔌 WebSocket Reader Keep-Alive (#27)
The HA integration now maintains a persistent background reader task that continuously drains messages from the Hermes WebSocket, keeping the aiohttp heartbeat alive.
voice_settingscommands now returnsent: trueimmediately instead of being queued- Auto-reconnect on disconnect
- Reader task is properly cancelled during shutdown
📦 Other fixes
- #26: Fixed add-on Hermes home and cache paths for Docker environment
- Documentation: Added WebSocket message type reference for Assist pipeline and troubleshooting entry for timeouts
- Code review: Addressed Kimi K2 findings
Protocol Notes
The conversation pathway uses two new WebSocket message types:
- Outgoing:
{"type": "assist_query", "text": "...", "conversation_id": "...", "language": "..."} - Incoming:
{"type": "assist_response", "text": "...", "conversation_id": "...", "speech": {...}}
v0.0.7
v0.0.7
Fixes issue #23 and the related plugin load failures reported in Hermes logs.
Fixed
- Replaced absolute
plugins.*imports with package-relative imports sohome_assistantandvoice_stackload under Hermes' dynamic user-plugin namespace. - Added a regression test that imports both plugins from a simulated
hermes_pluginsnamespace without touching a local Hermes source checkout. - Updated all release metadata to
0.0.7. - Updated README release/install guidance for the Hermes voice bridge.
Verification
- CI passed on Python 3.11 and 3.12.
python scripts/check_release_integrity.py --tag v0.0.7 --no-artifactspython -m pytest -q
v0.0.6: Hermes Conversation Agent for HA Assist
v0.0.6 — 2026-05-29
Added
- Conversation agent: HA Assist can now route natural-language requests to @hermes-agent via WebSocket.
Changed
- Raised version to 0.0.6 across all integration, plugin, and addon manifests.
Full changelog:
- Added HermesConversationAgent that bridges HA Assist to Hermes Agent via WebSocket
- Implemented request/response correlation using asyncio futures with 10s timeout
- Enhanced HermesBridge with WS listener, message dispatcher, and pending flush helper
- Fixed wake_word normalization using const.normalize_wake_word
- Bumped version to 0.0.6 across all manifests (pyproject, manifest, addon, plugins)
- Updated changelog and README with release details
- All 124 tests pass including new conversation agent integration
Source code: https://github.com/rusty4444/hermes-voice-ha-integration/archive/refs/tags/v0.0.6.tar.gz
v0.0.5 — Setup form URL/token guidance
What's changed
- Added
custom_components/hermes/translations/en.jsonso Home Assistant has the runtime translations needed by the Add Integration dialog. - Expanded the setup form copy so the page explains:
- URL = the Hermes Agent machine/container URL Home Assistant can reach, e.g.
http://hermes.local:7860; not your Home Assistant URL. - Token = the Hermes API/WebSocket token (
HERMES_HA_WS_TOKEN, otherwiseAPI_SERVER_KEY/HERMES_API_KEY); not a Home Assistant long-lived access token. - Route: Home Assistant connects → Hermes host/container URL → Hermes API/WebSocket receiver.
- URL = the Hermes Agent machine/container URL Home Assistant can reach, e.g.
- Bumped integration/add-on/plugin/package metadata to
0.0.5.
Verification
python -m pytest tests/ -q— 97 passedpython -m build --sdist --wheel- Release artifact inspection confirmed
custom_components/hermes/translations/en.jsonis included and contains the required URL/token guidance.
Upgrade note
After HACS updates to v0.0.5, restart Home Assistant. If the old setup copy still appears, hard-refresh the browser or clear HA frontend cache.
v0.0.4 — Home Assistant brand icons
What's changed
- Added Home Assistant local brand assets under
custom_components/hermes/brand/:icon.pnglogo.pngicon@2x.pnglogo@2x.png
- Generated those assets from the README
logo.pngso Home Assistant can serve the same repo logo through/api/brands/integration/hermes/icon.pngand/api/brands/integration/hermes/logo.png. - Kept the existing root/legacy icon locations in place for HACS/repository contexts.
- Bumped package/add-on/plugin/custom-integration metadata to
0.0.4. - Added missing dev dependencies (
PyYAML,build) so a fresh venv can run the existing YAML tests and build workflow.
Verification
python -m pytest tests/ -q— 95 passedpython -m build --sdist --wheel- Release artifact inspection confirmed the sdist includes
custom_components/hermes/brand/{icon,logo}.pngand@2xvariants.
Note
After updating through HACS, restart Home Assistant and hard-refresh the browser. Home Assistant may cache brand assets under /api/brands/integration/hermes/icon.png.
v0.0.3 — setup UI clarity and icons
What's changed
- Clarified the Home Assistant setup UI so the URL field explicitly asks for the Hermes Agent machine/container URL that Home Assistant can reach.
- Clarified the token field as the Hermes API/WebSocket bearer token (
HERMES_HA_WS_TOKEN, falling back toAPI_SERVER_KEY/HERMES_API_KEY), not a Home Assistant long-lived access token. - Switched setup fields to Home Assistant selectors: URL input for the Hermes endpoint and masked password input for the token.
- Added logo-derived integration icons for HACS/Home Assistant:
icon.pngcustom_components/hermes/icon.pngcustom_components/hermes/logo.png
- Added a visual README setup guide showing what belongs in each field and the connection path: Home Assistant → Hermes
:7860→/api/hermes/ws. - Bumped package/add-on/plugin/custom-integration metadata to
0.0.3.
Verification
python3 -m pytest tests/ -q— 95 passedpython3 -m build --sdist --wheel- Release artifact inspection confirmed the sdist contains the new icons, README visual setup guide, custom integration files, add-on config, and plugin manifests.
v0.0.2 — WebSocket receiver + voice action dispatch
v0.0.2
Fixed
- Fixed type errors in
ws_receiver.pyby replacing bareDictusage with modern typing (dict,Mapping). - Wired
handle_voice_actiondispatch to_handle_voice_enable,_handle_voice_disable, and_handle_voice_statusfromplugins.voice_stack. - Bumped release metadata to
0.0.2acrosspyproject.toml,addon/config.yaml,manifest.json, plugin YAMLs, tests, README, and egg-info. - Added
TestVoiceWebSocketReceivercoverage forstate_changed, unknown type rejection, voice action dispatch, unsupported action rejection, and auth enforcement.
Verification
- Release created from existing tag
v0.0.2at commitbf56fc2.
v0.0.1
v0.0.1
First public release of Hermes × Home Assistant Voice Integration.
Highlights
- Step-by-step README for installing Hermes, configuring Home Assistant access, installing plugins, adding the HA custom integration, and verifying the setup.
- Home Assistant custom integration with config flow, status sensors, services, and Lovelace action bar resource.
- Hermes Home Assistant plugin with entity search, state lookup, service calls, overview, service discovery, compound tools, bulk control, event watcher, and safety gates.
- Hermes voice-stack plugin with wake-word, STT, TTS, and voice pipeline wrappers.
- Home Assistant add-on scaffold for supervised deployments.
Fixes before release
- Fixed HA integration unload/setup lifecycle and self-contained status sensors.
- Removed voice-stack-only dependencies from the HA custom integration manifest.
- Fixed HA WebSocket event auth/subscription handling.
- Fixed Lovelace resource serving via HA static path.
- Routed action bar voice actions through the Hermes WebSocket bridge.
- Hardened TTS/wake-word edge cases and Docker add-on dependency quoting.
- Added HACS metadata and source/package manifest coverage.
Verification
python3 -m compileall -q custom_components plugins testspython3 -m pytest tests/ -q→ 89 passedgit diff --checkpython3 -m build --sdist --wheel- Verified sdist/wheel expected artifact contents
- Independent release-blocker review passed