一、开篇:为什么 Agent 不能每次都“从零开始”?

很多人看 AI Agent 时,只盯着模型够不够强、推理够不够深、工具够不够多。但真正做工程落地时,会发现一个更现实的问题:模型可以临时推理,工具可以临时调用,可是一次成功排障、一套标准发版流程、一个复杂 PR 的处理经验,如果每次都重新解释一遍,效率就会很低。

Hermes Agent 的 Skills,就是为了解决这个问题:把做过的事、踩过的坑、验证过的流程,沉淀成一份可以反复调用的“操作手册”。它不是把模型重新训练一遍,而是在模型外面建立一套可维护、可搜索、可加载、可更新的经验库。

官方 GitHub 对 Hermes Agent 的定位里强调,它具备内置学习循环:可以从经验中创建 skills,在使用中改进 skills,并跨会话记住历史。官方 Skills 文档进一步把 Skills 定义为按需加载的知识文档,默认位于 ~/.hermes/skills/,并采用 progressive disclosure 来减少 token 消耗。

二、先讲清楚:Skills 到底是什么?

在 Hermes Agent 里,Skill 可以理解为“给 Agent 用的 SOP”。普通用户写 SOP 是给人看的,Hermes 的 Skill 是给 Agent 看的。它告诉 Agent:什么时候用这套流程、第一步做什么、遇到异常怎么处理、最后如何验证结果。

2.1 Memory 记事实,Skills 记流程,Tools 干动作

理解 Skills,最重要的是不要把它和 Memory、Tools 混在一起。Memory 更像长期笔记,用来记住事实和偏好;Tools 是手和脚,用来读文件、跑命令、调用浏览器、访问外部 API;Skills 则是中间的“经验流程层”,告诉 Agent 如何把工具组合起来完成某类任务。

模块

一句话理解

适合保存什么

典型例子

Memory

记事实

稳定偏好、环境信息、项目事实

项目使用 Java 17;用户喜欢先看结论

Skills

记流程

可复用步骤、SOP、踩坑经验、验证方法

PR 审查流程;K8s 发版步骤;论文检索流程

Tools

执行动作

读写文件、终端命令、浏览器、搜索、MCP 调用

read_file、terminal、web_search、MCP tools

Session Search

查历史

过去某次对话或任务的详细过程

上周我们怎么排查这个 bug

2.2 为什么这层很关键?

因为一个长期运行的 Agent 不能只靠“当场聪明”。如果它每次都临时摸索,那么工具调用次数会变多、错误会重复出现、团队规范也很难稳定。Skills 的价值就在于:把临时成功,变成长期可复用能力。

三、Skills 的使用链路:一次经验怎么被调用?

从执行链路看,Skill 不是一上来就把所有内容塞进 Prompt。官方文档强调它是按需加载:先通过 skills_list 看到有哪些技能,必要时再用 skill_view 加载完整内容,再根据技能里的流程去调用工具。

3.1 用户提出任务,Agent 先判断有没有现成经验

比如用户说:“帮我把这个功能做成 PR,并按团队规范走完整流程。”如果 Hermes 发现有 github-pr-workflow、test-driven-development、code-review 这类技能,它就不需要从零设计流程,而是先加载对应技能。

3.2 Skill 进入上下文,模型变成“按流程做事”

Skill 被加载后,本质上会变成模型可见的操作指导。模型不只是回答“我可以帮你”,而是会按照技能要求先检查上下文、确认文件、调用工具、运行测试、处理异常,最后给出结果和验证信息。

3.3 复杂任务完成后,还可以反向更新 Skill

官方文档把 agent-managed skills 称为 procedural memory。也就是说,当 Agent 发现一个非平凡工作流,或者在错误和死路中找到了正确路径,或者被用户纠正了做法,它可以通过 skill_manage 创建、修补、重写或删除技能。

四、Skill 文件长什么样?不是提示词,而是操作手册

Hermes 的 Skill 不是简单 prompt,而是一组目录和文件。核心文件通常是 SKILL.md,旁边可以放 references、templates、scripts、assets。这样做的好处是:短说明放在主文件里,长资料、模板、脚本按需读取。

4.1 主目录:~/.hermes/skills/

官方文档说明,所有技能默认都在 ~/.hermes/skills/,这是主目录和事实来源。新安装时,仓库自带的 bundled skills 会被复制到这里;通过 Hub 安装的技能、Agent 自己创建的技能,也会进入这里。

4.2 一个好的 Skill,至少要讲清楚四件事

什么时候用:避免 Agent 在不该用的时候乱加载。

怎么做:把任务拆成稳定步骤,不要只写一句泛泛建议。

哪里容易失败:把踩坑点写进去,让下次少走弯路。

如何验证:告诉 Agent 怎么确认结果真的完成。

