<!-- title: 写完就删：12号位prototype逐段拆解 -->

# 写完就删：总榜第 12 名 prototype 逐段拆解，一个教 AI「写一次性代码」的 Skill

## 概述

前 12 名里 8 个 Skill 来自同一个仓库（mattpocock/skills），此前各轮已把 grill-me、tdd、handoff、triage、架构审查等头部成员轮番拆过，本期补上这块阵营里最晚被深拆的拼图：**总榜第 12 名 `prototype`（612.2K 安装，skills.sh 2026-08-30 抓取）**。它的特别之处在于反直觉——绝大多数 Skill 在教模型「把代码写好、写对、留下来」，而 prototype 教模型「写一段注定要删掉的代码」。核心发现三条：一是它把「原型」定义成回答设计问题的工具，问题决定形态，用一个二分法决策树覆盖逻辑/UI 两大场景；二是它的六条军规全是反完美主义纪律（不测试、不抽象、不持久化）；三是它的收尾设计——「答案才是原型里唯一值得保留的东西」——把知识沉淀和代码清理写成了同一个动作。另附同阵营两块未深拆拼图：`teach`（489.7K）与 `domain-modeling`（449.0K）的副拆解。

## 榜单背景：前 12 名里 8 个来自同一间车库

先看 skills.sh All Time 榜头部（2026-08-30 抓取）：

| 排名 | Skill | 来源 | 安装量 | 本系列覆盖状态 |
|---|---|---|---|---|
| 1 | find-skills | vercel-labs/skills | 3.0M | 已拆 |
| 2 | grill-me | mattpocock/skills | 911.2K | 已拆 |
| 3 | frontend-design | anthropics/skills | 796.7K | 已拆 |
| 4 | grill-with-docs | mattpocock/skills | 775.3K | 已拆（随 grill-me 覆盖） |
| 5 | improve-codebase-architecture | mattpocock/skills | 747.2K | 已拆 |
| 6 | tdd | mattpocock/skills | 722.0K | 已拆 |
| 7 | agent-browser | vercel-labs/agent-browser | 702.8K | 已拆 |
| 8 | setup-matt-pocock-skills | mattpocock/skills | 663.0K | 已提及 |
| 9 | vercel-react-best-practices | vercel-labs/agent-skills | 647.0K | 已拆 |
| 10 | handoff | mattpocock/skills | 628.2K | 已拆 |
| 11 | triage | mattpocock/skills | 624.4K | 已拆 |
| **12** | **prototype** | **mattpocock/skills** | **612.2K** | **本期主角** |

一个套件在前 12 名里占 8 席，这在 2026 年 8 月底的 Skills 生态里是独一份的统治力。但拆解密度并不均匀：流量都给了 grill 家族和工程纪律类，**prototype 作为第 12 名反而成了头部阵营里最少被单独拿出来讲的那个**——尽管它的设计完成度丝毫不逊色。

---

## 主拆解：prototype —— 一份教模型「写一次性代码」的 SKILL.md

以下逐段分析基于仓库 main 分支的 `skills/engineering/prototype/SKILL.md` 原文（2026-08-30 抓取）。

### 第 1 段：frontmatter —— 把「问题」写进触发条件

```yaml
name: prototype
description: Build a throwaway prototype to answer a design question.
  Use when the user wants to sanity-check whether a state model or
  logic feels right, or explore what a UI should look like.
```

三句话，信息密度极高。第一句给定义（一次性代码回答设计问题），第二句给两个触发场景——**对状态模型/逻辑的合理性存疑**、**想探索 UI 该长什么样**。注意它的触发词写的不是「用户要求做原型」，而是用户的**认知状态**（wants to sanity-check / explore）。这是自动触发型 Skill 的高阶写法：匹配意图而非匹配名词。用户说「我不确定这个状态机对不对」时，模型能凭这句话联想到 prototype，而不需要用户念出咒语。

### 第 2 段：开场定义 —— 「The question decides the shape」

正文第一句就是全文的锚：

> A prototype is **throwaway code that answers a question**. The question decides the shape.

「原型是一次性的、用来回答一个问题的代码。**问题决定形态**。」这半句话是整个 SKILL.md 的设计哲学：原型不是半成品产品，而是一个**测量仪器**——仪器的外形由它要测的量决定。后面所有规则都从这一句推导出来。

### 第 3 段：Pick a branch —— 二分法决策树与兜底规则

SKILL.md 把所有设计问题劈成两半：

