Hermes Agent 扩展体系:Skill、Plugin 与 MCP

前言:第一次看到 Skill、Plugin 和 MCP 时,我也很容易把它们都理解成“给 Agent 加功能”。真正写扩展时才会发现,三者改变的是完全不同的层次。本文先把职责、加载方式、权限和生命周期讲清楚;下一篇再用一个完整项目把三条路线组合起来。


系列导航:这组文章按“总览 → 入口 → 运行时 → 扩展 → 状态 → 协作 → 安全”的顺序展开;第一次阅读可以从总览开始,带着具体问题也可以直接跳到专题。

  1. 01|Hermes Agent 架构总览:从 Agent Loop 到智能体平台
  2. 02|Hermes Desktop 架构:Electron 如何连接本地 Python Agent
  3. 03|Hermes Agent 运行时:AIAgent、模型协议与工具执行
  4. 04|Hermes Agent 扩展体系:Skill、Plugin 与 MCP
  5. 05|实战:同一个 Markdown 检查器的 Skill、Plugin 与 MCP 三种实现
  6. 06|Hermes Agent 的持续学习系统:Memory、Review、Skill 与 Curator
  7. 07|Hermes Agent 的长会话架构:Prompt Cache、压缩与 SessionDB
  8. 08|Hermes Agent 的多 Agent 与自动化:从 Goal 到 Kanban
  9. 09|Hermes Agent 安全架构:审批、沙箱、回滚与凭据隔离

Skill、Plugin 和 MCP:不是同一种扩展

Hermes Agent 没有把所有扩展都叫“插件”,而是把不同重量的能力拆开了。

扩展方式主要内容适合解决的问题对核心的影响
SkillSKILL.md、参考文件、脚本、模板操作手册、领域知识、可复用工作流最轻,按需加载上下文
PluginPython 代码、plugin.yamlregister(ctx)新工具、Hook、Provider、平台与中间件进程内全信任执行;能力授权不是沙箱
MCP独立进程或远程工具服务结构化外部能力与跨语言集成松耦合,运行时动态发现

Skill 的系统提示词里通常只放紧凑索引,模型判断匹配后再通过 skill_view 读取完整内容。这种 Progressive Disclosure 很省上下文:平时只承担名称和简介,需要时才加载全部流程;同一文件重复读取还会按指纹去重。

Plugin 则是可执行扩展。加载器会从用户目录、项目目录和 Python entry point 发现插件,处理依赖顺序、兼容性、Profile 作用域和卸载恢复。普通第三方插件默认需要显式启用;Memory Provider、Context Engine、模型 Provider 等专门类型则由各自配置选择。

MCP 适合那些“确实应该是工具,但不应该进核心”的能力。MCP 服务的工具可以动态进入 Registry,服务端发出工具列表变化时也能刷新。这样外部系统不必和 Hermes Agent 的 Python 进程绑定。

flowchart LR
    Need[出现一个新能力需求] --> Existing{现有工具能完成?}
    Existing -->|能| Reuse[复用现有工具]
    Existing -->|不能| Workflow{主要是知识或流程?}
    Workflow -->|是| Skill[写成 Skill]
    Workflow -->|否| Runtime{需要进程内生命周期?}
    Runtime -->|是| Plugin[实现 Plugin]
    Runtime -->|否| MCP[独立 MCP 服务]
    Plugin --> Core{几乎所有用户都需要?}
    Core -->|极少数情况| CoreTool[再考虑核心工具]

我觉得这套“能力足迹阶梯”是整个项目最值得借鉴的设计之一。新增核心工具不只是多一个函数,它会让每轮请求多一份 Schema,还要长期维护权限、错误、兼容和文档。能用 Skill 或 MCP 解决的事,不该急着扩张核心表面积。

扩展怎样重新汇合到 Agent Runtime

我判断扩展放在哪一层时,会先问它改变的是知识、进程内行为,还是外部系统边界。团队排查规范经常变化但不需要确定性代码,适合 Skill;要注册工具、Hook 或 Provider,适合 Native Plugin;需要独立鉴权、独立部署并让其他 Host 复用,则适合 MCP Server。

变化的东西优先放置进入模型的方式主要代价
操作流程与经验Skill索引常驻,正文按需读取依赖模型正确理解说明
进程内确定性逻辑Plugin注册 Tool / Hook / Provider可信代码拥有当前用户权限
远端服务能力MCP握手后动态注册工具 Schema额外进程、网络与认证生命周期
flowchart LR
    User[用户请求] --> Agent[智能体运行时
AIAgent] Skill[Skill 操作知识] --> Agent Plugin[Plugin Tool 与 Hook] --> Registry[工具注册表
Tool Registry] MCP[MCP 服务器
MCP Server] --> Registry Registry --> Agent Agent --> Model[模型提供方传输层
Provider Transport] Agent --> Execute[统一 Tool Executor]

三条路线最终都回到同一个窄腰:Skill 改变模型采用的方法,Plugin 和 MCP 把确定性能力注册进 Tool Registry,所有真实调用仍经过作用域、Hook、审批、结果规范化和会话持久化。扩展方式不同,不代表运行时另起炉灶。

如何决定能力放在哪一层

我会先找出需求中最稳定的边界,再选扩展类型。比如“怎样接手一个陌生仓库”主要是操作顺序,适合 Skill;“每次都返回相同结构的仓库统计”需要确定性代码,适合 Plugin;“访问团队知识库”依赖独立服务和认证,适合 MCP。三者可能出现在同一套安装里,但没有必要为了展示能力而强行放进同一个业务故事。

判断问题答案倾向优先选择
只需要告诉模型何时、按什么步骤使用现有工具吗?Skill
需要注册 Python Tool、Hook、Provider 或运行时中间件吗?Plugin
能力是否属于独立进程、远端服务,或需要被其他 MCP Host 复用?MCP

我的判断顺序:先用 Skill 表达方法;只有需要确定性代码时才进入 Plugin;只有跨进程或外部服务边界时才增加 MCP。

参考资料与源码入口

题图来源:《稻田、水稻梯田与景观》,创作者 almatel,来自 Pixabay;依据 Pixabay Content License(Pixabay 内容许可)使用。

下一篇:实战:同一个 Markdown 检查器的 Skill、Plugin 与 MCP 三种实现

Harbor搭建指南 Hermes Agent 运行时:AIAgent、模型协议与工具执行 一次 K8s 集群内网故障的排查记录
View Comments
There are currently no comments.