这篇文章分析 Matt Pocock 的 teach skill。它做的是把“教用户一个新 skill 或 concept”组织成一个可跨 session 恢复的学习工作区:为什么学、参考什么、学到了哪、下一课教什么,都落到 workspace 里的文件上。

teach 的 frontmatter 透露了它的边界:description 写的是“在这个 workspace 里教用户一个新 skill 或 concept”,同时 disable-model-invocation: trueSKILL.md#L1-L5 这说明它不是模型随时自动触发的教学口吻,而是用户主动进入的学习模式。学习一旦被放进 workspace,就不再只是一次解释,而是一段可以跨 session 恢复的过程。

原文第一句直接定义任务性质:用户想学习某个东西,而且这是 stateful request,会持续多个 session。SKILL.md#L8-L8 后面所有设计都从这句话长出来。跨 session 学习最怕状态散在聊天记录里,所以 teach 先建工作区,再谈教学方法。

Teaching Workspace:先回答学习状态放哪里

teach 第一节不是 Philosophy,也不是 Lessons,而是 Teaching Workspace。SKILL.md#L10-L20 这个顺序很关键。Matt 先规定当前目录就是学习工作区,用户的学习状态由一组文件承载。没有这一步,后面的 mission、lesson、reference 都只是单次输出。

这些文件不是普通目录清单,而是一套状态分工。MISSION.md 记录用户为什么学,用来约束所有教学决策;RESOURCES.md 记录可信资源,用来防止 Agent 靠参数记忆编教材;learning-records/ 记录用户已经学会或修正过的关键理解,用来计算下一课的难度;lessons/ 保存一次次教学产物;reference/ 保存课程压缩后的速查材料;assets/ 保存跨 lesson 复用的组件;NOTES.md 保存用户偏好和工作笔记。SKILL.md#L14-L20

这就是 teach 自己对自己的解释:学习不是“问一次答一次”,而是一个有状态目录。每类材料都有归属,下一轮 Agent 才知道该读哪里、该继承什么、该避免重复什么。

MISSION.md 的格式文件把这个状态锚得更具体。它要求写清 Why、Success looks like、Constraints、Out of scope,并强调 mission 必须具体,不能写成“理解 X”这种抽象愿望。MISSION-FORMAT.md#L7-L31 这让 mission 变成教学决策的指南针:下一课是否该教,不看主题是否相关,而看它是否推进用户追求的现实变化。

RESOURCES.md 也有明确格式。它不是裸链接收藏夹,而是按 Knowledge 和 Wisdom 分组;每个资源都要说明覆盖什么、什么时候使用;资源浅、错、偏离 mission 时要删掉,而不是埋在列表底部。RESOURCES-FORMAT.md#L7-L32 这让资源列表成为可信材料库,不是资料垃圾场。

Philosophy:学习对象被拆成三类

第二节 Philosophy 说,深度学习需要三件事:Knowledge、Skills、Wisdom。SKILL.md#L22-L32 这不是泛泛的教育口号,而是在给后面的目录和动作分工。

Knowledge 来自高质量、高信任资源,所以 RESOURCES.md 必须先站稳。Skills 来自 Agent 设计的高相关互动课程,所以 lesson 不能只是解释页。Wisdom 来自和其他学习者、实践者互动,所以 Agent 不能把所有学习都封闭在对话里。

原文还提醒,不同主题的比例不同。理论物理可能更偏 knowledge,瑜伽更偏 skills。SKILL.md#L30-L32 这给 Agent 一个分流规则:不要把所有主题都做成同一种 lesson。学编程语言、学健身动作、学论文阅读,需要的资源、练习和反馈都不一样。

这里最硬的约束是“Never trust your parametric knowledge”。在 RESOURCES.md 没有填充好之前,重点应该是找高质量资源,而不是急着开讲。SKILL.md#L30-L30 这句话把教学 Agent 从“会解释”拉回“有证据”。它承认模型能组织学习,但不把模型记忆当权威来源。

