ZenMux for Hermes Agent
An out-of-tree Hermes model-provider plugin that connects ZenMux using OAuth 2.0 Authorization Code with PKCE. Hermes owns the browser callback, credential pool, proactive refresh, and refresh-token serialization.
Requirements
- A Hermes Agent build containing the declarative OAuth PKCE plugin API
(NousResearch/hermes-agent main at or after
3e67877e1b). - A dedicated ZenMux public OAuth client for Hermes. Do not reuse a client registered for DSH, Codex, or another application.
- Allowed scope:
inference:invoke offline_access. - Allowed loopback redirect URI:
http://127.0.0.1:*(Hermes chooses an ephemeral port).
Install from a checkout
PyPI
Install the package into the same Python environment as Hermes, then explicitly enable its entry point:
python3 -m pip install zenmux-hermes-plugin
hermes plugins enable zenmux
Restart an already-running Hermes process after installation.
Git checkout
HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
mkdir -p "$HERMES_HOME/plugins/model-providers"
git clone https://github.com/ZenMux/hermes-plugin.git \
"$HERMES_HOME/plugins/model-providers/zenmux"
cd "$HERMES_HOME/plugins/model-providers/zenmux"
The repository already contains the dedicated Hermes public client ID. The
configure.py command is only needed for development against another
registered client:
python3 configure.py zpc_YOUR_DEVELOPMENT_CLIENT_ID
Restart an already-running Hermes process after installing or updating a checkout. Then authenticate and select a model:
hermes auth add zenmux
hermes auth status zenmux
hermes model
hermes auth refresh zenmux rotates the access and refresh tokens.
hermes auth logout zenmux removes the ZenMux credential rows.
After a valid callback, the loopback page embeds ZenMux's client-aware
completion page in a full-screen iframe. A callback with an invalid OAuth
state never renders the success iframe.
The public client ID is stored in zenmux.json. OAuth access and refresh
tokens are not stored by this plugin; Hermes keeps them in its credential
pool.
Current transport
The first release uses ZenMux's OpenAI-compatible endpoint:
https://zenmux.ai/api/v1
The live model picker reads https://zenmux.ai/api/v1/models with the pooled
OAuth access token. No static model list is embedded in the plugin.
Release files for zenmux-hermes-plugin 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zenmux_hermes_plugin-0.1.1.tar.gz | 10.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zenmux_hermes_plugin-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.5 kB
Release files / zenmux_hermes_plugin-0.1.1.tar.gz
| Download URL | zenmux_hermes_plugin-0.1.1.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2d171142524d35f19a3ed943748a0314ab585bb013bd219b3d03a8d92cb396f8
|
|
BLAKE2b-256 checksum How to use checksums |
20b172a8c470b40aa0868ffe8294860caae3bdb2d4715c5ea7187b4df836247a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency logRelease files / zenmux_hermes_plugin-0.1.1-py3-none-any.whl
| Download URL | zenmux_hermes_plugin-0.1.1-py3-none-any.whl |
|---|---|
| Size | 8.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9f3ff05bd16debad938abc909dfe3793f9271ed2d94d49851ce04712ade21627
|
|
BLAKE2b-256 checksum How to use checksums |
2b2459291d3c7237293d4e01e4d04a4641917a57b384c32ac416a3378bd06e20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency log