Skip to content

About

Public hermes plugins that I’ve developed & needed over time

Resources

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

hermes-plugins

build stars

Practical community plugins for Hermes Agent.

  • hermes-ssh gives Hermes named, multi-host SSH operations with a machine registry, reusable connections, background sessions, and audit history.
  • hermes-sfw routes dependency changes through Socket Firewall Free instead of trusting raw package-manager installs.
  • hermes-jev-compact scores stale tool results with TypeSafe Jev during context compression — keeps what the conversation still needs, drops the dead weight — falling back to the built-in prune on any failure.

Want the lazy route? Give your agent this repository and point it at AGENTS.md.

choose a plugin

plugin use it when package
hermes-ssh Hermes needs to operate one or more registered machines over SSH hermes-ssh
hermes-sfw Hermes installs or updates npm, Python, or Rust dependencies hermes-sfw
hermes-jev-compact context compression should keep only tool results Jev scores as still useful hermes-jev-compact

They are independent. Install any combination.

install in about a minute

Install only the section you need. The Python package must go into the same environment that runs hermes.

hermes-ssh

python -m pip install hermes-ssh
hermes plugins enable hermes-ssh --no-allow-tool-override
python -m pip show hermes-ssh

hermes-sfw

npm i -g sfw
sfw --version
python -m pip install hermes-sfw
hermes plugins enable hermes-sfw --no-allow-tool-override
python -m pip show hermes-sfw

hermes-jev-compact

python -m pip install hermes-jev-compact
hermes plugins enable hermes-jev-compact --no-allow-tool-override
python -m pip show hermes-jev-compact

Then opt in with context.engine: jev and /reset. See hermes-jev-compact for settings (endpoint base URL, key env, thresholds) and how the scoring works.

Run /reset or restart Hermes, then confirm the selected plugin is enabled:

hermes plugins list --enabled --plain

python might be the wrong environment

If pip show succeeds but Hermes cannot see the plugin, you installed it beside Hermes rather than inside Hermes.

Use the Python interpreter from the hermes executable's shebang, or let an agent follow AGENTS.md. Do not keep reinstalling into random Python environments until one happens to work.

hand this to your agent

Paste this into a coding or terminal-capable agent:

Install the Hermes plugin I ask for from https://github.com/TheEpTic/hermes-plugins.

Read AGENTS.md first. Identify the exact Python environment used by the `hermes` executable, install the matching PyPI distribution into that environment, enable it with `hermes plugins enable <name> --no-allow-tool-override`, restart or reset Hermes if possible, and verify it appears in `hermes plugins list --enabled --plain`.

Do not use `hermes plugins install TheEpTic/hermes-plugins`; this is a monorepo with three independent PyPI packages. Do not guess SSH credentials, register root accounts, connect to a host, or run a dependency operation merely to prove installation. Report the commands used, detected paths, installed version, and verification result.

For machine-readable instructions, agents can also read llms.txt.

first use

SSH

Register a machine explicitly, preferably with a dedicated non-root account:

ssh_machines action=add name=web1 host=192.0.2.10 user=deploy key=~/.ssh/id_ed25519
ssh_machines action=test name=web1
ssh_terminal machine=web1 command="uptime"

Or from chat:

/ssh web1 uptime

protected dependency work

sfw action=status
sfw action=run command="npm install express" workdir="/path/to/project"
sfw action=run command="uv pip install requests" workdir="/path/to/project"
sfw action=run command="cargo fetch" workdir="/path/to/project"

hermes-sfw is a guard, not a sandbox. Allowed package managers can still execute lifecycle scripts and build backends.

smarter compression

context:
  engine: jev
/reset

With hermes-jev-compact enabled and a System One key configured, the next compression scores stale tool results with Jev instead of truncating by age. Watch for the jev prune: line in the logs (calls scored, units dropped/truncated, fit stage) plus one jev decision: line per scored unit (tool, result size, error flag, both scores, action); if Jev is unreachable the built-in prune runs instead and the fallback is logged.

quick troubleshooting

symptom likely cause fix
plugin missing from hermes plugins list package installed into the wrong Python environment use the interpreter that launches hermes
plugin listed but tools are absent plugin is discovered but disabled run hermes plugins enable <name> --no-allow-tool-override, then /reset
sfw reports not installed Socket Firewall Free is not on Hermes's PATH run npm i -g sfw, then verify sfw --version from the same service environment
SSH says permission denied wrong user, key, or server authorization verify the same connection with OpenSSH outside Hermes
SSH host key changed the saved host key no longer matches investigate the host before changing known_hosts
jev compression never fires engine not selected, or key missing set context.engine: jev, check TYPESAFE_API_KEY in ~/.hermes/.env, /reset

security boundary

hermes-ssh executes commands with the credentials available to Hermes. Keep the machine registry tight, prefer dedicated non-root accounts, and use least privilege.

hermes-sfw only accepts a restricted dependency-operation grammar and sends accepted operations through Socket Firewall Free. It does not make package lifecycle code harmless.

hermes-jev-compact sends abridged conversation state (tool results replaced by short notes) to the configured System One endpoint; see its SECURITY.md before enabling on sessions carrying secrets outside that endpoint's trust boundary.

See SECURITY.md before exposing any plugin to untrusted prompts or repositories.

development

git clone https://github.com/TheEpTic/hermes-plugins.git
cd hermes-plugins

cd hermes-ssh
uv sync --extra dev --locked
uv run pytest

cd ../hermes-sfw
uv sync --extra dev --locked
uv run pytest

cd ../hermes-jev-compact
uv sync --extra dev --locked
uv run pytest

CI runs tests, Black, and strict mypy across Python 3.11 to 3.13. Releases are built from package-scoped tags and published to PyPI through GitHub OIDC.

license

MIT. See LICENSE.

About

Public hermes plugins that I’ve developed & needed over time

Resources

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages