hermes atlas
250·repos hermes·v0.21.3 ★ star this repo

bielcarpi/hermes-live-voice

Self-hosted realtime voice gateway for Hermes Agent. Keep talking while Hermes runs background tasks through local, Gemini Live, and OpenAI Realtime adapters.

★ 48 langTypeScript licenseMIT updated2026-09-15

Hermes Live Voice is a self-hosted realtime voice gateway and dashboard plugin for Hermes Agent that enables continuous voice interaction during background task execution. It manages task supervision, progress streaming, and client protocols while delegating speech processing to local or hosted realtime providers.

  • Supports OpenAI Realtime, Gemini Live, and local Hugging Face providers.
  • Maintains background task execution through voice disconnects and reconnects.
  • Includes dashboard, browser SDK, and headless terminal clients.
full readme from github

Hermes Live Voice — Keep talking. Hermes keeps working.

Hermes Live Voice

Keep talking while Hermes does real work.
Continuous realtime voice for saved chats, background runs, live progress, and reconnect-safe completion notices.

CI npm version release GitHub stars MIT License

Hermes Live Voice is a self-hosted realtime voice gateway and Dashboard plugin for Hermes Agent.

It supports long voice workflows: start a task, keep talking, disconnect, reconnect, and still receive the result.

Hermes remains the agent brain: model routing, tools, memory, skills, and execution stay in Hermes. The realtime provider handles speech and turn-taking. Hermes Live Voice owns the gateway, task supervision, progress stream, and client protocol.

Hermes Live Voice running as a connected tab inside the native Hermes Dashboard
Native Hermes Dashboard v0.20.6 with the bundled plugin connected in local mock mode.

Quick start

You need Hermes Agent 0.18.2 or newer and Node.js 20+. Local voice on Apple Silicon also needs uv.

npm install --global hermes-live-voice
hermes-live setup --provider openai
hermes-live launch-check
hermes dashboard

Open Live Voice. Choose a new or saved chat. Select Connect. The microphone starts automatically. Say "pause listening" to pause. Use the microphone button to resume.

Provider Best for Setup
OpenAI Realtime Fast hosted setup hermes-live setup --provider openai
Gemini Live Google or Vertex deployments hermes-live setup --provider gemini
Local Hugging Face Private local voice on Apple Silicon hermes-live setup --provider local --service

hermes-live setup installs the Hermes Dashboard plugin and the companion gateway. launch-check rejects mock mode and proves the complete path through one bounded Hermes worker.

Deterministic fixtures cover Hermes Agent 0.20.0 (v2026.8.3). Scheduled CI also checks the current Hermes image. See Setup for local voice requirements, remote endpoints, and Docker.

What it does

  • Continuous microphone mode with voice activity detection and barge-in
  • New or resumed Hermes chats with their existing memory and history
  • Background work that continues through voice disconnects
  • Live, sanitized task progress and tool activity
  • Parallel read-only work when the operator explicitly enables it
  • Spoken completion notices and a persistent task inbox
  • Dashboard, browser SDK, and headless terminal clients

Try:

Audit this repository and run the tests in the background. While that runs, help me plan the release. Tell me when it is done.

The voice conversation stays responsive while a server-side supervisor owns the Hermes run. Interrupting speech never stops a task. Stopping a task always targets its exact task ID.

See the text-only workflow transcript for the expected task handoff, progress, reconnect, and completion flow.

How it works

Hermes Live Voice architecture

  1. The Dashboard, browser SDK, or terminal opens the authenticated protocol v6 WebSocket and selects a Hermes conversation.
  2. Local speech-to-speech, Gemini Live, or OpenAI Realtime handles the live voice turn and can call the gateway's small task-control toolset.
  3. The gateway persists accepted work, starts a separate Hermes /v1/runs worker, and publishes bounded progress events.
  4. Results remain in the task inbox across reconnects. Follow-ups create new workers with explicit parent/root lineage.

Task state lives at ~/.hermes/hermes-live/tasks-v1.json by default. It is bounded, private, and single-writer.

Clients

Use Client
Everyday voice Hermes Dashboard → Live Voice
SSH or headless control hermes-live terminal
Host app integration hermes-live-voice/browser

The terminal can resume chats and inspect or control tasks:

hermes-live terminal --resume <sessionId>

Commands include /tasks, /status, /result, /followup, /ack, /stop, and /interrupt. /quit detaches. It does not cancel work.

Browser integration is dependency-free:

import { HermesLiveClient } from "hermes-live-voice/browser";

const client = new HermesLiveClient({
  webSocketUrlProvider: () => getAuthenticatedSameOriginUrl(),
  conversation: { mode: "resume", sessionId: savedSessionId },
});

client.on("task.notification", renderNotification);
await client.connect();

See UI integration for authentication and the full client lifecycle.

Operations

hermes-live launch-check
hermes-live doctor --provider-smoke
hermes-live diagnostics
hermes-live service status
hermes-live service logs
hermes-live local status
hermes-live local logs
hermes-live print-config

After updating the npm package, run hermes-live upgrade. It reinstalls the matching plugin and service definitions without replacing your provider settings. Run hermes-live launch-check after the upgrade. hermes-live diagnostics writes a private support bundle without logs, prompts, task results, audio, or secret values.

hermes-live setup writes an allow-listed config to $HERMES_HOME/hermes-live/config.env (normally ~/.hermes/hermes-live/config.env) with private permissions. The gateway and Dashboard plugin read the same file. If the default port belongs to another app, setup picks a free local port automatically. Environment variables override the managed config. Project .env files are never loaded or executed.

For any non-loopback gateway bind, use a strong HERMES_LIVE_AUTH_TOKEN, an exact allowed origin, TLS, and edge rate limits. Keep Hermes itself private. See the security model.

Current boundaries

  • Durability applies to task receipts, state, notifications, and retained results. In-progress Hermes runs do not survive a Hermes Agent restart. Missing or ambiguous outcomes become unknown.
  • Work is exclusive by default. Parallelism requires HERMES_LIVE_TRUST_DECLARED_READ_ONLY=true because model-declared read-only scope is policy input, not a sandbox.
  • Approval-required tasks are denied and stopped fail-closed until Hermes exposes exact targeted approval identity to the gateway.
  • One delegated task creates one Hermes run. Hermes Live does not create a subagent team for every request.
  • The local launcher is currently managed on Apple Silicon. Other systems can run the upstream realtime server and set HERMES_LIVE_LOCAL_URL.
  • The local file store is for one gateway process, not a public multi-tenant or multi-node queue.
  • This repository does not ship a standalone web app. Browser voice runs in the Hermes Dashboard plugin or a host app that uses the browser SDK.

Documentation

License

MIT. This is a community project, not an official NousResearch distribution.