Hermes Agent Skills 系统深度指南:从创建到维护的完整工作流
简介
Hermes Agent 的 Skills 系统是它的”肌肉记忆”——把重复性的工作流程、踩过的坑、最佳实践固化成可复用的技能文件,下次遇到同样场景自动加载执行。本文从实战角度出发,覆盖技能的创建、更新、维护全生命周期,以及如何将记忆中的经验高效转化为技能。
前置要求
- 已安装并运行 Hermes Agent
- 了解基本的 YAML 和 Markdown 语法
- 熟悉 Hermes Agent 的 cron 和记忆系统(可选,但有帮助)
一、Skills 系统概述
1.1 什么是 Skills
Skills 是存放在 ~/.hermes/skills/ 目录下的 Markdown 文件,每个文件包含:
- YAML 前置元数据:名称、描述、触发条件
- Markdown 正文:步骤、代码示例、注意事项
当 Hermes Agent 处理任务时,会根据当前上下文自动匹配并加载相关的技能。技能的作用类似于人类的”肌肉记忆”——不需要每次都从头思考怎么做。
1.2 技能的生命周期
1 | 创建 → 使用 → 反馈 → 更新 → 归档/删除 |
技能不是一次写死就完事的——每次使用中发现的遗漏、错误、改进点,都应该及时更新。一个长期不维护的技能反而会成为负担。
1.3 技能 vs 记忆
| 维度 | 技能 (Skills) | 记忆 (Memory) |
|---|---|---|
| 内容 | 流程、步骤、命令 | 事实、偏好、约定 |
| 粒度 | 完整工作流 | 单条陈述 |
| 更新频率 | 按需(使用中发现问题时) | 随时(发现新事实时) |
| 典型用途 | “如何发文件””如何部署博客” | “用户喜欢简洁回复””项目用 pytest” |
原则:过程性知识 → 技能,陈述性知识 → 记忆。
二、创建技能
2.1 基本命令
1 | # 创建一个新技能 |
2.2 技能文件结构
一个标准的技能文件如下:
1 | --- |
Step 3:验证
- 检查输出是否包含预期结果
- 如果失败,回退方案是什么
常见问题
Q:命令执行失败怎么办?
A:检查网络连接,或尝试备用方案。
注意事项
- ⚠️ 不要在非预期环境下执行破坏性操作
- 💡 输出结果超过 100 行时使用分页查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
### 2.3 元数据字段详解
| 字段 | 必填 | 说明 |
|------|------|------|
| `name` | ✅ | 技能名称,小写+连字符,最长 64 字符 |
| `description` | ✅ | 简短描述,用于技能匹配 |
| `metadata.openclaw.emoji` | ❌ | 显示用的表情符号 |
| `metadata.openclaw.requires.bins` | ❌ | 依赖的命令行工具列表 |
### 2.4 实战:从记忆抽取技能
这是最常用的创建方式——用户之前通过对话教过你某个流程,但这些流程散落在记忆文件中。正确的做法是:
1. **识别**:在记忆文件中找到过程性描述("先做 A,再做 B,最后做 C")
2. **提取**:用 `skill_manage(action='create')` 创建技能
3. **清理**:将记忆中的过程描述替换为"已提取为 xxx 技能"
4. **触发**:确保技能名称和描述能自然匹配到使用场景
```python
# 示例:从记忆抽取发文件流程
skill_manage(
action='create',
name='file-delivery',
content='''---
name: file-delivery
description: 通过微信/QQ等平台发送文件给用户
---
# File Delivery
## 步骤
### Step 1:检查文件是否存在
使用 read_file 或 terminal 确认目标文件存在。
### Step 2:发送文件
使用 MEDIA: 路径前缀发送到消息平台。
### Step 3:验证发送
检查网关日志确认发送成功。
### Step 4:失败处理
如果发送失败,尝试压缩、改名或分段发送。
'''
)
三、更新技能
3.1 局部更新(推荐)
使用 patch 模式进行精确替换,不改动文件其他部分:
1 | skill_manage( |
3.2 整体重写
当技能需要大幅修改时,使用 edit 模式:
1 | skill_manage( |
3.3 什么时候该更新
- 发现遗漏步骤:执行过程中发现少了某一步
- 命令过期:工具版本更新导致命令变化
- 新增陷阱:踩了新坑,需要记录下来
- 流程优化:找到了更高效的做法
3.4 实战:技能更新示例
1 | # 假设 hexo-blog-workflow 技能缺少写作前自检步骤 |
四、管理技能
4.1 查看技能列表
1 | # 查看所有技能 |
4.2 删除技能
1 | # 删除技能(如果内容已合并到其他技能) |
4.3 技能目录结构
1 | ~/.hermes/skills/ |
每个技能是一个目录,核心文件是 SKILL.md。可以附带 references/、templates/、scripts/、assets/ 等子目录存放辅助文件。
4.4 辅助文件操作
1 | # 写入辅助文件 |
五、最佳实践
5.1 技能粒度
- 太粗:一个技能包含太多不相关的步骤 → 难以维护
- 太细:每个小操作都做成技能 → 管理成本高
- 刚好:一个完整的工作流,5-15 步,有明确的开始和结束
5.2 命名规范
- 使用小写字母和连字符:
my-awesome-skill - 名称要能反映用途:
file-delivery比send-files更清晰 - 避免缩写:
db-migration比db-mig更好
5.3 触发条件
在技能开头明确写出触发条件,帮助 Hermes Agent 在正确的时机加载:
1 | ## 触发条件 |
5.4 版本管理
虽然技能没有内置版本号,但可以通过以下方式追踪变更:
- 在 SKILL.md 末尾添加变更日志
- 使用
patch而非edit进行更新(保留历史上下文) - 定期 review 技能列表,清理过时内容
5.5 技能与 cron 任务结合
Cron 任务可以通过 skills 字段指定需要加载的技能:
1 | # config.yaml 中的 cron 配置 |
六、常见问题
Q:技能不自动触发怎么办?
检查以下几点:
- 技能名称和描述是否清晰?
description字段用于匹配 - 当前上下文是否相关?Hermes 不会在所有场景下加载所有技能
- 手动加载试试:
skill_view(name='xxx')
Q:技能和记忆内容冲突怎么办?
优先遵循技能中的步骤,因为技能是更结构化的知识。同时更新记忆文件,将冲突的过程描述替换为”已提取为 xxx 技能”。
Q:技能太多怎么管理?
- 使用
category参数分类 - 定期清理:
absorbed_into合并同类技能 - 不需要的技能及时删除,避免干扰匹配
Q:修改技能后需要重启 Hermes 吗?
不需要。技能文件是动态加载的,修改后下次触发自动生效。
七、总结
Skills 系统是 Hermes Agent 最强大的特性之一,它将你的工作经验和最佳实践固化为可复用的知识库。关键要点:
- 过程进技能,事实进记忆——分清两类知识
- 持续维护——每次使用后反思,及时更新
- 粒度适中——一个技能对应一个完整工作流
- 清理冗余——合并同类技能,删除过时内容
- 善用辅助文件——脚本、模板、参考文档都可以随技能管理
把技能当作你的”第二大脑”来经营,越用越顺手。