Hermes Agent 的技能(Skill)是可靠、可复现 AI Agent 行为的引擎。一个技能就是一个 Markdown 文件,精确记录了如何执行某项任务——该运行哪些命令、需要避开哪些坑、以及如何验证成功。当你用 Git 对这些技能做版本控制,并在 Docker 容器中测试它们时,就把一次性的 Agent 会话变成了一个可维护的生产级系统。
一个技能就是一个带有 YAML 前置元数据和 Markdown 正文的 SKILL.md 文件。它存放在 Agent 的配置文件目录中,当任务匹配时自动加载。下面是一个最简示例——一个部署 Docker 容器的技能:
---
name: docker-deploy
description: 将 Docker Compose 编排部署到远程服务器。
category: devops
---
# Docker 部署
通过 SSH 部署 Docker Compose 编排。
## 触发条件
- "部署编排"
- "推送到生产环境"
## 工作流
### 1. 构建镜像
docker compose build
### 2. 本地测试
docker compose up -d && curl -f http://localhost:3000/health
### 3. 推送到服务器
scp docker-compose.yml root@server:/opt/stack/
ssh root@server "cd /opt/stack && docker compose up -d"
## 注意事项
- 推送前务必先在本地测试
- 先检查目标服务器的磁盘空间
前置元数据(name、description、category)是 Hermes 发现和组织技能的方式。当任务匹配到触发关键词或描述时,Markdown 正文就会被加载到 Agent 的上下文中。
技能遵循一个四阶段的生命周期,与软件开发流程类似:
让我们用真实命令逐步走一遍。首先验证 Hermes 能够管理技能:
$ hermes skills list --category devops
docker-deploy 将 Docker Compose 编排部署到远程服务器。
fullstack-docker-deployment 部署全栈 Node.js + Prisma + SPA (Vite) 应用
overseas-nodejs-deployment 将 Node.js + PostgreSQL Docker Compose 应用部署到廉价 VPS
在成功完成一次包含多个步骤的复杂任务后创建技能。最佳技能往往来自那些使用了 5 次以上工具调用并克服了错误的真实任务。通过 Hermes 使用 skill_manage 工具:
$ hermes skill create \
--name "postgres-backup-restore" \
--category "devops" \
--description "备份并恢复 Docker 中的 PostgreSQL 数据库"
技能已创建:~/.hermes/profiles/default/skills/devops/postgres-backup-restore/SKILL.md
也可以直接编写 SKILL.md 并放入正确的目录。技能格式很直观——每个技能都需要清晰的触发条件、编号的工作流步骤、注意事项部分以及验证步骤。
测试技能意味着在隔离的 Docker 容器中运行 Hermes Agent 并让它使用该技能。这能捕获技能中缺失的依赖、错误的路径以及隐含的环境假设。
启动一个全新的 Hermes 容器并挂载你的技能:
$ docker run -d --name hermes-skill-test \
-v $(pwd)/skills/postgres-backup-restore:/root/.hermes/profiles/default/skills/devops/postgres-backup-restore \
-e HERMES_API_KEY=*** \
hermes-agent:latest
$ docker logs -f hermes-skill-test
然后让 Hermes 在测试任务中使用该技能:
$ echo "备份测试数据库" | docker exec -i hermes-skill-test hermes run -
关键洞察:Docker 每次都会给你一个干净的环境。没有残留的环境变量、没有过期的缓存、没有你忘了文档化的软件包。如果技能在全新容器中能正常工作,那么在任何服务器上都能正常工作。
技能是文本文件——它们理应纳入版本控制。一个专门存放 Hermes 配置文件 skills/ 目录的 Git 仓库为你提供审计历史、回滚能力以及清晰的部署路径:
$ cd ~/.hermes/profiles/default/skills
$ git init
$ git add .
$ git commit -m "初始技能集:docker-deploy、postgres-backup、content-publisher"
$ git remote add origin git@github.com:team/agent-skills.git
$ git push -u origin main
现在你的技能集已经版本化了。当你在线上会话中修补一个技能时(详见下文),提交变更:
$ git add devops/docker-deploy/SKILL.md
$ git commit -m "docker-deploy:在 SCP 之前添加磁盘空间检查,修复 SSH 端口"
$ git push
在生产服务器上,拉取更新:
$ ssh production-server
$ cd ~/.hermes/profiles/production/skills
$ git pull origin main
git log 就能知道当时激活的是哪个版本的技能。你可以通过二分查找技能变更来精确定位回归漏洞的引入时机。这是整个工作流中最强大的部分。在线上会话中,当你发现某个技能缺少步骤或命令有误时,立即修补它——不要等到别人提出要求:
$ hermes skill patch \
--name "docker-deploy" \
--old "scp docker-compose.yml root@server:/opt/stack/" \
--new "scp -P 2222 docker-compose.yml root@server:/opt/stack/"
Agent 也会自动修补技能。当 Hermes 加载一个技能并遇到该技能未覆盖的陷阱时,它会更新技能以包含新的注意事项。这意味着你的技能库会随着每次会话而变得更好,而不是逐渐退化。
一个精心组织的技能可以包含辅助文件——参考资料、模板、脚本和资源文件。目录结构遵循以下约定:
skills/devops/docker-deploy/
├── SKILL.md # 主技能文档
├── references/
│ └── server-details.md # 服务器地址、端口、路径
├── templates/
│ └── docker-compose.yml # 模板 compose 文件
├── scripts/
│ └── health-check.sh # 验证脚本
└── assets/
└── architecture.png # 架构图
列出可用技能:
$ hermes skills list
可用技能(12 个):
devops/
docker-deploy 部署 Docker Compose 编排
postgres-backup-restore 备份并恢复 PostgreSQL
overseas-nodejs-deployment 部署 Node.js 到廉价 VPS
content/
content-site-publisher 将文章发布到 SEO 站点网络
baoyu-article-illustrator 文章配图
mlops/
llama-cpp 本地 GGUF 推理
fine-tuning-with-trl TRL:SFT、DPO、PPO
...
基于类别的组织结构(例如 devops/、content/、mlops/)帮助 Agent 和人类运维人员快速找到技能。使用 skill_view(name) 可以在不加载进上下文的情况下检查技能:
$ hermes skill view docker-deploy
# 返回 SKILL.md 的内容,不占用上下文窗口空间
像对待任何生产代码库一样对待你的技能仓库。使用功能分支开发新技能,通过 Pull Request 进行审查:
$ git checkout -b skill/add-health-check-pattern
# ... 创建新技能 ...
$ git add devops/health-check/SKILL.md
$ git commit -m "添加 health-check 技能:Docker + curl 模式"
$ git push -u origin skill/add-health-check-pattern
发起 PR 并由他人审查。审查检查以下内容:
对于运行多个 Hermes 配置文件(开发、预发布、生产)的团队,使用分支模型:
$ git branch -a
main # 生产技能
staging # 预发布环境技能
skill/experimental-mcp # 开发中的新技能
fix/pitfall-docker-deploy # 生产技能的 bug 修复
只有当技能在预发布环境经过测试和审查后,才合并到 main。生产环境的 Hermes 实例按计划或通过部署触发器从 main 拉取更新。
一个健壮的测试流水线可以在技能回归缺陷到达生产环境之前捕获它们。下面是一个单独测试每个技能的 shell 脚本:
#!/bin/bash
# test-skills.sh——在全新的 Hermes 容器中逐个运行每个技能
SKILLS_DIR="$HOME/.hermes/profiles/default/skills"
RESULTS_DIR="/tmp/skill-tests"
mkdir -p "$RESULTS_DIR"
for skill_dir in $(find "$SKILLS_DIR" -name SKILL.md -exec dirname {} \;); do
skill_name=$(basename "$skill_dir")
echo "测试中:$skill_name"
docker run --rm \
-v "$skill_dir:/root/.hermes/profiles/default/skills/test-category/$skill_name" \
-e HERMES_API_KEY="***" \
hermes-agent:latest \
hermes skill view "$skill_name" > "$RESULTS_DIR/$skill_name.log" 2>&1
if [ $? -eq 0 ]; then
echo " ✓ $skill_name——加载成功"
else
echo " ✗ $skill_name——失败(详见 $RESULTS_DIR/$skill_name.log)"
fi
done
在 CI 中每次推送到 main 时运行此脚本。它很快(每个技能只需几秒即可验证),并能捕获最常见的失败:损坏的 YAML 前置元数据、缺失必填字段以及破坏技能加载的语法错误。
要更深入地测试,可以针对每个技能运行一个真实任务:
# 进阶:实际执行一个技能
docker run --rm \
-v "$skill_dir:/skills" \
-v /tmp/test-workspace:/workspace \
hermes-agent:latest \
hermes run --input "使用 docker-deploy 技能部署到预发布环境"
对于生产系统,用 PostgreSQL 追踪每一次技能调用。这为你提供可查询的历史记录,包括哪些技能在何时运行以及运行结果:
CREATE TABLE skill_runs (
id SERIAL PRIMARY KEY,
skill_name TEXT NOT NULL,
profile TEXT NOT NULL,
started_at TIMESTAMPTZ DEFAULT now(),
finished_at TIMESTAMPTZ,
exit_code INTEGER,
tool_calls_count INTEGER,
error_message TEXT,
git_commit TEXT -- 运行时的技能 Git SHA
);
CREATE INDEX idx_skill_runs_name ON skill_runs(skill_name);
CREATE INDEX idx_skill_runs_started ON skill_runs(started_at);
查找不可靠技能的查询:
SELECT skill_name,
COUNT(*) AS total_runs,
SUM(CASE WHEN exit_code != 0 THEN 1 ELSE 0 END) AS failures,
ROUND(100.0 * SUM(CASE WHEN exit_code != 0 THEN 1 ELSE 0 END) / COUNT(*), 1) AS failure_pct
FROM skill_runs
WHERE started_at > now() - INTERVAL '7 days'
GROUP BY skill_name
HAVING SUM(CASE WHEN exit_code != 0 THEN 1 ELSE 0 END) > 0
ORDER BY failure_pct DESC;
失败率高的技能需要优先关注。结合 Git 历史记录可以查看最近的修补是否引入了这些失败。
以下是来自 Agent Rule 网络的一个生产技能——就是生成本文所用的 content-site-publisher 技能。它包含 200 多行 YAML 和 Markdown,已在 Git 中版本化,并负责处理三个站点、多种语言的内容发布:
$ git log --oneline skills/productivity/content-site-publisher/
d42f8c3 fix:添加 arablawguide 的 RTL 阿拉伯语页脚链接
c71a2b1 feat:添加 agent-rule.com 暗色主题发布流程
b8e3f9a fix:中文日期格式——使用"分钟"而非"min read"
a1d5c7e feat:初始 content-site-publisher 技能
每次变更都有文档记录、可审查、可回滚。当出现新的边缘情况(例如跳板主机更换了端口)时,修复只需一次 skill_manage(action='patch') 调用——并且永久保留在 Git 历史记录中。
git log 精确告诉你技能何时发生了变化以及为什么Hermes Agent 技能将 Agent 从一个一次性工具转变为一个每次使用都会变好的系统。Git 提供了安全网——每次变更都有追踪,每个错误都可回滚。Docker 提供了沙箱——每次测试都在干净的环境中运行。两者结合,使 AI Agent 自动化变得可预测、可审计且达到生产级标准。