⚡ Skills 系统深度开发指南

深度解析 Skills 的加载机制与内部结构,从零开发自定义 Skill,掌握系统提示注入、工具配置与工作流模板的完整开发方法。

Skills 机制 自定义开发 系统提示注入 工具配置

🧩 1. Skills 是什么

Skills 是 Hermes Agent 的插件系统,本质是一组 YAML 配置文件,安装后会在 Agent 启动时被加载,通过以下三种方式扩展 Agent 的能力:

  • 系统提示注入:向模型的 system prompt 追加领域专项指令,让 Agent 在特定任务上表现更专业
  • 工具配置:启用、禁用或限制特定工具的使用范围
  • 工作流模板:预定义常用任务的执行步骤,用户一句话触发完整流程
🔍 设计哲学:Skills 的核心思想是"配置即能力"。不需要写代码,只需要写好 YAML 和 Prompt,就能让 Agent 获得新的专项能力。这让非开发者也能定制自己的 Agent。

⚙️ 2. 加载机制

Hermes 在启动时按以下顺序加载 Skills:

  1. 扫描 ~/.hermes/skills/ 目录下的所有子目录
  2. 读取每个子目录中的 skill.yaml 文件
  3. 验证 YAML 格式和必填字段
  4. system_prompt 追加到全局系统提示末尾
  5. 合并工具配置(Skill 的工具配置优先级高于全局配置)
  6. 注册工作流模板到 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 完整字段说明

字段类型必填说明
namestring必填Skill 的显示名称
descriptionstring必填Skill 的功能描述,显示在 hermes skills list
versionstring可选版本号,如 1.0.0
authorstring可选作者信息
system_promptstring可选注入到系统提示的内容,支持多行文本
tools.enabledlist可选强制启用的工具列表
tools.disabledlist可选强制禁用的工具列表
workflowslist可选工作流模板列表
mcp_serversmap可选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 触发词,确保精确匹配