<!-- title: 55万安装的teach：AI家教拆解 -->

# 总榜#42的teach：一个会记笔记、会出题、永不失忆的AI家教

## 概述

本期聚焦 mattpocock/skills 仓库中被忽视的一块拼图：总榜第42位、55.9万安装的 `teach`。前几轮已拆过同仓库的 grill-me、tdd、架构审查，本期补上最后一块，并顺带拆开支撑整个「 grill 家族」的 1872 字节原语 `grilling`、以及只有 433 字节的编排器 `implement`。本期核心发现有三个：一是 teach 把「目录即状态」的多会话学习工作区写成了规范，是 Skills 生态里少见的「长周期任务」范本；二是该仓库存在清晰的「用户指令层薄壳 + 模型自动调用层原语」双层架构，7 个 Skill 的 SKILL.md 不到 1KB；三是仓库用 `.out-of-scope/`、`in-progress/`、`deprecated/` 三个目录管理 Skill 生命周期，这本身就是一份 Skill 工程化模板。

## 本周榜单快照（skills.sh，2026-08-30 抓取）

| 排名 | Skill | 仓库 | 安装量 |
|---|---|---|---|
| 1 | find-skills | vercel-labs/skills | 320万 |
| 2 | grill-me | mattpocock/skills | 100万 |
| 3 | grill-with-docs | mattpocock/skills | 85.9万 |
| 4 | frontend-design | anthropics/skills | 83.5万 |
| 5 | improve-codebase-architecture | mattpocock/skills | 82.7万 |
| 6 | tdd | mattpocock/skills | 79.9万 |
| 7 | agent-browser | vercel-labs/agent-browser | 75.4万 |
| 8 | setup-matt-pocock-skills | mattpocock/skills | 73.6万 |
| 38 | grilling | mattpocock/skills | 57.8万 |
| 42 | teach | mattpocock/skills | 55.9万 |
| 71 | implement | mattpocock/skills | 45.8万 |

mattpocock 一个仓库占了前 8 名中的 5 席。但大多数分析都停在了 grill 家族，`teach` 这个 55.9 万安装的「非编码类」Skill 反而没人细看——它可能是整个仓库里提示词工程密度最高的一份文件。

## 评测对比表

| Skill | 功能完整度(25%) | 设计质量(25%) | 实战效果(20%) | 上手难度(15%) | 社区活跃度(15%) | 加权总分 |
|---|---|---|---|---|---|---|
| teach | ★★★★½ | ★★★★★ | ★★★★ | ★★★★ | ★★★★½ | 4.45 |
| grilling | ★★★★½ | ★★★★★ | ★★★★½ | ★★★★ | ★★★★½ | 4.55 |
| implement | ★★★★ | ★★★★½ | ★★★★ | ★★★★½ | ★★★★½ | 4.30 |
| code-review | ★★★★½ | ★★★★½ | ★★★★½ | ★★★½ | ★★★★½ | 4.40 |
| tdd | ★★★★½ | ★★★★½ | ★★★★½ | ★★★★ | ★★★★½ | 4.45 |

## 深度拆解：teach 的 SKILL.md 逐段精读

整个文件 9507 字节，frontmatter 一共五行：

```yaml
---
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?"
---
```

三个设计点值得放大。第一，`disable-model-invocation: true` 明确关掉了模型自动触发——学习是一个需要人主动发起的意图，不该由 Agent 猜测触发，这与仓库 README 里「user-invoked 只在你敲下命令时可达，职责是编排」的分层原则一致。第二，`argument-hint` 给命令补全提供参数提示，是新手最容易忽略、却直接影响命令行体验的字段。第三，description 里那句 "within this workspace" 是伏笔：teach 不是一次性问答，而是把当前目录变成持久化学习空间。

### 第一段：目录即状态

正文开篇直接定义了七个状态文件，这是全文的骨架：

- `MISSION.md`：记录用户「为什么想学」，所有教学以此为锚
- `./reference/*.html`：压缩后的速查手册（语法卡、体式图、术语表）
- `RESOURCES.md`：高信任度外部资源清单
- `./learning-records/*.md`：学习记录，编号 `0001-.md` 递增，文中明确说它「相当于软件开发里的架构决策记录（ADR）」，用来计算用户的最近发展区
- `./lessons/*.html`：课程本体，每课一个自包含 HTML，编号递增
- `./assets/*`：跨课程复用的组件库
- `NOTES.md`：记录用户偏好的草稿本

传统 Skill 解决的是「这一次对话怎么做」，teach 解决的是「跨十次对话怎么不忘」。文件编号递增、格式文件外置（`MISSION-FORMAT.md`、`RESOURCES-FORMAT.md`、`LEARNING-RECORD-FORMAT.md`、`GLOSSARY-FORMAT.md` 四个格式规范放在同目录，主文件只留行为逻辑），这套写法让 9.5KB 的主文件没有一句废话——这也是任何想写「有状态 Skill」的人最该抄的目录设计。

### 第二段：知识、技能、智慧三分法

teach 把学习拆成三种获取路径，且对「难度」的态度截然相反，原文是全文最漂亮的一组对仗：

> 知识获取阶段，难度是敌人——它会吃掉你理解所需的工作记忆。技能习得阶段，难度是工具——费力检索才能建立存储强度。

配合「流利度强度 vs 存储强度」的区分（现场能想起来 ≠ 长期记得住），它要求课程设计必须使用检索练习、间隔重复、交错练习三个手段。这不是普通提示词，是把认知科学结论直接编译成了 Agent 行为约束。

同段还有一句对 Agent 类产品极具杀伤力的硬规则：**"Never trust your parametric knowledge"**（永远不要相信你的参数化知识）——在 `RESOURCES.md` 填充完毕之前，第一优先级是去找高质量资源，而不是靠模型记忆开讲。这一句把幻觉风险前置堵死了。

### 第三段：课程即产品

对 lesson（课程）的规格定义占了相当篇幅，关键约束包括：

- 每课只教一个与任务（mission）强绑定的小东西，「学员的工作记忆很小，要待在里面」
- 排版要美，原文只给了一个人名作标杆："Think Tufte"
- 每课必须链接主资源、必须用 HTML 锚点互链其他课程、必须提醒学员可以追问
- 测验题有个近乎偏执的反作弊约束：**每道题的备选答案字数必须完全相同**——不给用户从格式上猜答案的任何线索

最后这条最能体现作者的提示词工程功力：他不是在写「请出好题」，而是在穷举「出题系统会怎样无意识地泄题」，然后把每条泄漏通道写成硬约束。

### 第四段：Assets——Skill 内的组件化

> 复用是默认，不是例外。写新课之前先读 `./assets/`，从已有组件里搭；当某个东西可复用，就写成组件放进去——绝不内联一段未来课程会重复的代码。

共享样式表被定义为「每个工作区挣到的第一个组件」，所有课程链它，于是十节课看起来是一门课，而不是十次一次性输出。把前端工程里的组件化思想搬进「AI 生成课程」场景，这是 teach 与其他「让 AI 教我东西」类提示词拉开代差的根本原因。

### 第五段：Mission、ZPD 与社区

剩下的段落处理三件事：mission 不明时先盘问用户再开课（否则课程「过于抽象，无从判断下一步」）；每节课的难度从 `learning-records` 反推，落在最近发展区；当用户问出需要「智慧」的问题时，Agent 的默认姿态是先答，但最终把用户推向真实社区（论坛、线下课、兴趣小组）——「智慧来自真实世界的检验」。一个 Skill 主动规划自己的退场，把自己定位成通往社区的脚手架，这种产品观在生态里极少见。

## 支线拆解一：grilling，1872 字节的引擎

榜单第 38 名的 `grilling` 是 grill-me（100万安装）背后真正的引擎，而 `grill-me/SKILL.md` 只有 **147 字节**——它做的事就是把用户引到 grilling 上。原语本身的算法性极强：

- 把所有待决策事项画成一棵**设计树**，每个决策的分叉挂在父决策下
- 每轮只问「前沿（frontier）」：所有前置条件已解决的问题，一次性编号问完，附推荐答案，然后停
- 用户回答改变树形 → 重算前沿 → 下一轮
- 硬性分工：**「找事实是你的工作，永远不是用户的」**——需要查文件系统的问题派子代理去查，只有「决策」才配问用户

结束条件被定义为可判定的状态：「前沿为空：设计树每个分支都被访问过，没有留下任何默认假设」。把「需求澄清」这种玄学任务改写成有明确终止条件的图遍历算法，这是 1872 字节能撑起百万级安装的原因。

## 支线拆解二：implement，433 字节的编排器

`implement/SKILL.md` 全文六行：按 spec/tickets 实现 → 在预约定的接缝处用 `/tdd` → 常态跑类型检查和单文件测试 → 最后跑全量测试 → 用 `/code-review` 审查 → 提交。它自己不包含任何领域知识，纯粹是把两个原语按正确顺序串起来。这正是该仓库 README 里写明的架构铁律：「user-invoked 的 Skill 可以调用 model-invoked 的 Skill，但永远不调用另一个 user-invoked 的」。翻一遍文件树能数出至少 7 个 SKILL.md 不到 1KB 的薄壳（grill-me 147B、wait-what 325B、implement 433B、research 799B、handoff 879B、resolving-merge-conflicts 921B、grill-with-docs 245B），薄壳负责入口和编排，原语负责可复用的纪律。

