Plugins
الإضافات
Start with meaning, then move to detail.
This lesson explains Plugins as part of Hermes internals and extension points. You will learn what it does, when it matters, and the smallest safe test that proves it works.
If you are new, do not memorize names. Focus on three questions: what problem does this solve, what access does it need, and how can you verify the result?
For practice, inspect the first example, identify its effects, run it on test data, and compare the result with the source claim.
For advanced readers, inspect Quick overview, Minimal working example, What plugins can do, then verify failure modes and version compatibility.
Know Python, Git, and basic project structure before changing code.
A clear outcome before you read.
- Understand Plugins without assumed prior knowledge.
- Separate the source description from what still needs testing in your environment.
- Read the first command and identify its inputs and outputs before copying it.
Extend Hermes with custom tools, hooks, and integrations via the plugin system
What does the source say, and in what order?
- 01Quick overview
Start here to understand the core idea or structure.
- 02Minimal working example
Read this after the foundation, then connect it to the previous step.
- 03What plugins can do
Read this after the foundation, then connect it to the previous step.
- 04Plugin discovery
Read this after the foundation, then connect it to the previous step.
- 05Plugin sub-categories
Read this after the foundation, then connect it to the previous step.
- 06Plugins are opt-in (with a few exceptions)
Read this after the foundation, then connect it to the previous step.
- 07What the allow-list does NOT gate
Read this after the foundation, then connect it to the previous step.
- 08Migration for existing users
Read this after the foundation, then connect it to the previous step.
- 09Available hooks
Read this after the foundation, then connect it to the previous step.
- 10Plugin types
Finish here to verify the result and special cases.
Copy only after you understand the effect.
~/.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)name: hello-world
version: "1.0"
description: A minimal example pluginDrop both files into `~/.hermes/plugins/hello-world/`, restart Hermes, and the model can immediately call `hello_world`. The hook prints a log line after every tool invocation.
The model-facing tool description belongs in `schema["description"]`. The optional `ctx.register_tool(description=...)` value is separate `ToolEntry` registry metadata: when omitted, it defaults to the schema description, but Hermes does not copy it back into a schema that lacks `description`. Prefer defining the text once in the schema. If you provide both values, keep them synchronized; the model sees the schema valuRead the first command and identify its inputs and outputs before copying it.
Match every command to your installed Hermes version, review the files and accounts it can reach, and use non-sensitive data for the first test. If this explanation differs from the source, the official source wins.