Skip to main content

StageWhisper Hermes Platform Adapter

Hermes platform adapter that exposes the StageWhisper desktop app as a first-class messaging surface for your Hermes Agent. Live-call transcripts arrive on a :reasoning chat thread, in-call chat arrives on a :chat thread, and the agent's reply is delivered back to the client over an SSE reply stream it holds open, or POSTed to a callback URL if the client's request asked for one.

Install

pipx install hermes-platform-stagewhisper
stagewhisper-hermes-install

The installer drops a minimal shim into ~/.hermes/plugins/stagewhisper/:

  • PLUGIN.yaml
  • adapter.py (6-line shim that re-exports the in-package adapter)

pipx upgrade hermes-platform-stagewhisper patches the adapter without re-running the installer. stagewhisper-hermes-install --uninstall removes the shim.

Configure

Required environment variables (set in ~/.hermes/.env or via hermes config):

Variable Purpose
STAGEWHISPER_RELAY_TOKEN Bearer token shared with the desktop app (32+ chars).
STAGEWHISPER_LISTEN_PORT Loopback TCP port the adapter binds (1024-65535).

Optional:

Variable Default Purpose
STAGEWHISPER_LISTEN_HOST 127.0.0.1 Must be loopback.
STAGEWHISPER_ALLOW_INGRESS_HOSTS unset Comma-separated Host names accepted in addition to localhost. Set this to your tailnet name when reaching the adapter through tailscale serve.
STAGEWHISPER_ALLOW_CALLBACK_URLS unset Comma-separated exact origins (scheme + host + port) the adapter may POST replies to. Loopback is trusted implicitly only while STAGEWHISPER_ALLOW_INGRESS_HOSTS is unset; once remote ingress is enabled, every callback origin (loopback included) must be listed here.
STAGEWHISPER_ALLOWED_USERS unset Comma-separated session_id allowlist.
STAGEWHISPER_ALLOW_ALL_USERS unset 1 to bypass allowlist.
STAGEWHISPER_MAX_CONCURRENT 4 Max in-flight tasks.
STAGEWHISPER_DEDUP_CACHE_SIZE 2048 Idempotency LRU size.

After setting the env vars, restart Hermes. hermes status will list StageWhisper (plugin) - connected.

Wire protocol

The client posts to http://127.0.0.1:<port>/v1/incoming with bearer auth. Three event reasons:

  • transcript_chunk (only is_final: true routes through the agent) -> chat thread sw:<session>:reasoning
  • chat_message -> chat thread sw:<session>:chat
  • system_prelude -> stashed and prepended to the next inbound message for that session as [Context: ...], then cleared

By default the adapter writes replies to GET /v1/events?session_id=<session>. The client opens the stream with the same bearer token before dispatch and shares it across pending tasks in that session. The stream closes after the last task settles. On connect, every currently retained terminal answer for that session is replayed, oldest first; that is the whole recovery story. Typing and tool activity are live-only and never consume the retained backlog.

If the inbound event instead carries a callback block ({"url": ..., "token": ...}), the adapter POSTs the reply to <callback.url>/tasks/<task_id> with that token as bearer auth, and retries on transient failures. callback.url must be a loopback URL, or an origin listed in STAGEWHISPER_ALLOW_CALLBACK_URLS. StageWhisper's own desktop and mobile apps never send a callback block; they always read from the stream.

Local development

uv run --with pytest --with pytest-asyncio python -m pytest -v

Metadata

Release files for hermes-platform-stagewhisper 0.42.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hermes-platform-stagewhisper 0.42.0
File Size Uploaded
hermes_platform_stagewhisper-0.42.0.tar.gz 23.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hermes-platform-stagewhisper 0.42.0
File Interpreter ABI Platform
hermes_platform_stagewhisper-0.42.0-py3-none-any.whl Python 3 none any Details

Total release size: 53.2 kB

Release files / hermes_platform_stagewhisper-0.42.0.tar.gz

Download URL hermes_platform_stagewhisper-0.42.0.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5962bd71f82edc8afaa7e3c890405cad2ad9f5736c0e42e974f4eb1b89cc96ff
BLAKE2b-256 checksum
How to use checksums
c9cbd6a49bd8dbce9072be9b9f6c8307817e29c2abe6ce1683c25ea98ba69d38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hermes_platform_stagewhisper-0.42.0-py3-none-any.whl

Download URL hermes_platform_stagewhisper-0.42.0-py3-none-any.whl
Size 30.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d5e5f8c903dcde1814e96ac5ff94ad7e5d1b84a4ee85f493cafd0f6636e484ac
BLAKE2b-256 checksum
How to use checksums
38f061f9e097eda208def085e27c9831b54cd1ab49c8481b51fc268221d34ee9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.42.0 This release

2 release files

0.41.0

2 release files

0.38.0

2 release files

0.37.0

2 release files

0.36.0

2 release files

0.35.0

2 release files

0.34.0

2 release files

0.33.0

2 release files

0.32.0

2 release files

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