所以 teach 里的找材料不是泛搜一堆链接,而是资源侦查。Agent 要先用 MISSION.md 判断这门课需要哪些 Knowledge 和 Wisdom,再去找 primary source、官方文档、认可专家、peer-reviewed work,或者强管理的高信任社区;营销包装、浅层教程、过时资料和偏离 mission 的内容要直接筛掉。RESOURCES-FORMAT.md#L27-L32

找到材料后,还不能只贴链接。RESOURCES-FORMAT.md 要求每个条目都写清“它覆盖什么、什么时候用”,并按 Knowledge 和 Wisdom 分组;如果 mission 需要某块内容但暂时找不到好资源,就写进 ## Gaps,把缺口变成下一轮搜索任务。RESOURCES-FORMAT.md#L27-L31 这就是 teach 对“怎么找材料”的隐含协议:先由 mission 约束搜索,再由信任标准筛选,最后把资源和缺口都写回工作区。

Fluency vs Storage Strength:不要把听懂当学会

Philosophy 下面紧接着区分 Fluency strength 和 Storage strength。前者是当场能想起来,后者是长期能保持。SKILL.md#L34-L41

这解释了为什么 teach 不能只追求“讲清楚”。讲清楚会提高 fluency,让用户在当前会话里顺着你点头;但真正目标是 storage strength,用户过几天还能自己提取、判断和使用。

原文给出的手段是 desirable difficulty:retrieval practice、spacing、interleaving。SKILL.md#L41-L45 这会反过来塑造 lesson:一个好的 lesson 应该让用户回忆、选择、操作、接受反馈,而不是只读一段顺滑解释。

desirable difficulty 可以理解为“有益的困难”:不是把课讲得更难,而是在用户不会被压垮的前提下,故意制造一点提取和判断成本。retrieval practice 更准确地说是“检索练习”或“提取练习”:学完一段内容后,先合上材料,主动回忆刚才学了什么,再对照反馈修正,而不是马上重读一遍。spacing 是“间隔练习”:把同一内容分散到不同时间点复习,而不是一次性突击。interleaving 是“交错练习”:把几个相关题型或技能混在一起练,让用户学会识别差异并选择策略,而不是连续重复同一种题。

这几个词落到 teach 的技巧上,就是 lesson 不能只有解释段。它要有小测、回忆题、延迟复习提醒、相似概念辨析和即时反馈。这样用户不是“读懂了”,而是在 lesson 里练过一次提取、判断和修正。

人和 Agent 的互动可以这样发生。做 retrieval practice 时,Agent 先教一个很小的概念,然后不要立刻总结答案,而是让用户合上解释、用自己的话复述、选择下一步、写出例子或指出错误;用户回答后,Agent 对照可信材料给反馈,指出漏掉什么、误解什么,再把真正影响后续教学的理解写进 learning record。这里的关键是先让用户输出,再由 Agent 反馈,而不是 Agent 连续讲完。

spacing 时,Agent 不能只靠当前 lesson 解决,因为间隔本来就跨时间。更合理的协议是:lesson 结尾留下一个复习点;下一次进入 teach 时,Agent 先读 learning-records 和上次 lesson,从旧内容里抽一个小问题让用户回忆,再进入新内容。也就是说,spacing 在 teach 里不是自动闹钟,而是“下一课开始前的旧知识检索”。它依赖 workspace 保存状态,也依赖用户再次回来学习。

interleaving 时,Agent 不应一直练同一类题,而是把相近概念放在一起比较。比如学 skill 写作时,不连续判断十个 description,而是交替判断 descriptionargument-hintdisable-model-invocationreferences 该怎么写。做 desirable difficulty 时,Agent 要控制难度:题目应该让用户需要想一下,但不能难到只能猜。用户答错后,反馈要缩小问题,而不是直接把整段答案重讲。

Lessons:主产物不是长文,而是一节小课

teach 把 lesson 定义为主产物:一个保存在 ./lessons/ 下的自包含 HTML 文件,命名为 0001-<dash-case-name>.htmlSKILL.md#L47-L49 HTML 不是重点,重点是 lesson 被固定成学习的最小推进单位。

