Skip to main content

teach-hermes

在 Telegram 异步环境中跨会话、有状态地教用户一门技能或概念,为长期储存(将来用得上)而非当下流畅(此刻学会)设计:使命锚定每节课、ZPD 校准难度、知识阶段降认知负荷/技能阶段加困难、只在有理解证据时写学习记录、cron 主动间隔复习推送。课程为 Markdown,工作区为 Obsidian vault,quiz 异步批改。使用时机:用户表达长期、多次的学习意图——教我 X、带我系统学 X、我想长期学 X、teach。DO NOT use for:一次性事实查询(「Box 是什么」)、使命怎么问都说不清、纯娱乐性浏览——这些走普通问答,不进教学模式。触发词:教我、带我学、我想系统学、长期学、teach。

Jump to install

Source facts

Repository
Loveacup/jz-skills
Last source activity
June 18, 2026 at 11:50
Detected SKILL.md language
Chinese
Stars
1
Forks
1

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
teach-hermes
description
在 Telegram 异步环境中跨会话、有状态地教用户一门技能或概念,为长期储存(将来用得上)而非当下流畅(此刻学会)设计:使命锚定每节课、ZPD 校准难度、知识阶段降认知负荷/技能阶段加困难、只在有理解证据时写学习记录、cron 主动间隔复习推送。课程为 Markdown,工作区为 Obsidian vault,quiz 异步批改。使用时机:用户表达长期、多次的学习意图——教我 X、带我系统学 X、我想长期学 X、teach。DO NOT use for:一次性事实查询(「Box 是什么」)、使命怎么问都说不清、纯娱乐性浏览——这些走普通问答,不进教学模式。触发词:教我、带我学、我想系统学、长期学、teach。
type
routine
version
0.2.0
author
Alex × Hermes Agent
license
MIT
platforms
["linux","macos"]
metadata
{"hermes":{"tags":["teaching","learning","obsidian","async","spaced-repetition","cron"],"stateful":true,"workspace":"20-Areas/学习/_topics/{topic-slug}","orchestrates":["obsidian","obsidian-md-ac","reply-context-retrieval","cron-worker"]}}
# Teach(异步教学)v0.2 为长期记忆而设计的有状态教学 skill。把「教一个人」从一问一答的无状态对话,重写成可追溯、跨会话、为储存强度服务的工程过程。**编排型 skill**:文件 IO 交给 `obsidian`,自己只管教学逻辑。 ## 🚨 Red Flags — 看到自己在这么想,立即停手 | 你可能的借口 | 为什么错 → 正确动作 | |:---|:---| | 「用户随口问了一句,正好开课教他」 | teach 是重状态、跨会话的承诺。一次性提问走普通问答 → **只在用户表达长期/多次学习意图时才触发**。 | | 「使命用户说得含糊,先开课边教边明确」 | 坏使命比没使命更糟,会带偏后面**所有**课程 → **先别开课**,追问「为什么学」直到收敛成一句具体的话。 | | 「这轮聊得不错,记一条 learning record」 | 流水账会淹没信号、让 ZPD 算不准 → **只在有理解证据时写**(见「四写四不写」)。 | | 「quiz 选项长短不一无所谓,能测就行」 | 不等长会泄露格式线索,学习者靠「最长的通常对」绕过检索,储存强度练不到 → **每个选项等长、无线索**。 | | 「知识点多,一条消息全发给他」 | 知识阶段一次塞太多=把新手按进水里(认知负荷爆表)→ **拆 2–4 条短消息,一条一个点**。 | | 「用户几天没回复,催一下」 | 间隔效应是白送的认知科学利器,延迟回答=正在巩固储存强度 → **不催、不追、不提醒**。cron 复习和用户回复是两条独立轨道。 | ## 方法论内核(30 秒锚定,详见 [[teach-skill-教学方法论]]) **使命锚定 + ZPD 校准 + 困难的辩证 + 理解留痕 + 间隔复习 → 可迁移的长期能力** - **流畅 ≠ 储存**:「刚学完感觉懂了」是危险信号不是成功信号。目标是几周后还能独立调出来用。 - **困难的辩证(手术刀)**:==知识获取阶段,困难是敌人==(降认知负荷、扫清障碍);==技能获取阶段,困难是工具==(故意加阻力、逼检索)。分清当前在哪个阶段,是好老师和差老师的分水岭。 - **异步是特性不是缺陷**:用户隔很久才答题是**好事**(间隔效应+延迟反馈,认知科学里最贵的两样,Telegram 白送)。不要因延迟而催促。 - **cron 间隔复习**:被动等用户来复习 → 遗忘。主动按遗忘曲线推送间隔复习 → 储存强度持续攀升。cron 只管推送,不管批改——用户回复后走正常 quiz 批改流程。 ## 决策树 — 触发后第一步永远是查状态 ```mermaid flowchart TD A["用户触发 teach {主题}"] --> B{"vault 里已有<br/>该主题 workspace?"} B -->|无| C["开局:使命澄清<br/>追问「为什么学」"] C --> C2{"使命收敛成<br/>一句具体的话?"} C2 -->|否| C C2 -->|是| D["写 MISSION.md + LR-0001<br/>+ 创建 cron 复习 job"] B -->|有| E["续上:读 MISSION<br/>+ 最新 learning record"] E --> F["算出当前 ZPD"] D --> F F --> G["选下一节:落在 ZPD 内<br/>且与使命最相关的一件事"] G --> H["开课(先知识后技能)"] ``` ## 运行时适配 & 编排的 skill(v0.2) | skill | 在 teach 里的角色 | 调用时机 | |:---|:---|:---| | `obsidian` | workspace 文件读写、路径解析、wikilink | 全程 | | `obsidian-md-ac` | 写规范 Obsidian Markdown | 生成课程与记录时 | | `reply-context-retrieval` | 异步 quiz 定位「在答哪道题、哪个主题」 | 多主题并行、收到延迟回复时 | | `cron-worker` | 创建/管理间隔复习 cron job | 新主题开课时建 job;停课时删 job | > v0.2 **新增 `cron-worker`**:每个主题一个 daily cron job,扫描 learning-records 日期、按 SM-2 简易间隔推送复习 quiz。 ## Workspace 结构(v0.2) 每个主题一个目录,**严格隔离在 `学习/_topics/` 命名空间下**: ``` 20-Areas/学习/_topics/{topic-slug}/ ├── MISSION.md # 一句话使命 + 成功的样子 + 约束 + 不在范围内 ├── RESOURCES.md # 策展可信来源(Knowledge / Wisdom 两组) ├── NOTES.md # 用户偏好:节奏、风格、不想进社区等 ├── REVIEWS.md # 间隔复习日志:日期 + 考的哪几条 LR + 结果 ├── lessons/ │ ├── 0001-借用与可变借用.md # Markdown 课程,序号命名 │ └── 0002-生命周期标注.md ├── reference/ │ └── GLOSSARY.md # 术语表,课程和复习的权威参考 └── learning-records/ ├── 0001-已会基础语法.md # 教学版 ADR,只追加、按序编号 └── 0002-理解了所有权转移.md ``` ### 文件规格 **RESOURCES.md** — 策展的高信任来源,不是书签堆。格式: ```markdown ## Knowledge(知识来源) - [资源名](URL) — 一句话:覆盖什么、何时用 ## Wisdom(社区) - [社区名](URL) — 一句话:活跃度 + 适合问什么 ## Gaps(缺口) - 缺少什么、为什么需要 ``` 规则:高信任优先;每条必须注解;宁少勿滥;错了就删。 **reference/GLOSSARY.md** — 术语权威定义,课程和复习的单一真相源。格式: ```markdown ## 术语 - **术语**:一句话定义。首次出现于 L{NNNN}。 ``` 规则:创建后,课程和 quiz 中的术语定义必须和此处一致。 **NOTES.md** — 草稿本,记用户偏好(节奏、风格、不想进社区等),不参与教学逻辑。 **REVIEWS.md** — cron 复习的 append-only 日志。格式:`YYYY-MM-DD | 复习 LR-NNNN, LR-NNNN | 通过/部分通过/未通过` ## 执行流程 ### 1. 检查 / 创建 workspace 经 `obsidian` 查 `20-Areas/学习/_topics/{topic-slug}/` 是否存在。有 → 走「续上」;无 → 走「开局」。topic-slug 用主题的简短 kebab/中文短名。 ### 2a. 开局:使命澄清(仅新主题) - 追问「**你为什么要学这个?**」——要的是具体动机,不是宽泛愿望。 - 用户含糊(「想学好 Rust」)→ **怼回去**,逼到具体(「能预判借用检查器、不再靠瞎改通过编译」)。说不清就**别开课**。 - 收敛后写 `MISSION.md`(`# 为什么` / `# 成功的样子` / `# 约束` / `# 不在范围内`,**不超过一屏**——超过就成了大纲),并写 `LR-0001` 记录使命与任何已披露的基础。 - ⚠️ **v0.2 新增**:使命确定后,**立即创建间隔复习 cron job**(见「Spaced Repetition」节)。 ### 2b. 续上:读记录算 ZPD(已有主题) 读 `MISSION.md` + 最新几条 learning record,推断当前 ZPD(独立能做 ↔ 协助能做 之间的甜区)。**ZPD 不是拍脑袋,是从学习轨迹读出来的。** ### 3. 选课 → 发知识(降认知负荷) - 选**落在 ZPD 内、且与使命最相关**的一件事。一节课 = 一个看得见的小胜利。 - 先给**最小必要知识**,拆成 **2–4 条短消息**(适配手机屏),一条一个点,绝不一次塞满。 - 课末给**追问钩子**:「有不懂的直接问我」。 - 课程经 `obsidian-md-ac` 规范后,由 `obsidian` 写入 `lessons/NNNN-*.md`。 ### 4. 异步 quiz(反馈循环,此处加困难) - 知识吃进去后转练习,**故意加阻力**:要求**凭记忆**作答(检索练习),别让用户翻看上文。 - **铁律:每个选项等长、不留格式线索**。能开放式作答(让用户自己写出答案)就更好——叠加生成效应。 - 技术主题让用户**实际写代码/跑命令**把结果贴回;非技术主题做一个真实动作回报。 - 用户**延迟回答是好事,不催**。下一轮收到回复时批改:多主题并行 → 先用 `reply-context-retrieval` 定位是哪道题、哪个主题、ZPD 到哪。 - 批改给出对错 + **为什么**,不只是判分。 ### 5. 捕捉理解证据 → 写 learning record 仅当出现下方「四写」之一,经 `obsidian` 追加 `learning-records/NNNN-slug.md`。**只追加、按序编号、不改写。** ### 6. v0.2 新增:Spaced Repetition(间隔复习) **为什么**:被动等用户想起复习 = 遗忘。主动按记忆曲线推送 = 储存强度叠加。 **机制**:每个主题一条 daily cron job。 #### Cron Job 规格 | 属性 | 值 | |:---|:---| | schedule | `0 10 * * *`(每日 10:00) | | deliver | 当前 Telegram chat | | profile | default | | skills | `[teach, obsidian, obsidian-md-ac]` | | 工作目录 | Obsidian vault | #### Cron 每次运行的决策逻辑 ``` 1. 扫描 20-Areas/学习/_topics/*/MISSION.md → 列出活跃主题 2. 对每个活跃主题: a. 读 REVIEWS.md + learning-records/(拿日期) b. 找尚未复习的 learning record,按创建日期算间隔: - 第 1 次复习:LR 创建日后 +1d - 第 2 次复习:上次复习后 +3d - 第 3 次:+7d - 第 4 次:+14d - 第 5 次:+30d(封顶) c. 筛选出「到期且今天还没复习过」的 LR d. 对这些 LR 涉及的课程内容,生成 1–3 道 mini quiz 3. 如果没有到期的 → 静默退出(不发消息) 4. 如果有到期的 → 向用户发送复习消息 ``` #### 复习消息格式 每个主题一条消息,最多发 2 个主题: ``` 🧠 复习时间!{主题名} {mini quiz 1} {mini quiz 2} (凭记忆回答,别翻笔记 😤) ``` #### 批改流程 - cron 只负责推送,**不批改**——批改是下次用户回复时 interactive session 的事。 - 用户回复后,走 v0.1 的 quiz 批改流程(步骤 4)。 - 批改完成后**追加 REVIEWS.md**:`日期 | 复习 LR-NNNN | 结果` #### 边界规则 - 同一 LR 在同一天内只推一次(查 REVIEWS.md 去重)。 - 如果用户的响应比 cron 推送先到,优先响应真人,cron 复习顺延到下一次。 - 用户明确说「暂停复习」→ 暂停该主题的 cron job(`cronjob action='pause'`)。 - 主题完结(用户说「学完了」)→ 删除 cron job(`cronjob action='remove'`)。 ## 学习记录:四写四不写 | ✅ 写(有理解证据) | ❌ 不写 | |:---|:---| | 用户演示了对非平凡内容的真正理解 | 只是「我讲过了」(等到有证据) | | 用户披露既有知识(「我已经会 X」) | 术语表/已有记录里已覆盖的 | | 一个误解被纠正了 | 逐次活动的流水账 | | 使命随学习发生了偏移 | 没有新信号的寒暄 | 被推翻的旧记录:标记「被 LR-NNNN 取代」,**保留不删**(像 ADR 一样留演进轨迹)。 ## 质量门(每节课开课前自检) - 这节课能**追溯回 MISSION**?追溯不回 → 别教。 - 落在 **ZPD** 内(跳一跳够得着,不无聊也不挫败)? - quiz **选项等长、无格式线索、要求凭记忆**? - 当前是知识阶段(**降**负荷)还是技能阶段(**加**困难)?别搞反。 - learning record **只追加不改写**,状态全在 vault 文件。 - ⚠️ v0.2 新增:**cron 复习 job 是否活跃**?新主题 → 已建 job;暂停 → 已记原因;完结 → 已删 job。 ## ✅ Verification Checklist(收尾前逐条核对) - [ ] workspace 落在 `20-Areas/学习/_topics/{slug}/`,没污染知识库正文 - [ ] `MISSION.md` 收敛成一句具体的话、不超过一屏(是指南针不是大纲) - [ ] 本节课可追溯回使命、且落在 ZPD 内 - [ ] quiz 每个选项等长、无格式线索、要求凭记忆作答 - [ ] 知识阶段拆短降负荷 / 仅在技能阶段加困难(没搞反) - [ ] learning record 只在有理解证据时写,按序号追加、未改写旧记录 - [ ] 所有文件经 `obsidian` 落地、经 `obsidian-md-ac` 规范、带 frontmatter - [ ] v0.2:cron 复习 job 状态正确(新主题已建 / 活跃 / 暂停有记录 / 完结已删) - [ ] v0.2:REVIEWS.md 追加了本次复习结果(如适用) ## v0.2 范围 **做**:v0.1 全部(课程+quiz+learning records)+ 间隔复习 cron 推送 + `RESOURCES.md` + `reference/GLOSSARY.md` + `NOTES.md`。 **不做**:Wisdom 社区委托(→ v0.5)、多主题交叉复习(→ v0.3)、复习间隔自适应调参(→ v0.3)。 --- **配套**:[[teach-skill-教学方法论]](认知科学基础)| [[hermes-teach-skill-设计方案]](完整编排架构与里程碑)
View on GitHub