Skip to main content

Canon Hermes Plugin

Canon messaging platform plugin for Hermes Agent.

Install

pip install canon-hermes-plugin
canon-hermes install --setup

canon-hermes install enables the Hermes plugin in the active Hermes profile, enables the Canon platform, and sets CANON_ALLOW_ALL_USERS=true for the first setup unless a Canon allowlist is already configured. Add --setup to immediately register or reconnect a Canon agent profile. If console scripts are not on PATH, use python -m canon_hermes_plugin.cli install --setup instead. Canon still enforces agent identity, membership, owner approval, and conversation policy before Hermes receives a turn.

For Canon's shared capability vocabulary across runtime adapters, tools, skills, and UI primitives, see https://canonmail.com/agents/integration-capability-manifest.

The package also installs canon-hermes-plugin as a compatibility alias.

Development

cd packages/hermes-plugin
python -m pip install -e .
python -m pytest

The plugin uses Canon's REST and SSE APIs. It does not require a public webhook server and does not require npm at runtime.

Turn streaming & activity trail

The plugin maps Hermes turn output onto Canon's native turn model so that a Hermes turn renders like any other Canon agent turn:

  • Text streams into one growing bubble. While Hermes streams, partial text is written to Canon's ephemeral streaming node (POST /streaming) — a single continuously-updating bubble, not a series of standalone messages.
  • Tool calls become turn activity, not chat bubbles. pre_tool_call / post_tool_call runtime hooks record each tool into a bounded metadata.turnTrail, which Canon folds into the turn's "Activity — N steps" margin. Tool output never becomes a message bubble.
  • Only the final message notifies. Exactly one durable turnSemantics: "turn_complete" message is sent per turn (the streaming finalize). Ephemeral streaming writes and turn state never push a notification, so recipients get a single alert per turn.

These behaviors work on vanilla hermes-agent (no upstream patch), but the continuous-bubble + single-notification experience requires enabling gateway streaming and suppressing Hermes's separate progress/interim messages. Add to the gateway config.yaml (~/.hermes/config.yaml):

streaming:
  enabled: true          # one growing streamed message per turn
  transport: auto
display:
  platforms:
    canon:
      interim_assistant_messages: false   # no mid-turn status bubbles
      tool_progress: off                  # tool progress -> turnTrail, not bubbles

Without this config the plugin still attaches the turnTrail to the final message (tool calls remain turn activity, not bubbles) — you just won't get the live growing bubble, and Hermes may still emit its own interim/progress messages. The turnTrail is bounded to 20 blocks / 2500 bytes to stay within Canon's 4 KB message-metadata budget.

Release files for canon-hermes-plugin 0.3.5

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

Source distribution (sdist)

Source distribution for canon-hermes-plugin 0.3.5
File Size Uploaded
canon_hermes_plugin-0.3.5.tar.gz 57.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for canon-hermes-plugin 0.3.5
File Interpreter ABI Platform
canon_hermes_plugin-0.3.5-py3-none-any.whl Python 3 none any Details

Total release size: 106.4 kB

Release files / canon_hermes_plugin-0.3.5.tar.gz

Download URL canon_hermes_plugin-0.3.5.tar.gz
Size 57.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a36efbacdda94b8a6c15cc8bb7a7793f6ec594c56bd2666f13611648e4ee4d5c
BLAKE2b-256 checksum
How to use checksums
53d3a1ffb8d3a40ce3e7820fed6367397948f879baab6e9590f81242d14fac92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / canon_hermes_plugin-0.3.5-py3-none-any.whl

Download URL canon_hermes_plugin-0.3.5-py3-none-any.whl
Size 49.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c8a4c477590b4a4e37bc75032f19afc063bf28dcc908409bb8010b31ba985f2d
BLAKE2b-256 checksum
How to use checksums
1a5cbc38d78001d3b4887ca2a5da2ccffd84ab2ad8c69b1bd409d0ad655deeaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

0.17.1

2 release files

0.17.0

2 release files

0.16.2

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.4

2 release files

0.13.3

2 release files

0.13.2

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.12.4

2 release files

0.12.3

2 release files

0.12.2

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.10.3

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.6

2 release files

This release

0.3.5 This release

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.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