8. 技能

**技能(skill)**是你可以为某个智能体打开的一份打包好的能力。把它想成一个小目录,里面有一份 SKILL.md 描述这项能力,外加配套的脚本或模板。技能是最方便的扩展方式 —— 不写代码,就能给智能体加新本事。

本章过一遍启用、停用、注册技能的操作,并指出技能与 MCP 服务(第 9 章)的关系。


8.1 技能长什么样

最简形态是一个目录:

my-skill/
├── SKILL.md         # 描述、何时使用、说明
└── (可选:脚本、prompt 片段、参考资料)

SKILL.md 的 frontmatter 携带元数据:

---
name: standup-digest
description: 把团队的 standup 更新汇总成每日摘要。
---

# Standup digest

当用户要求生成每日 standup 摘要时使用本技能 ……

为某个智能体启用技能后,智能体会拿到 SKILL.md 的内容作为附加上下文,并能访问技能目录里的辅助脚本。


8.2 两个来源

内置技能。 随 OpenHermit 一起发布,网关一启动就可发现。覆盖常见的几类:research、summarisation、GitHub helpers 等等。

用户技能。 你自己写的,或者从第三方仓库拿来的。把技能目录放到 ~/.openhermit/skills/user/ 下,网关下次扫描就会发现它。注册之后,用户技能的行为和内置技能一模一样。

~/.openhermit/skills/user/
├── weekly-retro/
│   └── SKILL.md
├── standup-digest/
│   ├── SKILL.md
│   └── helper.sh
└── …

无论是内置还是用户来源,操作流程一致:列出、启用、停用。


8.3 hermit skills 命令

# 列出本实例注册的所有技能。
hermit skills list

# 看哪个技能被启用在哪个智能体上。
hermit skills assignments

# 扫描网关的技能目录,发现新技能。
hermit skills scan

# 注册一个新技能(读取 SKILL.md 的 frontmatter)。
hermit skills register my-skill --path ./skills/my-skill

# 为某个智能体启用一个技能。
hermit skills enable standup-digest --agent main

# 为舰队里的每个智能体启用。
hermit skills enable standup-digest --all

# 为某个智能体停用。
hermit skills disable standup-digest --agent main

# 把技能彻底从注册表中移除。
hermit skills delete my-skill

启用是幂等的 —— 重复执行 enable,第二次什么都不做。


8.4 智能体如何使用启用了的技能

启用一个技能时会发生两件事:

  • 技能的 SKILL.md 正文,会以一个可辨识的标题段落,被加进智能体的系统提示。
  • 技能目录里的辅助脚本可以从工作区访问,智能体能直接执行它们。

智能体自己判断什么时候适合用某个技能。通常你不需要按名字点它;直接说出你要做的事(“帮我写今天的 standup digest”),智能体会从描述里挑出合适的技能。


8.5 Web 管理界面

Manage → Skills 选项卡显示注册表、分配关系,以及按智能体启用/停用的开关。注册新技能通常仍走文件系统 —— 把目录放到 ~/.openhermit/skills/user/ 下,执行 hermit skills scan(或重启网关)。


8.6 角色差异

OwnerUserGuest
使用已启用的技能✓(如果策略允许该技能的工具)
启用 / 停用技能
注册 / 删除技能

User 和 guest 能享用 owner 启用的技能;不能自己启用新的。


8.7 How-to 配方

8.7.1 打开一个内置技能

场景 —— 你想给 main 智能体加上 web-research 这项能力。

hermit skills list                       # 确认它在
hermit skills enable web-research --agent main

验证 —— 对智能体说”研究一下关于 X 的最新新闻并汇总”,它应该按技能里的模式来做。


8.7.2 写并注册你自己的技能

场景 —— 你有一个反复出现的模式(比如每周的回顾),想把它打包成技能。

步骤

  1. 在用户技能目录下建文件夹:

    mkdir -p ~/.openhermit/skills/user/weekly-retro
  2. 在里面写 SKILL.md:

    ---
    name: weekly-retro
    description: 从最近 7 天的会话生成周度回顾。
    ---
    
    # Weekly retro
    
    当被要求做周度回顾时,……
  3. 扫描并启用:

    hermit skills scan
    hermit skills enable weekly-retro --agent main

验证 —— hermit skills list 看到新条目;hermit skills assignments 看到它在 main 上启用。


8.7.3 把一个技能推到每个智能体

hermit skills enable critique --all

验证 —— hermit skills assignments 显示每个智能体上都启用了该技能。


8.7.4 停用不再需要的技能

hermit skills disable old-skill --agent main

或者整个舰队:

hermit skills disable old-skill --all

这不会把技能从注册表删掉,只是不再让它在选中的智能体上可用。彻底删除用 hermit skills delete old-skill


8.8 FAQ

技能会吃 token 吗? 会 —— 启用的技能的 SKILL.md 是系统提示的一部分。冗长的描述会抬高每轮 token 成本。把技能文档写简洁。

技能 vs MCP 服务 —— 我什么时候选哪个? 技能打包的是 提示词模式和小辅助脚本。MCP 服务打包的是 作为工具暴露的外部系统。“我希望某件事总按 X 的方式做” —— 写成技能。“我希望能调用 GitHub” —— 那是 MCP 服务。

技能可以依赖某个 MCP 服务吗? 可以 —— 技能的 prompt 可以假定某些 MCP 工具存在。把这个依赖写进 SKILL.md,让用户知道两者都要启用。

智能体怎么挑用哪个技能? 它读取每个已启用技能的描述(在系统提示里),与请求匹配。描述很关键 —— 像写搜索 query 一样写它们。


8.9 指引