原文对 lesson 的要求很具体:它要漂亮、短、很快能完成;它要给用户一个 single tangible win;它要直接绑定 mission,并处在用户的 zone of proximal development;它还要链接其它 lesson 和 reference document,推荐一个高信任主资源,并提醒用户继续向 Agent 提问。SKILL.md#L51-L61

single tangible win 是“一次单一、可感知的收获”。它不是“今天理解了很多背景”,而是用户完成 lesson 后能明确说出自己多会了一件事,比如能判断一个 skill 的 description 是否写得太宽,能把一个抽象目标改成可练习的小任务,或能用一个术语解释一个真实例子。single 要求一次只推进一个收获,tangible 要求这个收获能被用户看见、说出或做出来。

zone of proximal development 通常译作“最近发展区”。意思是:lesson 的难度应该略高于用户当前水平,用户独立做会有点吃力,但在 Agent 提示、反馈或示例帮助下可以完成。太简单,只会制造 fluency;太难,用户只能猜或放弃。放到 teach 里,Agent 要根据 mission 和 learning records 选择下一课:不教用户已经稳定掌握的内容,也不跳到还缺前置知识的内容。

它和 desirable difficulty 确实相邻,但不是同一个概念。zone of proximal development 更像选课边界:这一课该不该教,是否处在用户够得着的范围内。desirable difficulty 更像练习设计:这一课已经选定后,如何通过检索、间隔、交错、少量提示来制造有效困难。前者决定难度区间,后者决定区间内的训练方式。

这套约束共同防止两个失败。lesson 太大,用户工作记忆会被压垮;lesson 太散,用户只得到零碎知识,没有可积累的胜利。Matt 用“短小但有 tangible win”把 lesson 卡在中间。

如果自己写类似 skill,这里可以直接还原骨架:一次教学产物必须有编号、有文件、有使命绑定、有当前难度判断、有主资源、有向后链接、有复习价值。少了这些,lesson 就退化成一次对话回答。

Assets:课程不是一堆一次性页面

Lessons 之后紧接着是 Assets。原文说 lessons 由 ./assets/ 里的可复用组件构建:样式表、测验组件、模拟器、图表 helper,任何第二节课还会用到的东西都应该放这里。SKILL.md#L63-L69

这节说明 teach 不只关心教学内容,也关心课程系统的维护成本。第一节课如果内联一个测验组件,第二节课就会复制;复制多了,课程会变成一堆风格不一、组件不可维护的页面。

原文甚至说共享 stylesheet 是每个 workspace 最先获得的组件。SKILL.md#L69-L69 这不是审美洁癖,而是让多节 lesson 看起来像一门课程,而不是一堆一次性输出。

The Mission:不知道为什么学,就不能决定下一课

Mission 节回到 MISSION.md 的使用方式。每个 lesson 都必须 tie into mission;如果用户的 mission 不清楚,或者 MISSION.md 还没有填,Agent 的第一件事是追问用户为什么学。SKILL.md#L71-L79

这段逻辑很强:没有 mission,知识获取就没有现实目标,lesson 会变抽象,Agent 也无法判断下一步教什么。SKILL.md#L77-L77

Mission 还会变化。用户学着学着发现自己真正关心的不是原来的目标,teach 要更新 MISSION.md,并添加 learning record 记录这次变化,但必须先向用户确认。SKILL.md#L79-L79

这里的边界很重要。Agent 可以发现 mission 变化,但不能擅自替用户改人生目标。长期状态一旦改变,必须经过用户确认,并留下记录。

Zone Of Proximal Development:下一课由状态算出来

Zone Of Proximal Development 这节给出了下一课选择协议:用户可以指定想学什么;如果没有指定,Agent 要读 learning-records,结合 mission,选择最适合用户当前发展区的内容。SKILL.md#L81-L89

这就是为什么前面的 learning records 不是日志。它们要服务下一课计算。没有 learning records,Agent 只能猜用户水平;有了 records,Agent 可以知道哪些概念已经真的掌握、哪些误解已经修正、哪些先验知识不必重教。

