Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Canon — Hermes 技能生态图书管理员 v4.2

图书管理员不烧书,园丁不灭种,审计员不执刑。韧性优先,不是效率优先。

项目简介

本项目是 Hermes Agent 技能生态管理系统的设计演进、核心文档和可运行插件实现。它把技能从"静态说明书"升级为带生命周期的可复活档案:每个任务开始前召回相关技能,休眠/归档技能在命中后即时复活,不再随机轮转。

v4.2 核心特性:

  • 🧠 语义召回引擎 — 字级/词级混合 TF-IDF + cosine,支持中文 n-gram;英文词边界避免 aiairtable 误撞
  • 🌐 中文触发器增强 — 为每个技能自动/手动维护 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 插件(推荐)

把插件目录放进 ~/.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_lifecyclepost_llm_callon_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

方式二:纯 CLI 使用(不装插件)

# 建立持久化档案
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_bankarchive 后,高置信候选会复活到 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天未使用的技能自动归档,保存完整元数据和履历但释放资源。档案仍参与每次任务召回,命中后即时复活,不再依赖随机轮转。

隔离层(isolation)

风险技能(如脱狱/越权类)进隔离层。隔离技能永不进入召回候选,复活需显式授权; 无授权复活会抛 PermissionError。保证失效安全而非失效开放。

许可证

This project is licensed under CC BY-NC 4.0Creative 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

About

Canon — 技能生态典章。四层架构(热气层/常驻层/种子库/隔离层)分类管理 Hermes Agent 技能库,图书管理员而非法官。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages