Files
hermes-agent/website/docs/user-guide/features/plugins.md

2.3 KiB

sidebar_position
sidebar_position
20

Plugins

Hermes has a plugin system for adding custom tools, hooks, and integrations without modifying core code.

Build a Hermes Plugin — step-by-step guide with a complete working example.

Quick overview

Drop a directory into ~/.hermes/plugins/ with a plugin.yaml and Python code:

~/.hermes/plugins/my-plugin/
├── plugin.yaml      # manifest
├── __init__.py      # register() — wires schemas to handlers
├── schemas.py       # tool schemas (what the LLM sees)
└── tools.py         # tool handlers (what runs when called)

Start Hermes — your tools appear alongside built-in tools. The model can call them immediately.

Project-local plugins under ./.hermes/plugins/ are disabled by default. Enable them only for trusted repositories by setting HERMES_ENABLE_PROJECT_PLUGINS=true before starting Hermes.

What plugins can do

Capability How
Add tools ctx.register_tool(name, schema, handler)
Add hooks ctx.register_hook("post_tool_call", callback)
Ship data files Path(__file__).parent / "data" / "file.yaml"
Bundle skills Copy skill.md to ~/.hermes/skills/ at load time
Gate on env vars requires_env: [API_KEY] in plugin.yaml
Distribute via pip [project.entry-points."hermes_agent.plugins"]

Plugin discovery

Source Path Use case
User ~/.hermes/plugins/ Personal plugins
Project .hermes/plugins/ Project-specific plugins (requires HERMES_ENABLE_PROJECT_PLUGINS=true)
pip hermes_agent.plugins entry_points Distributed packages

Available hooks

Hook Fires when
pre_tool_call Before any tool executes
post_tool_call After any tool returns
pre_llm_call Before LLM API request
post_llm_call After LLM API response
on_session_start Session begins
on_session_end Session ends

Managing plugins

/plugins              # list loaded plugins in a session
hermes config set display.show_cost true  # show cost in status bar

See the full guide for handler contracts, schema format, hook behavior, error handling, and common mistakes.