LEARNING-RECORD-FORMAT.md 对这个状态的门槛很严。learning record 只在用户展示了真正理解、披露已有知识、纠正误解,或 mission 因学习发生变化时写。LEARNING-RECORD-FORMAT.md#L29-L43 只是“讲过”不算,session 活动日志也不算。

所以 teach 不是让 LLM 根据经验判断“用户应该懂了”。原 skill 没有列出一组固定提问模板,但它要求 lesson 通过 interactive feedback loop 练 skill,并让用户获得反馈;LEARNING-RECORD-FORMAT.md 又要求“等证据”,比如用户答对问题、完成练习、说明已有经验后,才写 record。SKILL.md#L93-L108LEARNING-RECORD-FORMAT.md#L21-L23

前面那些“复述、练习、迁移到新例子、指出误解、说明已有知识深度”,是把这个要求落成可执行提问的方式,不是原文逐条规定。Agent 可以这样收集证据:让用户用自己的话解释一个概念;给一个小练习看用户能不能完成;换一个新例子看用户能不能迁移;故意给一个错误说法让用户判断;当用户说“我已经知道 X”时追问他知道到什么程度。record 记录的也不是“今天学了 X”,而是“用户已经能正确使用 X,这会让下一课可以跳过 Y 或进入 Z”。如果证据可能被以后质疑,就补 Evidence;如果它会改变后续教学路径,就补 ImplicationsLEARNING-RECORD-FORMAT.md#L17-L36

这让 learning record 成为学习版 ADR。它保存的是会影响未来教学的决策级事实,不是课堂流水账。后来的理解如果推翻早期记录,也不直接删除,而是标记 superseded。LEARNING-RECORD-FORMAT.md#L44-L46

Knowledge、Skills、Wisdom:三种教学动作

后半部分把 Philosophy 的三分类展开成具体动作。

原 skill 给出的判断方式不是一张分类表,而是看“学习对象从哪里来、靠什么获得、由谁验证”。Knowledge 是可以从高信任资源中获得的内容,比如概念、术语、规则、原理和操作前置知识;Skills 是用户必须亲自练出来的能力,比如判断、写作、操作、选择策略;Wisdom 是只能在真实环境和共同体里慢慢校准的判断,比如什么场景该妥协、业内怎么评价、真实用户会不会接受。SKILL.md#L24-L32

所以三者的教学设计不同。教 Knowledge 时,Agent 的任务是找可信材料、降低理解难度、只讲掌握 skill 所必需的部分;教 Skills 时,Agent 的任务是设计互动练习、让用户输出、给即时反馈;遇到 Wisdom 时,Agent 可以先帮助分析,但最终要把用户连接到高信誉社区、真实实践或真人反馈,而不是假装自己能独立给出权威判断。SKILL.md#L91-L120

这样分层的原因是:三类学习的失败模式不同。Knowledge 的失败是材料不可信、讲太多、压垮工作记忆;Skills 的失败是只听懂但不会做,所以必须练;Wisdom 的失败是脱离真实世界,Agent 在对话里说得通,但经不起真实社群、真实用户或真实场景校验。teach 把它们拆开,是为了让 Agent 不把所有教学都做成解释文本。

Knowledge 节说,lesson 应该围绕用户要学会的 skill 设计,知识只教获得这个 skill 所必需的部分;先教知识,再让用户通过 interactive feedback loop 练 skill。SKILL.md#L91-L97

这里的材料链条应该是:先读 MISSION.md 确定用户为什么学,再查 RESOURCES.md 是否已有可信来源;如果没有,就回到前面的资源侦查,而不是用模型记忆补空。lesson 里的知识点要带引用,最好还推荐一个最值得用户读或看的 primary source。SKILL.md#L57-L60 这样,lesson 不是 Agent 自己“讲得像真的”,而是把可信材料加工成当前用户能练的一小步。

