跳到主要内容

插件

Hermes 拥有一个插件系统,用于添加自定义工具、钩子、斜杠命令和集成,而无需修改核心代码。

构建 Hermes 插件 — 包含完整工作示例的逐步指南。

快速概览

将一个包含 plugin.yaml 和 Python 代码的目录放入 ~/.hermes/plugins/

~/.hermes/plugins/my-plugin/
├── plugin.yaml # 清单文件
├── __init__.py # register() — 将模式关联到处理器
├── schemas.py # 工具模式(LLM 看到的内容)
└── tools.py # 工具处理器(调用时运行的内容)

启动 Hermes — 你的工具将与内置工具一同出现。模型可以立即调用它们。

项目本地插件位于 ./.hermes/plugins/ 下,默认是禁用的。只有在信任的代码库中,才可以通过在启动 Hermes 前设置 HERMES_ENABLE_PROJECT_PLUGINS=true 来启用它们。

插件能做什么

能力实现方式
添加工具ctx.register_tool(name, schema, handler)
添加钩子ctx.register_hook("post_tool_call", callback)
添加斜杠命令ctx.register_command("mycommand", handler)
附带数据文件Path(__file__).parent / "data" / "file.yaml"
捆绑技能在加载时将 skill.md 复制到 ~/.hermes/skills/
依赖环境变量在 plugin.yaml 中使用 requires_env: [API_KEY]
通过 pip 分发[project.entry-points."hermes_agent.plugins"]

插件发现

来源路径使用场景
用户~/.hermes/plugins/个人插件
项目.hermes/plugins/项目特定插件(需要 HERMES_ENABLE_PROJECT_PLUGINS=true
piphermes_agent.plugins entry_points分发包

可用钩子

插件可以为这些生命周期事件注册回调。查看 事件钩子页面 获取完整详情、回调签名和示例。

钩子触发时机
pre_tool_call任何工具执行之前
post_tool_call任何工具返回之后
pre_llm_call每轮一次,在 LLM 循环之前 — 可以返回 {"context": "..."} 注入到系统提示中
post_llm_call每轮一次,在 LLM 循环完成之后
on_session_start新会话创建时(仅第一轮)
on_session_end每次 run_conversation 调用结束时

斜杠命令

插件可以注册在 CLI 和消息平台中都能工作的斜杠命令:

def register(ctx):
ctx.register_command(
name="greet",
handler=lambda args: f"Hello, {args or 'world'}!",
description="Greet someone",
args_hint="[name]",
aliases=("hi",),
)

处理器接收参数字符串(/greet 之后的所有内容)并返回要显示的字符串。注册的命令会自动出现在 /help、Tab 自动补全、Telegram 机器人菜单和 Slack 子命令映射中。

参数描述
name不带斜杠的命令名称
handler接收 args: str 并返回 `str
description/help 中显示
args_hint使用提示,例如 "[name]"
aliases替代名称的元组
cli_only仅在 CLI 中可用
gateway_only仅在消息平台中可用
gateway_config_gate配置点路径(例如 "display.my_option")。当在 cli_only 命令上设置时,如果配置值为真,则该命令在网关中变为可用。

管理插件

hermes plugins                  # 交互式切换界面 — 用复选框启用/禁用
hermes plugins list # 显示启用/禁用状态的表格视图
hermes plugins install user/repo # 从 Git 安装
hermes plugins update my-plugin # 拉取最新版本
hermes plugins remove my-plugin # 卸载
hermes plugins enable my-plugin # 重新启用已禁用的插件
hermes plugins disable my-plugin # 禁用但不移除

不带参数运行 hermes plugins 会启动一个交互式 curses 复选框列表(与 hermes tools 相同的界面),你可以使用方向键和空格键切换插件的启用/禁用状态。

禁用的插件会保留安装状态,但在加载时会被跳过。禁用列表存储在 config.yamlplugins.disabled 下:

plugins:
disabled:
- my-noisy-plugin

在运行中的会话里,/plugins 会显示当前加载了哪些插件。

查看 完整指南 了解处理器约定、模式格式、钩子行为、错误处理和常见错误。