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 角色差异
| Owner | User | Guest | |
|---|---|---|---|
| 使用已启用的技能 | ✓ | ✓ | ✓(如果策略允许该技能的工具) |
| 启用 / 停用技能 | ✓ | — | — |
| 注册 / 删除技能 | ✓ | — | — |
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 写并注册你自己的技能
场景 —— 你有一个反复出现的模式(比如每周的回顾),想把它打包成技能。
步骤
-
在用户技能目录下建文件夹:
mkdir -p ~/.openhermit/skills/user/weekly-retro -
在里面写
SKILL.md:--- name: weekly-retro description: 从最近 7 天的会话生成周度回顾。 --- # Weekly retro 当被要求做周度回顾时,…… -
扫描并启用:
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 指引
- 接入外部系统的工具 → 第 9 章 · MCP 服务。
- 看 OpenHermit 自带的全部技能 → 在你的实例上跑
hermit skills list。 - 限制哪些角色能用某个技能的工具 → 第 15 章 · 策略与审批。