这句话很容易被忽略。它不是让 Agent 做百科解释,而是要求知识服务技能。知识获取阶段,difficulty 是敌人,因为它会吃掉理解所需的工作记忆。SKILL.md#L97-L97

Skills 节反过来说,技能学习里 difficulty 是工具。effortful retrieval 才会建立 storage strength。技能应该通过 interactive lessons、quiz、轻量浏览器任务、真实步骤练习来获得,并且必须有尽可能紧的 feedback loop。SKILL.md#L99-L110

这一正一反,是 teach 里很锋利的设计。知识阶段要降低难度,技能阶段要引入合适难度。一个教学 Agent 如果只会“解释得更简单”,就无法教技能;如果一上来就加难度,又会压垮知识理解。

Wisdom 节把边界再推出学习环境之外。智慧来自真实世界互动,用户需要在社区、论坛、线下课程或兴趣小组中测试自己的技能。SKILL.md#L112-L120

这也是 teach 的自知之明。Agent 可以尝试回答 wisdom 问题,但最终要把用户连接到 community。如果用户不想加入社区,Agent 要尊重并记录。SKILL.md#L116-L120

Reference Documents 和 NOTES:长期复用与个人偏好

Reference Documents 节解释 reference/*.html 的角色。lesson 很少被反复重读,reference 会;reference 应该是 lesson 的压缩精华,用于快速查阅。SKILL.md#L122-L136

这让学习材料分成两种寿命。lesson 负责一次学习体验,reference 负责未来检索。语法、算法、流程图、动作序列、glossary 都适合沉淀成 reference;glossary 一旦建立,后续 lesson 都要遵守它。SKILL.md#L128-L136

NOTES.md 则保存用户偏好和工作笔记。SKILL.md#L138-L140 它不像 mission 那样决定学习方向,也不像 learning record 那样证明理解进展,但它会影响教学方式。比如用户偏好短练习、不喜欢视频、希望先看例子后看定义,这些都应该进入 notes。

teach 自己还原它的设计

按原文顺序读下来,teach 的生成逻辑很清楚。

先用 frontmatter 限定调用方式:这是用户主动进入的 workspace 教学,不是模型自动触发的口吻修饰。再用第一句话限定任务性质:多 session、stateful。然后立刻定义 Teaching Workspace,把学习状态拆成 mission、resources、learning records、lessons、assets、reference 和 notes。

工作区之后,才进入教学哲学:学习由 knowledge、skills、wisdom 三种对象组成;真正目标是 storage strength,不是当场 fluency。这个哲学再落到主产物 lesson:短、美、可完成、有 tangible win、绑定 mission、处在发展区、引用可信资源、链接 reference。

lesson 之外,assets 负责复用,mission 负责方向,learning records 负责下一课计算,reference 负责长期查阅,notes 负责个人偏好。整套 skill 不是一段教学风格提示,而是一台学习状态机。

如果要写类似 skill,不能从“请当一个好老师”开始。应该从这几个问题开始:学习是否跨 session,状态放在哪里,可信知识从哪里来,用户当前水平如何被记录,一课多大,练习如何形成 feedback loop,哪些材料会长期复用,哪些决策必须回到用户确认。

代价和边界

teach 很完整,也因此很重。它适合长期学习,不适合一次性解释。如果用户只是问一个概念,启动 mission、resources、learning records、lessons、assets 和 reference 会过度设计。

它也依赖用户愿意把学习当作项目经营。mission 要被维护,resources 要被筛选,learning records 要基于证据写入。用户如果只想临时问答,这套机制会显得笨重。

另一个边界是反馈。teach 要求 tight feedback loop,但不同主题能自动反馈的程度不同。编程练习可以自动验证,瑜伽动作可能需要真人教练,写作能力则需要真实读者反应。skill 可以要求反馈,但不能假装所有反馈都能由 Agent 独立完成。

这正是它最值得学的地方。teach 没有把学习简化成聊天,而是让学习获得可恢复的状态、可信的资源、可复用的材料和真实的反馈边界。只有这些都存在,Agent 才能从一次解释,变成长期学习伙伴。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