xiaowei-system/skills/devops/knowledge-vault-curation/SKILL.md

6.1 KiB
Raw Blame History

name version date description category trigger
knowledge-vault-curation 1.1.0 2026-09-10+凭证扫描的内容级/历史级修正) Use when 笔记库/vault 乱、编码乱码、凭证散落。整理与结构守护。 devops 知识库膨胀、目录编码混乱、项目混入笔记库、凭证散落、插件冗余、定期结构体检

知识库 vault 整理与结构守护

适用于长期由多个 agent或多人写入的 markdown 知识库Obsidian 等)。 日常散落文件/根目录卫生另有机制:file-resource-management(含 resource-watchdog。 实战配方与代码:references/obsidian-vault-cleanup-recipe.md;体检脚本:scripts/mc-structure-check.py(含内容级密钥扫描 + --secrets-only)。 凭证已进 git 历史怎么清 → git-repo-hygiene §5 + 其 references/secret-purge-from-history.md

结构分离原则vault 只放笔记)

内容 去处 理由
笔记 vault按 agent/人分区,各自 PARA 可检索、可进知识图谱
代码项目 ~/projects/<name>/ 独立 git/构建,不污染 vault
凭证 一个总库文件(如 牧尘/claw/key.md 单一事实来源;所在目录 gitignore永不入库
备份/运行时产物 ~/.hermes/backups/ 或 archive 不是知识

整理五步(按此顺序,不要跳)

  1. 摸全景 — 逐一级目录统计文件数/体积/二级分布。必须看全部 agent 分区,不能只看自己的(第一版只分析了一个分区 → 被纠正"其他文件夹都没有分析")。
  2. 编码变体合并 — 同一逻辑目录可能被多代脚本写成 N 个编码形式(织忆同萦/ZhiyiSync/zhiyi-sync/zhi-yi-tong-bu/%E7%BB%87.../\u7ec7.../双重编码/乱码汉字。归一化unquote + unicode_escape + latin1→utf8后合成一个目录按内容 md5 去重,同名不同内容加后缀绝不丢数据
  3. 项目迁出 — 按特征文件识别Dockerfile/Makefile/go.mod/Cargo.toml/package.json/pyproject.toml。迁前 grep -rl <旧路径> 定位引用 → mv → 更新引用 → 修绝对路径软链 → 跑真实命令验证(含解释器路径)。
  4. 凭证集中 — 见下节。
  5. 固化防护 — 结构体检脚本 + 周期 cronwatchdog 语义:干净静默)。

凭证治理(单一事实来源)

  • 流程:全库正则扫描 → 提取去重 → 合并进总库(结构化分节)→ 原处脱敏
  • ⚠️ 是"集中"不是"删除""密钥凭证要提取出来集中管理,方便查询使用"(牧尘 2026-09-10第一版方案写"删除"被否——删了就查不到了)。
  • 只脱敏文本笔记(.md/.txt.env/config.yaml/.json 里的是运行时依赖markdown 式替换会破坏语法 → 移出或用 env 引用。
  • 先甄别误报再入库:全库命中绝大多数是文档/源码里的示例 key真凭证按来源文件 + 上下文定位用途。
  • 一个凭证常有多份副本(日记/备份/备忘/图谱节点)→ 汇总后回查残留,最终只应剩总库 + 尚未迁移的备份。
  • ⚠️ 扫文件名 ≠ 扫凭证2026-09-10 事故根因):体检脚本第一版只匹配文件名里的 sk-/tskey-,于是 4 个真密钥全从眼皮底下过(小唯/.envopencode.jsonc、legacy config.yaml、织忆镜像 2 个文件)。必须扫文件内容,并用负向断言 (?<![A-Za-z0-9_-]) 防误伤 https://x.com/task-driven-… 这类 URL 片段。已内置进 scripts/mc-structure-check.py
  • ⚠️ 扫描范围要含所有 agent 子树 + git 历史:「凭证集中」第一版漏扫 小唯/ 子树历史里那个「全库快照」commit 还躺着工作区早已删除的 3 个密钥Agnes / DeepSeek / Gitee AI工作区干净 ≠ 历史干净 → 入库过的按 git-repo-hygiene §5 扫历史 blob。
  • 总库目录必须进白名单:故意存明文的总库(牧尘/claw/)不白名单 → 每日 watchdog 天天误报 → 误报多了整条告警就被忽略。
  • gitignore ≠ 不同步:总库所在目录已 gitignore但 Obsidian remotely-save / 网盘客户端不认 gitignore,总库仍会进 WebDAV。这个暴露面要主动告知用户由其决定是否接受。
  • 落地护栏:体检脚本加内容级扫描 + 每日 --secrets-only cronwatchdog 语义:干净静默,命中才报);顺手清理其他散落明文(本次另在 牧尘/xiaoxuedate/话术.md 捞到一处明文 tskey

插件分诊Obsidian

判据:重复的删一个、一次性的删、缺外部依赖的删、其余留(实测 25→17启用 18→13

⚠️ 启用列表用的是 manifest 里的 id,不是插件目录名obsidian-pkmer 目录 ↔ pkmer id 不一致)→ 按目录名删完会留下失效条目。正确:读每个 manifest.jsonid,再与 community-plugins.json 求交集

铁律

  1. 历史记录永不改sessions/ logs/ dump-* cron/output/ — 批量替换/脱敏必须排除。
  2. 排除匹配别用带尾斜杠的片段去比 os.walk 的 root'/sessions/' in root 恒 False该排除的没排除
  3. 破坏性/大批量操作先备份再执行cp -r~/.hermes/archive/<name>-backup),报告时给出备份路径。
  4. vault 里的项目迁移后要回填引用~/.hermes/scripts + skills/ + MEMORY.md(会话历史不动)。
  5. 整理完必须跑一次体检脚本 + 报出前后文件数/体积,用真实命令输出作证

归档历史

  • 2026-09-10 首次整理mc~10,000 → 2,520 文件 / 1.1GB → 171MB13 个编码变体合并6 处项目迁出27 个凭证集中;插件 25→17结构体检脚本 + 周 cron 落地。
  • 2026-09-10 P0 返工:凭证集中漏了内容级扫描 + 小唯/ 子树 + git 历史 → 4 个真密钥已推 Gitea。补内容级扫描含白名单 / --secrets-only+ 每日 cron + 历史 filter-repo 三段式清除。教训:集中化的扫描口径和集中化本身一样重要。