🔄 Hermes Skill 维护任务

🔄 Hermes Skill 维护任务

本笔记是 Hermes 实例上所有 Skill 的通用维护规则。子笔记树按以下规则自动维护。


一、树结构

三级结构:

  🔄 Hermes Skill 维护任务(本笔记)
  ├── 🤖 自学生成          ← AI 自动创建的 Skill
  └── 👤 用户指令生成      ← 用户要求创建的 Skill
       ├── 分类A (N)       ← 每个分类节点含一句话描述
       │   ├── skill-a     ← 叶子节点,内容按第三章模板
       │   └── skill-b
       └── 分类B (N)
            └── skill-c

每个子分类节点(如 DevOps (10))的笔记内容只包含一句话说明"此类 Skill 的特征",无更多内容。


二、维护算法(通用抽象)

2.1 数据源

skills_list()

输出全部已安装 Skill。排除赫敏系统内置 Skill(/opt/hermes/skills/ 下的)。

2.2 分类归属判定

维护时按以下方式确定 Skill 属于哪个分类:

  1. 读取根笔记下所有第2级子笔记(即子分类节点)的标题和内容;
  2. 每个子分类节点内容中含该分类的归类描述(一句话);
  3. 将 Skill 名称、描述与各子分类的归类描述匹配 → 归类。

无法归类的 Skill → 由 AI 自行判断最适合的子分类,或创建新的子分类节点(以 其他-{类别} 命名)。

2.3 增量创建逻辑

情况动作
Skill 有叶子节点且内容按第三章模板达标跳过(用户修改受保护)
Skill 有叶子节点但内容不达标(一句话/纯描述)重新生成——视为未完成
Skill 无叶子节点按第三章模板创建
用户删除了叶子节点再次维护时重建
子分类节点缺失创建后再创建其下叶子

内容达标判定标准(满足一条即为达标,跳过):

  1. 笔记内容包含 ### 核心业务逻辑 文本(证明已按模板展开);
  2. 笔记纯文本长度超过 200 字符(一句话通常 <80 字符,200 以上说明已有实质结构内容)。

不满足以上任一标准的叶子节点视为未完成占位符,下次维护时重新生成。

2.4 伪代码

  SKILLS = skills_list()
  BUILTIN = set(/opt/hermes/skills/ 下的 skill 名称)
  USER = SKILLS - BUILTIN

  def is_content_complete(note_content):
      """返回 True 如果内容按模板已达标"""
      if "### 核心业务逻辑" in note_content: return True
      if len(strip_html(note_content)) > 200: return True
      return False

  CAT_NODES = get_child_notes(ROOT)    # 第2级子分类节点
  for each CAT in CAT_NODES:
      cat_desc = read_content(CAT)     # 一句话归类描述
      for each SKILL in USER:
          if matches(SKILL, cat_desc):
              LEAF = find_child_by_title(CAT, SKILL.name)
              if LEAF is None or not is_content_complete(content(LEAF)):
                  create_leaf(CAT, SKILL)  # 按第三章模板

三、叶子节点内容规则

每个 Skill 叶子节点是另一个 Agent 读完即可独立安装和使用的摘要。不是完整 SKILL.md 的复制,而是可执行的快照。

3.1 模板结构

  ## {skill-name}

  **类型:** {自学生成 / 用户指令}
  **分类:** {分类名称}

  ### 描述
  {从 SKILL.md frontmatter 的 description 字段直接复制}

  ### 安装 / 加载
  - **SKILL.md 路径:** /opt/data/skills/{类别}/{名称}/SKILL.md
  - **加载命令:** `skill_view(name='{名称}')`  # 在当前实例引用
  - **从零重建步骤:** (仅跨实例安装时需要)
      1. 读取 SKILL.md 全文,理解 triggers 和业务逻辑
      2. 复制目录:{如有 linked_files,列出需复制的文件}
      3. 安装依赖:{apt/pip/npm 等命令}
      4. 配置环境变量:{名称及来源}
      5. 验证:{验证命令或步骤}

  ### 触发条件
  - **用户对话触发:** {SKILL.md frontmatter triggers 中的自然语言描述}
  - **命令触发:** {CLI 命令,如有}
  - **自动/定时触发:** {cron/webhook 等}

  ### 核心业务逻辑
  {用统一的框架组织,不超过 10 行:}

  1. **解决的问题:** {一句话}
  2. **输入:** {需要什么数据/条件}
  3. **输出:** {生成什么结果}
  4. **关键流程:**
     - {步骤一}
     - {步骤二}
     - {步骤三}
  5. **已知陷阱:** {踩过的坑,避免重复犯错}
  6. **边界条件:** {空数据/异常/并发等处理方式}

  ### 引用文件
  (仅当 SKILL.md 有 linked_files 时输出)
  - `references/` — {说明}
  - `scripts/` — {说明}

  ### 使用示例
  - **Terminal 方式:** {命令}
  - **对话方式:** "用户说 XXX" → {AI 做 YYY}
  - **预期结果:** {执行后的输出或效果}

  ### 关联 Skill
  - **前置依赖:** {必须先安装的 skill 名称,无则写"无"}
  - **互补 Skill:** {配合使用效果更佳的 skill}

3.2 模板说明

  • 不加分号的行(描述/触发条件/安装路径)直接从 SKILL.md 摘取,不重新概括。
  • 加评估的行(核心业务逻辑/已知陷阱/边界条件)由 AI 在维护时分析 SKILL.md 全文后提炼。不可靠的推断用 (推测) 标注。
  • 关联 Skill 需在维护时扫描其他叶子节点标题做交叉引用。
  • 安装/加载 区分"当前实例引用"和"跨实例重建"两种场景。当前实例只需路径 + loading 命令;跨实例才需要重建步骤。
  • 叶子节点总长度控制在 30-50 行。超过说明提炼不够。

3.3 示例(mysql-db-admin)

## mysql-db-admin

**类型:** 自学生成
**分类:** DevOps

### 描述
MySQL database administration — create databases, manage users and privileges,
execute SQL queries as root, with encrypted credential storage.
Uses file-based password store (chmod 600) + Python pymysql wrapper script.
Targets ghost.atibm.com:63306.

### 安装 / 加载
- **SKILL.md 路径:** /opt/data/skills/devops/mysql-db-admin/SKILL.md
- **加载命令:** `skill_view(name='mysql-db-admin')`
- **从零重建步骤:**
  1. 将 ~/bin/mysql-root helper script 到目标机器
  2. 将 root 密码写入 ~/.mysql-root-pwd (chmod 600)
  3. 确保 pymysql 可用 (pip install pymysql)
  4. 验证:~/bin/mysql-root "SELECT 1" 返回 1

### 触发条件
- **用户对话触发:** "建库","mysql 授权","GRANT","root 密码"
- **命令触发:** ~/bin/mysql-root "SQL语句"

### 核心业务逻辑
1. **解决的问题:** 在 Docker 环境下远程操作 MySQL,避免每次输入 root 密码
2. **输入:** 远程 MySQL 地址 ghost.atibm.com:63306,root 密码
3. **输出:** SQL 执行结果
4. **关键流程:**
   - 从 ~/.mysql-root-pwd 读取密码
   - 用 pymysql 连接 ghost.atibm.com:63306
   - 执行 SQL,返回结果
   - 所有 GRANT 须覆盖 172.% / 192.% / localhost 三个 host
5. **已知陷阱:** GRANT host 必须匹配已有用户行,'%' 通配符不一定存在
6. **边界条件:** 网络不可达时重试 2 次后报错

### 使用示例
- **Terminal:** ~/bin/mysql-root "SHOW DATABASES"
- **对话:** "创建 wind_data 库并授权给 hermes-oracle-at"
- **预期结果:** SQL 结果以表格形式打印

### 关联 Skill
- **前置依赖:** 无
- **互补 Skill:** pinchtab-setup(调试网络连接用)

四、维护后验证

  • 每个 USER Skill 都有对应的叶子节点
  • 无孤立叶子节点(每个叶子节点都有父分类节点)
  • 所有子分类节点包含归类描述(非空)
  • 叶子节点内容按第三章模板检查:安装/加载、触发条件、核心业务逻辑、使用示例四项必填
  • 不允许存在仅含一句话描述的叶子节点——此类视为"未完成",下次维护重新生成

📋 维护日志
  • 2026-07-10: 增量维护 — 新增 33 个叶子节点(DevOps +4,软件开发 +1,创意 +1,研究 +1,演示-视频 +2,金融服务 +24)。当前覆盖 165 个 USER Skill 叶子节点。排除内置 66 个 Skill。未归类:macos-computer-use(无对应分类);空分类:自动化(UfO7sCs1nXHz) 待填充。同日修补:内容达标判定标准——一句话占位符不再视为"已完成"。
  • 2026-07-10 (第二趟): 增量维护 — 新增 7 个叶子节点(MLOps +6,其他-桌面控制 +1)。新建分类:MLOps(02KUYj6nEmUT) 含 axolotl/dspy/fine-tuning-with-trl/obliteratus/outlines/unsloth;其他-桌面控制(IyuQxxyWcEUQ) 含 macos-computer-use。更新 自学生成 计数至 47。空分类:自动化(UfO7sCs1nXHz) 仍待填充。
  • 2026-07-10 (重建): 全量重建 — MCP create_note 工具不持久化,所有历史叶子节点丢失。通过 ETAPI POST /create-note 直接重建全部 179 个叶子节点(自学生成 50 + 用户指令生成 129)+ 27 个分类节点。合并新增 7 个 skill(axolotl/dspy/fine-tuning-with-trl/obliteratus/outlines/unsloth → MLOps; macos-computer-use → 其他-桌面控制)。空分类:自动化 仍待填充。