Hermes Plugin & 扩展系统
核心文件
text
hermes_cli/plugins.pyPlugin 来源
python
# 四层来源
1. bundled plugins # hermes-agent/plugins/
2. user plugins # ~/.hermes/plugins/<name>/
3. project plugins # ./.hermes/plugins/<name>/
4. pip entry-points # hermes_agent.pluginsPlugin 结构
text
my-plugin/
├── plugin.yaml # 插件 manifest
└── __init__.py # register() 函数yaml
# plugin.yaml
name: my-plugin
version: 1.0.0
description: 我的插件
author: OvOpython
# __init__.py
def register(ctx: PluginContext):
# 注册工具
ctx.register_tool(name='my_tool', schema={...}, handler=...)
# 注册 hooks
ctx.add_hook('pre_tool_call', on_pre_tool_call)
ctx.add_hook('post_tool_call', on_post_tool_call)
# 注册 provider
ctx.register_provider('my_provider', MyProvider)
# 注册 platform adapter
ctx.register_platform('my_platform', MyPlatform)可用 Hooks
| Hook | 触发时机 |
|---|---|
pre_tool_call | 工具执行前 |
post_tool_call | 工具执行后 |
transform_tool_result | 工具结果转换 |
transform_llm_output | LLM 输出转换 |
pre_llm_call | LLM 调用前 |
post_llm_call | LLM 调用后 |
pre_api_request | API 请求前 |
post_api_request | API 请求后 |
api_request_error | API 请求失败 |
on_session_start | Session 开始 |
on_session_end | Session 结束 |
on_session_finalize | Session 清理 |
on_session_reset | Session 重置 |
subagent_start | 子 agent 启动 |
subagent_stop | 子 agent 停止 |
pre_gateway_dispatch | Gateway 发送前 |
pre_approval_request | 审批请求前 |
post_approval_response | 审批响应后 |
kanban_task_claimed | Kanban 任务认领 |
kanban_task_completed | Kanban 任务完成 |
kanban_task_blocked | Kanban 任务阻塞 |
Plugin 可注册的组件
register_tool()
register_toolset()
register_provider()
register_platform()
register_middleware()
register_hook()三种 Plugin 系统对比
| 维度 | Pi | OpenCode | Hermes |
|---|---|---|---|
| 类型 | Extension API | Plugin Service | Plugin Context |
| 注册方式 | AgentSessionRuntime 注入 | Effect Service | register() 函数 |
| Hooks 数量 | 3 | ~6 | 21+ |
| 工具注册 | Extension.tools | Plugin.tools | ctx.register_tool() |
| Provider | ❌ | ❌ | ctx.register_provider() |
| Platform | ❌ | ❌ | ctx.register_platform() |
| 来源 | 代码内 | npm/dir/git | bundled/user/project/pip |
| 隔离 | 无 | Effect fork | Python module |
Hermes 的 plugin 系统是最丰富的。 它不仅支持工具扩展,还能注入 provider、platform、middleware,覆盖了 Hermes 的几乎所有扩展点。