- **"Does this logic / state model feel right?"** → 走 `LOGIC.md` 分支：写一个微型交互式终端程序，把状态机推过那些在纸面上难以推演的 case；
- **"What should this look like?"** → 走 `UI.md` 分支：在**单一路由**上生成几套截然不同的 UI 变体，用 URL 参数和一条浮动底栏切换。

紧接着是一句大实话：*The two branches produce very different artifacts — getting this wrong wastes the whole prototype*（两个分支产物天差地别，选错分支整个白做）。然后给出兜底规则：如果问题 genuinely ambiguous 且用户不在线，按周边代码猜——后端模块走逻辑分支，页面/组件走 UI 分支——并**在原型顶部标注这个假设**。

这一段值得抄的设计有两处。第一，分支逻辑没有内联写在 SKILL.md 里，而是引用了 `LOGIC.md` 和 `UI.md` 两个附属文件——主文件保持 60 行以内的「路由器」角色，分支细节按需加载，这是官方 skill-creator 教科书里「渐进式披露」的社区实践样板。第二，「用户不在线怎么办」被显式写进了决策树——大多数 Skill 假设用户全程在场，prototype 替异步场景写了兜底。

### 第 4 段：六条军规 —— 给「抛弃式」立规矩

两条分支共享六条规则，每一条都在对抗工程本能：

1. **Throwaway from day one, and clearly marked as such**——从第一天起就是抛弃式的，且要明显标出来。位置放在将来真正要用它的地方附近（上下文明显），但命名要让路过的人一眼看出是原型不是产品；UI 原型路由遵守项目既有路由约定，*don't invent a new top-level structure*（别发明新的顶层目录结构）。
2. **One command to run**——不管项目用什么任务跑器（pnpm、python、bun），用户必须不假思索就能跑起来。
3. **No persistence by default**——状态放内存。SKILL.md 里有一句极精彩的论证：*Persistence is the thing the prototype is _checking_, not something it should depend on*（持久化正是原型要**检验**的东西，而不是它应该依赖的东西）。如果问题确实涉及数据库，就打一个名字叫 **"PROTOTYPE — wipe me"** 的临时库或本地文件。
4. **Skip the polish**——不写测试，除了能跑起来之外不做错误处理，不抽象。理由一句话：学到了就删。
5. **Surface the state**——逻辑原型每执行一步、UI 原型每切一次变体，都完整打印/渲染相关状态，让用户亲眼看到什么变了。
6. **Delete or absorb when done**——原型回答完问题后，要么删除，要么把验证过的决定折进正式代码，*don't leave it rotting in the repo*（别让它烂在仓库里）。

六条军规的本质是**给模型已有的过度工程本能装刹车**。LLM 写代码的默认倾向是补测试、加抽象、做防御式处理——这对生产代码是美德，对原型是纯浪费。这份 SKILL.md 用极短的篇幅完成了「换挡」：告诉模型你现在在另一个评价体系里，快和清楚比全和稳更重要。

### 第 5 段：When done —— 答案是唯一值得保留的东西

收尾段的第一句是全文的点睛之笔：

> The _answer_ is the only thing worth keeping from a prototype.

把答案捕获到持久位置（commit message、ADR、issue、或原型旁边的 `NOTES.md`），并且**必须连着它回答的那个原始问题一起写**。用户在线就当面确认一句；不在就留个占位符，下一轮再补结论再删原型。

这个设计补上了「抛弃式开发」最容易断的一环：原型删了，但**决策记录下来了**。它和第 4 条军规形成闭环——代码是易耗品，结论是资产。这也是它和 `domain-modeling`、ADR 体系能咬合的接口（见下文副拆解二）。

### 一个值得玩味的细节：README 与 SKILL.md 已经漂移

仓库 README 对 prototype 的描述是「单份可分享 HTML 文件回答状态/逻辑问题」（*a single shareable HTML file for state/logic questions*），而 SKILL.md 的 LOGIC 分支实际写的是**终端小程序**。两处已出现轻微漂移——大概率是 SKILL.md 迭代快于 README。给你的启示：**评估一个 Skill 永远以 SKILL.md 原文为准**，README 只是橱窗。

---

## 副拆解一：teach（489.7K，总榜第 55）—— 把工作目录变成有状态的教学舱

teach 在 README 里被归入 Productivity 分类的 user-invoked 组，它的 SKILL.md 开头一行 frontmatter 就值得注意：

