teach
在本工作区内教用户学习新技能或新概念。适用于用户想要学习某个主题、请求教学指导的场景。
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Menü
在本工作区内教用户学习新技能或新概念。适用于用户想要学习某个主题、请求教学指导的场景。
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Basierend auf der SOC-Berufsklassifikation
Manage git submodules for the learning-open-code mono-repo. Use when the user wants to: (1) Add a new git submodule — auto-detect or specify the category (open-ai-skills/open-sdd/open-ai-agent/open-ai-desktop/open-knowledge/open-productivity/open-java/open-trading/open-data), record the tracking branch in .gitmodules, clone the repo, and update README.md index. (2) Sync all existing submodules to their configured branches (git fetch + checkout branch + pull). (3) Update the root README.md with an up-to-date index of all synced projects grouped by category. (4) Initialize submodules after git clone — when open-*/ directories are empty or git submodule status returns nothing, guide through the full SOP (git submodule update --init --recursive [--remote]). Trigger keywords: submodule, git submodule, 子模块, add submodule, sync submodule, update submodule, submodule branch, README index, 更新索引, clone, init, 初始化子模块, submodule init, 拉取子模块.
对开源项目进行穷尽式教学文档生成——从宏观架构到微观实现的五层分级讲解,使用 Goal Loop 算法自主驱动完整代码覆盖。所有具体教学内容生成必须激活 `.agents/skills/teach/SKILL.md`。触发条件:用户要求"完整学习某个项目"、"生成项目架构文档"、"从入口到落地讲清楚每个功能"、"代码考古"、"源码分析"、或指定一个项目目录/仓库要求全面教学。
使用并行子 agent 为模块生成多个截然不同的接口设计。当用户想要设计 API、探索接口选项、比较模块形态,或提到 "设计两次" 时使用。
交互式 QA 会话,用户以对话方式报告 bug 或问题,agent 将其录入 GitHub Issue。在后台探索代码库以获取上下文和领域语言。当用户想要报告 bug、做 QA、以对话方式录入 issue,或提及 "QA session" 时使用。
通过用户访谈创建包含微小提交的详细重构计划,并将其录入 GitHub Issue。当用户想要规划重构、创建重构 RFC,或将重构分解为安全的渐进步骤时使用。
从当前对话中提取 DDD 风格的通用语言词汇表,标记歧义并提出规范术语。保存到 UBIQUITOUS_LANGUAGE.md。当用户想要定义领域术语、构建词汇表、固化术语、创建通用语言,或提到 "领域模型" 或 "DDD" 时使用。
| name | teach |
| description | 在本工作区内教用户学习新技能或新概念。适用于用户想要学习某个主题、请求教学指导的场景。 |
用户请求你教他们一些东西。这是一个有状态的请求——他们打算通过多个会话学习这个主题。
所有教学持久化内容存放在工作区根目录下的 teach/ 目录中。采用两级结构:
teach/<path>/ —— 对应一个逻辑开源项目。通常是 .gitmodules 中的单个 path,但当多个子模块属于同一系统时,使用它们的公共父目录作为项目根teach/<path>/<topic-teach>/ —— 该项目下的一个教学主题.gitmodules 中部分条目是对同一系统的拆分(如前/后端分离、多端 SDK),它们共享一个公共父目录。教学时应以逻辑项目为单位,而非逐个 submodule 独立教学。
识别规则: 扫描 .gitmodules 中所有 path,如果多个条目共享同一父目录(例如 open-java/RuoYiVuePlus/ruoyi-vue-plus、open-java/RuoYiVuePlus/ruoyi-vue、open-java/RuoYiVuePlus/ruoyi-react),则该父目录即为逻辑项目 <path>。
.gitmodules 中与该项目匹配的所有条目<path>(例如 open-java/RuoYiVuePlus)path 作为 <path>teach/<path><topic-teach>teach/<path>/<topic-teach>/.gitmodules 中找不到对应项目,与用户确认后再创建目录示例:
| 用户想学 | .gitmodules 中的条目 | <path>(逻辑项目) | 教学主题 | 教学根目录 |
|---|---|---|---|---|
| matt-pocock-skills 的 XState | 单个子模块 open-ai-skills/matt-pocock-skills | open-ai-skills/matt-pocock-skills | xstate | teach/open-ai-skills/matt-pocock-skills/xstate/ |
| claude-code 的插件系统 | 单个子模块 open-ai-agent/claude-code | open-ai-agent/claude-code | plugin-system | teach/open-ai-agent/claude-code/plugin-system/ |
| RuoYiVuePlus 的权限模型 | 3 个子模块共享父目录 open-java/RuoYiVuePlus/ | open-java/RuoYiVuePlus | permission-model | teach/open-java/RuoYiVuePlus/permission-model/ |
| RuoYiVuePlus 的前端架构 | 同上(同一逻辑项目) | open-java/RuoYiVuePlus | frontend-arch | teach/open-java/RuoYiVuePlus/frontend-arch/ |
index.md每个 teach/<path>/ 项目根目录下维护一个 index.md,用于索引该项目下的所有教学主题。格式如下:
# {项目名} 教学索引
## 教学主题
| 主题 | 路径 | 描述 |
|------|------|------|
| 插件系统 | `./plugin-system/` | Claude Code 插件注册、hooks 生命周期与沙箱模型 |
| 工具链 | `./toolchain/` | Tool 定义、权限模型、审批流程与 BashTool 实现 |
规则:
index.md。index.md 中是否已有相似主题:
index.md 中为两个主题添加交叉引用说明./<topic-teach>/ 相对路径。项目首次教学(teach/<path>/ 不存在):
teach/<path>/
└── index.md
主题首次教学(teach/<path>/<topic-teach>/ 不存在):
teach/<path>/<topic-teach>/
├── SNAPSHOT.md
├── MISSION.md
├── RESOURCES.md
├── NOTES.md
├── learning-records/
├── lessons/
├── reference/
└── assets/
创建主题目录后,立即更新 teach/<path>/index.md,新增该主题的索引条目。
💡 自动化脚本:使用
scripts/init_topic.sh <project-path> <topic-slug>一键创建目录结构、占位文件并更新 index.md。
主题目录创建后只是脚手架,不能视为完成。标记主题完成前必须满足:
MISSION.md 已写入真实使命;批量生成模式可使用默认使命,但不得保留 {主题}、{……} 等占位符。RESOURCES.md 已写入真实资源;源码入口、README、官方文档、测试目录都可以作为知识资源,找不到外部社区时必须在 ## 空白 写明原因。SNAPSHOT.md 已在课程和参考文档生成后运行 scripts/generate_snapshot.py <topic-path> 填充,不得保留 generate_snapshot.py 将自动填充。lessons/ 下至少有 1 个 HTML 课程。reference/ 是辅助速查资料,不能替代课程。scripts/audit_topic.py <topic-path> 通过;项目级批量检查用 scripts/audit_topic.py <project-path> --all。每个教学主题目录下的 SNAPSHOT.md 记录课程生成时所基于的源项目 git 版本和参考文件清单。当源项目更新后,用它作为 diff 基准,识别哪些课程需要更新。
💡 自动化脚本:使用
scripts/generate_snapshot.py <topic-path>自动提取课程引用、获取 git 版本、生成 SNAPSHOT.md。 批量处理:scripts/generate_snapshot.py <project-path> --all
首次生成课程时,在创建 teach/<path>/<topic-teach>/ 目录后,立即生成 SNAPSHOT.md:
采集源项目 git 版本:
git -C <源项目路径> rev-parse HEAD # 完整 commit hash
git -C <源项目路径> rev-parse --abbrev-ref HEAD # 分支名
如果源是子模块(只读副本),git -C 无法获取远程信息,则用子模块记录的分支/commit 作为近似值:
git -C <工作区根目录> ls-tree HEAD <子模块path>
记录课程和参考文档引用的源文件——列出所有被课程或参考文档分析、引用、摘录的源文件路径及用途说明。
写入 SNAPSHOT.md,格式如下:
# 课程快照:{主题名}
## 源项目信息
- **仓库路径**:`open-java/RuoYiVuePlus`
- **Git Commit**:`abc123def456789...`(完整 hash)
- **短 Commit**:`abc123d`
- **分支**:`master`
- **快照时间**:2026-07-06T15:30:00+08:00
## 课程引用的源文件
| 源文件路径 | 用途 | 关键度 |
|-----------|------|--------|
| `ruoyi-admin/src/.../AuthController.java` | 认证控制器全链路分析 | 🔴 核心 |
| `ruoyi-admin/src/.../IAuthStrategy.java` | 策略接口设计分析 | 🔴 核心 |
| `ruoyi-common/.../RedisUtils.java` | 缓存工具类参考 | 🟡 辅助 |
## 已生成课程
| 编号 | 课程文件 | 描述 |
|------|---------|------|
| 01 | `lessons/01-springboot-startup.html` | Spring Boot 启动流程分析 |
| 02 | `lessons/02-strategy-pattern.html` | 策略模式在认证中的应用 |
## 快照摘要
- 课程数:4
- 引用源文件数:12
- 学习记录数:3
💡 自动化脚本:使用
scripts/check_updates.py <topic-path> [-v]自动对比快照版本与当前 HEAD。 批量检测:scripts/check_updates.py <project-path> --all [-v]
当用户告知源项目已更新(如 git pull 了子模块),按以下流程判断课程是否需要更新:
teach/<path>/<topic-teach>/SNAPSHOT.md,获取上次记录的 Git Commitgit -C <源项目路径> rev-parse HEAD
git -C <源项目路径> diff --name-only <旧commit>..HEAD -- <快照中列出的源文件路径>
Git Commit 更新为当前 HEAD,重新记录引用文件清单教学根目录(teach/<path>/<topic-teach>/)即为当前教学工作区。用户的学习状态记录在此目录中的几个文件中:
MISSION.md:一份记录用户对该主题感兴趣 原因 的文档。所有教学都应当以此为基础。使用 MISSION-FORMAT.md 中的格式。./reference/*.html:参考资料目录。这些是课程中提炼出的学习要点——速查表、参考算法、语法、瑜伽体式、词汇表。它们是学习的原始单元。它们应该是美观的文档,打印效果好,专为快速查阅而设计。RESOURCES.md:一份资源列表,可供探索以为教学提供上下文知识,或获取知识与智慧。使用 RESOURCES-FORMAT.md 中的格式。./learning-records/*.md:学习记录目录,记录用户学到的东西。它们大致相当于软件开发中的架构决策记录(ADR)——记录那些非显而易见的经验教训和关键洞察,这些内容可能以后需要修正,或推动未来的学习会话。它们用于计算最近发展区。文件命名格式为 0001-<短横线命名>.md,编号每次递增。使用 LEARNING-RECORD-FORMAT.md 中的格式。./lessons/*.html:课程目录。一节课是一个独立、自包含的 HTML 输出,教授与使命紧密相关的一项内容。这是本工作区的主要教学单元。./assets/*:课程间共享的可复用组件。参见资产。NOTES.md:一个便签本,供你记录用户偏好或工作笔记。要深度学习,用户需要三样东西:
在 RESOURCES.md 充实之前,你的重点应该是寻找能帮助用户获取知识的高质量资源。永远不要相信你自己的参数化知识。
有些主题可能更偏重技能而非知识。学习理论物理可能更偏重知识。而瑜伽则更偏重技能。
你应当注意区分两种学习类型:
流畅度可能给用户一种虚假的掌握感,但存储强度才是真正的目标。尝试通过合意难度来设计能建立长期保持的课程:
课程是你生产的主要内容——是知识和技能触达用户的单元。每节课是一个自包含的 HTML 文件,保存在 ./lessons/ 中,文件命名格式为 0001-<短横线命名>.html,编号每次递增。
课程应当美观——干净、可读的排版和布局——因为用户以后会回头复习。想想 Tufte 的设计理念。
课程应当简短,能够很快完成。学习者的工作记忆非常有限,我们需要控制在其容量之内。但每节课都应该给用户一个可以继续积累的、切实的收获。课程应当与使命直接相关,并且处于用户的最近发展区内。
每节 lesson 必须是 15 分钟内可完成的短课,而不是源码百科页。按以下规则写:
lessons/0001-flow-map.html、lessons/0002-entry-dispatch.html、lessons/0003-error-path.html。reference/*.html,lesson 只保留达成本节学习目标所需的材料。如果你发现自己正在写一篇覆盖 5 个以上源码文件、多个异常路径或多个设计决策的课,立即停止扩写,改为创建 lesson manifest,把内容拆成多节短课。
如果可能,通过运行 CLI 命令为用户打开课程文件。
每节课应通过 HTML 锚点链接到其他课程和参考文档。
每节课应推荐一个主要来源供用户阅读或观看。这应该是你找到的关于该主题质量最高、可信度最高的资源。
每节课应包含提醒,让用户向 agent 追问后续问题。agent 是他们的老师,可以帮助解答任何不清楚的地方。
课程中展示项目结构、模块骨架时,必须使用规范的文件树格式——使用 Unicode 方框绘制字符、逐层展开、注释对齐。严禁:(1)将多级路径压缩在一行(如 ├── system/api/ ← 说明),(2)嵌套超过 5 层导致 │ │ │ ├── 前缀堆积。
📖 完整规范:详见 references/TREE-FORMAT.md —— 包含字符集速查、正确/错误示例对比、深度超标拆分策略、HTML/CSS 强制要求、检查清单。
课程由可复用的组件构建,存储在 ./assets/ 中:样式表、测验小部件、模拟器、图表辅助工具——任何另一节课可以复用的东西。
复用是默认选择,而非例外。在编写课程之前,先阅读 ./assets/ 并基于已有的组件构建。当课程需要新的可复用内容时,将其编写为 ./assets/ 中的组件并链接到它——永远不要内联代码,以免未来的课程重复编写。
共享样式表是每个工作区获得的第一个组件:每节课都链接它,这样课程看起来像一个一致的系列,而不是一堆零散的单页。随着工作区的成长,组件库也应随之成长。
每节课都应与使命紧密相连——即用户对学习该主题感兴趣的深层原因。
如果用户对使命不清楚,或者 MISSION.md 尚未填写,你的首要任务应该是询问用户为什么想学这个。
未能理解使命将意味着知识获取没有扎根于真实世界的目标。课程会感觉过于抽象。你将无法判断用户接下来该做什么。
随着用户发展出更多技能和知识,使命可能会变化。这是正常的——确保更新 MISSION.md 并添加一条学习记录来记录这个变化。在修改使命之前与用户确认。
每节课,用户应该始终感觉被"恰好"地挑战。
用户可能会指定他们想学的确切内容。如果没有,通过以下方式确定他们的最近发展区:
learning-records课程应围绕用户将要学习的技能来设计。课程中的知识应当仅限于习得该技能所需的内容。先教知识,然后通过互动反馈循环让用户练习技能。
知识应首先从可信资源中收集。使用 RESOURCES.md 来跟踪它们。课程中应当遍布引用——链接到外部资源来支撑任何声明。这增加了课程的可信度。
对于知识获取,难度是敌人。它会消耗你理解所需的工作记忆。
如果说知识的关键是获取,那么技能的关键则是持久性和灵活性。让知识扎根。
对于技能习得,难度是工具。费力的检索才能建立存储强度。技能应通过互动课程来教授。你有以下几种工具可用:
每一项都应基于反馈循环,用户对其表现获得反馈。这个反馈循环应尽可能紧凑,立即给出反馈——并且最好是自动化的。
对于测验,每个答案的单词数应完全相同(如果可能,字符数也应相同)。不要通过格式给用户任何关于答案的线索。
智慧来自真正的现实世界互动——在学习环境之外检验你的技能。
当用户提出看似需要智慧的问题时,你的默认姿态应该是尝试回答——但最终要委托给社区。
社区是一个用户可以在现实世界中检验技能的地方(线上或线下)。可以是一个论坛、一个 subreddit、一个现实世界课程(预算允许的话)或一个本地兴趣小组。
你应当尝试寻找用户可以加入的高声誉社区。如果用户表达不愿加入社区的偏好,请尊重。
在创建课程的同时,你还应该创建参考文档。课程可以引用这些文档——它们对于追踪可在多节课中使用的原始知识单元非常有用。
课程以后很少会被回顾——参考文档会被反复查阅。它们应该是课程的精炼精华,采用专为快速查阅而设计的格式。
一些学习主题天然适合参考形式:
词汇表尤其是一个必不可少的参考。一旦创建,就应该在每节课中严格遵守。
NOTES.md用户有时会表达他们希望如何被教学,或者你需要记住的一些注意事项。这里就是记录这些偏好的地方,以便你在设计课程或与用户互动时可以回头参考。