本计划面向 SKILL 初级使用者,基于对 Matt Pocock SKILLs 项目仓库的深度探索分析,提炼可学习、可实践的工程模式和构建技巧。
一、项目概览:Matt Pocock 的 SKILLs 是什么样的项目?
| 维度 | 说明 |
|---|---|
| 定位 | 一个面向 AI Agent 的技能(SKILL)集合仓库,让 Agent 在特定场景下有更专业的 behavior |
| 规模 | 29 个技能,分布在 6 个 bucket 目录中,15 个在正式注册 |
| 组织方式 |
skills/ 下有 6 个 bucket:engineering/(工程)、productivity/(生产力)、misc/(杂项)、personal/(个人)、in-progress/(进行中)、deprecated/(废弃) |
| 本质 | 每个 SKILL 是一个包含 SKILL.md 和可选附加文件的目录,通过 .claude-plugin/plugin.json 注册给 Agent 使用 |
二、核心工程经验:八个可以从该项目中学到的关键模式
模式 1:六个桶分类法 —— 技能的生命周期管理
Matt Pocock 用 6 个桶目录 来管理技能的"生命周期":
| 桶 | 用途 | 是否注册 | 典型例子 |
|---|---|---|---|
engineering/ |
日常编码工作 | 必须 | diagnose, tdd, prototype |
productivity/ |
日常非编码工作流 | 必须 | caveman, handoff, write-a-skill |
misc/ |
偶尔使用但仍保留 | 必须 | git-guardrails, setup-pre-commit |
personal/ |
仅自己用 | 禁止 | obsidian-vault, edit-article |
in-progress/ |
草稿未就绪 | 禁止 | review, writing-* |
deprecated/ |
不再使用 | 禁止 | design-an-interface, qa |
关键洞察:桶分类法让技能管理变得清晰:
-
渐进式发布:技能先放在
in-progress/草稿,成熟后移到正式桶 -
废弃有去处:不用的技能不删除,移到
deprecated/留作参考 - 公私分离:个人技能不影响团队
你需要做的:开始构建时,先只使用 engineering/ 和 productivity/ 两个桶,以及 in-progress/ 作为草稿区。
模式 2:三层注册机制 —— 技能发现系统
Matt Pocock 项目使用三层结构让 Agent 发现技能:
第一层:AGENTS.md(或 workspace rules)
定义:skills/ 下的组织规则
内容:桶的划分方式、注册要求
第二层:.claude-plugin/plugin.json
定义:哪些技能被加载给 Agent
内容:技能路径列表(相对于插件根目录)
第三层:README.md + skills/<bucket>/README.md
定义:人类可读的技能目录
内容:每个技能的名称(链接到 SKILL.md)+ 一行描述
关键洞察:
-
.claude-plugin/plugin.json是 Agent 实际加载技能的清单 -
README.md是给人类读者查看的完整目录 - Bucket README 是给在该领域查找工具的快速索引
-
三者的同步规则:
engineering/、productivity/、misc/下的技能必须同时在 plugin.json 和 README 中注册
你需要做的:
- 在你的项目中创建
.claude-plugin/plugin.json - 维护
README.md的技能列表 - 用 AGENTS.md 或 workspace rules 定义你仓库的组织规则
模式 3:SKILL.md 的标准模板 —— 每个技能的基本结构
所有 SKILL.md 都遵循统一的结构:
---
name: <技能名>
description: "<功能描述> Use when <触发条件>."
---
# <标题>
... 内容 ...
YAML frontmatter(元数据区):
-
name: 技能名称(必须) -
description: 描述(最重要的字段,决定 Agent 何时自动触发该技能)
Description 的黄金公式(来自 write-a-skill 的规范):
<做什么的>. Use when <触发场景>.
具体例子:
| 技能 | Description |
|---|---|
| diagnose | "Disciplined diagnosis loop for hard bugs and performance regressions... Use when user says 'diagnose this' / 'debug this', reports a bug..." |
| tdd | "Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD..." |
| prototype | "Build a throwaway prototype to flesh out a design... Use when the user wants to prototype, sanity-check a data model..." |
规则:
- 第一句:现在时第三人称,说明"什么能力"
- 第二句:以 "Use when" 开头,列出具体的触发词和上下文
- 最多 1024 字符
你需要做的:为每个技能编写清晰的 description。花时间打磨这个字段——它决定了 Agent 能否在正确的时机调用你的技能。
模式 4:渐进式信息披露 —— SKILL.md 只做决策路由
这是 Matt Pocock 项目中最核心的设计模式。
核心原则:SKILL.md 只包含核心流程和决策点,深入细节拆分到独立的引用文件中。
prototype/
├── SKILL.md ← 决策路由器:选择 LOGIC 分支还是 UI 分支
├── LOGIC.md ← 逻辑原型的详细实现指南
└── UI.md ← UI 原型的详细实现指南
tdd/
├── SKILL.md ← 核心流程:红绿重构循环
├── tests.md ← 好测试 vs 坏测试示例
├── mocking.md ← Mock 指南
├── deep-modules.md ← 深模块概念
├── interface-design.md← 可测试性接口设计
└── refactoring.md ← 重构候选清单
diagnose/
├── SKILL.md ← 5 阶段调试流程
└── scripts/
└── hitl-loop.template.sh ← 人机交互循环模板
何时拆分(write-a-skill 给出的量化阈值):
-
SKILL.md超过 100 行 → 考虑拆分 - 全部内容超过 500 行 → 必须拆分
- 引用深度限制为 一层(SKILL.md → 引用文件),不出现更深嵌套
你能学到的:
- 不要试图把所有内容塞进一个文件
- 用 SKILL.md 做"导航员",引用文件做"执行者"
- 用量化标准来判断何时拆分,而不是凭感觉
模式 5:流程的严谨性 —— 门控阶段 + Checklist
Matt Pocock 的复杂技能都使用阶段式流程,每个阶段有明确的进入/退出条件。
以 diagnose 为例:
Phase 1: REPRODUCE → 条件:必须先稳定复现
Phase 2: MINIMISE → 条件:必须有一个最小的复现
Phase 3: HYPOTHESISE → 条件:必须有可验证的假设
Phase 4: INSTRUMENT → 条件:确认测量方式
Phase 5: FIX → 条件:确认根因
Phase 6: VERIFY → 有 checklist 验证修复
每个阶段都有 Do not proceed to Phase N until... 的门控条件。
模式要点:
- 阶段编号:用 Phase 1-6、Step 1-5 等明确的编号
- 门控条件:写清楚"什么情况下才能进入下一阶段"
-
Checklist:关键阶段用
- [ ]列出检查项 - 反模式(Anti-pattern):指出常见的错误做法
适用于你的:
- 简单技能(10-30 行)不需要阶段
- 中等技能(30-80 行)可以用 3-5 个 Step
- 复杂技能(80-120+ 行)用 Phase + 门控条件
模式 6:元技能 write-a-skill —— 自我描述的质量控制
write-a-skill 是 Matt Pocock 项目中最特别的技能——它是一个关于如何创建技能的技能(元技能)。
它包含的内容:
- 创建技能的流程(收集需求 → 起草 → 审查)
- SKILL.md 模板(YAML frontmatter + 章节结构)
- Description 字段的详细写法规范(好例子 vs 坏例子)
- 何时拆分文件的量化标准(100 行 / 500 行阈值)
- Review Checklist(质量检查清单)
关键洞察:元技能的存在意味着:
- 一致性:所有技能遵循相同的结构和质量标准
- 可教学性:新手可以通过运行这个技能学会如何创建技能
- 可扩展性:当标准变化时,只需要更新这一个技能
你需要做的:在你的项目中尽早创建你的 write-a-skill(或类似的元技能)。这是保证技能质量最有效的手段。
模式 7:CONTEXT.md + ADR 的领域语言系统
Matt Pocock 项目用两个文档构建了一套共享语言系统:
| 文档 | 用途 | 典型内容 |
|---|---|---|
CONTEXT.md |
定义领域术语 | "Issue tracker" = 承载问题的工具,禁止使用 "backlog" |
docs/adr/0001-*.md |
记录架构决策 | "只有硬依赖才使用明确的 setup 指针" |
CONTEXT.md 的规则(来自 CONTEXT-FORMAT.md):
- 每个术语有定义 + Avoid 列表(明确禁止使用的同义词)
- 要有主见:选择最佳词汇,其他列为 Avoid
- 保持精炼:最多一两句话
- 只包含项目特有的术语,不包含通用编程概念
ADR 的规则(来自 ADR-FORMAT.md):
- 极简主义:只有标题和 1-3 句话
-
三个条件(全部满足才创建 ADR):
- 难以逆转
- 脱离上下文会令人惊讶
- 是真正权衡的结果
-
编号规则:
0001-xxx.md、0002-xxx.md
你能学到的:
- 不要等到项目做大了才建立术语表
- ADR 不需要冗长的模板——1-3 句话足够记录一个决策
- 关键是有"Avoid"列表(告诉 Agent 不要用什么词)
模式 8:可组合的脚本基础设施
Matt Pocock 在 scripts/ 下提供了三个辅助脚本:
| 脚本 | 用途 | 技术选型 |
|---|---|---|
link-skills.js |
将技能链接到 ~/.agents/skills/
|
Node.js(跨平台) |
link-skills.sh |
将技能链接到 ~/.claude/skills/
|
Bash(Unix 优先) |
list-skills.sh |
列出所有 SKILL.md 文件 | Bash(简单文件遍历) |
设计特点:
- 安全守卫:链接脚本会检查目标目录是否指向本仓库,防止污染仓库
-
Windows 兼容:JS 脚本使用
junction类型的符号链接,在 Windows 上无需管理员权限 - 幂等性:多次运行结果一致
你能学到的:
- 脚本用来解决基础设施问题(安装、列举),不解决业务问题
- 用 Node.js(而非 Bash)做跨平台支持更好
- 添加安全守卫防止误操作
三、构建你自己的 SKILLs 系统:渐进式学习路径
以下是推荐的学习与实践路线,分为四个阶段:
第一阶段:建立基础结构(1-2 天)
目标:搭建项目的骨架结构,建立第一个可用的技能。
-
创建项目目录结构
your-skills/ ├── .claude-plugin/ │ └── plugin.json ├── skills/ │ ├── engineering/ # 工程技能 │ ├── productivity/ # 生产力技能 │ └── in-progress/ # 草稿技能 ├── AGENTS.md # 组织规则 ├── CONTEXT.md # 领域术语 └── README.md # 技能目录 -
编写 AGENTS.md
- 参考 Matt 的 AGENTS.md,定义你仓库的规则
- 明确 bucket 分类、注册要求、README 链接规范
-
创建第一个简单技能
- 从
caveman级别的简单指令型技能开始 - 练习:写一个
format-output技能,要求 Agent 输出时使用特定格式
- 从
-
注册并测试
- 在
plugin.json中添加路径 - 在
README.md中添加条目 - 验证 Agent 能否触发
- 在
第二阶段:学习中等复杂度技能(3-5 天)
目标:掌握流程型技能的编写方法。
-
模仿
to-issues的技能结构- 学习:线性 5 步流程的写法
- 实践:写一个
create-api-skill,引导 Agent 一步步创建 API
-
练习添加 XML 标签块
- 使用
<rules>、<template>等标签包裹关键指令 - 这既清晰又便于解析
- 使用
-
练习使用 Checklist
- 在技能的关键步骤添加
- [ ]检查项
- 在技能的关键步骤添加
-
学习编写 description 字段
- 反复修改,直到描述清晰、触发条件明确
第三阶段:掌握复杂技能模式(1-2 周)
目标:学习文件拆分、分支决策、门控阶段等高级模式。
-
练习渐进式信息披露
- 将技能内容拆分为
SKILL.md+ 引用文件 - 用
write-a-skill中提到的 100 行 / 500 行阈值检查
- 将技能内容拆分为
-
学习分支路由模式
- 参考
prototype的 LOGIC/UI 分支 - 实践:写一个
deploy-skill,根据环境(生产/测试)走不同分支
- 参考
-
学习门控阶段模式
- 参考
diagnose的 Phase 门控 - 每个阶段有明确的进入/退出条件
- 参考
-
建立 CONTEXT.md 和 ADR
- 为你的项目定义 3-5 个核心术语
- 记录 1 个架构决策作为 ADR
第四阶段:元技能与自我进化(持续)
目标:创建元技能,让系统能够自我改进。
-
创建你的
write-a-skill- 包含 SKILL.md 模板
- 包含 description 写法规范
- 包含 Review Checklist
-
定期审查和重构
- 将
in-progress/中的技能按标准审查 - 将不再使用的技能移到
deprecated/ - 更新 CONTEXT.md 中的术语
- 将
-
建立个人最佳实践
- 在 CONTEXT.md 中添加你的项目中特有的术语
- 记录你的 ADR
四、初学者最容易踩的坑
| 坑 | 表现 | 解法 |
|---|---|---|
| Description 写得不好 | Agent 不自动触发技能 | 用 "Use when" 格式,列出具体的触发关键词 |
| SKILL.md 过大 | 一个文件 300+ 行,难以维护 | 超过 100 行就考虑拆分 |
| 缺少注册 | 技能写好了但 Agent 不响应 | 检查 plugin.json 和 README.md 是否都添加了 |
| 没有 bucket 分类 | 所有技能堆在一个目录 | 按 engineering/productivity/in-progress 分类 |
| 忽略反模式 | 用户重复犯同样的错误 | 在技能中添加 "Anti-pattern" 部分 |
| 过早复杂化 | 刚开始就定义大量规则 | 从一个简单技能开始,逐步添加复杂度 |
五、Matt Pocock 项目的核心哲学
越小越好:每个技能只做一件事。如果一个技能需要做两件事,拆成两个技能。
先用再优化:先在
in-progress/中快速创建一个可用版本,再逐步完善。一致性比完美更重要:所有技能遵循相同的结构、相同的前置条件格式、相同的反模式写法。用户(和 Agent)不需要重新学习。
写给人看,也写给 AI 看:README 是给人看的目录,SKILL.md 是给 AI 读的指令。
plugin.json是给系统用的注册表。三者各司其职。渐进式信息披露:不在 SKILL.md 中一次展示所有信息。只展示当前阶段需要的,更深的内容在引用文件中。
量化决策标准:不要用"太多"或"太大"这样模糊的词。用"100 行"、"500 行"这样明确的数字。
术语即约束:CONTEXT.md 不只是词汇表,更是"什么不准说"的约束列表。Agent 输出错误术语时,是 CONTEXT.md 需要更新。
六、推荐的动手练习
做完以下练习,你会对 SKILL 构建有扎实的理解:
-
练习一(★☆☆):创建一个 20 行以内的指令型技能,如
terse-mode(要求 Agent 每次回复不超过 3 句话) - 练习二(★★☆):创建一个 50 行左右的流程型技能,包含 3 个步骤和 1 个 checklist
- 练习三(★★★):创建一个有引用文件的技能,SKILL.md 做路由,2 个引用文件做细节
-
练习四(★★★★):创建你的
write-a-skill元技能,包含模板和 review checklist - 练习五(★★★★★):将现有的 1-2 个技能重构,使其遵循 Matt Pocock 的工程模式
七、验证清单
完成本计划的学习后,你可以用以下清单检查自己的掌握程度:
- 我能解释 6 个 bucket 的分类方式及其用途
- 我能写出符合规范的 SKILL.md description 字段
- 我知道 SKILL.md 超过 100 行时应该做什么
- 我能在技能中使用门控阶段和 checklist
- 我能在技能中添加反模式和好/坏例子对比
- 我能在 CONTEXT.md 中定义术语和 Avoid 列表
- 我知道什么时候该创建 ADR
- 我能维护 plugin.json 和 README.md 的同步
- 我理解渐进式信息披露的设计原则
- 我能创建和使用元技能
八、参考资源
| 资源 | 位置 |
|---|---|
| Matt Pocock 的 AGENTS.md(组织规则) | AGENTS.md |
| Matt Pocock 的 CONTEXT.md(领域术语) | CONTEXT.md |
| plugin.json 示例 | plugin.json |
| ADR 格式规范 | ADR-FORMAT.md |
| CONTEXT.md 格式规范 | CONTEXT-FORMAT.md |
| write-a-skill(元技能) | write-a-skill/SKILL.md |
| 完整技能注册清单 | plugin.json |
| 顶层 README | README.md |