```yaml
disable-model-invocation: true
argument-hint: "What would you like to learn about?"
```

`disable-model-invocation: true` 意味着它**只能**由用户敲 `/teach` 触发——教学是要用户主动开始的多会话承诺，不该由模型自作主张启动。这个开关在全套件里极少使用，用在这里恰好体现了「编排权归用户」的分层原则。

它的核心设计是**用文件系统当持久状态层**：当前目录被约定为一个教学工作区，`MISSION.md` 记录学习动机（一切教学的锚点）、`RESOURCES.md` 记高信任资源、`learning-records/0001-.md` 记学习档案（作者明说类比 ADR）、`lessons/0001-.html` 是编号递增的课程、`assets/` 放跨课程复用的组件（第一个组件永远是共享样式表）。模型每次被唤起，先读这些文件恢复「教学状态」——**一个 Skill 没有数据库，却实现了跨会话记忆**。

教学法层面它塞进了真正的学习科学：区分 **Fluency strength**（当场提取的流利度）与 **Storage strength**（长期存储强度），警告流利度会制造掌握的错觉，用检索练习、间隔、交错来制造 desirable difficulty；课时设计遵守工作记忆限制，每课只给一个 tangible win。两个细节尤其见功力：一是 *Never trust your parametric knowledge*（绝不信任参数化知识）被写成硬规则，教学材料必须来自 RESOURCES.md 里验证过的资源；二是测验题要求**每个选项字数完全相同**，防止用户靠排版线索猜答案。

短板也明显：它要求用户持续投入多个会话才见价值，且对「教学目录」和项目代码混放的场景没有约束——适合自学舱，不适合即插即用。

## 副拆解二：domain-modeling（449.0K，总榜第 61）—— 「读词汇表」不算，「改模型」才算

domain-modeling 最值得学的是它开篇的自我边界声明：