4.3 元数据不是装饰,它决定技能能不能被正确发现

官方 SKILL.md 格式里包含 name、description、version、platforms,以及 metadata.hermes 下的 tags、category、requires_toolsets、requires_tools、fallback_for_toolsets、config 等字段。这些字段看似是配置,实际上决定了 Skill 是否出现在列表里、在哪个平台能用、是否依赖某些工具。

五、Progressive Disclosure:为什么不把所有技能一次性塞进去?

如果一个 Agent 有几十个甚至几百个技能,最笨的方法是把所有技能全文都塞进系统提示词。但这样会带来两个问题:token 消耗巨大,模型也容易被无关技能干扰。Hermes 的方案是 Progressive Disclosure,也就是分层加载。

5.1 三层加载模式

Level 0:skills_list,只给技能名称、描述、分类,让 Agent 知道有哪些选择。

Level 1:skill_view(name),加载某个 Skill 的完整内容,真正开始按流程执行。

Level 2:skill_view(name, path),只加载某个参考文件,比如模板、脚本说明或长文档。

5.2 这个设计对工程落地非常重要

这套设计让 Skills 可以越积累越多,但每次任务只加载真正需要的那一小部分。对企业级 Agent 来说,这个思路很关键:知识库可以大,但上下文必须可控。

六、Slash Command:把复杂流程变成一个入口

官方文档说明,每个已安装的 Skill 都会自动作为 slash command 可用。比如 /plan 可以加载计划技能,/github-pr-workflow 可以加载 PR 工作流技能,/excalidraw 可以加载画图相关技能。

6.1 Slash Command 的价值

Slash Command 把一个复杂流程压缩成一个清晰入口。用户不需要每次说一大段:“请先分析上下文,再写计划,再保存到某个目录,再不要执行代码。”只要调用对应 Skill,Agent 就会按技能定义的流程工作。

6.2 自然语言也能触发技能思路

除了 slash command,用户也可以通过自然语言让 Agent 查询或加载技能。例如问“你有哪些技能?”或者“给我看看 axolotl 技能”,Agent 可以通过 skills tool 查看技能列表和内容。

七、条件激活:不是所有技能都该随时出现

一个成熟的技能系统,不能所有技能永远都显示。比如 iMessage 技能在 Linux 上没意义,浏览器工具不可用时,浏览器自动化技能也不该误导模型。Hermes 支持平台限制、工具依赖和 fallback 技能机制。

7.1 平台限制:macOS、Linux、Windows

官方文档说明,Skill 可以通过 platforms 字段限制适用系统。当平台不兼容时,它会从系统提示词、skills_list 和 slash command 中隐藏。这样可以避免 Agent 在错误环境里调用根本用不了的技能。

7.2 工具依赖:requires_toolsets 和 requires_tools

有些 Skill 依赖某类工具,比如 terminal、web、browser。如果这些工具不可用,Skill 就不应该出现。requires_toolsets 和 requires_tools 就是为了解决这个问题。

7.3 Fallback 技能:主工具不可用时才出现

fallback_for_toolsets 和 fallback_for_tools 则相反:当主工具存在时隐藏,当主工具不存在时出现。官方文档举例:如果 web_search 可用,就不需要 DuckDuckGo fallback 技能;如果 web toolset 不可用,fallback 技能才出现。

八、Skill Bundles:把多个技能打包成任务画像

有些任务不是一个 Skill 能覆盖的,而是固定需要多种技能配合。例如后端开发可能同时需要代码审查、测试驱动开发、GitHub PR 工作流。Hermes 的 Skill Bundle 就是为这种情况设计的。

8.1 Bundle 是组合入口,不是安装器

官方文档强调,Bundle 只是 YAML 别名,不会自动帮你安装技能。它把已有技能组合到一个 slash command 下,并可以附加一段统一指令。

8.2 适合团队标准化流程

对于团队来说,Bundle 的价值很大。比如可以定义 /backend-dev、/release-prep、/incident-response。这样每个人调用同一个入口,Agent 就能遵循同一组技能和团队约定。

九、Skills Hub:技能可以安装,但必须有安全边界

Hermes 不只支持本地技能,还支持从不同来源发现和安装技能。官方 Skills Hub 页面显示,它可以从 built-in、optional、community 等来源浏览技能;官方 Skills 文档也列出了 official、skills-sh、well-known、url、github 等安装来源。

9.1 第三方 Skill 为什么需要安全扫描?

因为 Skill 虽然看起来像文档,但它会指导 Agent 做事,甚至可能引用脚本、要求环境变量、引导调用终端或外部工具。如果第三方 Skill 被恶意设计,就可能带来数据外传、提示注入、危险命令、供应链风险。

9.2 Hermes 的信任分级

