🧩 1. Skills 是什么
Skills 是 Hermes Agent 的插件系统,本质是一组 YAML 配置文件,安装后会在 Agent 启动时被加载,通过以下三种方式扩展 Agent 的能力:
- 系统提示注入:向模型的 system prompt 追加领域专项指令,让 Agent 在特定任务上表现更专业
- 工具配置:启用、禁用或限制特定工具的使用范围
- 工作流模板:预定义常用任务的执行步骤,用户一句话触发完整流程
🔍 设计哲学:Skills 的核心思想是"配置即能力"。不需要写代码,只需要写好 YAML 和 Prompt,就能让 Agent 获得新的专项能力。这让非开发者也能定制自己的 Agent。
⚙️ 2. 加载机制
Hermes 在启动时按以下顺序加载 Skills:
- 扫描
~/.hermes/skills/目录下的所有子目录 - 读取每个子目录中的
skill.yaml文件 - 验证 YAML 格式和必填字段
- 将
system_prompt追加到全局系统提示末尾 - 合并工具配置(Skill 的工具配置优先级高于全局配置)
- 注册工作流模板到 Agent 的触发词列表
bash
# 查看已加载的 Skills
hermes skills list
# 激活特定 Skill 启动 Agent
hermes --skill k8s
# 同时激活多个 Skills
hermes --skill k8s --skill code-review
💡 按需激活:不指定
--skill 时,所有已安装的 Skills 都会被加载。如果你安装了很多 Skills,建议按需激活,避免系统提示过长消耗 token。📁 3. Skill 文件结构
~/.hermes/skills/
└── my-skill/ # Skill 目录名即为 Skill ID
├── skill.yaml # 核心配置文件(必须)
├── prompts/ # 可选:拆分的 Prompt 文件
│ └── system.md
└── README.md # 可选:使用说明
skill.yaml 完整字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 必填 | Skill 的显示名称 |
description | string | 必填 | Skill 的功能描述,显示在 hermes skills list 中 |
version | string | 可选 | 版本号,如 1.0.0 |
author | string | 可选 | 作者信息 |
system_prompt | string | 可选 | 注入到系统提示的内容,支持多行文本 |
tools.enabled | list | 可选 | 强制启用的工具列表 |
tools.disabled | list | 可选 | 强制禁用的工具列表 |
workflows | list | 可选 | 工作流模板列表 |
mcp_servers | map | 可选 | Skill 专属的 MCP 服务器配置 |
系统提示注入
system_prompt 是 Skill 最核心的字段,它的内容会被追加到 Agent 的全局系统提示末尾。写好这段 Prompt 是 Skill 质量的关键:
yaml
system_prompt: |
## 代码审查专家模式
你现在是一位资深代码审查专家,具备以下专项能力:
**审查维度**(每次审查必须覆盖):
1. 安全漏洞:SQL 注入、XSS、CSRF、不安全的反序列化
2. 性能问题:N+1 查询、不必要的循环、内存泄漏
3. 代码规范:命名、注释、函数长度、圈复杂度
4. 可维护性:耦合度、测试覆盖、错误处理
**输出格式**:
- 使用 Markdown 表格汇总问题,按严重程度(Critical/Major/Minor)分类
- 每个问题提供:问题描述、影响范围、修复建议、修复示例代码
- 最后给出总体评分(1-10)和改进优先级建议
🔍 Prompt 注入的时机:系统提示在每次对话开始时注入,不会随对话历史增长而重复。这意味着你可以写较长的专业指令,不用担心每轮都消耗大量 token。
工具配置
Skill 可以覆盖全局工具配置,精确控制 Agent 在该 Skill 激活时可以使用哪些工具:
yaml
tools:
enabled:
- terminal # 强制启用终端(即使全局禁用)
- read_file
- web_search
disabled:
- write_file # 禁用文件写入(只读模式)
# 工具参数限制(高级用法)
terminal:
allowed_commands: ["kubectl", "helm", "docker"] # 只允许特定命令
工作流模板
工作流模板让用户用一句话触发复杂的多步骤任务:
bash
workflows:
- name: full-review
trigger: "审查代码" # 用户说这句话时触发
description: "对当前目录进行完整代码审查"
prompt: |
请对当前目录的代码进行完整审查:
1. 先用 list_directory 了解项目结构
2. 读取主要源文件
3. 按审查维度逐一分析
4. 输出结构化审查报告
🛠️ 4. 从零开发 Skill
以开发一个"A股日报生成"Skill 为例,完整演示开发流程:
第一步:创建目录结构
bash
mkdir -p ~/.hermes/skills/astock-daily
cd ~/.hermes/skills/astock-daily
touch skill.yaml
第二步:编写 skill.yaml
yaml
# ~/.hermes/skills/astock-daily/skill.yaml
name: A股日报生成器
description: 自动抓取A股市场数据,生成结构化日报,支持定时推送到 Telegram
version: 1.0.0
author: your-name
system_prompt: |
## A股市场分析专家
你是一位专注A股市场的量化分析师,具备以下能力:
**数据获取规范**:
- 优先使用 web_search 搜索权威财经网站(东方财富、同花顺、Wind)
- 搜索关键词格式:"{日期} A股 {指标名称}"
- 数据来源必须在报告中注明
**日报结构**(严格按此格式输出):
```
📊 A股日报 · {日期}
【大盘概况】
上证指数:xxx(涨跌幅)
深证成指:xxx(涨跌幅)
创业板指:xxx(涨跌幅)
【市场情绪】
上涨/下跌/平盘家数,成交额
【热点板块】
Top3 涨幅板块及代表个股
【明日关注】
重要财经事件、数据发布
【风险提示】
当前市场主要风险点
```
tools:
enabled: [web_search, web_fetch]
disabled: [terminal, write_file]
workflows:
- name: daily-report
trigger: "生成日报"
description: "生成今日A股市场日报"
prompt: "请生成今日A股市场日报,按标准格式输出。"
- name: sector-analysis
trigger: "板块分析"
description: "分析今日热点板块"
prompt: "请搜索今日A股热点板块,分析涨跌原因和持续性,给出操作建议。"
第三步:验证 Skill 加载
bash
hermes skills list # 确认 astock-daily 出现在列表中
# 激活 Skill 测试
hermes --skill astock-daily --tui
# 在对话中输入触发词
# > 生成日报
🔍 5. 调试技巧
查看注入后的完整系统提示
bash
# 在对话中输入
/system # 显示当前完整的系统提示(含所有 Skill 注入内容)
常见问题排查
- Skill 未出现在列表中:检查
skill.yaml是否在正确目录,YAML 格式是否有语法错误(用python3 -c "import yaml; yaml.safe_load(open('skill.yaml'))"验证) - 系统提示注入但 Agent 不遵循:检查 Prompt 是否足够明确,尝试在 Prompt 开头加
**重要:以下规则必须严格遵守** - 工具配置不生效:Skill 的工具配置优先级高于全局,但低于命令行参数。检查是否有命令行参数覆盖了 Skill 配置
- 工作流触发词不响应:触发词匹配是精确匹配,确保用户输入与
trigger字段完全一致
⚠️ YAML 缩进陷阱:YAML 对缩进极其敏感,混用 Tab 和空格会导致解析失败。建议使用 2 个空格缩进,并用 YAML 验证工具检查格式。
🚀 6. 发布与分享
开发完成的 Skill 可以通过以下方式分享给其他用户:
方式一:GitHub 仓库
将 Skill 目录推送到 GitHub,其他用户通过以下命令安装:
bash
hermes skills install github-username/repo-name/skill-dir
方式二:直接分享 skill.yaml
将 skill.yaml 文件分享给他人,对方手动创建目录并放入文件即可使用。
方式三:提交到官方 Skills 市场
向 Hermes Agent 官方仓库提交 PR,将 Skill 收录到官方市场,让更多用户发现和使用。
💡 发布建议:发布前确保 Skill 有清晰的 description、完整的 README 说明使用方法,以及至少一个 workflow 示例。好的文档是 Skill 被广泛使用的关键。
✅ 7. 最佳实践
- 单一职责:每个 Skill 专注一个领域,不要把所有功能塞进一个 Skill
- Prompt 要具体:系统提示中的指令越具体,Agent 的行为越稳定。避免模糊的"你是一个专家",要明确"你在做 X 任务时必须按 Y 格式输出"
- 工具最小权限:只启用 Skill 真正需要的工具,减少 Agent 误操作风险
- 提供输出模板:在 system_prompt 中提供期望的输出格式模板,大幅提升输出一致性
- 版本管理:给 Skill 加版本号,方便追踪变更和回滚
- 测试触发词:发布前测试所有 workflow 触发词,确保精确匹配