## 仓库级细节：生命周期管理是给 Skill 作者的隐藏课

Git 文件树里还有三处一般读者不会注意、但 Skill 作者应该抄走的工程实践：

1. **`.out-of-scope/` 目录**：收录被否决的方案文档（如 `question-limits.md`、`setup-skill-verify-mode.md`），被拒绝的想法不删除而是归档理由，避免同样的提案反复出现。
2. **`skills/in-progress/`**：六个写作系列 Skill（writing-beats、writing-shape 等）和 `loop-me`、`setup-ts-deep-modules` 挂在未完工区，不带发布压力地迭代。
3. **`agents/openai.yaml`**：每个 Skill 目录里都有一份 100 余字节的 YAML，让同一套 Skill 能被 Codex 等其他 Agent 识别——一份 SKILL.md，多 Agent 分发。配合 `.claude-plugin/marketplace.json` 与 changesets 版本管理，这个仓库实际上示范了「Skill 的 CI/CD」该怎么做。

## teach 的工作流全景

```mermaid
flowchart TB
    U[用户输入 /teach 主题] --> M{MISSION.md<br/>已填写?}
    M -- 否 --> Q[盘问学习动机<br/>写入 MISSION.md]
    M -- 是 --> R
    Q --> R[检索高信任资源<br/>填充 RESOURCES.md<br/>禁用参数化知识]
    R --> Z[读 learning-records/*<br/>计算最近发展区]
    Z --> L[生成课程 lessons/0001-.html<br/>单概念 · Tufte排版 · 等长选项测验]
    L --> A[沉淀组件到 assets/<br/>共享样式表 · 测验组件]
    L --> F[压缩知识到 reference/*<br/>术语表/速查卡]
    L --> LR[写学习记录<br/>learning-records/000N.md]
    LR --> Z
    L --> W{学员问出<br/>智慧型问题?}
    W -- 是 --> C[先回答<br/>再推荐真实社区]
```

## 安装与使用

```bash
# 方式一：Claude Code 官方插件市场（自动更新，只读订阅）
claude plugins install mattpocock-skills
# 或会话内：/plugin install mattpocock-skills

# 方式二：skills.sh 安装器（文件落盘可魔改，选装单个 Skill）
npx skills@latest add mattpocock/skills
```

装完在任意目录输入 `/teach 你想学的东西` 即可开课；学习状态全部落在当前目录的 `MISSION.md`、`lessons/`、`learning-records/` 里，换目录等于换学籍。注意仓库 README 的警告：插件与 skills.sh 两种方式装一种即可，都装会得到两份。

## 推荐排行榜

- **最值得个人用户安装**：teach——只要你有任何一个「一直想学没学成」的领域，它把零散提问升级成一门带学籍档案的课
- **最值得 Skill 作者精读的源码**：grilling——1872 字节里的图遍历式访谈算法，是提示词工程的教科书级样本
- **最值得团队借鉴的架构**：薄壳/原语双层 + 生命周期目录——七成 Skill 短过 1KB，恰恰是可维护性的证明
- **上手门槛最低**：implement——六行编排器，读完即懂，也是理解「Skill 组合 Skill」的最短路径

## 结论

teach 证明了一件事：Skill 的上限不取决于提示词长度，而取决于它把多少真实领域的约束（认知科学、排版传统、组件化工程）无损编译进行为规则。55.9 万安装对它来说可能只是开始——在 Agent 越来越擅长「做完一次任务」的当下，擅长「记住你、按你的节奏长期教你」的 Skill 反而是稀缺物种。对想动手写 Skill 的读者，本期给出一句话方法论：先想清楚你的 Skill 的状态放在哪、终止条件是什么，再动笔写第一行 SKILL.md。

## 参考来源

1. [skills.sh — The Agent Skills Directory 总榜](https://skills.sh) — 本文全部安装量与排名数据的来源（2026-08-30 抓取）
2. [mattpocock/skills — GitHub 仓库](https://github.com/mattpocock/skills) — README 阐述四大失败模式与 user-invoked/model-invoked 分层架构
3. [teach/SKILL.md 原文](https://raw.githubusercontent.com/mattpocock/skills/main/skills/productivity/teach/SKILL.md) — 本文逐段精读对象
4. [grilling/SKILL.md 原文](https://raw.githubusercontent.com/mattpocock/skills/main/skills/productivity/grilling/SKILL.md) — 设计树与前沿算法的原始定义
5. [mattpocock/skills 完整文件树（GitHub API）](https://api.github.com/repos/mattpocock/skills/git/trees/main?recursive=1) — 各 SKILL.md 字节数、in-progress/.out-of-scope 目录结构的依据

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
