词元之母TOK.MOM - 平台充值汇率 1:1 即 1 人民币充值到账 1 美元,支持一个 Key 调用近 600+ 海内外模型,限时特价模型低至 1 折,欢迎上岸!
tools/ 和 toolsets.py 中的 Hermes 内置核心工具。~/.hermes/plugins/ 下放入一个目录,包含 plugin.yaml 和 Python 代码:~/.hermes/plugins/my-plugin/
├── plugin.yaml # manifest(清单)
├── __init__.py # register() — 将 schema 与处理器绑定
├── schemas.py # tool schema(LLM 所见的内容)
└── tools.py # tool 处理器(调用时实际执行的代码)hello_world 工具,并通过 hook 记录每次工具调用。~/.hermes/plugins/hello-world/plugin.yaml~/.hermes/plugins/hello-world/__init__.py~/.hermes/plugins/hello-world/,重启 Hermes,模型即可立即调用 hello_world。每次工具调用后,hook 会打印一行日志。./.hermes/plugins/ 下的项目本地插件默认禁用。仅对可信仓库启用,方法是在启动 Hermes 前设置 HERMES_ENABLE_PROJECT_PLUGINS=true。ctx.* API 均可在插件的 register(ctx) 函数中使用。| 能力 | 方式 |
|---|---|
| 添加工具 | ctx.register_tool(name=..., toolset=..., schema=..., handler=...) |
| 添加 hook | ctx.register_hook("post_tool_call", callback) |
| 添加斜杠命令 | ctx.register_command(name, handler, description) — 在 CLI 和 gateway 会话中添加 /name |
| 从命令中调度工具 | ctx.dispatch_tool(name, args) — 调用已注册的工具,自动注入父 agent 上下文 |
| 添加 CLI 命令 | ctx.register_cli_command(name, help, setup_fn, handler_fn) — 添加 hermes <plugin> <subcommand> |
| 注入消息 | ctx.inject_message(content, role="user") — 参见 注入消息 |
| 附带数据文件 | Path(__file__).parent / "data" / "file.yaml" |
| 打包 skill | ctx.register_skill(name, path) — 命名空间为 plugin:skill,通过 skill_view("plugin:skill") 加载 |
| 按环境变量控制 | 在 plugin.yaml 中设置 requires_env: [API_KEY] — 在 hermes plugins install 时提示输入 |
| 通过 pip 分发 | [project.entry-points."hermes_agent.plugins"] |
| 注册 gateway 平台(Discord、Telegram、IRC 等) | ctx.register_platform(name, label, adapter_factory, check_fn, ...) — 参见 Adding Platform Adapters |
| 注册图像生成后端 | ctx.register_image_gen_provider(provider) — 参见 Image Generation Provider Plugins |
| 注册视频生成后端 | ctx.register_video_gen_provider(provider) — 参见 Video Generation Provider Plugins |
| 注册上下文压缩引擎 | ctx.register_context_engine(engine) — 参见 Context Engine Plugins |
| 注册 memory 后端 | 在 plugins/memory/<name>/__init__.py 中继承 MemoryProvider — 参见 Memory Provider Plugins(使用独立发现系统) |
| 调用宿主 LLM | ctx.llm.complete(...) / ctx.llm.complete_structured(...) — 借用用户当前激活的模型和认证,进行一次性补全,支持可选 JSON schema 验证。参见 Plugin LLM Access |
| 注册推理后端(LLM provider) | 在 plugins/model-providers/<name>/__init__.py 中调用 register_provider(ProviderProfile(...)) — 参见 Model Provider Plugins(使用独立发现系统) |
| 来源 | 路径 | 使用场景 |
|---|---|---|
| 内置 | <repo>/plugins/ | 随 Hermes 附带 — 参见 Built-in Plugins |
| 用户 | ~/.hermes/plugins/ | 个人插件 |
| 项目 | .hermes/plugins/ | 项目专属插件(需要 HERMES_ENABLE_PROJECT_PLUGINS=true) |
| pip | hermes_agent.plugins entry_points | 分发包 |
| Nix | services.hermes-agent.extraPlugins / extraPythonPackages | NixOS 声明式安装 — 参见 Nix Setup |
| 子目录 | 内容 | 发现系统 |
|---|---|---|
plugins/(根目录) | 通用插件 — 工具、hook、斜杠命令、CLI 命令、打包 skill | PluginManager(kind: standalone 或 backend) |
plugins/platforms/<name>/ | Gateway 频道适配器(ctx.register_platform()) | PluginManager(kind: platform,深一层) |
plugins/image_gen/<name>/ | 图像生成后端(ctx.register_image_gen_provider()) | PluginManager(kind: backend,深一层) |
plugins/memory/<name>/ | Memory provider(继承 MemoryProvider) | 独立加载器,位于 plugins/memory/__init__.py(kind: exclusive — 同时只有一个激活) |
plugins/context_engine/<name>/ | 上下文压缩引擎(ctx.register_context_engine()) | 独立加载器,位于 plugins/context_engine/__init__.py(同时只有一个激活) |
plugins/model-providers/<name>/ | LLM provider profile(register_provider(ProviderProfile(...))) | 独立加载器,位于 providers/__init__.py(首次调用 get_provider_profile() 时懒加载扫描) |
~/.hermes/plugins/model-providers/<name>/ 和 ~/.hermes/plugins/memory/<name>/ 下的用户插件会覆盖同名内置插件 — register_provider() / register_memory_provider() 中后写者胜出。放入一个目录即可替换内置实现,无需修改仓库。hermes plugins list 和交互式 hermes plugins UI 中以路径派生的 key 显示 — 例如 observability/langfuse、image_gen/openai、platforms/teams。该 key(而非 manifest 中的 name:)是传给 hermes plugins enable … / disable … 的值,也是在 config.yaml 的 plugins.enabled 下填写的字符串。hermes plugins 和 /plugins 中),但在你将插件名称添加到 ~/.hermes/config.yaml 的 plugins.enabled 之前,任何带有 hook 或工具的内容都不会加载。这可防止第三方代码在未经明确同意的情况下运行。