claude-md-progressive-disclosurer/SKILL.md
Optimize CLAUDE.md files using progressive disclosure. Goal: Maximize information efficiency, readability, and maintainability. Use when: User wants to optimize CLAUDE.md, information is duplicated across files, or LLM repeatedly fails to follow rules.
npx skillsauth add fernandezbaptiste/claude-code-skills claude-md-progressive-disclosurerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
"找到最小的高信号 token 集合,最大化期望结果的可能性。" — Anthropic
目标是最大化信息效率、可读性、可维护性。
wc -l 或统计行数——这会潜意识地将"行数少"当成目标Level 1 (CLAUDE.md) - 每次对话都加载
├── 信息记录原则 ← 防止未来膨胀的自我约束
├── Reference 索引(开头) ← 入口1:遇到问题查这里
├── 核心命令表
├── 铁律/禁令(含代码示例)
├── 常见错误诊断(症状→原因→修复)
├── 代码模式(可直接复制)
├── 目录映射(功能→文件)
├── 修改代码前必读 ← 入口2:改代码前查这里
└── Reference 触发索引(末尾) ← 入口3:长对话后复述
Level 2 (references/) - 按需即时加载
├── 详细 SOP 流程
├── 边缘情况处理
├── 完整配置示例
└── 历史决策记录
同一 Level 2 资源可以有多个入口,服务于不同查找路径:
| 入口 | 位置 | 触发场景 | 用户心态 | |------|------|----------|----------| | Reference 索引 | 开头 | 遇到错误/问题 | "出 bug 了,查哪个文档?" | | 修改代码前必读 | 中间 | 准备改代码 | "我要改 X,要注意什么?" | | Reference 触发索引 | 末尾 | 长对话定位 | "刚才说的那个文档是哪个?" |
这不是重复,是多入口。 就像书有目录(按章节)、索引(按关键词)、快速参考卡(按任务)。
cp CLAUDE.md CLAUDE.md.bak.$(date +%Y%m%d_%H%M%S)
对每个章节分类:
| 问题 | 是 | 否 | |------|----|-----| | 高频使用? | Level 1 | ↓ | | 违反后果严重? | Level 1 | ↓ | | 有代码模式需要直接复制? | Level 1 保留模式 | ↓ | | 有明确触发条件? | Level 2 + 触发条件 | ↓ | | 历史/参考资料? | Level 2 | 考虑删除 |
命名:docs/references/{主题}-sop.md
铁律:原样移动,禁止压缩
移动内容到 Level 2 时,必须完整保留原始内容。不要在移动的同时"顺便精简"。
✅ 正确:把 100 行原封不动搬到 Level 2(100 行 → Level 2 100 行)
❌ 错误:把 100 行"精简"到 60 行搬到 Level 2(100 行 → Level 2 60 行,40 行消失)
为什么:压缩 = 变相删除。你认为"不重要"而删掉的内容,可能是某个未来 debug session 的关键线索。优化的目标是改变信息的位置(Level 1 → Level 2),不是改变信息的存在。
怎么做:
# 检查引用文件存在
grep -oh '`docs/references/[^`]*\.md`' CLAUDE.md | sed 's/`//g' | while read f; do
test -f "$f" && echo "✓ $f" || echo "✗ MISSING: $f"
done
对每个从原始 CLAUDE.md 移走的章节,逐一检查:
恢复原始文件:git show HEAD:CLAUDE.md > /tmp/claude-md-original.md
逐节对比:对原始文件的每个 ## 章节,确认其内容在以下位置之一完整存在:
快速暴露遗漏的辅助脚本:
# 对原始文件的每个 ## 章节标题,检查它在新文件或 reference 文件中是否存在
grep '^## ' /tmp/claude-md-original.md | while read heading; do
if grep -q "$heading" CLAUDE.md docs/references/*.md 2>/dev/null; then
echo "✓ $heading"
else
echo "✗ NOT FOUND: $heading"
fi
done
⚠️ 这个脚本不能替代人工逐节对比——它只检查章节标题是否存在,不检查内容是否完整。但它能快速暴露整个章节被遗漏的情况,作为人工对比前的第一道筛查。
标记所有差异:
docs/README.md 已是文档索引的 canonical source),且在 Level 1 中有明确的指向禁止将"故意删除"作为分类来掩盖信息丢失。 每一项"故意删除"都必须说明 canonical source 在哪里。如果说不出来,就不是"故意删除",而是"遗漏"。
在验证阶段不要统计行数。不要 wc -l。不要计算"原始 X 行 vs 新 Y 行"。这些数字会扭曲你的判断。
验证的标准是:
| 内容类型 | 原因 | |---------|------| | 核心命令 | 高频使用 | | 铁律/禁令 | 违反后果严重,必须始终可见 | | 代码模式 | LLM 需要直接复制,避免重新推导 | | 错误诊断 | 完整的症状→原因→修复流程 | | 目录映射 | 帮助 LLM 快速定位文件 | | 触发索引表 | 帮助 LLM 在长对话中定位 Level 2 |
| 内容类型 | Level 1 | Level 2 | |---------|---------|---------| | SOP 流程 | 触发条件 + 关键陷阱 | 完整步骤 | | 配置示例 | 最常用的 1-2 个 | 完整配置 | | API 文档 | 常用方法签名 | 完整参数说明 |
| 内容类型 | 原因 | |---------|------| | 历史决策记录 | 低频访问 | | 性能数据 | 参考性质 | | 技术债务清单 | 按需查看 | | 边缘情况 | 有明确触发条件时再加载 |
**📖 何时读 `docs/references/xxx-sop.md`**:
- [具体错误信息,如 `ERR_DLOPEN_FAILED`]
- [具体场景,如"添加新的原生模块时"]
> 包含:[关键词 1]、[关键词 2]、[代码模板]。
## Reference 索引(遇到问题先查这里)
| 触发场景 | 文档 | 核心内容 |
|----------|------|---------|
| `ERR_DLOPEN_FAILED` | `native-modules-sop.md` | ABI 机制、懒加载 |
| 打包后 `Cannot find module` | `vite-sop.md` | MODULES_TO_COPY |
## 修改代码前必读
| 你要改什么 | 先读这个 | 关键陷阱 |
|-----------|---------|---------|
| 原生模块相关 | `native-modules-sop.md` | 必须懒加载;electron-rebuild 会静默失败 |
| 打包配置 | `packaging-sop.md` | DMG contents 必须用函数形式 |
完整流程见 `database-sop.md`(FTS5 转义、健康检查)。
多样性原则:不要所有引用都用同一格式。
问题:优化完成后,用户会继续要求 Claude "记录这个信息到 CLAUDE.md",如果没有规则指导,CLAUDE.md 会再次膨胀。
解决:在 CLAUDE.md 开头(项目概述之后)添加「信息记录原则」:
## 信息记录原则(Claude 必读)
本文档采用**渐进式披露**架构,优化 LLM 工作效能。
### Level 1(本文件)只记录
| 类型 | 示例 |
|------|------|
| 核心命令表 | `pnpm run restart` |
| 铁律/禁令 | 必须懒加载原生模块 |
| 常见错误诊断 | 症状→原因→修复(完整流程) |
| 代码模式 | 可直接复制的代码块 |
| 目录导航 | 功能→文件映射 |
| 触发索引表 | 指向 Level 2 的入口 |
### Level 2(docs/references/)记录
| 类型 | 示例 |
|------|------|
| 详细 SOP 流程 | 完整的 20 步操作指南 |
| 边缘情况处理 | 罕见错误的诊断 |
| 完整配置示例 | 所有参数的说明 |
| 历史决策记录 | 为什么这样设计 |
### 用户要求记录信息时
1. **判断是否高频使用**:
- 是 → 写入 CLAUDE.md(Level 1)
- 否 → 写入对应 reference 文件(Level 2)
2. **Level 1 引用 Level 2 必须包含**:
- 触发条件(什么情况该读)
- 内容摘要(读了能得到什么)
3. **禁止**:
- 在 Level 1 放置低频的详细流程
- 引用 Level 2 但不写触发条件
原因:这条规则让 Claude 自己知道什么该记在哪里,实现"自我约束",避免后续对话中 CLAUDE.md 再次膨胀。
原因:LLM 注意力呈 U 型分布——开头和末尾强,中间弱。
| 位置 | 作用 | |------|------| | 开头 | 对话开始时建立全局认知:"有哪些 Level 2 可用" | | 末尾 | 对话变长后复述提醒:"现在应该读哪个 Level 2" |
<!-- CLAUDE.md 开头(项目概述之后) -->
## Reference 索引
| 触发场景 | 文档 | 核心内容 |
|---------|------|---------|
| ABI 错误 | `native-modules-sop.md` | 懒加载模式 |
| 打包模块缺失 | `vite-sop.md` | MODULES_TO_COPY |
... (正文内容) ...
<!-- CLAUDE.md 末尾(再放一份) -->
## Reference 触发索引
| 触发场景 | 文档 | 核心内容 |
|---------|------|---------|
| ABI 错误 | `native-modules-sop.md` | 懒加载模式 |
| 打包模块缺失 | `vite-sop.md` | MODULES_TO_COPY |
错误:详见 native-modules-sop.md
正确:
**📖 何时读 `native-modules-sop.md`**:
- 遇到 `ERR_DLOPEN_FAILED` 错误
- 需要添加新的原生模块
> 包含:ABI 机制、懒加载模式、手动修复命令
原因:没有触发条件,LLM 不知道什么时候该去读。
错误:把代码示例移到 Level 2,Level 1 只写"使用懒加载模式"。
正确:Level 1 保留完整的可复制代码:
// ✅ 正确:懒加载,只在需要时加载
let _Database = null;
function getDatabase() {
if (!_Database) {
_Database = require("better-sqlite3");
}
return _Database;
}
原因:LLM 需要直接复制代码,移走后每次都要重新推导或读取 Level 2。
案例:为了"减少行数",移走了代码模式、诊断流程、目录映射
结果:
正确:保留所有高频使用的内容。优化的判断标准是信息是否重复维护、是否与当前任务无关,而不是"文件太长"。
案例:详见 xxx.md
问题:LLM 不知道何时加载,要么忽略,要么每次都读。
正确:触发条件 + 内容摘要。
案例:把常用代码示例移到 Level 2
问题:LLM 每次写代码都要先读 Level 2,增加延迟和 token 消耗。
正确:高频使用的代码模式保留在 Level 1。
案例:删除"不重要"的章节
问题:信息丢失,未来需要时无处可查。
正确:移到 Level 2,保留触发条件。
案例:优化方案写"从 2000 行精简到 500 行,减少 75%"
问题:把行数当成功指标,会驱动错误决策——为了凑数字而砍掉有用的信息。
正确:用信息质量评估优化效果——信息是否有重复?维护负担是否降低?LLM 是否能更快找到需要的信息?
规则:移动是移动,精简是精简。这是两个独立操作,不要同时执行。
完整案例分析见
references/progressive_disclosure_principles.md案例 8
规则:任何"删除"都必须是事前决策(征求用户确认),不是事后分类(发现少了再编理由)。
完整案例分析见
references/progressive_disclosure_principles.md案例 9
| 检验项 | 通过标准 | |--------|---------| | 日常命令 | 不需要读 Level 2 | | 常见错误 | 有完整诊断流程 | | 代码编写 | 有可复制的模式 | | 特定问题 | 知道读哪个 Level 2 | | 触发索引 | 在文档末尾,表格形式 |
| 维度 | 用户级 | 项目级 |
|------|--------|--------|
| 位置 | ~/.claude/CLAUDE.md | 项目/CLAUDE.md |
| References | ~/.claude/references/ | docs/references/ |
| 信息范围 | 个人偏好、全局规则 | 项目架构、团队规范 |
优化完成后,必须逐项检查(不可跳过):
data-ai
Download YouTube videos and HLS streams (m3u8) from platforms like Mux, Vimeo, etc. using yt-dlp and ffmpeg. Use this skill when users request downloading videos, extracting audio, handling protected streams with authentication headers, or troubleshooting download issues like nsig extraction failures, 403 errors, or cookie extraction problems.
development
Diagnose Windows App (Microsoft Remote Desktop / Azure Virtual Desktop / W365) connection quality issues on macOS. Analyze transport protocol selection (UDP Shortpath vs WebSocket), detect VPN/proxy interference with STUN/TURN negotiation, and parse Windows App logs for Shortpath failures. This skill should be used when VDI connections are slow, when transport shows WebSocket instead of UDP, when RDP Shortpath fails to establish, or when RTT is unexpectedly high.
development
This skill should be used when comparing two videos to analyze compression results or quality differences. Generates interactive HTML reports with quality metrics (PSNR, SSIM) and frame-by-frame visual comparisons. Triggers when users mention "compare videos", "video quality", "compression analysis", "before/after compression", or request quality assessment of compressed videos.
development
Extract design systems from reference UI images and generate implementation-ready UI design prompts. Use when users provide UI screenshots/mockups and want to create consistent designs, generate design systems, or build MVP UIs matching reference aesthetics.