Hermes Skill 治理与月度审计链路收口复盘
核心结论:本次治理没有把“退役 skill”当主目标,而是把月度 skill 审计从模型自由判断改为确定性事实采集与轻量策略评估:先保证事实口径可复现,再对缺字段、坏引用、同名误伤和保护项冲突做最小治理。
本次治理没有把“退役 skill”当主目标,而是把月度 skill 审计从模型自由判断改为确定性事实采集与轻量策略评估:先保证事实口径可复现,再对缺字段、坏引用、同名误伤和保护项冲突做最小治理。
后续 skill 治理应继续走“deterministic facts script + lifecycle policy + 人工确认”的路径;月度审计只产出卡片、facts JSON 和建议,不直接修改 skill 文件。
平台型能力、搜索/抓取/Office/Agent Browser/OpenClaw fallback 等保护组不因窄路由或同名冲突被自动退役;archive 项保持归档,不批量洗白。
关键判断
| 判断项 | 摘要 |
|---|---|
| 推荐方案 | 推荐路径:后续 skill 治理应继续走“deterministic facts script + lifecycle policy + 人工确认”的路径;月度审计只产出卡片、facts JSON 和建议,不直接修改 skill 文件。 |
| 关键依据 | Frontmatter 审计已通过,skills_checked=168、issue_count=0;月度审计 facts 显示非归档 status 缺失为 0、bad related 为 0。 |
| 落地方式 | 按行动清单推进,保持可回退。 |
| 风险边界 | 风险:策略规则写得过宽会误退役平台/采集类能力;回退方式是保留显式保护清单,并让审计只给建议。 |
证据摘要
- 关键依据:Frontmatter 审计已通过,skills_checked=168、issue_count=0;月度审计 facts 显示非归档 status 缺失为 0、bad related 为 0。
行动清单
humanizer、mcporter。plan,如果一个月无真实触发,再考虑 deprecated。边界 / 风险
风险:策略规则写得过宽会误退役平台/采集类能力;回退方式是保留显式保护清单,并让审计只给建议。
风险:cron 如果重新改回 agent 型,会再次受模型发挥、卡片落盘不完整和 CPA/Codex 资源池污染影响;回退方式是恢复 monthly_skill_exit_audit.py script-only 定义。
风险:禁用通道属于 gateway config 层变更,当前运行进程可能需要重启或新进程才完全吃到;本轮已完成 fresh config 验证。
完整记录
Hermes Skill 治理与月度审计链路收口复盘(2026-06-01)
背景
2026-06-01 凌晨 4 点多,monthly-skill-exit-audit 执行了一次月度 skill 退出机制审计,并成功发送 Feishu interactive card。复盘后发现审计结果有参考价值,但链路本身存在几个隐患:
- 审计把“实际状态分布”和“建议状态分布”混在一起,容易误读。
humanizer等同名 skill 没带路径,容易把creative/humanizer和openclaw-imports/humanizer混淆。- 模型可能把窄路由 skill 判成 disabled,例如
yuanbao,但平台能力窄是设计属性,不等于应退役。 - 卡片展示只是摘要,完整事实没有稳定 JSON 事实源。
- 原 cron 是 agent 型,夜间运行可能继承默认模型,误打 CPA/Codex 资源池。
因此本轮治理目标不是“批量删 skill”,而是:
- 先修确定性 frontmatter 问题;
- 再把月度审计链路改成可复现脚本;
- 最后调整 gateway 通道启用面,减少无关外部通道噪声。
治理原则
| 原则 | 含义 | 本次执行方式 |
|---|---|---|
| 事实先行 | 生命周期建议必须基于可复现事实,而不是模型临场发挥 | 新增 monthly_skill_exit_audit.py,先输出 facts JSON |
| 最小治理 | 只修确定性问题,不批量改状态、不批量删除 | 只补缺失 status、坏 related_skills 和 metadata 字段 |
| 路径消歧 | 同名 skill 必须带路径展示 | 报告中使用 path + name,避免 humanizer 误伤 |
| 保护组优先 | 搜索、采集、Office、Agent Browser、OpenClaw fallback 不自动退役 | 保留显式 policy 与保护清单 |
| script-only | 稳定审计任务用脚本主导,agent 不负责自由判断 | cron 改为 no_agent=true |
| 可追溯 | 卡片发送前后必须落 payload 和 receipt | 固定产出 card_payload_*.json、send_receipt_*.json |
已完成动作
1. 修复确定性 skill metadata 问题
| 文件 | 问题 | 处理结果 |
|---|---|---|
software-development/hermes-s6-container-supervision/SKILL.md | 缺 status,且 related_skills 指向不存在的 hermes-agent-dev | 补 status: active,移除坏引用,补 triggers/scope/replacement |
creative/baoyu-article-illustrator/SKILL.md | 缺 status 和部分 metadata.hermes 字段 | 补 status: active,补 related_skills/triggers/scope/replacement |
autonomous-ai-agents/kanban-codex-lane/SKILL.md | 缺 status 和部分 metadata.hermes 字段 | 补 status: active,补 triggers/scope/replacement |
devops/vps-proxy-ops/SKILL.md | weekly frontmatter audit 发现缺 metadata.hermes.replacement | 补 replacement |
devops/vps-proxy-deploy/SKILL.md | weekly frontmatter audit 发现缺 metadata.hermes.replacement | 补 replacement |
2. 将月度审计改为 deterministic script-only
| 项目 | 变更后状态 |
|---|---|
| cron name | monthly-skill-exit-audit |
| job_id | 60350e570c0b |
| schedule | 0 4 1 * * |
| script | monthly_skill_exit_audit.py |
| no_agent | true |
| deliver | feishu |
| 成功行为 | 主动发送 Feishu interactive card,stdout 为空,避免重复文本投递 |
| 失败行为 | 写 receipt 并输出失败摘要 |
脚本路径:
固定产物目录:
固定产物类型:
3. 暂时禁用飞书和微信系以外通道
本轮根据要求,暂时禁用了以下 gateway 外部通道:
保留:
说明:api_server 是本地 API/WebUI/内部能力入口,不是普通外部消息通道,因此保留。
配置备份:
验证结果
Frontmatter 准入检查
执行:
结果:
月度审计 dry-run
执行:
最新 dry-run 产物:
dry-run receipt 显示:
Skill 库事实摘要
| 指标 | 数值 |
|---|---|
| SKILL.md 总数 | 197 |
| archive 数量 | 29 |
| 非归档 active | 161 |
| 非归档 compat | 7 |
| 非归档 status 缺失 | 0 |
| bad related_skills | 0 |
当前仍需路径消歧的同名项
| name | paths | 处理口径 |
|---|---|---|
humanizer | creative/humanizer/SKILL.md; openclaw-imports/humanizer/SKILL.md | 保留路径展示;creative 现行,openclaw-imports 兼容 |
mcporter | .archive/openclaw-imports/mcporter/SKILL.md; mcp/mcporter/SKILL.md | archive 与现行并存,审计报告必须带路径 |
Gateway fresh config 验证
fresh process 读取结果:
说明:微信系未禁用,但当前 .env 没有微信/企微凭证,所以未 connected。
Cron 定义验证
目标 cron 当前定义摘要:
关键判断
| 判断项 | 结论 | 理由 |
|---|---|---|
| 是否批量退役 skill | 不做 | 本次问题主要是 metadata 和审计链路,不是大量 skill 已废弃 |
yuanbao 是否 disabled | 不做 | 平台特定能力窄是正常属性,不能因窄路由判退役 |
humanizer 是否 deprecated | 不整体处理 | 同名项必须按路径区分,creative 与 openclaw-imports 生命周期不同 |
plan 是否 deprecated | 暂缓 | 当前已 compat,继续观察真实触发量 |
.archive 项是否补 status | 不批量补 | archive 保持历史状态,不为统计好看洗白 |
| 月度审计是否继续 agent 型 | 不建议 | 稳定审计应 facts script 主导,减少自由发挥和夜间模型池污染 |
后续治理建议
- 月度审计继续只做建议,不自动写 skill 文件。 这能避免模型误删或误降级保护项。
- weekly frontmatter audit 作为准入红线。 修改 skill 后必须回跑,目标是非 archive issue_count=0。
- 同名 skill 输出必须带路径。 下月审计继续关注
humanizer、mcporter。 - 观察 compat 项触发量。 尤其是
plan,如果一个月无真实触发,再考虑 deprecated。 - OpenClaw imports 维持 fallback/compat。 只有确认 Hermes native 完整覆盖且无历史调用,再进入退役讨论。
- 通道禁用属于配置层,不等于凭证删除。 如需恢复 Telegram/Discord/Slack 等,只需要重新启用配置并重启/刷新 gateway 运行态。
完整记录
本轮执行完成后,Hermes skill 库进入更干净的生命周期基线:非 archive skill 不再缺 status,坏 related_skills 已清零,月度审计链路改为 script-only 且具备 facts JSON、Markdown 报告、Feishu card payload 和 send receipt 四类审计产物。
真正重要的不是“本月退役了多少 skill”,而是把治理方法从“模型看一眼给建议”改为“确定性事实 + 显式策略 + 人工确认”。这个模式更适合 Hermes 当前 skill 数量增长后的长期治理,也能减少夜间 cron 对默认模型池和外部通道的副作用。