🚀 Hermes 自定义技能进阶:脚本、模板与技能市场
高阶第 2 篇 — 从单文件 Markdown 到完整技能包
🎯 这篇讲什么
上篇学会了写基础 SKILL.md。这篇进阶:用脚本实现复杂逻辑、用模板减少重复、发布到技能市场分享。
🐍 脚本集成:让 Skill 真正「能做事」
为什么需要脚本?
有些操作用 Markdown 描述不清楚,用代码才精确。比如:
目录结构
my-skills/github-stats/
├── SKILL.md
└── scripts/
└── fetch_stats.py
SKILL.md 中引用脚本
---
name: github-stats
description: 获取 GitHub 仓库的 star 数、fork 数和最近 issue 统计
version: 1.0.0
---
# GitHub 仓库统计
## 触发条件
用户询问 GitHub 仓库数据时触发。
## 步骤
1. 确认仓库名(格式:owner/repo)
2. 执行脚本获取数据:
```bash
python3 scripts/fetch_stats.py <owner/repo>
```
3. 将 JSON 结果格式化为中文报告
## 注意事项
- 需要 GitHub Token 环境变量 `GITHUB_TOKEN`
- API 有频率限制(未认证 60次/小时)
脚本示例(scripts/fetch_stats.py)
#!/usr/bin/env python3
"""获取 GitHub 仓库统计数据"""
import sys, os, json, urllib.request
repo = sys.argv[1]
token = os.getenv("GITHUB_TOKEN", "")
def api(path):
url = f"https://api.github.com/repos/{repo}/{path}"
req = urllib.request.Request(url)
if token:
req.add_header("Authorization", f"Bearer {token}")
with urllib.request.urlopen(req) as resp:
return json.loads(resp.read())
data = api("")
issues = api("issues?state=open&per_page=1")
# 从响应头获取总数(GitHub API 分页返回在 Link 头里)
result = {
"stars": data["stargazers_count"],
"forks": data["forks_count"],
"open_issues": data["open_issues_count"],
"language": data.get("language", "N/A"),
"description": data.get("description", ""),
}
print(json.dumps(result, ensure_ascii=False, indent=2))
📋 模板集成:减少重复劳动
模板文件让 Skill 能快速生成标准化内容。
用例:Issue 报告模板
my-skills/bug-reporter/
├── SKILL.md
└── templates/
└── bug-report.md
模板文件(templates/bug-report.md)
# Bug 报告:{{ title }}
**严重程度:** {{ severity }}
**发现时间:** {{ date }}
**环境:** {{ environment }}
## 复现步骤
{{ steps }}
## 预期行为
{{ expected }}
## 实际行为
{{ actual }}
## 附加信息
{{ extra }}
SKILL.md
---
name: bug-reporter
description: 帮助用户创建结构化的 Bug 报告
version: 1.0.0
---
## 步骤
1. 向用户询问:Bug 标题、严重程度、环境、复现步骤
2. 读取模板:`templates/bug-report.md`
3. 用用户输入替换 `{{ }}` 占位符
4. 保存到 `~/Reports/bugs/{{ 日期 }}-{{ 标题 }}.md`
🏪 技能市场:发现与分享
浏览和搜索
# 浏览所有可用技能
hermes skills browse
# 搜索特定主题
hermes skills search "web search"
# 预览(不安装)
hermes skills inspect duckduckgo-search
安装技能
# 从官方市场安装
hermes skills install web-search
# 从 URL 直接安装
hermes skills install https://example.com/my-skill/SKILL.md
# 从社区技能商店安装
hermes skills install skillhub:my-custom-skill
管理已安装技能
# 列出
hermes skills list
# 检查更新
hermes skills check
# 更新全部
hermes skills update
# 卸载
hermes skills uninstall web-search
按平台启用/禁用
# 微信上启用搜索,Telegram 上禁用
hermes skills config
# → 交互式选择每个平台启用哪些技能
🎨 实战:从头写一个完整的 Skill
场景:每日 AI 新闻简报
my-skills/daily-ai-news/
├── SKILL.md
├── scripts/
│ └── fetch_news.py
└── templates/
└── news-brief.md
SKILL.md
---
name: daily-ai-news
description: 抓取当日 AI 领域重要新闻,生成中文简报。
当用户说"AI新闻""今日AI动态""有什么AI大事"时触发。
version: 1.0.0
---
# 每日 AI 新闻简报
## 步骤
1. 执行 `python3 scripts/fetch_news.py` 获取新闻
2. 筛选出最重要的 5 条
3. 使用 `templates/news-brief.md` 模板生成简报
4. 发布到配置的默认平台
## 模板变量
- {{ date }}: 当前日期
- {{ summary }}: 一句话总结
- {{ items }}: 新闻条目列表
## 注意事项
- 新闻源 API 可能限流,失败时用缓存
- 每条约 50 字以内
- 重要新闻用 🔥 标记
模板(templates/news-brief.md)
# 🤖 AI 日报 — {{ date }}
> {{ summary }}
---
{{ items }}
---
*由 Hermes Agent 自动生成*
🧪 测试 Skill
# 1. 检查语法
cat SKILL.md | grep "^---$" | wc -l # 应该有 2 个 ---
# 2. 在对话中加载测试
hermes -s daily-ai-news
# 3. 触发测试
hermes chat -q "今天的 AI 新闻有哪些?"
# 4. 调试:看是否加载
# 在对话中说 /skill daily-ai-news
🔄 持续改进
Hermes 的 self-improvement 技能会自动:
1. 发现 Skill 执行中的错误
2. 记录用户纠正
3. 建议更新 Skill
你也可以手动让 Hermes 改进:
用户: 检查一下 daily-ai-news 这个技能,最近三次执行有什么可以优化的地方
Hermes: [分析执行记录] 建议:
1. 新闻筛选逻辑改为按热度排序
2. 增加中文翻译步骤(源数据是英文)
3. 缓存时间从 1 小时延长到 3 小时
要我应用这些改进吗?
❓ 常见问题 (FAQ)
Q1: 脚本用什么语言?
Python 最方便(Hermes 自带 Python 环境)。Shell 脚本也行。不推荐需要额外安装运行时的语言。
Q2: 脚本怎么传参数给 SKILL.md 的步骤?
通过命令行参数。Hermes 执行步骤时会解析命令并传入。
Q3: 模板里的 {{ }} 语法是必须的吗?
不是。这是建议约定。用占位符让 Hermes 知道哪里需要替换,你也可以用其他格式。
Q4: 我的 Skill 想用第三方库怎么办?
在 SKILL.md 的注意事项里写明依赖。如"需要 pip install requests"。
Q5: 怎么发布到技能市场给别人用?
hermes skills publish <path>。需要注册技能市场账号。
Q6: 别人的 Skill 安全吗?
Hermes 会扫描安装的 Skill 中的危险模式(如 curl | bash)。来自外部的 Skill 默认隔离安装到 .hub/quarantine/。
⚠️ 实操避坑
| 坑 | 正确做法 |
|---|---|
脚本没加 #!/usr/bin/env python3 | 第一行加 shebang,否则可能用错解释器 |
| 脚本用绝对路径 | 用相对路径,基于 Skill 目录 |
| 模板占位符拼写不一致 | 定义好变量名,全文统一 |
| Skill 装了但平台没启用 | hermes skills config 检查各平台开关 |
| 更新 Skill 后旧会话不生效 | /reset 开新会话加载新版本 |
标签:#AI #HermesAgent #高阶 #Skill #脚本 #模板