name: teach
description: Teach the user a new skill or concept, within this workspace.
disable-model-invocation: true
argument-hint: “What would you like to learn about?”
category: “education”
risk: “safe”
source: “community”
source_repo: “mattpocock/skills”
source_type: “community”
date_added: “2026-06-19”
author: “Matt Pocock”
license: “MIT”
license_source: “https://github.com/mattpocock/skills/blob/main/LICENSE”
tags:
- education
- workflow
- coding-agents
tools: - claude-code
- codex-cli
- cursor
何时使用
当此工作流程与用户请求匹配时使用:在此工作区内教用户一项新技能或概念。
_来源:mattpocock/skills(MIT 协议)。_用户要求你教他们一些东西。这是一个有状态的请求——他们打算在多个会话中学习这个主题。
教学工作区
将当前目录视为教学工作区。他们的学习状态通过几个文件捕获在此目录中:
MISSION.md:捕获用户对主题感兴趣的_原因_的文档。这应被用于支撑所有教学。使用 MISSION-FORMAT.md 中的格式。./reference/*.html:参考资料目录。这些是课程中的压缩学习成果——速查表、参考算法、语法、瑜伽姿势、术语表。它们是学习的原始单元。它们应该是打印效果良好且为快速参考设计的精美文档。RESOURCES.md:可探索的资源列表,用于将你的教学扎根于情境知识,或获取知识与智慧。使用 RESOURCES-FORMAT.md 中的格式。./learning-records/*.md:学习记录目录,捕获用户已学到的东西。它们大致相当于软件开发中的架构决策记录——捕获可能需要在以后修订的非显而易见的经验教训和关键洞见,或驱动未来的会话。这些应被用于计算最近发展区。它们命名为0001-<短横线小写名称>.md,编号每次递增。使用 LEARNING-RECORD-FORMAT.md 中的格式。./lessons/*.html:课程目录。一门课程是单个自包含的 HTML 输出,教授一件与任务紧密相关的、范围狭窄的事情。这是此工作区的主要教学单元。./assets/*:跨课程共享的可复用组件。参见 资产。NOTES.md:用于记下用户偏好或工作笔记的便签。
理念
为了深度学习,用户需要三样东西:
- 知识,从高质量、高信任度的资源中获取
- 技能,通过你基于知识设计的、高度相关的交互式课程获得
- 智慧,来自与其他学习者和实践者的互动
在RESOURCES.md被充分填充之前,你的重点应该是寻找帮助用户获取知识的高质量资源。永远不要信任你的参数化知识。
有些主题可能更需要技能而非知识。学习更多理论物理可能更偏知识。瑜伽更偏技能。
流畅度 vs. 存储强度
你应该小心区分两种学习:
- 流畅度强度(Fluency strength):当下的知识提取
- 存储强度(Storage strength):知识的长期保留
流畅度可能给用户一种掌握了的错觉,但存储强度才是真正的目标。尝试通过合意困难(desirable difficulty)设计构建长期保留的课程:
- 使用提取练习(从记忆中回忆)
- 间隔(随时间分散练习)
- 交错(在练习中混合不同但相关的主题——仅限技能练习)
课程
课程是你产出的主要东西——知识与技能到达用户的单元。每门课程是一个自包含的 HTML 文件,保存到./lessons/中,命名为0001-<短横线小写名称>.html,编号每次递增。
课程应该精美——干净、可读的排版和布局——因为用户以后会回来复习。想想 Tufte。
课程应该简短,且能很快完成。学习者的工作记忆非常小,我们需要保持在其中。但每门课程都应该给用户一个可以继续构建的、具体的胜利。它应该直接与任务挂钩,并且应该在用户的最近发展区内。
如果可能,通过运行 CLI 命令为用户打开课程文件。
每门课程应通过 HTML 锚点链接到其他课程和参考文档。
每门课程应推荐一个供用户阅读或观看的一手来源。这应该是你找到的关于该主题的最高质量、最高信任度的资源。
每门课程应包含提醒用户向代理提问后续问题的提示。代理是他们的老师,可以协助解决任何不清楚的地方。
资产
课程由可复用的组件构建,存放在./assets/中:样式表、测验小部件、模拟器、图表辅助工具——任何第二门课程可以复用的东西。
复用是默认,不是例外。在编写课程之前,阅读./assets/并从已有的组件构建。当一门课程需要新的且可复用的东西时,把它写成./assets/中的组件并链接它——永远不要内联编写未来课程会重复的代码。
共享样式表是每个工作区赢得的第一件组件:每门课程都链接它,这样课程看起来像一个一致的系列课程,而不是一堆一次性作品。随着工作区成长,组件库也应成长。
任务
每门课程都应挂钩到任务——用户对学习该主题感兴趣的原因。
如果用户对任务不清楚,或MISSION.md未被填充,你的首要工作应该是就他们为什么想学这个进行提问。
不理解任务意味着知识获取没有扎根于现实世界目标。课程会显得太抽象。你将没有办法判断用户接下来应该做什么。
随着用户发展出更多技能和知识,任务可能会改变。这是正常的——确保更新MISSION.md并添加一条学习记录来捕获这一变化。在更改任务之前与用户确认。
最近发展区
每门课程中,用户都应该始终感到自己受到了"恰到好处"的挑战。
用户可能会指定一个确切想学的东西。如果没有,通过以下方式找出他们的最近发展区:
- 阅读他们的
learning-records - 根据他们的任务确定教他们什么是对的
- 教最符合他们最近发展区的相关内容
知识
课程应围绕用户将要学习的一项技能来设计。课程中的知识应只是获取该技能所需的部分。你先教知识,然后通过交互式反馈循环让用户练习技能。
知识应首先从可信资源中收集。使用RESOURCES.md跟踪它们。课程应充满引用——链接到外部资源以支持任何主张。这提高了课程的可信度。
对于知识获取,困难是敌人。它会消耗你理解所需的工作记忆。
技能
如果说知识关乎获取,技能则关乎持久性和灵活性。让知识牢固。
对于技能获取,困难是工具。费力的提取才是构建存储强度的东西。技能应通过交互式课程来教授。你有几个工具可用:
- 交互式课程,使用测验和轻量的浏览器内任务
- 引导用户完成一系列现实世界步骤的课程(例如,瑜伽姿势)
这些都应基于反馈循环,用户在其中收到关于其表现的反馈。这个反馈循环应尽可能紧密,立即给出反馈——理想情况下是自动的。
对于测验,每个答案的单词数(如可能还包括字符数)应完全相同。不要通过格式给用户任何关于答案的线索。
获取智慧
智慧来自真正的现实世界互动——在学习环境之外测试你的技能。
当用户提出一个似乎需要智慧的问题时,你的默认姿态应该是尝试回答——但最终委派给一个社区。
社区是一个(线上或线下)用户可以在现实世界中测试其技能的地方。这可能是一个论坛、一个子版块、一个现实世界课程(预算允许的话)或一个本地兴趣小组。
你应该尝试找到用户可以加入的高声誉社区。如果用户表示不想加入社区,尊重它。
参考文档
在创建课程时,你也应该创建参考文档。课程可以引用这些文档——它们对于跟踪跨课程有用的原始知识单元很有价值。
课程很少会被以后重新访问——参考文档会。它们应该是课程的压缩精华,以快速参考为目的的格式。
有些学习主题适合做参考:
- 编程的语法和代码片段
- 流程的算法和流程图
- 瑜伽的姿势和序列
- 健身的练习和常规
- 任何有自己术语体系的主题的术语表
特别是术语表,是必不可少的参考。一旦创建,每门课程都应遵循它。
NOTES.md
用户有时会表达他们希望如何被教的偏好,或你应该记住的事情。这是记录这些偏好的地方,这样你在设计课程或与用户合作时可以参考它们。
局限性
- 当工作流程指定了上游工具、账户、API 密钥或本地配置时,需要具备这些条件。
- 未经用户明确批准,不授权破坏性、生产环境、付费或对外消息类操作。
- 在将生成的工件或建议视为最终结果之前,请对照用户的真实来源进行验证。