🚀 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 #脚本 #模板