explain-ladder
Skill3 starsChanged 32 days agoMITView on GitHub
要让人看懂一件事时,先选形式再动笔。四级从便宜到贵:文字 < 图 < 网页 < 讲解视频(Karpathy 2026-10-02)。① 文字:中英文都按 ASD-STE100 打八折写(一句一事 / 写出谁做 / 一个东西一个名字 / 句子短 / 动词直接写);user 说「用 STE 讲」后每条回答都这样写,说「停止」关掉;check_ste.py 查句长、中文虚动词、英文被动、步骤里的分号、图太宽(汉字算两列)。② 图:讲关系先给图,终端里 ASCII ≤ 80 列;正式出图用设计 skill 的图例库,不够用要明说。③ 网页:看懂就扔的单文件 HTML,page_kit.py 生成(数据经 p.source / p.command 从真实文件算、页尾自动列出处、不引外部资源)+ check_page.py 四项检查(含重跑 build.py 逐字节比对)。④ 讲解视频:默认不做;AI 觉得视频明显更好时先提一句,user 点头才做(record_page.cjs 把动画页录成 webm 并核对能播、画面在动)。TRIGGER: 用 STE 讲 / STE 模式 / 简化技术英语 / ASD-STE100 / 讲得我能看懂 / 画个图讲 / 看懂就扔 / 一次性网页 / 做个网页看看 / 做个页面帮我看懂 / 可视化这份 log / log 时间线 / 可过滤的表 / 用 HTML 看 / throwaway page / 讲解视频 / 录个视频讲 / Karpathy 四招. DO NOT TRIGGER: 给别人看的成品页面(走 anthropic-design 等设计 skill)、Word / Excel 交付物、公众号配音成片(wechat-video-publisher)。
1 other project uses a version of this.
Adopted by
Most recently taken up by
- duolahypercho/explain-laddertheir own version, first seen Oct 11, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- duolahypercho/explain-ladder★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository27 other files it gives its agents.
- anthropic-designSkill
- apple-designSkill
- atelier-designSkill
- datasheet-readingSkill
- design-evolveSkill
- design-plannerSkill
- design-reviewSkill
- design-tasteSkill
- doc-review-loopSkill
- doc-to-markdownSkill
- eclat-designSkill
- ember-designSkill
- gated-dual-clone-auditSkill
- gated-dual-cloneSkill
- glass-designSkill
- graphite-designSkill
- hardware-3dSkill
- kernel-explainSkill
- lectern-designSkill
- linux-kernel-devSkill
- md-to-pdfSkill
- primer-designSkill
- relief-designSkill
- sage-designSkill
- skills-syncSkill
- tech-pdf-readerSkill
- wechat-video-publisherSkill
The file
Files
讲解阶梯:文字 < 图 < 网页 < 视频
要让人看懂一件事时,先选形式,再动笔。四级从便宜到贵排。往上走一级之前,要说得出下面那级哪里讲不清。
出处:Karpathy 2026-10-02 的帖子(x.com/karpathy/status/2105819303471976479)把「读懂 AI 的输出」的形式排成这四级。 他的看法是:代码变便宜了,以前不值得做的一次性网页、讲解视频,现在可以随手要。
本 skill 管形式和句子。讲内核原理时,内容按什么顺序、分几层讲,先看 kernel-explain。
0. 选哪一级
| 读者要的是 | 用 | 在哪看 |
| 结论、数字、一步操作 | 1 文字 | 终端 |
| 关系:谁调用谁、哪个同步哪个、卡在哪一级、状态怎么切换、数据从哪流到哪 | 2 图 | 终端(ASCII) |
| 一大批同类记录、一条长时间线、要过滤 / 排序 / 按行号跳、超过一屏的关系 | 3 网页 | 浏览器 |
| 随时间展开的过程,先后顺序和时机本身就是要点 | 4 视频(先问) | 播放器 |
- 一次回答可以混着用:结论用文字,关系配一张 ASCII 图,大批数据给一个网页路径。
- 级别高不等于好。写清楚的一段文字,是最快让人看懂的那一级。
1. 文字:STE 打八折
是什么:ASD-STE100(简化技术英语)是欧洲航空航天与防务协会(ASD)维护的受控英语标准, 本来用于飞机维修手册。当前版 Issue 9(2025-01):53 条写作规则,加约 900 个批准词,每个词只有一个意思。
为什么要它:技术文字的读者常常不是母语者,或者是赶时间、只扫一眼的人。读错了没处问, 和维修手册的读者处境一样。AI 写的长句、被动句、同一个东西换着叫,正是读错的来源。
为什么只打八折:原标准很严(说明句 ≤ 25 词、操作句 ≤ 20 词、只许用批准词),词表也不能自由转载。 照搬会写成电报。Karpathy 那条帖子也是这么用的:让模型写到 ASD-STE100 的八成左右。
规则(中英文都适用)
| # | 规则 | 反例 → 改法 | |
| 1 | 一句只说一件事 | 「模块启动时先读配置里的设备地址然后初始化总线最后检查设备有没有响应。」→「模块启动时先读配置里的设备地址。然后初始化总线。最后检查设备有没有响应。」 | |
| 2 | 写出谁做(主动语态) | "The device is released later." → "The caller releases the device." ·「配置会被加载」→「驱动在 probe 时加载配置」 | <!-- ste-ok:反例 --> |
| 3 | 同一个东西只用一个名字 | 同一个模块一会叫「桥接模块」、一会叫 bridge、一会叫「v2 驱动」→ 选一个,全文只用它 | |
| 4 | 句子短:说明句 ≤ 25 词 / 50 字,操作句 ≤ 20 词 / 30 字 | 一句里的路径、函数名按一个字算 | |
| 5 | 动词直接写 | 「对固件进行烧录」→「烧录固件」· "Perform a check of the checksum." → "Check the checksum." | |
| 6 | 一步一个动作,条件写在动作前面 | 「1. 打开串口;重启板子」→ 拆成两步 ·「重启,没输出就查波特率」→「如果重启后没有输出,检查波特率。」 | |
| 7 | 不确定就直说 | 「应该是 / 大概」→ 写「我没查到 X,要查就跑 Y」 |
不照搬的部分:批准词表(不能自由转载,中文也没有对应词表)、限制 -ing 形式这类英语语法细则。
边界:代码、命令、日志原文、引用不改写。改别人的旧文字时,只改自己这次动到的句子。
开关:「用 STE 讲」
| user 说 | 做什么 |
| 「用 STE 讲」「STE 模式」 | 回一句「STE 已打开,说『停止』关掉」。之后每条回答都按上表写,直到关掉 |
| 「停止」「关掉 STE」「不用 STE 了」 | 关掉,恢复平常写法 |
| 单说「停止」,而这时有任务在跑 | 先停任务,再问一句 STE 要不要也关 |
- 开着时不变的:回答语言照旧(中文问就中文答);内容写什么、先写什么照旧,STE 只管句子怎么写。
- 只在本次会话有效,新会话默认关着。上下文压缩后不确定开没开,看最近一次开关的话;找不到就当关着。
检查
K=~/.claude/skills/explain-ladder/scripts
python3 $K/check_ste.py <文件或目录> # 说明类文档
python3 $K/check_ste.py --howto <操作步骤.md> # 步骤类:句长更严,查一步里的分号
printf '%s' "<草稿>" | python3 $K/check_ste.py --stdin| 编号 | 查什么 |
| S1 | 句长:中文 > 50 字(--howto 30),英文 > 25 词(--howto 20) |
| S2 | 中文虚动词:「进行 / 作出 / 予以 … + 动词」 |
| S3 | 英文被动:be 动词 + 过去分词。描述句偶尔用被动可以,自己判断 |
| S4 | --howto 时,编号步骤里用分号连了两件事 |
| S5 | 图太宽:框线字符的行、代码块里带箭头的行超过 80 列,汉字按两列算 |
规则 1、3、6 要靠判断,机器查不准,脚本不查。写文档时跑一遍;聊天回答不要求每条都跑。
文档里故意放的反例:Markdown 行尾写 ste-ok,HTML 元素加 data-ste-ok 属性,检查就跳过它。
2. 图:讲关系先给图
讲的是关系就先给图,再写字。讲的是结论或数字,不画。 图必须承载读者从文字里拿不到的判断;只是把文字框起来的图,不如不画。
终端里:ASCII 图
- 宽度 ≤ 80 列。终端窄了,宽图和宽表格都会折行,框就散了。
- 汉字占两列。按字符个数画的框,一有汉字就歪。
check_ste.py的 S5 按显示宽度算。 - 框线字符(
─ │ ┌ ┐)在少数终端里宽度不对;对不齐就改用+ - |。
两种最常用的样子。第一张要读者拿到的判断是:中断函数自己不上报按键。它只排一个延时(hrtimer 或延时任务,二选一),消抖时间到了才上报。
调用链:从上往下,每层挂出处
行号出自一棵 Linux 6.1.141 内核树的 drivers/input/keyboard/gpio_keys.c,只作示意
按键中断
│
▼
gpio_keys_gpio_isr() :417 不上报,只排一个延时
│
├─ hrtimer_start() :439 用 hrtimer 消抖时
│ └─ gpio_keys_debounce_timer() :407 到期后调用
│
└─ mod_delayed_work() :443 不用 hrtimer 时
└─ gpio_keys_gpio_work_func() :399 到期后调用
gpio_keys_debounce_event() :390 两条路到期后都调它
│
▼
gpio_keys_gpio_report_event() :366
│
▼
input_event() :386 按键值交给 input 子系统数据流:从左往右,箭头上下写传的是什么
┌─────────┐ 原始帧 ┌──────┐ 坐标 ┌──────┐
│ 触摸 IC │ ────────▶ │ 驱动 │ ────────▶ │ 应用 │
└─────────┘ (I2C) └──────┘ (evdev) └──────┘正式出图:用设计 skill 的图例库
| 想要的 | 去哪找 |
| 暖色编辑风的流程 / 架构 / 时序 / 调用链定位图 | anthropic-design:78 张现成 SVG + references/diagram-craft.md;调用链定位图用 design-review/scripts/gen_call_site_figure.py 生成,不手画 |
| 白底极简 | apple-design(33 张) |
| 深色玻璃 | glass-design(25 张) |
| 内核 / 硬件 / 调试类(结构体布局、引用计数、竞争窗口…) | relief-design(49 张) |
| 给零基础的人 | primer-design |
- 怎么画由模型自己判断。设计 skill 可以用,不是必须用;手写 SVG 也行。
- 设计 skill 不够用时要明说:缺哪种图、样式哪里不合适、为一次性页面走设计流程太重 —— 说出来,并建议怎么补。不要硬套,也不要不声不响换成别的。
- mermaid 之类要从 CDN 加载脚本,放进第 3 级的页面会违反「不引外部资源」;那里手写 SVG。
3. 网页:看懂就扔
文字讲不清时,现做一个只给自己看一次的网页。不追求好看,看懂就扔。常见的三种: 一份几千行的 log,按阶段分段、关键事件可过滤;一次改动的前后对比;一张分区表。
| 用 | 不用,改走 |
| 读者是 user 自己,看完就不要了 | 交付物、外发、要长期维护的页面 → 设计 skill |
| 一大批同类记录或一条长时间线:要过滤、排序、按行号跳 | 几行能说清的关系 → 第 2 级 ASCII 图 |
| 几份 log 要并排对比 | 数据要给别人改、要算公式 → Excel |
为什么不用设计 skill 做:设计 skill 做的是给别人看的成品,讲究版式和配色。
一次性页面要的是两件事:数据可信、做得快。想借某个设计 skill 的配色,抄进 p.style() 就行。
两条硬要求(都有检查)
| 要求 | 为什么 | 检查 |
数据从文件算出来,标出处:只从 p.source(文件) / p.command(命令) 读进来再算;出处(路径或命令 + sha256)自动列在页尾 | 页面越好看,里面的数越像真的。手抄进 HTML 的数抄错了,页面上看不出来 | P2 出处在不在、源文件变没变;P3 重跑 build.py,和现有页面逐字节比对 —— 手改过页面的过不了 |
| 单个文件,不引外部资源:CSS、JS、数据都在同一个文件里 | 经共享打开是 file:// 页面,Chrome 默认不让它读旁边的文件;CDN 在内网下不一定通 [推断] | P1 静态扫 <script src> / fetch / url() 等;P4 用无头 Chromium 真打开,抓 JS 报错和任何网络请求 |
每项检查都有「故意做坏,必须报」的反向用例,在 check_page.py --self-test 里。
怎么做
K=~/.claude/skills/explain-ladder/scripts
python3 $K/page_kit.py new <主题> # 建 ~/throwaway-pages/YYYYMMDD-<主题>/build.py
# 改 build.py:SRC 换成真实文件,按这页要回答的问题算数据,挑控件
python3 ~/throwaway-pages/<目录>/build.py # 生成 index.html,打印 Linux / Windows 两个路径
python3 $K/check_page.py ~/throwaway-pages/<目录> # 四项检查,有失败就改| 调用 | 得到什么 |
log = p.source(path) / p.command(cmd, cwd) | 读进来的文本,log.idx 是它在出处列表里的编号 |
p.table(标题, 列名, 行, src=log.idx) | 可过滤(子串或 /正则/)、点表头排序的表;超过 3000 行只画前 3000 行并提示 |
p.log_view(标题, log, src=log.idx) | 带源文件原始行号的 log 视图,可过滤;超过 5000 行只画前 5000 行并提示 |
p.html(片段) | 自由写的 HTML / 手写 SVG |
p.data[key] = … + p.script(js) | 自定义图:脚本里用 PAGE_DATA.data 读数据,画到 p.html 放的元素上 |
templates/build_template.py 是完整骨架。交给 user 时说三件事:路径、这页回答什么问题、怎么用(过滤框支持 /正则/)。
页面要放进公开仓时,用 Page(标题, relative=True):出处里的路径按 build.py 所在目录记相对路径,
不会把本机家目录带出去;check_page.py 按页面目录去找这些文件。
样例:demos/explain-ladder/ste-report/(从固定提交取快照,以后也能逐字节重建)。
怎么打开、怎么扔
- Windows 上的 Chrome:家目录用 samba 共享出去时,
build.py会打印\\<本机 IP>\<用户名>\throwaway-pages\…\index.html,粘到地址栏就能开(路径带中文也行,2026-10-07 试过)。 IP 取hostname -I的第一个,共享名按用户名推;推错了就设THROWAWAY_SMB_ROOT。 没有共享时,把index.html拷到本地打开 —— 单个文件,拷走就能用。 - 想在手机上看:内容不含公司代码和 log 时,可以问 user 后发布成 claude.ai 私有页面;含公司内容的只放本机。
- 扔:
page_kit.py list列出每个页面放了几天。工具不删,user 自己删。build.py留着:源文件更新了,重跑一次就是新页面。
检查覆盖不到的
- 四项检查证明的是「数据确实从这个文件经 build.py 算出来」,不证明 build.py 算得对。
2026-10-07 第一次试用:一份 OTA 升级后自动重启的串口 log,按「内核时间戳 > 1000 秒就算升级前的旧系统」分段。
新系统启动后跑过 1000 秒的几行,被标成了旧系统,四项检查全过。
改成按
Restarting system、Starting kernel这两行事件来切,才对。 分类规则、统计方法要像看代码一样看build.py;规则尽量按事件切,不按数值大小猜。 - P4 在没有显卡的机器上是软件渲染,只看打开报不报错、有没有网络请求,不看好不好看。
4. 视频:默认不做
默认不做。 视频做起来最贵,看的人也只能从头看到尾,没法过滤、搜索、跳到某一行。
什么时候可以提
只在下面三种情况下,在回答末尾提一句:
- 要讲的是随时间展开的过程,先后顺序和时机本身就是要点。 例如启动各阶段谁先谁后、竞争窗口、一段动画演示的机制。网页上,这些要读者一步步点才看得到。
- 看的人不是 user 本人,而是要被动看完的人(转给组里、给新人讲)。
- user 自己提到视频。
怎么提:一行,写清为什么视频更好、用哪条路做、要花什么。例:
这个启动过程做成 30 秒的无声录屏可能更直观:六个阶段的先后和耗时一眼就能看出来。要做吗?做的话就录上面那个页面,几分钟。
user 点头之前:不录、不装依赖、不写配音稿。没回应就当没提过,同一件事不再追问。
点头之后:两条路
| 路 | 做法 | 本机情况(2026-10-07 查) |
| A 无声录屏 | 先做第 3 级的页面(带动画或分步按钮),再用 record_page.cjs 录成 webm | 能用:Playwright 自带的 ffmpeg 录 VP8 webm,自测 5 条全过 |
| B 配音 + 字幕 | 走 wechat-video-publisher:edge-tts 配音、逐帧截图、ffmpeg 合成并烧字幕 | 那套写的是 macOS / homebrew;这台 Linux 上 python3 -c "import edge_tts" 报找不到模块,which ffmpeg 为空。要装先问 user |
node $K/record_page.cjs <page.html> --seconds=30 [--size=1280x720] [--actions=steps.json] [--out=x.webm]--actions按顺序点按钮、按键、滚动,用来录分步讲解的页面,格式见脚本开头。- 录完自动核对两件事,不过就退出码 1。V1:文件能播,读得到时长和宽度。 V2:画面动了 —— 取 5 个时间点和第一帧比,变化像素最多的那一帧要 ≥ 0.1%。 V2 抓的是「动画在录之前就播完了」「页面开了减少动态效果」,这两种录出来都是静止画面。 2026-10-07 实测:静止页 0%,只有首屏一小块在动的页 0.25%–0.43%,整屏平移 5.8%。 不用整幅平均差:一小块在动时平均差只有 0.5–1.1,和静止页的 0.35–0.5 拉不开。
- V2 拿第一帧当基准:页面加载很慢、第一帧还是白屏时,静止页也会被判成在动。这条往「放过」那边坏。
- 视频里的数和网页一样要有出处:录的页面最好就是用
page_kit做出来、过了check_page.py的那个。 - 用要 API key 的配音服务时,key 放文件、从文件读,不贴进对话。
- 交给 user 时说:文件路径(
page_kit.py where <文件>打印 Windows 路径)、时长、讲的是什么。
5. 文件
| 文件 | 作用 |
scripts/check_ste.py | 第 1 级:S1–S5;--self-test 19 条,其中 11 条是「故意写坏,必须报」 |
scripts/page_kit.py | 第 3 级:生成库 + new / where / list 三个命令 |
scripts/page_base.css、page_base.js | 内嵌进每个页面的样式和控件脚本(亮 / 暗色跟系统) |
scripts/check_page.py | 第 3 级:四项检查;--self-test 13 条,其中 9 条是「故意做坏,必须报」 |
scripts/render_check.cjs | P4 用的无头浏览器脚本;找不到 playwright 时 P4 明说跳过,不算通过 |
templates/build_template.py | page_kit.py new 用的骨架 |
scripts/record_page.cjs | 第 4 级:录 webm + V1 / V2 核对;--self-test 5 条,其中 2 条是「故意做坏,必须报」 |
自测(2026-10-07 全过):
python3 $K/check_ste.py --self-test # 19 通过
python3 $K/check_page.py --self-test # 13 通过
node $K/record_page.cjs --self-test # 5 通过playwright 从 sky-skills 仓根目录的 node_modules 里找;放在别处时设 PLAYWRIGHT_NODE_PATH(check_page)或 NODE_PATH(record_page)。
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

