Tool 让 Hermes 能执行动作,Skill 告诉 Hermes怎样正确完成任务,Plugin 则把代码接入 Hermes 的运行过程。本文先厘清三者的关系,再通过 Ponytail、Superpowers 和 Web Search Plus 三个案例说明 Plugin 的实际用途。


Plugin、Tool 和 Skill 的关系

这三个概念并不处于同一层级。

  • Tool 是提供给模型调用的具体能力,例如读取文件、执行命令、搜索网页或发送消息。
  • Skill 是按需加载的知识和工作流程,告诉 Agent 何时做、按什么顺序做,以及如何验收结果。
  • Plugin 是可安装的运行时扩展,可以向 Hermes 注册 Tool、Skill、斜杠命令、生命周期 Hook、Provider 或平台适配器。

可以把它们理解成:

1
2
3
Tool:手脚,决定“能做什么”
Skill:经验,决定“应该怎么做”
Plugin:扩展模块,决定“如何把新能力接入 Hermes”

例如,terminal 是 Tool,因为它真正执行命令;“发布 Hexo 博客”适合写成 Skill,因为它主要规定构建、验证和提交顺序;而一个同时注册搜索 Tool、初始化逻辑和配置入口的扩展,更适合做成 Plugin。

Plugin 也不等于 Tool 的集合。它可以只提供 Hook,也可以同时打包多个 Skill,甚至完全不增加新的 Tool。


Hook 是什么

Hook 可以理解为 Hermes 生命周期中的“插槽”。Plugin 在特定事件发生时自动运行代码,而不需要模型主动调用。

常见场景包括:

  • pre_llm_call:每次调用模型前注入上下文或调整行为。
  • post_tool_call:工具执行后记录日志、检查结果或触发后续动作。
  • on_session_start:会话开始时进行初始化。
  • pre_gateway_dispatch:Gateway 分发消息前进行处理。

Tool 和 Hook 的触发方式不同:

1
2
Tool:模型判断需要后主动调用
Hook:运行时到达指定节点后自动触发

因此,需要“每轮都执行”“会话启动时执行”或“任何文件修改后都检查”的逻辑,通常应由 Plugin 的 Hook 完成,而不是写进 Skill 后期待模型一直记住。


案例一:Ponytail 持续约束编码风格

Ponytail 的目标是让 Coding Agent 像经验丰富但讨厌过度设计的开发者一样工作:优先复用现有代码、标准库和平台原生能力,只实现当前真正需要的部分。

它的核心规则本身属于 Skill。仓库中包含 ponytailponytail-reviewponytail-audit 等多个 SKILL.md,用于指导编码、审查和技术债分析。

但 Ponytail 不只是 Skill。它还通过 Plugin 提供:

  • pre_llm_callpre_gateway_dispatch Hook,在运行过程中持续注入当前规则。
  • /ponytail lite|full|ultra|off 等斜杠命令。
  • 当前强度模式的运行时状态。
  • 一组统一安装和管理的关联 Skills。
1
2
3
4
用户切换到 ultra 模式
→ Plugin 保存当前状态
→ 每次调用模型前,Hook 注入对应规则
→ Agent 持续采用更激进的 YAGNI 策略

如果只安装它的 Skill,编码原则依然可用,但无法同样可靠地实现每轮注入、模式切换和命令控制。这正是它采用 Plugin 形态的原因。

1
hermes plugins install DietrichGebert/ponytail --enable

案例二:Superpowers 自动引导工程流程

Superpowers 是一套软件开发方法论,包含需求梳理、方案设计、测试驱动开发、系统化调试、代码审查和完成前验证等 Skills。

它与 Ponytail 的共同点是:主要价值都来自知识和流程。区别在于,Superpowers 更关注“当前任务应该进入哪套工程流程”。

Hermes 适配器使用 pre_llm_call Hook,在新会话第一次调用模型时自动注入 bootstrap,要求 Agent 先判断并加载合适的 Skill:

1
2
3
4
5
收到开发任务
→ Plugin 在首轮注入 Skill 使用规范
→ Agent 判断任务类型
→ 加载 brainstorming、TDD 或 debugging 等 Skill
→ 使用现有 Tool 执行任务

单独复制这些 Skills 也能使用,但 Plugin 可以保证每个新会话先获得统一入口,减少 Agent 忘记检查 Skill 的概率。

1
hermes plugins install obra/superpowers --enable

案例三:Web Search Plus 增加新的搜索能力

Web Search Plus 展示了另一类 Plugin:它不是主要改变行为方式,而是直接增加 Hermes 原本没有的执行能力。

它向 Hermes 注册两个 Tool:

1
2
web_search_plus
web_extract_plus

Plugin 内部负责对接多个搜索和网页提取 Provider,并处理:

  • Provider 选择与自动路由。
  • 超时、失败重试和降级。
  • 缓存与质量评估。
  • API Key 和配置管理。
  • 统一的结构化返回结果。

它的调用过程类似:

1
2
3
4
5
Agent 调用 web_search_plus
→ Plugin 选择可用 Provider
→ 请求外部搜索服务
→ 失败时切换备用 Provider
→ 返回带来源的结果

这些工作需要真实运行 Python 并调用外部服务,不可能只靠一份 SKILL.md 实现。Skill 最多只能告诉 Agent“如何搜索”,而 Plugin 才能把新的搜索函数注册为可调用 Tool。

1
hermes plugins install robbyczgw-cla/hermes-web-search-plus --enable

什么时候应该开发 Plugin

判断标准不是功能看起来是否“像产品”,而是它是否需要进入 Hermes 的运行时。

适合使用 Skill:

  • 已有 Tool 足够完成任务。
  • 主要需求是沉淀知识、流程、规范和避坑经验。
  • Agent 只需在相关任务中按需加载。

适合使用 Tool:

  • Hermes 缺少一个明确动作,例如调用内部 API、查询数据库或控制设备。
  • 该动作需要结构化参数和可验证返回值。

适合使用 Plugin:

  • 需要注册一个或多个自定义 Tool。
  • 需要在会话、模型调用或工具调用前后自动运行代码。
  • 需要维护运行时状态或提供斜杠命令。
  • 需要把 Tool、Skill、Hook 和配置作为一个整体安装、升级和卸载。
  • 需要扩展模型、Memory、搜索、浏览器或 Gateway 平台等 Provider。

最实用的判断口诀是:

1
2
3
传授做法 → Skill
增加动作 → Tool
接入运行时 → Plugin

安装 Plugin 前要注意什么

Plugin 会执行代码,权限边界明显高于纯文本 Skill。安装第三方 Plugin 前应至少检查:

  • 仓库作者、维护状态和最近更新记录。
  • plugin.yaml 声明的 Tool、Hook、命令和环境变量。
  • Python、JavaScript 或 Shell 代码是否会访问文件、网络和凭证。
  • Hook 会在哪些事件中自动运行。
  • 是否真的需要全部能力,能否用更简单的 Skill 或 MCP Server 替代。

安装后需要重启 Hermes 才能加载新 Plugin。可以通过以下命令查看和管理:

1
2
3
4
5
hermes plugins list
hermes plugins install <仓库或插件名> --enable
hermes plugins enable <插件名>
hermes plugins disable <插件名>
hermes plugins remove <插件名>

总结

Plugin 不是“把 Hermes 做成产品”的工具,而是 Hermes 的运行时扩展机制。它可以提供新 Tool,也可以通过 Hook 改变执行流程,还可以把 Skills、命令和配置组合成一个可安装模块。

Ponytail 说明了 Plugin 如何持续约束 Agent 行为;Superpowers 说明了 Plugin 如何自动引导 Skill 工作流;Web Search Plus 则说明了 Plugin 如何增加真正的新工具能力。理解这三个例子后,Plugin、Skill 和 Tool 的边界就比较清晰了。


参考资料