com um clique
canon
三省引擎(CMG)典则线 (Canon) — 规则生产库。v2.7.2 默认固化阈值10→3。纯静态规则层,不执行拦截、不存记忆。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
三省引擎(CMG)典则线 (Canon) — 规则生产库。v2.7.2 默认固化阈值10→3。纯静态规则层,不执行拦截、不存记忆。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
Use when the user says "dashboard", "仪表盘", "!dashboard", or wants to view/manage Canon-Mnemonic-Guard rules, config, or companion skills. Launches a local web dashboard at localhost:8765 with rule browsing, config management, companion skill monitoring, trend charts, ZIP export, batch operations, and type conversion.
三省引擎 (CMG) — 取自「吾日三省吾身」。v5.6.0 +Dashboard v1.0.0 +Guard v4.8.3 +sentinel v1.4.0。三条核心线(Canon/Guard/Mnemonic) + 一条外观(CMG) + 两个插件(sentinel硬拦截/skill-autoload自启动)。对外 role:guard stage:pre_action。
三省引擎(Canon-Mnemonic-Guard)护栏线 (Guard) — 规则执行器。读取 Canon 规则库,执行五层前置拦截。Hermes 平台搭配 cmg-guard 插件实现内核级硬拦截,其他平台靠 Skill 层自觉。v4.8.3 文档精简。
三省引擎(CMG)忆存线 (Mnemonic) — 状态记忆层。v3.5.3 默认固化阈值10→3。纯记忆状态层,不生产规则不执行拦截。
| name | canon |
| description | 三省引擎(CMG)典则线 (Canon) — 规则生产库。v2.7.2 默认固化阈值10→3。纯静态规则层,不执行拦截、不存记忆。 |
| version | 2.7.2 |
| role | producer |
| stage | system_anchor |
| dependencies | [] |
| min_hermes_version | any |
| platforms | ["linux","macos","windows"] |
| author | L1veSong |
| license | MIT |
| metadata | {"hermes":{"tags":["cmg","canon","rules","self-reflection"],"related_skills":["guard","mnemonic","canon-mnemonic-guard"]}} |
角色: producer (规则生产锚点) | 阶段: system_anchor (系统锚点层)
三省引擎(CMG)典则线。从 CMG v5.0.2 物理拆分独立。不执行拦截、不存记忆——只生产规则。
~/.hermes/self-reflection/
├── errors.jsonl # 原始错误记录 (永久追加)
├── patterns.json # 匹配模式库 (去重压缩)
├── state.json # 跨会话状态
├── rules/ # Obsidian 结构化规则目录
│ ├── _index.md # 自动索引 + wikilinks 表格
│ ├── ban/ # 禁止项
│ ├── gap/ # 缺失项
│ └── lazy/ # 偷懒项
├── config.json # 用户配置
└── checklists/ # 防偷懒清单
| 版本 | 变更 |
|---|---|
| v2.7.2 | +默认固化阈值10→3 |
| v2.7.1 | +P2补全: 草稿快速通道(接收Mnemonic同会话推送) + 与Mnemonic v3.5.1联动 |
| v2.7.0 | +误报自动降级(连续否决≥3次→降soft) + 规则有效期(!remember --expires 7d) |
| v2.6.0 | +规则分级(hard/soft/monitor) + 修正模板(correction_template) + 用户纠正级别调整 + level_history追踪 |
| v2.5.1 | +推荐列表自动扫描: config.json recommendations + !scan-recommendations + plugins 扫描源 |
| v2.5.0 | +C1 定时扫盘: 加载时检查距上次扫盘天数,超阈值自动触发 |
| v2.4.1 | 护栏逻辑剥离至 guard-spec.md,CMG v5.1.0 四包制分装 |
| v2.4.0 | +规则效果评分 +角色声明制 +简化触发词 +导入导出 |
| v2.3.1 | +规则冲突检测与自动裁决 |
| v2.3.0 | +依赖解耦(RuleReader接口+7适配器) +可配置扫描源 +模式切换 |
| v2.2.9 | +首次真实扫盘提取+固化执行 |
| v2.2.3 | +角色声明制(废除数字优先级) |
| v2.2.0 | +扫盘提取 |
| v2.0.0 | Obsidian 结构化 rules/ 目录 |
读取 ~/.hermes/self-reflection/config.json。如不存在,使用默认值(含 auto_scan_interval_days: 7)。
优先加载 rules/ 目录(结构化规则),降级加载 rules.permanent.md(v1 兼容)。
读取 ~/.hermes/self-reflection/state.json,核心字段:
{
"last_solidify_at": "ISO8601",
"last_scan_at": "ISO8601",
"errors_since_solidify": 5,
"sessions_since_start": 12,
"last_activation": "ISO8601"
}
last_scan_at 记录上次扫盘时间(v2.5.0 新增)。
比较 errors_since_solidify 与 auto_solidify_threshold。
触发条件: 每次 Canon 加载时自动执行。
执行步骤:
1. 读取 state.json → 获取 last_scan_at
2. 计算距上次扫盘的天数
3. 读取 config.json → auto_scan_interval_days(默认 7)
4. 如果 距上次扫盘 ≥ auto_scan_interval_days → 触发扫盘
- 执行「扫盘提取」章节的完整流程(扫描 SOUL.md / Obsidian / Memory / Skill)
- 更新 state.json: last_scan_at = now()
- 输出: "定时扫盘完成。距上次 {N} 天。发现 {M} 条准则 → 待用户确认导入。"
5. 如果未到阈值 → 跳过
- 输出: "距上次扫盘 {N} 天(阈值 {D} 天),跳过定时扫盘。"
降级: state.json 缺失或 last_scan_at 不存在 → 视同上一次从未扫盘,首次加载时自动触发。
触发条件: 每次 Canon 加载时自动执行(在 C1 扫盘之后)。
执行步骤:
1. 读取 SOUL.md → 搜索 [CMG v{x}.{y}.{z}] 标记
2. 检测结果:
✅ 标记存在 + 版本匹配 → 静默通过
⚠️ 标记存在 + 版本过旧 → 输出: "CMG 已升级到 v{x},SOUL.md 激活标记仍为 v{old}。更新?[Y/N]"
❌ 标记不存在 → 输出: "SOUL.md 未找到激活标记,护栏未自动生效。重新写入?[Y/N]"
3. 如果 C1 扫盘触发(距上次扫盘超阈值):
- 扫盘流程自动包含推荐列表扫描
- 检查 config.json → recommendations.items[] 逐项
- 新检测到的已安装推荐 → 提示启用
4. 如果 C1 扫盘未触发(未到阈值):
- 跳过推荐扫描(避免每次对话都扫)
- 用户可用 !scan-recommendations 手动触发
推荐扫描输出格式(扫盘时自动包含):
📋 推荐列表(自动扫描):
✅ 8 个已就绪
⚠️ 1 个待配置: plur(已安装但未启用 → 输入 !scan-recommendations 配置)
❌ 0 个未安装
激活标记丢失的恢复流程:
⚠️ SOUL.md 中未找到 CMG 激活标记。
护栏规则当前未自动生效。
原因可能:
1. 你手动删除了 SOUL.md 中的 [CMG v...] 行
2. SOUL.md 被其他工具覆盖
3. 这是首次在新设备上使用 CMG
是否重新写入激活标记?
[Y] 恢复 — 重新写入 [CMG v5.5.2] 加载 canon-mnemonic-guard 护栏规则
[N] 跳过 — 护栏保持停用,下次扫盘再提醒
选择 [Y/n]:
注意: 激活标记丢失≠CMG 损坏。规则库、配置、推荐列表全部在 ~/.hermes/self-reflection/ 中完整保留。丢失的只是 SOUL.md 中的一行触发器。
首次安装: 安装时执行初始扫盘 → 写入 last_scan_at。后续按阈值周期触发。
读取 checklists/ 下 config.json 中启用的 YAML 文件。
必须输出: "Canon v2.7.2 已激活。{N} 条规则({ban}/{gap}/{lazy})。距上次扫盘 {D} 天。定时扫盘: {on/off}(间隔 {X} 天)。"
任何表达「记录错误行为 + 希望未来避免」的语句触发。三步走:生成规则 → 写入 rules/ → 更新 patterns.json。
新规则写入前扫描同类型规则。跨类型检测(ban↔gap↔lazy)已启用。冲突时 clarify 四选一裁决。
v2.6.0 新增。所有规则必须标注级别,Guard 根据级别决定拦截策略。
| 级别 | 拦截行为 | 重试策略 | 设置方式 | 适用场景 |
|---|---|---|---|---|
| hard | 立即拦截 | 自动重试直到修正 | !remember --hard | 数学错误、安全违规、API错用 |
| soft | 提醒后放行 | 提醒1次,不重试 | !remember --soft(默认) | 启发式建议、可协商规则 |
| monitor | 不拦截 | 纯计数+报告 | !monitor | 观察性规则、实验性规则 |
---
type: ban
id: rule_xxx
level: hard # ← v2.6.0 新增:hard / soft / monitor
correction_template: "具体修正方向" # ← v2.6.0 新增
---
每条 hard 规则必须配置。Guard 拦截后注入此模板到 RetryLoop,告诉 AI 怎么改。
格式要求:
示例:
# 好:具体可执行
correction_template: "所有 OCR 坐标必须除以 2。请将你输出的所有坐标数值全部除以 2 后再输出。"
# 好:给出替换方案
correction_template: "禁止 pyautogui.hotkey('cmd','v')。请替换为 osascript keystroke 'v' using command down。"
# 差:只说了违规没说怎么改
correction_template: "不要用 pyautogui hotkey。"
# 差:太长了
correction_template: "关于 pyautogui 的 hotkey 功能,在 macOS 环境下,由于系统权限和输入法限制,Cmd 修饰键有概率丢失..."
未配置的 hard 规则: Guard 使用通用回退——"你的回答违反了规则:{rule_name}。请遵守该规则重新生成。"
用户纠正某规则 → 该规则提升一级: monitor→soft, soft→hard
hard 不再升级(已是最高)
当前会话内强化、跨会话恢复原级(除非再次纠正)
规则 frontmatter 新增字段追踪级别变化:
level_history:
- {from: soft, to: hard, reason: "用户纠正", date: "2026-05-23"}
!remember 增强!remember "禁止xxx" → 默认 soft
!remember --hard "禁止xxx" → hard
!remember --soft "注意xxx" → soft(冗余,但明确)
!monitor "观察xxx" → monitor
命中率/误报率/最后命中/创建日期四指标。误报率>30%标记待调整,180天未命中提示过期。
v2.7.0 新增。 规则不再永久锁定在 high 级别。用户连续否决/忽略某规则达到阈值 → 自动降级。
降级规则:
hard 规则被用户连续否决(说「这不是错误」「放行」)≥ 3 次 → 自动降为 soft
soft 规则被用户连续否决 ≥ 5 次 → 自动降为 monitor
monitor 规则被用户连续否决 ≥ 10 次 → 标记「待移除」,下次扫盘提示删除
降级后观察期 7 天:期间无再次违规 → 维持新级别
观察期内再次违规 → 恢复原级别
降级日志: rules/ frontmatter 新增 downgrade_history 字段追踪降级事件。
v2.7.0 新增。 不是所有规则都永久生效。临时规则到期自动失效。
用法:
!remember --expires 7d "论文提交前检查格式" → 7天后自动失效
!remember --expires 30d "项目A的特殊约束" → 30天后
!remember --expires never "禁止虚构幻觉" → 永久(默认)
到期行为: 规则到期后自动从 rules/ 移至 rules/.expired/ 归档目录。下次扫盘时提示:「{N} 条规则已过期,是否清理?」
frontmatter 新增字段:
expires_at: "2026-06-01T00:00:00Z" # ISO8601,到期时间
expired_action: "archive" # archive=归档 / delete=删除
adaptive 模式根据用户纠正频率动态调整(高频→5,正常→10,低频→20),可切换为 fixed。
!export → rules/ + state.json + patterns.json → ZIP。!import <path> → 逐条冲突检测 → 确认导入。
扫描 SOUL.md / Obsidian 铁则库 / Memory / 其他 Skill 中的准则类内容。过滤规则:含「禁止/必须/规则/铁则/HARD-GATE」的准则类提取,纯偏好/闲聊/日志跳过。
扫盘不再是一次性的。每次 Canon 加载时检查 last_scan_at,超过 auto_scan_interval_days(config.json 中 auto_scan_interval_days,默认 7 天)自动触发扫盘。新增规则源(如新安装的 Skill、Obsidian 新增的铁则)会自动纳入。
扫盘中自动执行推荐检测(v2.5.1 新增): 扫盘流程自动包含推荐列表扫描——检查 config.json 的 recommendations.items[],对每个推荐项验证是否已安装、是否已配置。未配置的已安装项 → 提示用户启用。
用户说「扫盘」/「扫描规则」/「提取准则」→ 立即执行扫盘,不受阈值限制。执行后更新 last_scan_at。
触发词: !scan-recommendations 或「扫描推荐」/「检查推荐列表」
独立于规则扫盘。只扫描 config.json 的 recommendations.items[],不扫规则源。
执行流程:
1. 读取 config.json → recommendations.items[]
2. 逐项检测安装状态:
- type=skill: 检查 detection_path 文件是否存在
- type=plugin: 检查 pip entry points (detection_group + detection_name)
- type=mcp_server: 检查 detection_path 文件是否存在
3. 逐项检测配置状态:
- skill: 检查 skill 是否在 Hermes 已安装列表中
- plugin: 检查 config.yaml plugins.enabled 是否包含
- mcp_server: 检查 ~/.hermes/config.yaml 是否有对应 provider
4. 分类输出:
- ✅ 已安装+已配置: N 个(正常)
- ⚠️ 已安装+未配置: N 个 → 逐一询问用户是否启用
- ❌ 未安装: N 个
5. 用户确认启用 → 自动配置(skill: 无需操作已可用; plugin: 写入 config.yaml; mcp: 写入 custom scan source)
6. 更新 recommendations.items[].configured = true
7. 更新 recommendations.last_scan
自动询问格式:
⚠️ 发现已安装但未配置的推荐工具:
1. verify-before-completion (护栏增强)
→ Guard 拦截「声称完成但未验证」后自动调用
启用? [Y] 是 [N] 跳过
2. rtk-rewrite (成本优化)
→ 压缩终端输出 60-90% token
启用? [Y] 是 [N] 跳过
用户确认后自动写入对应配置,无需手动编辑 config.yaml。
errors.jsonl → 去重合并 → rules/ 目录独立 .md → _index.md 自动索引 → patterns.json 更新。
启动时检测 rules/ state.json patterns.json intercept_log.jsonl mnemonic_state.json 五文件完整性。
{
"auto_solidify_threshold": 10,
"solidify_threshold_mode": "adaptive",
"auto_scan_interval_days": 7,
"conflict_detection": {"cross_type": true},
"scoring": {"false_positive_threshold": 0.3, "expiry_days": 180},
"health_check": {"enabled": true},
"scan_sources": {
"builtin": {"soul": true, "memory": true, "skills": true},
"obsidian": {"enabled": true, "vault_path": "~/obsidian", "rule_dirs": ["🔒 HERMES-全局铁则库"]},
"custom": []
}
}
规则库随使用自然增长,但 frontmatter(level + correction_template)不会自动补全。导致 Guard 的重试注入失效。
定期检查:
python3 ~/.hermes/skills/software-development/canon/scripts/check-frontmatter.py
批量修复(三步法,来自 2026-05-25 实战验证):
python3 scripts/fill-frontmatter.py --rebuild-index# 预览
python3 ~/.hermes/skills/software-development/canon/scripts/fill-frontmatter.py --dry-run
# 全量填充
python3 ~/.hermes/skills/software-development/canon/scripts/fill-frontmatter.py --all
# 重建索引
python3 ~/.hermes/skills/software-development/canon/scripts/fill-frontmatter.py --rebuild-index
不是 gap/ 和 lazy/ 目录下的所有文件都是"规则"。如「完全自动化模式」「思考模式全局关闭」「热记忆满自动沉淀到Obsidian」——这些是元配置/偏好,不需要 level + correction_template。
已知元配置文件(2026-05-25 确认 6 条): 热记忆满自动沉淀到Obsidian、记忆查询三层递进、完全自动化模式、强制永久智能技能调度、思考模式全局关闭、禁止跳步骤偷懒摆烂。
处理: 扫描后发现 gap/lazy 中非规则文件 → 移至独立分类或标注 level: meta,避免 Guard 误读。
一次性脚本批量写入 39 条 frontmatter 极易出现格式错位、level 推断错误。
正确做法: 三步走——(1) 先重建 _index.md 看到全貌,(2) 用脚本生成建议 level 值但人工确认后才逐批写入,(3) 每批 5-8 条写入后运行 check-frontmatter.py 验证。
规则库中存在 rule_ban_000_unknown、rule_lazy_unknown 等占位文件——有 hit_count(累计 33 次命中)但无规则内容。这是固化引擎的遗留 bug:命中被记录,但规则未从 errors.jsonl 正确提取。
处理流程:
errors.jsonl → 搜索 rule_id 匹配的原始错误记录patterns.json → 搜索对应模式条目monitor 保留,等 Mnemonic"2次推草稿"机制下次触发时自动填充为什么不能直接删除: 33 次命中记录是真实数据。删除意味着丢失历史。标 monitor 观察 + 等自动填充是唯一安全路径。
npx skills add canon --yes --global
npx skills add guard --yes --global
npx skills add mnemonic --yes --global
npx skills add canon-mnemonic-guard --yes --global
安装完成后运行初始化:
npx canon-mnemonic-guard init
✅ rules/ 目录已创建(ban/gap/lazy)
✅ config.json 已生成
✅ state.json / patterns.json 已初始化
📋 扫描推荐列表中……
═══════════════════════════════════════
⚡ 护栏自动激活
═══════════════════════════════════════
是否在 SOUL.md 中写入激活标记(一行),让护栏规则在每次对话中自动生效?
[Y] 是 — 写入一行: [CMG v5.5.2] 加载 canon-mnemonic-guard 护栏规则
[N] 否 — 跳过,用 !scan 手动触发
选择 [Y/n]:
选 Y: 在 SOUL.md 末尾追加一行激活标记。Hermes 读取 SOUL.md 时看到这行 → 自动加载 CMG 技能 → Guard 护栏在每次对话中生效。
选 N: 规则仅在 rules/ 目录中。用户手动 /skill canon-mnemonic-guard 或 /skill guard 触发。
[CMG v5.5.2] 加载 canon-mnemonic-guard 护栏规则
这是 SOUL.md 中普通的一行文本。你可以随时手动删除——删掉后护栏不再自动生效。下一次扫盘时会检测到缺失并提醒。
每次扫盘(C1 定时或 !scan 手动)都会检查 SOUL.md 中是否存在 [CMG v 开头的激活行:
| 检测结果 | 行为 |
|---|---|
| ✅ 标记存在且版本匹配 | 正常,静默通过 |
| ⚠️ 标记存在但版本过旧 | 提示升级:「CMG 已升级到 v{x},SOUL.md 中激活标记仍为 v{old}。更新?[Y/N]」 |
| ❌ 标记不存在 | 提示缺失:「SOUL.md 中未找到 CMG 激活标记,护栏规则未自动生效。重新注入?[Y/N]」 |
用户选 Y → 自动更新/写入标记。选 N → 保持当前状态。