图书管理员不烧书,园丁不灭种,审计员不执刑。韧性优先,不是效率优先。
本项目是 Hermes Agent 技能生态管理系统的设计演进、核心文档和可运行插件实现。它把技能从"静态说明书"升级为带生命周期的可复活档案:每个任务开始前召回相关技能,休眠/归档技能在命中后即时复活,不再随机轮转。
v4.2 核心特性:
- 🧠 语义召回引擎 — 字级/词级混合 TF-IDF + cosine,支持中文 n-gram;英文词边界避免
ai⊂airtable误撞 - 🌐 中文触发器增强 — 为每个技能自动/手动维护
metadata.hermes.triggers,写用户会怎么问而不是技能名 - 🔄 可复活档案系统 — 任务级召回 + 持久化履历 + 观察期回退 + 文件系统自动还原(
.archive/→ 活跃目录) - 📁 分类目录修复 — 复活后按 frontmatter 的
category重新嵌套到skills/<category>/<name>/,避免索引出现自名分类 - 🔄 外部索引刷新感知 — 检测到
archive.json被外部进程(如 cron)更新后自动重载 - 🏷️ 柔性标签系统 — 多标签并存,取代硬性分层
- ⚖️ 动态权重评分 — 按技能类型和生态上下文自动调整
- 🚧 加载门禁(soft-reminder) — 跳过相关技能直接调工具时,插件会反复在 prompt 中注入召回提示,避免 cron/toolset 受限环境死锁
- 🔒 隔离层(isolation) — 高风险技能永不自动加载,复活需授权
- 🧩 Hermes 插件化 — 标准插件(
register(ctx)+ 6 hooks) - 🔗 与 Nyx 协同 —
features/skill_distiller.py从过程记忆蒸馏 skill 候选,Canon 负责索引、召回与复活
最近更新(v4.2,2026-09-14):
- 接入
tools.skill_usage.restore_skill,解决"账本已 load、文件还在.archive"的漂移问题 - 新增
semantic_recall.py替换原canon_archive.py的字符级匹配;中文查询命中质量显著提升 - 新增
cn_triggers.json中文触发器库,覆盖 140+ 技能 - 新增
_nest_by_category()修复restore_skill平铺还原导致的自名分类问题 pre_tool_call从硬拦截改为软提醒,避免 gateway cron 等无skill_view上下文死锁
设计驱动: 由 Claude Sonnet 4 / DeepSeek R1 / Qwen3 235B / GPT-4.1 四模型深度分析驱动优化。
| 版本 | 名称 | 定位 | 核心改进 |
|---|---|---|---|
| v1.0 | skills-judgment | 审判系统 | 六维评分,自动清理 |
| v2.0 | hermes-skill-curation | 园丁系统 | 反熵保护,对抗性辩护 |
| v3.0 | skill-ecosystem-librarian | 图书管理员 | 四层架构,三不原则 |
| v4.0 | skill-ecosystem-librarian | 韧性生态系统 | 柔性标签,动态权重,主动活化 |
| v4.1 | skill-ecosystem-librarian | 可复活档案系统 | 任务级召回,持久化履历,观察期回退,插件化 |
| v4.2 | canon-revival | 语义召回 + 文件系统对齐 | 中文 n-gram 语义召回,triggers 增强,.archive 自动还原,分类目录修复,索引热重载 |
├── README.md # 项目说明(本文档)
├── plugin.yaml # Hermes 插件清单(kind: standalone + provides_hooks)
├── __init__.py # Hermes 插件入口:register(ctx) 注册 6 hooks
├── SKILL.md # Canon 技能本体
├── docs/ # 文档目录
│ ├── evolution.md # 演进历史(v1.0→v4.0)
│ ├── architecture.md # 架构设计 v4.0
│ ├── scoring-system.md # 评分体系详解 v4.0
│ ├── archive-and-revival.md # 持久化档案与即时复活协议
│ ├── hermes-deployment.md # Hermes 插件部署与验证
│ └── chromadb-integration.md # ChromaDB 集成(历史)
├── scripts/
│ ├── canon_archive.py # 无依赖档案、召回与复活引擎
│ ├── semantic_recall.py # 语义召回层:字/词混合 TF-IDF + cosine(含中文 n-gram)
│ ├── cn_triggers.json # 中文触发器库(技能名 → 用户会怎么问)
│ ├── index_hermes_skills.py # 扫描 Hermes 技能建立档案
│ └── __init__.py # scripts 包
├── references/
│ ├── librarian-classification.json # 分类基准(层:normal/seed_bank/hot/isolation)
│ ├── decision-tree.md # 判定树
│ ├── evaluation-example.json # 评估示例
│ ├── founding-conversation.md # 创始对话
│ └── golden-quotes.md # 金句
├── src/
│ ├── ecosystem-librarian.md # 核心系统 v4.0
│ └── skill-curation.md # 园丁系统 v2.0(历史)
└── tests/
├── test_canon_archive.py # 档案生命周期测试
└── test_hermes_plugin.py # 插件注册与加载门禁测试
把插件目录放进 ~/.hermes/plugins/ 并启用:
# 将本仓库(或其中 plugin.yaml + __init__.py + scripts/)放入:
# ~/.hermes/plugins/canon-revival/
hermes plugins enable canon-revival
hermes plugins doctor canon-revival # 期望 6 hooks 注册、0 警告插件注册 6 个 hook:pre_llm_call(任务级召回,命中低频技能注入 prompt)、
pre_tool_call(soft-reminder:跳过相关技能直接调工具时反复注入召回提示,但不硬拦截,
避免 cron 等无 skill_view 工具的上下文死锁)、post_tool_call(放行标记)、
on_skill_lifecycle、post_llm_call、on_session_end。隔离层(isolation)技能永不自动加载,复活须授权。
v4.2 新增:文件系统对齐。 档案账本与磁盘状态会各自漂移——curator 把冷技能
物理移到 skills/.archive/,而 Canon 账本仍标 layer=normal。此时召回成功但
skill_view 找不到文件。v4.2 在 preflight() 里对每个 action=load 的候选调用
tools.skill_usage.restore_skill 还原文件,并 _nest_by_category() 按 frontmatter
的 category 重新嵌套(restore_skill 只还原到平铺 skills/<name>/,会让索引
把技能自己的名字当成分类)。
导入采用双导入(__init__.py):Hermes 以 hermes_plugins.<slug> 命名空间
加载时走相对导入(from .scripts.canon_archive);仓库根 python -m pytest 或
独立 importlib 加载时走绝对兜底(from scripts.canon_archive)。两种上下文都可用。
完整部署与验证见 docs/hermes-deployment.md。
# 建立持久化档案
python3 scripts/canon_archive.py --state .canon/archive.json \
import --input references/librarian-classification.json
# 任务级召回
python3 scripts/canon_archive.py --state .canon/archive.json \
preflight "你的当前任务描述"
# 扫描 Hermes 技能重建档案
python3 scripts/index_hermes_skills.py --root ~/.hermes/skills \
--state .canon/archive.json命中 seed_bank 或 archive 后,高置信候选会复活到 normal 观察态;任务完成后
回写成功或失败。完整协议见 docs/archive-and-revival.md。
python3 -m pytest tests/ -q # 8 项:档案生命周期 + 插件注册/门禁每个技能可拥有多个标签,不再非此即彼:
pixel-art: [cold, unique, potential, degraded, mature]
hermes-agent: [hot, unique, core, healthy, mature]
按技能类型自动调整评分权重:
- 工具型:活跃度30% + 稳健度25%(可靠性优先)
- 创意型:独特性30% + 完整度20%(创新优先)
- 研究型:独特性25% + 适应度20%(探索优先)
超过90天未使用的技能自动归档,保存完整元数据和履历但释放资源。档案仍参与每次任务召回,命中后即时复活,不再依赖随机轮转。
风险技能(如脱狱/越权类)进隔离层。隔离技能永不进入召回候选,复活需显式授权;
无授权复活会抛 PermissionError。保证失效安全而非失效开放。
This project is licensed under CC BY-NC 4.0 — Creative Commons Attribution-NonCommercial 4.0
- ✅ Free to use — personal, educational, and open-source projects
- ✅ Free to modify and distribute
- ✅ Attribution required — Credit: sixgod (@sixgodgit)
- ❌ No commercial use — Selling or profit-making from this code is prohibited
Author: sixgod | GitHub: github.com/sixgodgit