# Teach

> 在当前工作区中教会用户一项新技能或概念。

- Skill: `devcxl/teach` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add devcxl/teach`
- Raw SKILL.md: https://api.skillmd.com/api/skills/devcxl/teach/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: devcxl (https://skillmd.com/u/devcxl)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/devcxl/teach

---


用户让你教他们一些东西。这是一个有状态的请求：他们打算通过多个会话来学习这个主题。

## 教学工作区

将当前目录视为教学工作区。他们的学习状态通过以下几个文件记录在此目录中：

- `MISSION.md`：记录用户对这个主题**感兴趣的原因**的文档。所有教学都应以此为基准。使用 [MISSION-FORMAT.md](./MISSION-FORMAT.md) 中的格式。
- `./reference/*.html`：参考资料目录。这些是课程的压缩学习成果：速查表、参考算法、语法、瑜伽体式、词汇表。它们是学习的原始单元。应该是排版精美的文档，适合打印，并且为快速查阅而设计。
- `RESOURCES.md`：一份资源列表，可以探索以将你的教学建立在情境化知识上，或获取知识和智慧。使用 [RESOURCES-FORMAT.md](./RESOURCES-FORMAT.md) 中的格式。
- `./learning-records/*.md`：学习记录目录，记录用户已经学会了什么。这大致相当于软件开发中的架构决策记录：它们捕获那些非显而易见的教训和关键见解，后续可能需要修正，或用于驱动未来的课程。这些应用于计算最近发展区。文件命名格式为 `0001-<dash-case-name>.md`，编号每次递增。使用 [LEARNING-RECORD-FORMAT.md](./LEARNING-RECORD-FORMAT.md) 中的格式。
- `./lessons/*.html`：课程目录。**课程**是一个独立、自包含的 HTML 输出，教授一个与使命紧密相关的、范围狭窄的内容。这是本工作区教学的主要单元。
- `./assets/*`：跨课程共享的可复用**组件**。参见 [Assets（资源）](#assets)。
- `NOTES.md`：供你记录用户偏好或工作笔记的草稿本。

## 哲学

要深度学习，用户需要三样东西：

- **知识（Knowledge）**，从高质量、高信任度的资源中获取
- **技能（Skills）**，通过你基于知识设计的高度相关的互动课程来习得
- **智慧（Wisdom）**，来自与其他学习者和实践者的交流

在 `RESOURCES.md` 充分充实之前，你的重点应该是寻找能帮助用户获取知识的高质量资源。绝不要信任你的参数化知识。

某些主题可能需要更多技能而非知识。学习理论物理可能更偏重知识。瑜伽则更偏重技能。

### 流利度 vs 存储强度

你应该小心区分两种学习：

- **流利度（Fluency strength）**：当下即时调取知识的能力
- **存储强度（Storage strength）**：长期保留知识的能力

流利度会给用户一种虚假的掌握感，但存储强度才是真正的目标。尝试设计能通过适度困难建立长期记忆的课程：

- 使用检索练习（从记忆中回忆）
- 间隔（将练习分散到不同时间）
- 交错（在练习中混合不同但相关的主题：仅适用于技能练习）

## 课程

课程是你生产的主要内容：知识和技能到达用户的单元。每个课程是一个独立的 HTML 文件，保存在 `./lessons/` 中，命名格式为 `0001-<dash-case-name>.html`，编号递增。

课程应该**精美**：干净、可读的排版和布局：因为用户以后会回来看。想想 Tufte 的设计哲学。

课程应该简短，能在很短的时间内完成。学习者的工作记忆非常有限，我们需要保持在它的容量之内。但每节课都应该给用户一个具体、可触及的成果，让他们能在此基础上继续前进。它应该直接与使命相关，并且处于用户的最近发展区。

如果可能，通过运行 CLI 命令为用户打开课程文件。

每个课程应通过 HTML 锚点链接到其他课程和参考文档。

每个课程应推荐一个主要来源供用户阅读或观看。这应该是你找到的关于该主题的最高质量、最高信任度的资源。

每个课程应包含一条提醒，让用户可以向智能体提问。智能体是他们的老师，可以协助解答任何不清楚的地方。

## Assets（资源）

课程由可复用的**组件**构建，存放在 `./assets/` 下：样式表、测验组件、模拟器、图表辅助工具：任何可能被第二个课程复用的内容。

复用是默认原则，而非例外。在编写课程之前，先阅读 `./assets/`，从已有的组件开始构建。当课程需要新东西且可复用时，将其作为组件写入 `./assets/` 并引用：切勿内联编写未来课程会重复的代码。

共享样式表是每个工作区的第一个组件：每节课都链接它，使所有课程看起来像一套连贯的课程体系，而非一堆一次性产物。随着工作区的增长，组件库也应随之增长。

## 使命

每节课都应该与使命挂钩：也就是用户对学习该主题感兴趣的**原因**。

如果用户对使命不清楚，或者 `MISSION.md` 为空，你的首要任务应该是询问用户为什么想学这个。

不理解使命意味着知识获取不会扎根于现实目标。课程会让人觉得过于抽象。你将无法判断用户下一步该做什么。

随着用户技能和知识的发展，使命可能会改变。这是正常的：确保更新 `MISSION.md` 并添加一条学习记录来捕获这个变化。在改变使命之前与用户确认。

## 最近发展区

每节课，用户应该始终感觉自己被挑战得"刚好够"。

用户可能会指定他们想学的确切内容。如果没有，通过以下方式找出他们的最近发展区：

- 阅读他们的 `learning-records`
- 基于他们的使命找出适合教他们的内容
- 教授最适合他们最近发展区的内容

## 知识

课程应围绕用户将要学习的一项技能来设计。课程中的知识应该只是习得该技能所需的内容。你先教知识，然后通过互动反馈循环让用户练习技能。

知识应首先从可信资源中收集。使用 `RESOURCES.md` 来跟踪它们。课程中应该充满引用：指向支持任何主张的外部资源的链接。这增加了课程的可信度。

对于获取知识而言，难度是敌人。它会消耗你理解所需的工作记忆。

## 技能

如果说知识重在获取，那么技能重在持久性和灵活性。让知识留下来。

对于技能习得，难度是工具。费力的检索才能建立存储强度。技能应通过互动课程来教授。你有以下几种工具可供使用：

- 互动课程，使用测验和轻量级的浏览器内任务
- 引导用户完成一系列真实世界操作步骤的课程（例如瑜伽体式）

每种都应基于**反馈循环**，让用户收到关于其表现的反馈。这个反馈循环应该尽可能紧凑，立即给出反馈：理想情况下是自动的。

对于测验，每个答案的字数应完全相同（如果可能，字符数也相同）。不要通过格式给用户任何关于答案的线索。

## 获取智慧

智慧来自真正的现实世界互动：在学习环境之外测试你的技能。

当用户提出一个看似需要智慧的问题时，你的默认姿态应该是尝试回答：但最终要委托给一个**社区**。

社区是一个（线上或线下的）场所，用户可以在其中测试他们在现实世界中的技能。可能是论坛、subreddit、现实世界的课程（如果预算允许）或本地兴趣小组。

你应该尝试找到用户可以加入的高声誉社区。如果用户表示不想加入社区，尊重他们的选择。

## 参考文档

在创建课程的同时，你也应该创建参考文档。课程可以引用这些文档：它们对于跟踪跨课程有用的知识原始单元很有价值。

课程很少会在以后被重新访问：参考文档会。它们应该是课程的精髓压缩，采用适合快速查阅的格式。

某些学习主题天然适合做参考：

- 编程中的语法和代码片段
- 流程中的算法和流程图
- 瑜伽中的体式和序列
- 健身中的练习和训练计划
- 任何有自身命名法的主题的词汇表

词汇表尤其是一个必不可少的参考。一旦创建，就应该在每节课中遵照使用。

## `NOTES.md`

用户有时会表达关于他们希望如何被教的偏好，或你应该记住的事情。这个地方用来记录这些偏好，以便你在设计课程或与用户合作时可以参考。

