Built-in Plugins โ Ready-to-Use Enhancements
Built-in Plugins โ Ready-to-Use Enhancements โ easy-to-understand guide based on official docs (updated 2026-08-09)
Think of plugins like phone apps for your AI assistant โ you donโt rebuild the phone, you just add a small app that does one thing really well.
What Are Hermes Plugins?
Hermes plugins are small folders you drop into a special directory. Each folder contains a few files that tell Hermes: โHey, hereโs a new tool the AI can use, and hereโs what to do when itโs called.โ You donโt touch the core code. Itโs like adding a new button to your remote control without opening the TV.
The Magic Folder
All plugins live here:
~/.hermes/plugins/
Inside, each plugin is its own folder. A minimal one looks like this:
~/.hermes/plugins/my-plugin/
โโโ plugin.yaml # basic info about the plugin
โโโ __init__.py # where you wire things together
โโโ schemas.py # what the AI "sees" (descriptions)
โโโ tools.py # what actually runs when called
You donโt need all those files for a simple plugin โ just plugin.yaml and __init__.py will do.
Your First Plugin in 2 Minutes
Hereโs a complete example that adds a hello_world tool and logs every tool call.
File 1: ~/.hermes/plugins/hello-world/plugin.yaml
name: hello-world
version: "1.0"
description: A minimal example plugin
File 2: ~/.hermes/plugins/hello-world/__init__.py
import json
def register(ctx):
# Define what the AI sees
schema = {
"name": "hello_world",
"description": "Returns a friendly greeting for the given name.",
"parameters": {
"type": "object",
"properties": {
"name": {"type": "string", "description": "Name to greet"}
},
"required": ["name"],
},
}
# Define what actually runs
def handle_hello(params, **kwargs):
name = params.get("name", "World")
return json.dumps({"success": True, "greeting": f"Hello, {name}!"})
# Wire them together
ctx.register_tool(
name="hello_world",
toolset="hello_world",
schema=schema,
handler=handle_hello,
)
# Bonus: log every tool call
def on_tool_call(tool_name, params, result):
print(f"[hello-world] tool called: {tool_name}")
ctx.register_hook("post_tool_call", on_tool_call)
Drop both files into ~/.hermes/plugins/hello-world/, restart Hermes, and the AI can immediately call hello_world. The hook prints a log line after every tool call โ great for debugging.
What Else Can Plugins Do?
Plugins arenโt just for tools. You can also:
- Add hooks โ run code before or after events (like the logging example above)
- Add slash commands โ create custom
/commandsin the CLI, like/deployor/summarize
One Important Warning
Project-local plugins (in ./.hermes/plugins/) are disabled by default for safety. Only enable them for trusted repositories:
export HERMES_ENABLE_PROJECT_PLUGINS=true
Always check what a plugin does before enabling it โ itโs like installing software from the internet.
Summary & Practical Tip
Plugins let you extend Hermes without touching core code. Start with the hello_world example, then modify the schema and handler to do something useful for your workflow.
Tip: Keep your pluginโs description field in the schema clear and specific โ thatโs what the AI reads to decide when to use your tool. A vague description means the AI wonโt know when to call it.
๐ Official Docs
This article is based on the official Hermes Agent documentation:Official docs โบ user-guide/features/plugins