> (Merely *reading* `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)

一句话把自己和「读一下词汇表」这个通用习惯划清界限——**消费模型是习惯，修改模型才是这个 Skill 的职责**。这种「声明自己不是什么」的写法，是解决 Skill 之间触发冲突的低成本方案。

正文给出了单 context 与多 context（根目录 `CONTEXT-MAP.md` 指向 `ordering/`、`billing/` 各自的 `CONTEXT.md`）两种文件布局，并强调 *Create files lazily*——文件只在有东西可写时才创建，不搞空架子初始化。会话中的四个动作构成「主动纪律」：术语与词汇表冲突时当场指出（"Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"）；模糊措辞当场磨尖（"You're saying 'account' — do you mean the Customer or the User?"）；用具体场景压测概念边界；说法与代码矛盾时摊开来对质。术语一旦敲定**立即**写回 CONTEXT.md，不许攒批。

而对 ADR 它设计了**三重门槛**：难以逆转、缺少上下文会令未来读者费解、是真实权衡的结果——*If any of the three is missing, skip the ADR*。还有一条容易被忽略的铁律：CONTEXT.md **完全不准出现实现细节**，*It is a glossary and nothing else*（它只是词汇表，仅此而已）。这条约束保住了词汇表作为「共享语言」的纯粹性，防止它退化成第二份需求文档。

---

## 工作流程图

prototype 从提问到清理的完整生命周期：

```mermaid
flowchart TD
    A["用户表达设计疑虑<br/>（自动触发 prototype）"] --> B{"问题属于哪一类？"}
    B -->|"逻辑/状态模型对不对"| C["LOGIC.md 分支<br/>微型终端程序<br/>推进难推演的状态 case"]
    B -->|"UI 该长什么样"| D["UI.md 分支<br/>单路由多套 UI 变体<br/>URL 参数 + 浮动底栏切换"]
    B -->|"说不清且用户不在线"| E["按周边代码猜分支<br/>后端模块→逻辑 / 页面组件→UI<br/>原型顶部标注假设"]
    C --> F["六条军规全程生效<br/>①就近放置+抛弃式命名 ②一条命令能跑<br/>③默认不持久化 ④不测试不抽象<br/>⑤每步暴露状态 ⑥完事即删/吸收"]
    D --> F
    E --> F
    F --> G{"设计问题<br/>已回答？"}
    G -->|"否"| F
    G -->|"是"| H["捕获答案+原始问题<br/>写入 ADR / commit / NOTES.md"]
    H --> I["删除原型<br/>或把验证过的决定折进正式代码"]
```

套件拆解覆盖地图（本系列视角）：

```mermaid
mindmap
  root(("mattpocock/skills<br/>前12名占8席"))
    此前已拆
      grill-me 911.2K
      grill-with-docs 775.3K
      improve-codebase-architecture 747.2K
      tdd 722.0K
      handoff 628.2K
      triage 624.4K
    本期新拆
      prototype 612.2K
      teach 489.7K
      domain-modeling 449.0K
    尚未上榜/未深拆
      wizard
      writing-for-agents
      ask-matt
```

---

## 评测对比表

评分维度与权重：功能完整度 25%、设计质量 25%、实战效果 20%、上手难度 15%（高星=易上手）、社区活跃度 15%，按权重加总。

| 评测对象 | 安装量 | 功能完整度 | 设计质量 | 实战效果 | 上手难度 | 社区活跃度 | **加权总分** |
|---|---|---|---|---|---|---|---|
| prototype | 612.2K（#12） | ★★★★ | ★★★★★ | ★★★★½ | ★★★★½ | ★★★★★ | **4.58** |
| teach | 489.7K（#55） | ★★★★½ | ★★★★½ | ★★★★ | ★★★½ | ★★★★ | **4.18** |
| domain-modeling | 449.0K（#61） | ★★★★ | ★★★★½ | ★★★★ | ★★★½ | ★★★★ | **4.05** |

prototype 的功能分只给四星是刻意的：它管「回答一个问题」，不管原型的规模化验证，边界收得很紧；但正因边界清晰，设计质量给满星。teach 的实战分受制于多会话投入门槛——它的价值密度高，但见效率低。domain-modeling 上手难度偏高，因为它要求团队真的维护 CONTEXT.md，没有词汇表习惯的仓库里它会空转。

## 安装命令

三个 Skill 都来自 mattpocock/skills，二选一安装（官方提醒两种方式混用会导致每个 Skill 装两份）：

```bash
# 方式一：Claude Code 官方插件市场（托管、自动更新）
claude plugins install mattpocock-skills

# 方式二：skills.sh 安装器（文件落进你的仓库，可自由改造）
npx skills@latest add mattpocock/skills
```

装完在会话里跑一次 `/setup-matt-pocock-skills`（每个仓库一次），它会问你三件事：用哪个 issue 跟踪器（GitHub / Linear / 本地文件）、triage 用什么标签、生成的文档放哪。之后 prototype 和 domain-modeling 属于 model-invoked，任务匹配时自动触发，无需记命令；teach 需要显式敲 `/teach <主题>`。

## 推荐排行榜

- **设计质量之王**：prototype——「问题决定形态 + 答案是唯一值得保留的东西」，两句话撑起一份完整方法论，是本系列拆过的 SKILL.md 里哲学密度最高的短文。
- **最被低估**：teach——总榜 55 名严重低于它的设计水准；把「跨会话状态」「学习科学」「防猜测的测验选项设计」塞进一个纯文件系统的 Skill，全生态罕见第二家。
- **最佳搭档奖**：domain-modeling × grill-with-docs——前者负责把会话里结晶的术语当场写回词汇表，后者负责在访谈里挖出术语，装齐这两个，CONTEXT.md 才会活起来。
- **上手最快**：prototype——model-invoked 自动触发，零配置零命令，装完即忘、用到即灵。
- **写给想造 Skill 的你**：prototype 示范了三件可以直接抄的事——把触发条件写成用户的认知状态而非功能名词；用「声明自己不是什么」给相邻 Skill 划界；给模型的本能（过度工程）装刹车比教它新知识更值钱。

## 参考来源

1. [skills.sh — Skills Leaderboard](https://www.skills.sh) — 全文安装量与排名（All Time 榜，2026-08-30 抓取）
2. [mattpocock/skills — GitHub README](https://github.com/mattpocock/skills) — 套件定位、user/model-invoked 分层、安装方式、setup 流程
3. [prototype/SKILL.md（main 分支原文）](https://raw.githubusercontent.com/mattpocock/skills/main/skills/engineering/prototype/SKILL.md) — 主拆解对象全文引用
4. [teach/SKILL.md（main 分支原文）](https://raw.githubusercontent.com/mattpocock/skills/main/skills/productivity/teach/SKILL.md) — 副拆解一全文引用
5. [domain-modeling/SKILL.md（main 分支原文）](https://raw.githubusercontent.com/mattpocock/skills/main/skills/engineering/domain-modeling/SKILL.md) — 副拆解二全文引用

> [!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)
