All plugins

caduceus-governance

Deterministic, model-free admission control for what Hermes writes into its own skills: content lanes, operator-owned executable checks, a provenance lane for writes made after untrusted web/browser/MCP content, a tamper-evident ledger, and operator release/rollback. Observe by default. Disclosure — Records a digest of every skill_manage call in $HERMES_HOME/caduceus (observe mode, default); in opt-in boundary or enforce mode it blocks unadmitted skill_manage calls or deletes and restores files under $HERMES_HOME/skills (and, if enabled, MEMORY.md/USER.md and config.yaml, of which it keeps owner-only copies in its state directory) to the last admitted state, including changes made by `hermes update` skill syncs or hub installs. Operator-registered check commands run sandboxed (macOS Seatbelt, Linux Landlock/seccomp) or are held. The dashboard's POST /approve acts only on a signature from an operator-enrolled device. No network, no model calls.

EpistetechnicianToolsv0.1.0Updated 2 hours ago

About

Deterministic, model-free admission control for what Hermes writes into its own skills: content lanes, operator-owned executable checks, a provenance lane for writes made after untrusted web/browser/MCP content, a tamper-evident ledger, and operator release/rollback. Observe by default. Disclosure — Records a digest of every skill_manage call in $HERMES_HOME/caduceus (observe mode, default); in opt-in boundary or enforce mode it blocks unadmitted skill_manage calls or deletes and restores files under $HERMES_HOME/skills (and, if enabled, MEMORY.md/USER.md and config.yaml, of which it keeps owner-only copies in its state directory) to the last admitted state, including changes made by `hermes update` skill syncs or hub installs. Operator-registered check commands run sandboxed (macOS Seatbelt, Linux Landlock/seccomp) or are held. The dashboard's POST /approve acts only on a signature from an operator-enrolled device. No network, no model calls.

Caduceus governance for Hermes

Hermes carries the message; Caduceus is the staff that makes the carrier trustworthy.

A self-improving agent writes skills, memory and config that outlive the session. Caduceus judges what a run leaves behind, with a deterministic, model-free gate, a tamper-evident ledger and operator release and rollback. It never calls a model or the network.

What it does

  • Judges the effect, not the request. After a skill write (or any tool that can write the skills tree) and before a skill read, the tree is compared with its last admitted state. Anything not admitted is restored and the model is told why.
  • Provenance across sessions. If untrusted content entered the session (web_extract, web_search, browser_*, mcp_*: Hermes' own untrusted-tool list), a skill write is held for you whatever it says. This catches paraphrased, encoded and non-English instructions that no text pattern can. Code or data in a skill whose operator-registered check still passes is admitted; prose never is.
  • Operator control. caduceus status, review-effect <digest> (a bounded diff), release-effect, policy-set, attest-baseline, control freeze. Releasing is CLI-only; the Desktop pane is read-only.
  • A UI on desktop and phone. A Hermes dashboard tab, a Desktop review pane and a phone-ready page: see what is held, read the diff, and release or decline with a device signature (an Ed25519 key that never leaves your phone). caduceus device-add enrols a device.
  • Also governs MEMORY.md / USER.md and config.yaml (opt-in via mode.json surfaces).

Install

hermes plugins install caduceus-governance      # once listed; then enable it

Default mode is observe (records one ledger line per skill_manage call and never blocks). Opt in to boundary or enforce in $HERMES_HOME/caduceus/mode.json; see the repository README for modes and the full CLI.

Disclosure

The dashboard API adds one state-changing route, POST /approve, which applies a held change only on a valid signature from a device you enrolled; everything else it serves is read-only. The page is served with a strict nonce CSP and loads nothing external.
Reads and writes only under $HERMES_HOME/skills, $HERMES_HOME/memories, $HERMES_HOME/config.yaml (restoring them in boundary mode) and $HERMES_HOME/caduceus. No network, no model calls, no telemetry, no credential reads, no self-update, no background process.
Operator-registered check commands (none unless you add one) run in a copy of the skill under macOS Seatbelt or Linux Landlock plus seccomp (no network, no writes outside the copy); where confinement cannot be applied a check is Unavailable and the change is held, never passed.
The package ships a vendored copy of its kernel in _vendor/ because the catalog installs only this directory.

What it does not do

It does not catch malice with no untrusted input (a user-instructed or purely model-originated write), and static lanes cannot see intent. The evidence is author-written and descriptive; see docs/CLAIMS.md in the repository for exactly what is and is not claimed.

README from the reviewed commit 3d980d8; it updates when the author re-pins.

More by Epistetechnician

2 plugins by Epistetechnician in the catalog.

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section