Hermes Skill 治理与月度审计链路收口复盘
- HTML: https://decision.ht1072.top/2026-06-01-hermes-skill-governance-monthly-audit-2026-06-01.html
- Local HTML:
[已移除本地路径] - Generated: 2026-06-01T09:47:52+08:00
Hermes Skill 治理与月度审计链路收口复盘(2026-06-01)
页面摘要区
核心结论
核心结论:本次治理没有把“退役 skill”当主目标,而是把月度 skill 审计从模型自由判断改为确定性事实采集与轻量策略评估:先保证事实口径可复现,再对缺字段、坏引用、同名误伤和保护项冲突做最小治理。
推荐路径
推荐路径:后续 skill 治理应继续走“deterministic facts script + lifecycle policy + 人工确认”的路径;月度审计只产出卡片、facts JSON 和建议,不直接修改 skill 文件。
关键边界
关键边界:平台型能力、搜索/抓取/Office/Agent Browser/OpenClaw fallback 等保护组不因窄路由或同名冲突被自动退役;archive 项保持归档,不批量洗白。
关键依据
关键依据:Frontmatter 审计已通过,skills_checked=168、issue_count=0;月度审计 facts 显示非归档 status 缺失为 0、bad related 为 0。
行动清单
- 继续保留
monthly-skill-exit-audit为 script-only no_agent cron,避免夜间误打主模型池。 - 每次批量治理后运行
audit_skills_frontmatter.py,要求非 archive issue_count=0。 - 对
humanizer、mcporter这类同名项,审计输出必须带路径,不能只写 skill name。 - 下月重点观察
plan的真实触发量,再决定是否从 compat 进入 deprecated。 - 若 OpenClaw imports 有替代关系,只标 compat/replacement,不做批量删除。
风险与回退
- 风险:策略规则写得过宽会误退役平台/采集类能力;回退方式是保留显式保护清单,并让审计只给建议。
- 风险:cron 如果重新改回 agent 型,会再次受模型发挥、卡片落盘不完整和 CPA/Codex 资源池污染影响;回退方式是恢复
monthly_skill_exit_audit.pyscript-only 定义。 - 风险:禁用通道属于 gateway config 层变更,当前运行进程可能需要重启或新进程才完全吃到;本轮已完成 fresh config 验证。
背景
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 并输出失败摘要 |
脚本路径:
[已移除本地路径]
固定产物目录:
[已移除本地路径]
固定产物类型:
skill_audit_facts_*.json
skill_audit_report_*.md
card_payload_*.json
send_receipt_*.json
3. 暂时禁用飞书和微信系以外通道
本轮根据要求,暂时禁用了以下 gateway 外部通道:
telegram, discord, slack, whatsapp, signal, bluebubbles, email, sms,
homeassistant, mattermost, matrix, dingtalk, qqbot, yuanbao, webhook,
msgraph_webhook, google_chat
保留:
feishu, wecom, wecom_callback, weixin, api_server
说明:api_server 是本地 API/WebUI/内部能力入口,不是普通外部消息通道,因此保留。
配置备份:
[已移除本地路径]
验证结果
Frontmatter 准入检查
执行:
python3 [已移除本地路径] [已移除本地路径]
结果:
{
"skills_checked": 168,
"issue_count": 0,
"ok": true
}
月度审计 dry-run
执行:
python3 [已移除本地路径] --no-card
最新 dry-run 产物:
[已移除本地路径]
[已移除本地路径]
[已移除本地路径]
dry-run receipt 显示:
{
"success": true,
"dry_run": true,
"feishu_msg": "no-card dry run"
}
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 读取结果:
connected_platforms ['api_server', 'feishu']
enabled_platform api_server connected True
enabled_platform feishu connected True
说明:微信系未禁用,但当前 .env 没有微信/企微凭证,所以未 connected。
Cron 定义验证
目标 cron 当前定义摘要:
{
"id": "60350e570c0b",
"name": "monthly-skill-exit-audit",
"script": "monthly_skill_exit_audit.py",
"no_agent": true,
"deliver": "feishu",
"schedule_display": "0 4 1 * *",
"enabled": true,
"workdir": "[已移除本地路径]
"skills": [],
"last_error": null
}
关键判断
| 判断项 | 结论 | 理由 |
|---|---|---|
| 是否批量退役 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 对默认模型池和外部通道的副作用。