teach
在本工作区内教用户学习新技能或新概念。适用于用户想要学习某个主题、请求教学指导的场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
在本工作区内教用户学习新技能或新概念。适用于用户想要学习某个主题、请求教学指导的场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
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用户有时会表达他们希望如何被教学,或者你需要记住的一些注意事项。这里就是记录这些偏好的地方,以便你在设计课程或与用户互动时可以回头参考。