Community写作与编辑github.com

ankitvashisht12/explain-it

Agent 技能,将 PR、Bug 或子系统转化为小型、自包含的 HTML 解释站点——无需构建步骤,即可为读者构建心智模型,每主题一页,共享侧边栏。

explain-it 是什么?

这是一个专门用于生成小型静态 HTML 解释站点的 AI 代理技能。它的核心价值在于,能够将一个复杂的代码变更(如 PR)、漏洞或子系统,转化为一系列连贯、易懂的静态页面,让对该代码库零背景知识的读者也能快速理解。该技能的工作流强调“先调研后解释”,要求 AI 代理在解释任何代码之前必须真实阅读并理解源代码。生成的站点结构清晰:一个根页面作为构建心智模型的入门指南,然后每个主题(如一个变更、Bug 或决策)单独成页,所有页面共享一个按阅读顺序排列的侧边栏。输出的 HTML 文件完全自包含,无需 web 服务器或构建工具,可直接从磁盘(file://)打开。该工具特别适合用于知识传递、代码审查总结、内部文档化,或为新加入项目的开发者创建代码库深度概念介绍。支持 Claude Code、Cursor、Codex 等 AI 编码代理平台。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add ankitvashisht12/explain-it

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

explain-it 是做什么的?

将你已调研的代码转化为一个小型静态 HTML 站点,让对该代码库零背景知识的聪明读者也能轻松理解:一个构建心智模型的根页面,每主题一页,并通过侧边栏连接它们。

要达到的标准:“既不过于简单,也不过于复杂的语言。” 永远不要居高临下,也永远不要假设读者具备仓库知识。

工作流程

1. 解释之前先调研

永远不要解释你未读过的代码。对于每个主题,阅读实际源代码:变更的行、外层函数,以及至少一个调用方,这样你就能用一个真实的故事回答“这段代码到底在什么时候运行?”。如果某个声明来自他人(如审查评论、Issue),请对照代码进行验证,如果不成立则明确说明。

2. 规划站点

  • 一个根页面(index.html):入门指南。在大约 2 分钟内构建读者对系统的心智模型,并链接到每个主题页面。
  • 每个主题一个页面(01-<slug>.html,02-<slug>.html,……):每个页面解释一个变更、Bug、决策或子系统。3–7 页是最佳数量;超过约 9 页时,应考虑合并主题。
  • 每个页面上都有共享侧边栏,按阅读顺序列出所有页面,并高亮当前页面。页面是纯文件,使用相对 <a href> 链接——站点必须能直接从磁盘(file://)打开,因此无需路由器、无需构建步骤、无需外部 JS。

仅当没有明显位置时,询问用户存放文件夹的位置;否则,在工作旁边创建一个命名合理的文件夹(例如 docs/explainers/<topic>/)并告知用户存放位置。

3. 编写每个页面

遵循 references/writing-guide.md 中的方法——在编写第一个页面之前,请先阅读该指南。不可妥协的要求:

  • 入门指南优先。 根页面介绍主题页面所需的所有领域概念,每个概念配一个具体的比喻(例如:“发布就像复印件;正在运行的任务指向一份复印件”)。引入一个比喻后,在全文各处重复使用它。不要为一个概念堆砌两个比喻。
  • 将每个主题扎根于运行时。 每个主题页面以“这段代码到底在什么时候运行?”的故事开头:2–4 个参与者行为(用户做 X → 系统运行函数 Y → 其中运行的小任务)。同时使用代码字体的真实函数名和平实语言的故事。
  • 以差异形式展示变更。 旧代码与新代码使用红/绿差异块,并在头部显示文件路径,精简到核心,附 1–3 条内联注释指出原因——而不是叙述内容。
  • 量化“原因”。 禁止使用“慢”;“每次请求数百 KB,~99% 的时间都是徒劳”才是标准。风险同理:说出具体的输入/状态和错误的后果。
  • 将 Bug 与决策分开。 如果某事是合理的产品选择而非缺陷,则将其作为带权衡的决策来呈现,而不是作为错误。
  • 在根页面结尾放置记分板:每个项(已完成 / 已提议 / 暂缓)的状态表,并标明其在代码库中的位置。

4. 构建 HTML

将 references/site-template.html 复制为每个页面的起点——它包含设计令牌、侧边栏以及每个组件(故事块、标注、差异块、状态表、标签)的一个可用示例。然后:

  • 保持每个页面完全自包含(所有 CSS 内联在页面中)。侧边栏被复制到每个页面中,当前项标记为 class="on"。
  • 遵循 references/design-system.md 中的令牌和组件规则。保持给定的调色板、间距和字体比例,以便多页面站点看起来像同一个系统。模板自带亮/暗模式切换和可折叠侧边栏——请将它们带到每个页面中,而不是丢掉。
  • 无外部依赖,除了模板中已有的 Google Fonts 链接(字体堆栈在离线时可优雅回退),并且除了模板的主题切换片段外,不包含其他 JS。

5. 交付前验证

打开或渲染根页面以及至少一个主题页面(或重新阅读它们),检查:每个侧边栏链接是否解析正确,每个在正文中提到的代码标识符在代码库中是否存在且拼写正确,每个差异块在概念上是否与实际文件一致,记分板状态是否最新。然后告知用户文件夹路径,并在环境允许的情况下为他们打开根页面。

常见陷阱

  • 根据对话记忆而非代码进行解释——解释器会继承所有过时的声明。请重新阅读源代码。
  • 比喻漂移:在一个页面上叫它“复印件”,在下一页叫它“冻结副本”。全文统一用一个术语。
  • 差异块直接粘贴 60 行原文。精简到核心;保留前后 2–4 行上下文。
  • 叙述性文字逐行解释差异。差异显示内容;文字只传递为什么重要以及何时运行。
  • 侧边栏只出现在索引页面。每个页面都必须包含完整的侧边栏。
  • 幼稚化语言(“电脑在一个特殊的盒子里记住东西”)。读者很聪明——他们只是不了解这个代码库。

相关技能