Telvine Learn

How to Build a Hermes Agent Plugin

Build a Hermes Agent plugin with tools, hooks, commands, integrations, bundled Skills, memory providers, context engines, or model providers, then measure it with Telvine.

This guide explains how to build a Hermes Agent plugin and manage it as part of a broader Agent Plugin portfolio. Hermes Agent plugins can extend the runtime with custom tools, hooks, slash commands, CLI commands, integrations, bundled Skills, memory providers, context engines, and model providers.

Use the Hermes Agent plugin docs for the latest Hermes-specific packaging details. Use Telvine as the cross-harness product layer: one plugin identity, one component inventory, one telemetry contract, and adapters for Hermes, Codex, OpenClaw, Claude, Copilot Cowork, and direct SKILL.md targets.

1. Define the plugin product

Start with the installable product:

  • Plugin id: the stable id you keep across harnesses.
  • User: who installs or enables it.
  • Job: what work Hermes should help complete.
  • Hermes components: tools, hooks, commands, integrations, Skills, memory, context, or model providers.
  • Other adapters: Codex, OpenClaw, Claude, Copilot Cowork, or direct SKILL.md.
  • Telemetry: plugin, component, runtime, version, and outcome events.

Example: a research-briefing plugin could include a Hermes slash command, a source-checking Skill, a web research integration, and a hook that records completion metadata.

2. Create the source plugin workspace

Keep the plugin product separate from the Hermes adapter:

research-briefing/
├── telvine.plugin.json
├── skills/
│   └── source-check/
│       └── SKILL.md
├── tools/
│   └── citation-audit/
├── hooks/
│   └── after-run/
├── telemetry/
│   └── events.md
└── adapters/
    ├── hermes/
    ├── codex/
    ├── openclaw/
    └── claude/

telvine.plugin.json should describe the plugin product: owner, version, target harnesses, component inventory, and telemetry policy. The Hermes adapter should contain only the Hermes-specific manifest, registration, and runtime code.

3. Choose the Hermes extension points

Pick the Hermes plugin surfaces that match the job:

Hermes extension pointUse it whenTelvine component type
ToolHermes needs a callable action or deterministic helpertool
HookYou need lifecycle behavior before or after agent workhook
Slash or CLI commandUsers should trigger a named workflow directlycommand
IntegrationThe plugin connects Hermes to an external app or serviceconnector
Bundled SkillThe plugin ships task-specific instructions and referencesskill
Memory or context engineThe plugin changes retrieval, memory, or context assemblycontext_engine
Model providerThe plugin adds or routes model accessmodel_provider

Bundled Skills are still capabilities inside the plugin. Measure them as components, not as loose files.

4. Build the Hermes adapter

Inside adapters/hermes/, create the package Hermes expects:

adapters/hermes/
├── plugin.yaml
├── __init__.py
├── schemas.py
├── tools.py
├── hooks.py
└── skills/
    └── source-check/
        └── SKILL.md

The adapter should register Hermes-facing metadata and extension points in Python. A typical Hermes plugin exposes a register(ctx) function, then calls APIs such as ctx.register_tool(...), ctx.register_hook(...), ctx.register_command(...), ctx.register_cli_command(...), or ctx.register_skill(...).

General user plugins are discovered under ~/.hermes/plugins/<name>/ and are opt-in: users enable them through hermes plugins enable <name> or by adding the plugin name to plugins.enabled in ~/.hermes/config.yaml. Project plugins can live under .hermes/plugins/ when project plugin loading is enabled.

Keep shared Skills, scripts, references, and telemetry rules in the source plugin workspace so the Hermes package can stay aligned with the Codex, OpenClaw, Claude, and Copilot Cowork adapters.

5. Instrument the plugin

Emit Telvine telemetry wherever the Hermes plugin controls execution:

  • Tool handlers.
  • Hooks.
  • Command handlers.
  • Integration backends.
  • Skill wrapper scripts.
  • Provider, memory, or context adapters.

Example:

{
  "event_type": "plugin.component.invoked",
  "plugin_id": "plg_research_briefing",
  "version": "0.9.0",
  "runtime": "hermes",
  "properties": {
    "component_type": "skill",
    "component_name": "source-check",
    "operation": "completed",
    "duration_ms": 961,
    "outcome": "completed"
  }
}

Do not collect prompts, documents, retrieved passages, connector payloads, tool arguments, or model outputs. Send metadata that helps the team understand adoption, reliability, latency, and version impact.

6. Release through adapters

Ship the Hermes package as one adapter for the plugin product:

  1. Build the Hermes plugin package.
  2. Build the Codex, OpenClaw, Claude, Copilot Cowork, or direct SKILL.md adapters for the same product if needed.
  3. Register the plugin version and component inventory in Telvine.
  4. Roll out to a small audience.
  5. Compare Hermes behavior against other harnesses.

With Telvine:

npm i -g @telvine/cli
telvine login
telvine publish ./research-briefing

Checklist

  • The Hermes plugin has a stable plugin id and version.
  • Tools, hooks, commands, integrations, Skills, memory, context, and provider pieces are registered as components.
  • The Hermes adapter does not become the only source of truth.
  • Telemetry records runtime hermes plus component type, component name, outcome, and version.
  • The same product can be deployed through other harness adapters.

Next steps

On this page