4. 技能 Skills:会自我进化的 Agent
这是什么:技能(Skill) = 一份 SKILL.md 文档,写着「遇到 X 任务,就按这套步骤做」;它是 Hermes 的程序性记忆。
为什么用:记忆分两种——「事实型」记住你叫张三,「程序型」记住「在这个仓库提 PR 要先跑 lint」。只有后者能复用经验,让 Agent 自己把踩过的坑写成文档,才叫「会进化」。
如何用:本章先看技能怎么加载,再从 Hub 装一个,最后手写一份属于自己的 SKILL.md。
4.1 技能长什么样
技能全部住在 ~/.hermes/skills/——唯一可信来源。捆绑技能安装时复制过来;从 Hub 装的、Agent 自己写的也落在这儿。
~/.hermes/skills/
├── mlops/axolotl/SKILL.md # 捆绑技能
├── devops/deploy-k8s/ # Agent 自己写的
│ ├── SKILL.md # 主说明(必需)
│ ├── references/ # 补充文档
│ ├── templates/ # 输出模板
│ └── scripts/ # 辅助脚本
└── .hub/ # Hub 状态:lock.json、审计日志
SKILL.md 的结构是「YAML 头 + Markdown 正文」:
---
name: deploy-k8s
description: 把服务发到 Kubernetes 集群,包含镜像构建和回滚步骤
version: 1.0.0
metadata:
hermes:
tags: [devops, kubernetes]
category: devops
---
# Deploy K8s
## When to Use
当用户要求「发版」「部署到集群」时使用。
## Procedure
1. 跑 `make image` 构建镜像
2. 更新 `k8s/deploy.yaml` 的 tag
3. `kubectl apply -f k8s/deploy.yaml`
4. `kubectl rollout status deploy/api`
## Pitfalls
- 集群有 staging 和 prod 两套,`kubectl` 前先确认当前 context
- 镜像 tag 用 git 的 short SHA,别用 latest
## Verification
`kubectl get pods` 里新 pod 全部 Running。
那几个固定小节不强制,但照着写质量高一截——Pitfalls 最值钱。
4.2 渐进式披露:为什么加一百个技能也不会变慢
技能不是一股脑塞进 prompt,而是三级按需加载:
Level 0: skills_list() → 只有名字和简介(约 3k token)
Level 1: skill_view(name) → 任务真匹配了,才读全文
Level 2: skill_view(name, path) → 连参考文件也按需读
所以装 100 个技能、每个 500 行,常态开销也就是那 3k token 的名字列表。
用起来是这样:
# 直接当斜杠命令用
/k8s deploy the staging manifest
# 只写名字,Agent 会加载技能并反问你需要什么
/k8s
CLI 和消息平台里都管用。
4.3 从 Hub 装技能
hermes skills browse # 浏览全部可用技能
hermes skills search kubernetes # 按关键词搜
hermes skills inspect openai/skills/k8s # 安装前先预览
hermes skills install openai/skills/k8s # 安装(会先跑安全扫描)
你会看到(示意):
$ hermes skills search kubernetes
github/openai/skills/k8s Kubernetes 部署与排障
official/security/1password 1Password 凭据管理
skills-sh/vercel-labs/react React 最佳实践
3 matches (hub + official)
来源 id 有 official(仓库自带)、github(如 openai/skills/k8s)、skills-sh(Vercel 目录)、well-known(站点索引)、url(任意 HTTP(S) 链接),以及 clawhub 等社区市场。
装完还能管起来:hermes skills list --source hub 看装了什么,check 查上游更新,update 只更新有变化的,audit 重跑扫描,uninstall k8s 卸载。
装第三方技能等于装代码,所以有信任级别:builtin(永远信任)、official(内置信任)、trusted(较宽松)、community(其余全部,非危险发现可用 --force 覆盖)。
⚠️
--force能覆盖谨慎/警告级发现,但不能覆盖dangerous级结论——恶意技能你装不上。
扫描器查数据外泄、prompt 注入、破坏性命令、供应链信号。GitHub 匿名用户每小时只有 60 次请求,撞限流就在 .env 设 GITHUB_TOKEN。
4.4 Agent 是怎么「学会」的
Agent 手上有个 skill_manage 工具,能自己创建、修补、删除技能。这是 Hermes 最不一样的地方。
触发时机:完成复杂任务(5 次以上工具调用)、踩坑后找到可行路径、被用户纠正、发现新工作流。
可用操作:create 新建 · patch 定点修补(首选,比 edit 省 token)· edit 重写 · delete 删除 · write_file / remove_file 增删参考文件。
你甚至可以直接下令:「把刚才那个发布流程写成 release-flow 技能」。Agent 写完存进 ~/.hermes/skills/,下次自动会用。
4.5 条件激活:让技能看情况出现
技能可以声明「我只在某些工具可用时才出现」,典型用途是兜底(fallback):
metadata:
hermes:
fallback_for_toolsets: [web] # web 工具可用时,我隐藏
requires_toolsets: [terminal] # terminal 可用时,我才出现
举例:Hermes 自带的 duckduckgo-search 标了 fallback_for_toolsets: [web]。配了 FIRECRAWL_API_KEY 就有正经的 web_search,DDG 技能自动隐身;没配 Key 它才跳出来当免费替代品。
4.6 进阶:外部目录与捆绑包
外部技能目录:多个 AI 工具共用一份 ~/.agents/skills/ 时,在 config.yaml 加一行就能一起扫:
skills:
external_dirs:
- ~/.agents/skills
- /home/shared/team-skills
支持 ~ 展开和 ${VAR} 替换,同名时本地优先。
技能捆绑包(bundles) 把几个技能绑成一个斜杠命令:
hermes bundles create backend-dev \
--skill github-code-review \
--skill test-driven-development \
--skill github-pr-workflow \
-d "后端功能开发:评审、测试、提 PR"
之后 /backend-dev 帮我给鉴权中间件加测试 一次加载三个技能。它是 YAML 别名,不替你装技能。
动手改
- 跑
hermes skills browse和hermes skills search kubernetes,挑一个装上(先inspect看它要干什么)。 - 照着 4.1 的模板手写
~/.hermes/skills/my-first-skill/SKILL.md,写一件你每周都做的重复流程。 - 用
hermes chat --toolsets skills -q "列出你会的技能"让 Agent 报一遍家,看它认不认得你写的那个。
小结
- 技能 =
SKILL.md,住在~/.hermes/skills/,即程序性记忆 - 渐进式披露:Level 0 只看名字简介(~3k token),正文按需加载
- 每个技能自动变成一条斜杠命令:
/技能名 参数 - 装第三方技能前有安全扫描,
dangerous结论无法--force绕过 skill_manage让 Agent 自己写技能:复杂任务、踩坑、被纠正时触发fallback_for_toolsets/requires_toolsets让技能按工具可用性显隐
下一章:插件与工具扩展 🐸