安装此技能
npx skills@latest add mattpocock/skills --skill=teach 然后在你的编码 agent 里输入 /teach 。
本页目录
它做什么
teach 把你运行它所在的目录变成一个常驻的教学工作区,并在许多场会话(session)里教你一个主题,用短的、自包含的 HTML 课程(lesson)。
它不从模型(model)已经知道的东西出发教学。它把参数化知识(parametric knowledge)当作不可信。在教之前,它先寻找高信任度的资源,把它们记录在 RESOURCES.md 里,并在每一课里引用它们。它也是有状态(stateful)的。使命、资源、课程以及你已学内容的记录都以文件形式住在这个目录里,所以下一场会话从那些文件继续,而不是从上一场对话剩下的部分继续。
什么时候用它
你通过输入 /teach 来调用它;agent 不会主动去拿它。
当学习本身就是这个项目时,用它:一门语言、一个框架、一个你刚加入的代码库、瑜伽、着色器、一项认证。它不是用来做一次顺带讲解的工具。
| 你想要什么 | 该用哪个 |
|---|---|
| 用几周时间学一个主题,会话能累积 | teach |
| 在已经身处的那场会话里解释一个想法 | 直接问,就在那场会话里 |
| 让 agent 把上一条消息重新讲一遍,因为它没讲清楚 | wait-what |
| 磨快你已经有的思考,而不是获取新材料 | grill-me |
| 让一个后台 agent 去读一手来源(primary source)并给你留下一份带引用的文档 | research |
| 学一点在质询中途冒出来、又不想让质询(grilling)脱轨的东西 | 用 handoff 分叉到一个教学工作区,然后在那里 teach |
前提条件
teach 构建的是一个目录,而不是产出一个文件,而且这个技能假定每个工作区只有一个使命(mission),所以在一个你乐意完全交给单一主题的地方运行它。让它远离你正在工作的项目。一个独立的仓库是最好的家,比一个全局的 ~/.learnings/ 文件夹或正在工作的项目本身都好。一个专用仓库还能让你提交课程,团队就是这样分享它们的。
那个目录里会累积什么:
| 路径 | 它装着什么 |
|---|---|
MISSION.md | 你为什么要学这个。其他每个文件都依赖它。如果它缺失,teach 做的第一件事就是访谈你,直到它存在 |
RESOURCES.md | 它据以教学的、经过审核的来源,分为知识(Knowledge)与智慧(wisdom,即社区) |
lessons/*.html | 编号的课程:教学的基本单位 |
reference/*.html | 压缩过的速查表、算法、词汇表:你会回头查阅的文档 |
learning-records/*.md | ADR 式笔记,记录你已确凿学会的东西,用来决定接下来教什么 |
assets/* | 可复用的组件(component),从一个共享样式表开始,让课程看起来像同一门课 |
NOTES.md | 你声明的教学偏好 |
关于这份清单有两点说明。词汇表适合大多数主题,但技能随附了一份 GLOSSARY-FORMAT.md,而 SKILL.md 已经不再链接它,所以你只有主动要求才会得到一份(issue #559)。所有这一切都落在你运行 /teach 所在的那个目录里。
存储强度,而不是流畅度
用来思考的词是存储强度(storage strength):长期留存,相对于流畅度(fluency),也就是你在阅读时感觉像掌握了、而一周后就消失的即时回忆。teach 通过合意困难(desirable difficulty)来构建前者:提取练习(retrieval practice)、间隔(spacing)、交错(interleaving)。知识优先。在那个阶段,困难对你不利,因为它用掉了你理解所需的工作记忆。然后 teach 通过一个紧反馈环(tight loop)操练这项技能,在那个阶段,困难就是工具。
两样东西决定你被教什么。使命(你想要它的那个具体现实理由)是每一课的基础。没有它,课程会变得抽象,也没有任何东西决定下一步是什么。根据使命和学习记录(learning record),teach 在你的**最近发展区(zone of proximal development)**里挑选下一课:难到需要付出努力,但又不至于超前到学不会。
存储强度也是这个技能会反驳而不是赞同的原因。一个需要智慧(现实世界的判断)的问题,会得到一个尝试性的答案,然后指向一个你可以去检验它的社区。这个技能不让你跳过测验(quiz)。一位用户报告说,自己说了「多谢」,却被告知操练(drill)还没完成。
课程、参考文档与组件
一课是一个自包含的 HTML 文件,短到能在一坐的工夫里完成,与使命绑定,给你一项切实的收获。它引用自己的来源,推荐一份一手来源让你自己去读,并链接到同级课程和参考文档(reference document)。
你很少回头去看一课,但你确实会回头去看参考文档。所以一课的短形式(语法表、算法、姿势序列、词汇表)属于 reference/,而不是埋在那节引入它的课里。
课程由 assets/ 里的组件搭建:样式表、测验小部件、模拟器、图表辅助工具。复用是默认。agent 在编写一课之前会先读 assets/,并从已有的东西搭建。任何第二课也可能用到的新东西,它都会写成组件,而不是内联。共享样式表是每个工作区里的第一个组件,它让课程看起来像同一门课,而不是许多互不相关的页面。
常见问题
它把文件放在哪里?我的最后跑到了 ~/.claude/skills。
在你运行 /teach 的那个目录里(#377)。
我是留在一场会话里,还是每课开一场新会话?
三种做法都行:留在同一场会话里、在新会话里重新调用 /teach、或者在同一文件夹里开一场新会话。每一课都是它自己的一次调用。课程状态住在文件夹里,不住在对话里。常见做法是在工作区里开一场全新的会话,然后说 /teach next lesson for <topic>。
我怎么知道它没有在教我它编造出来的东西?
仅凭这个技能自己的说法,你不知道。你去读一手来源。teach 不够可靠,不能不加检查地信任,任何建立在 LLM 上的技能都是如此。这套基础(RESOURCES.md、每一课里的引用、每课推荐一份一手来源)让检查一课的代价很低。它并没有消除检查的必要。这种失败发生过:一位学 2x2 魔方的用户得到了编造的、解不开的转动序列。遇到那种情况,检查模型、运行环境(harness)、投入级别(effort)设置,以及来源。风险在符号精确的过程性领域里最高,在输出可以立即验证的地方最低,比如你能运行的代码。
正确的测验答案总是第一个选项。
好几个人在 Sonnet、Opus 和 GLM 上确认过这一点,它仍未修复。SKILL.md 现在要求每个答案的单词数相同。这去掉了另一个线索(过去正确答案是唯一一个论证完整的选项),但对位置只字未提。一位贡献者测试了一条针对位置的指令级修复,而在九课里,正确答案仍然 33 次全部落在 A 槽(#335)。所以真正的修复是 assets/ 里一个会打乱答案的测验组件,而不是更好的措辞。在那个随附发布之前,忽略答案位置。你的 assets/ 目录归你改,所以你可以要求一个在渲染时打乱的组件,作为本地修复。
它假定我已经知道一些东西,还用了它从未定义过的术语。
这是最常见的真实抱怨。没有评估步骤。teach 从使命和学习记录推断你的水平,而在第一场会话里没有学习记录。一位在 wayfinder 流程里运行它的用户说得很直白:「它从没做过质询来确立我的起点,所以它对我已经知道的东西做了大量假设。」另一位报告说课程使用了未定义的术语,还有一课讲他们的硬件,讲了硬件能做什么,却从没说过它不能做什么。两件事有帮助:在第一条消息里说明你先前的知识和你的缺口,并在某一课没对上时把水平纠正出来,因为那条纠正会变成一条学习记录,引导下一课。一个明确的知识评估步骤是一个长期存在的功能请求(#725),不是已经随附发布的行为。
它做间隔重复(spaced repetition)吗?它知道什么时候该停止教学吗?
第一个问题的答案是不,第二个问题则不可靠。这个技能围绕间隔与交错设计课程,但没有任何东西安排复习,也没有 Anki 或日历集成。用户经常要求这两样。一个相关的缺口是退出标准。正如一位用户所说,teach「擅长做下一课,但不那么擅长知道什么时候该停下、切换到复习或真实练习。」如果你想要复习或操练而不是新材料,就主动要求;这个技能不会自己提出切换。
它只对代码有用吗? 不是。报告最多的用法在编程之外:韩语、日语敬语、钢琴、吉他、桌游设计、OpenSCAD、电影情节、Azure 和 CCNA 认证、大学考试,以及八岁和十岁的孩子拿到关于密室逃脱和火蝾螈的可打印小册子。这个技能里没有任何东西是编程特有的。使命、资源、最近发展区和操练在任何领域都以同样的方式工作。在代码之内,用户报告的最大价值是在一个不熟悉的代码库或一个新团队的栈里找准方位,而不是从零学一门语言。
我该用哪个模型来运行它? 没有一个标准答案,而报告的差异很大。用户报告说,更高的推理投入级别(reasoning effort)比中等设置产出更好的课程。一位用户通过 Copilot CLI 配合 Codex 跑了同一个技能,只得到一张 30 行的 HTML 卡片,而 Claude Code 产出了一整课。如果你的组织允许你在那里添加技能,它可以在 Claude Cowork 里未经修改地运行。如果课程出来得很单薄,先换模型、运行环境或投入级别,再重写你的提示词。
它生效的标志
- 它在一个空目录里做的第一件事,是访谈你为什么要学这个,而不是产出一课。
RESOURCES.md在课程之前先填满,而每一课都点名一份值得你自己去读的一手来源。- 课程里的断言带有向外链接。一课没有引用,就是这个技能在凭记忆教学。
- 一课占一坐的工夫,并让你能做到一件之前做不到的事。
- 在文件夹里开一场全新的会话说「下一课」,会继续这门课,而不是重新开始。
learning-records/在增长,课程不再重复教你已经证明会了的东西。- 课程看起来像同一门课:它们链接
assets/里的样式表,而不是各自携带一份。 - 一个需要判断的问题会把你指向一个论坛、subreddit 或课程,而不只是一个答案。
它在体系中的位置
teach 是一个随时可用的独立技能(Standalones)。它不是构建链上的一步,也不与工程流程共享任何产物;它在自己的目录里工作,只要你还在学这个主题。
它唯一真正的邻居是 handoff。两者一起回答「如果我正被质询一件我不懂的东西,该怎么办?」不要为了学习而停下质询。用 /handoff 到一个教学工作区,在那里用 /teach 学这个主题,然后回去从你停下的地方继续。附近的替代品是 research,适用于你想要一份带引用的文档、而不是课程与留存的时候。当你不确定哪个技能或哪条流程合适时,ask-matt 会在整套技能上为你路由。