官方文档把技能来源分成 builtin、official、trusted、community 等信任层级。社区来源出现非危险级告警时可以人工确认后 --force,但 dangerous 扫描结论不能被 --force 越过。

十、Agent-Managed Skills:为什么说它是“经验沉淀机制”?

这一部分是 Hermes Skills 最值得学习的地方。很多 Agent 系统只会“用工具”,但不会把使用工具的经验沉淀下来。Hermes 的 skill_manage 工具让 Agent 有机会把复杂任务中的成功路径保存成新技能。

10.1 什么时候应该创建或更新 Skill?

官方文档列出几种典型场景:完成一个复杂任务后,尤其是经历了多个工具调用;在错误和死路中找到了正确路径;用户纠正了 Agent 的方法;发现了一个非平凡工作流。

10.2 skill_manage 能做什么?

create:从零创建一个新 Skill。

patch:做小范围修补,适合改一句规则或补一个坑点。

edit:对 Skill 做大结构重写。

delete:删除不再需要的 Skill。

write_file:给 Skill 添加或更新 supporting files。

remove_file:删除某个支持文件。

10.3 这不是训练模型,而是训练流程

很多人一听“自我改进”就以为是在训练模型参数。这里要说清楚:Hermes 日常的 Skills 改进,更像是把外部流程文档越写越好。模型本身不一定改变,但模型每次看到的操作手册更准确、更贴近项目经验。

十一、Skills 和 MCP、Tools、Memory 怎么配合?

Skills 本身不直接等于能力。它要和 Tools、MCP、Memory、Context 结合起来,才会变成真正可执行的 Agent 能力。

组合方式

作用

例子

Skills + Tools

Skill 规定流程,Tools 负责执行

PR Skill 让 Agent 调用 git、terminal、file tools

Skills + MCP

Skill 规定业务流程,MCP 连接外部系统

CRM 工单处理 Skill 调用企业 MCP Server

Skills + Memory

Memory 提供偏好和事实,Skill 提供步骤

发版 Skill 读取项目偏好后选择正确环境

Skills + Context

项目规则和技能流程叠加,避免偏离团队规范

AGENTS.md 规定技术栈,Skill 规定测试流程

十二、源码怎么读?按链路,不要乱翻

如果你想深入理解 Hermes Skills,不建议一上来全仓库搜索。更好的方式是按照“发现、展示、加载、注入、执行、更新”的链路去看。

12.1 先看文档,再看文档源文件

先读官方 Skills System 和 Working with Skills,建立概念;再去 GitHub 看 website/docs/user-guide/features/skills.md,理解文档背后的完整说明。

12.2 再看命令和工具链路

重点看 agent/skill_commands.py,理解 slash command 如何把 Skill 格式化成模型可读的消息;再看 skills_list、skill_view、skill_manage 相关工具,理解技能如何被列出、读取、创建和修改。

十三、给普通开发者的落地建议

如果你准备把 Hermes Skills 的思路用到自己的 AI Agent 项目里,可以从下面几个角度借鉴。

13.1 不要把所有经验写进一个超长 Prompt

超长 Prompt 看起来省事,实际会带来上下文膨胀、维护困难、职责不清的问题。更合理的方式是把不同任务拆成独立 Skill,需要时再加载。

13.2 Skill 要写“流程”,不是写“口号”

例如“写出高质量代码”不是一个好 Skill,因为太空;“后端接口改动前先找路由、再找 service、再补测试、最后跑集成测试”才像真正可执行的 Skill。

13.3 每个 Skill 都应该有验证方法

没有验证方法,Agent 很容易把“做了”误认为“做成了”。比如部署类 Skill 必须说明怎么检查服务状态、日志、回滚点;代码类 Skill 必须说明测试和 lint 的验证方式。

13.4 第三方 Skill 要当成代码一样审查

Skill 会影响 Agent 行为,甚至可能引导它调用终端、读取文件、访问网络。所以第三方 Skill 不应盲目信任,要看来源、看权限、看脚本、看是否诱导外传数据。

十四、总结:Skills 让 Agent 从“会干活”变成“会积累经验”

Hermes Agent 的 Skills 系统,真正有价值的地方不在于多了几个命令,而在于它提供了一种工程化的经验沉淀方式:把成功流程写成 Skill,把踩坑经验补进 Pitfalls,把验证方法写进 Verification,把团队规范变成可复用流程。

从架构角度看,Skills 是 Agent 的“流程记忆”。Memory 让 Agent 记住事实,Tools 让 Agent 能执行动作,MCP 让 Agent 能接入外部系统,而 Skills 让 Agent 在这些能力之上形成稳定的工作方法。

所以,如果你想学 Hermes Agent,不要只看它有哪些工具,更要看它怎样把工具调用、项目上下文、长期记忆和 Skills 组合起来,形成一个能复盘、能沉淀、能持续改进的 Agent 系统。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