引言
"给真正工程师的 Agent 技能,不是氛围编程。" --- Matt Pocock,README 第一句话
这是"一天一个开源项目"系列的第 85 篇。今天的项目是 skills (GitHub)。
先说这个仓库有多不寻常。
它不是新框架。不是哪个大厂的开源项目。甚至不是一个能直接运行的程序。它只是一个工程师的 .claude 工作目录,里面放着 21 个 Markdown 文件,每个文件告诉 Claude Code 在某种场景下该怎么干活。
Matt Pocock 把这个目录推到了 GitHub,什么推广都没做------没写博客解释,没录视频演示,没在 Hacker News 发帖。
24 小时内拿了 22,000 Stars ,登顶 GitHub 全球 Trending 第一。
最终停在了 30,800+ Stars。
这不是偶然。同一天,free-claude-code 拿了 1,701 个 Star,awesome-codex-skills 拿了 517 个,三个仓库霸占 Trending 前列,主题完全一样:怎么调教你的 AI。
那天 GitHub 社区在集体投票:我们需要这个。
你将学到什么
- 为什么"配置 AI 工作方式"正在成为新的工程实践
- Matt 的 8 个核心技能逐一拆解:grill-me、tdd、triage-issue 等
- "垂直切片"与"反氛围编程"哲学
- 如何安装并定制这些技能到你自己的工作流
前置知识
- 使用过 Claude Code 或其他 AI 编程助手
- 了解基本的软件工程概念(TDD、重构、PRD 等)
项目背景
它是什么?
skills 是 Matt Pocock 个人 Claude Code 技能库的公开版本。每个"技能"是一个独立文件夹,主文件为 SKILL.md,描述了一个特定工程场景下 Agent 应该如何工作------任务目标、执行步骤、禁止事项、输出格式。
安装方式极其简单:
bash
npx skills@latest add mattpocock/skills/grill-me
# 工具会把 SKILL.md 复制到你的 .claude/ 目录
关于作者:Matt Pocock
Matt Pocock 在 TypeScript 社区的地位,大概相当于这个领域的"布道者":
- GitHub: 10,300+ 关注者
- 身份:TypeScript 巫师(GitHub bio: "TypeScript wizard"),教开发者为生
- 代表项目 :
- Total TypeScript:生产级 TypeScript 综合课程,其核心商业产品
- ts-reset(8,400 ⭐):被称为"TypeScript 的 CSS Reset"
- evalite(1,500 ⭐):用 TypeScript 评估 LLM 应用
- sandcastle(1,000 ⭐):TypeScript 沙箱 coding agent 编排
- AI Hero Newsletter:约 60,000 订阅者
- 前经历:前 Vercel 工程师、前 Stately 工程师;曾做过声乐教练(是的,真的)
他不是一个"写工具给别人用"的人------他首先是一个每天认真用 AI 干活的工程师,然后才是一个教别人的人。这个仓库是他日常工作流的直接产物。
项目数据
- ⭐ GitHub Stars: 30,800+(24 小时内 22,000)
- 🍴 Forks: 2,400+
- 📝 Commits: 34
- 📄 License: MIT
- 📦 安装工具 :
npx skills@latest - 📰 配套 Newsletter: AI Hero(60,000 订阅者)
主要功能
核心哲学:让 AI 慢下来
现在绝大多数人用 AI 写代码的思路是"生成"------让它帮你写函数、补样板、一键出页面,越快越好。业界称之为 Vibe Coding(氛围编程)。
Matt 的思路反过来。他教 Claude 做的事,大部分不是生成代码,而是在写代码之前把问题想清楚。
来看几个核心技能:
grill-me------最有用的技能
Matt 本人说这是他用过最有用的技能。
它的功能:让 Claude 扮演一个会追着你问的严苛面试官,盘问你的技术方案。
不是那种客客气气提两条建议的"AI 反馈"。是追着你问------每个分支、每个边界条件、每个你没想到的 case,每次只问一个问题,一直问到你自己都觉得"操,这个我确实没想清楚"为止。
技能的几个关键设计:
- 每次只问一个问题(避免问题轰炸,强制逐步深思)
- 给出推荐答案(不是光问,还会帮你想)
- 主动探索代码库以自己回答问题,而非总是问你
- 目标:在开始写代码之前,把所有决策分支都解决掉
vbnet
用例:你想给项目加一个缓存层
使用 grill-me 后:
"你的缓存粒度是什么?函数级还是请求级?"
"如果缓存键冲突,你的失效策略是什么?"
"你有 race condition 的场景吗?多个请求同时缓存未命中?"
"如果缓存服务挂了,降级方案是什么?"
"你的测试怎么 mock 缓存?"
...
磨完之后,你的设计要么变得更严密,要么你意识到不该做这件事。
tdd------强制红绿重构循环
这个技能不让 Claude 一口气把功能写完。它强制执行严格的 TDD 工作流:
markdown
Tracer Bullet(先打通最简路径)
↓
增量循环:
写一个会失败的测试
↓
写刚好让这个测试通过的最少代码
↓
重构(代码更干净,测试依然通过)
↓
下一个测试...
几个关键约束(来自 SKILL.md):
- 禁止水平切片:不允许先写完所有测试再实现(会导致过度设计)
- 测试验证行为,不验证实现:通过公共接口测,而非内部细节
- 配套 6 个参考文档:
deep-modules.md、interface-design.md、mocking.md、refactoring.md、tests.md
很慢,很笨,很老派------但这恰恰是严肃工程师写代码的方式。
triage-issue------先诊断,再修复
拿到一个 bug 报告,大多数人(包括大多数 AI)的反应是:找到那行代码,改掉,提 PR。
Matt 的 triage-issue 技能在修复之前多加了一步:彻底诊断。
五阶段流程:
markdown
1. 捕获问题(理解症状)
2. 探索诊断(翻遍代码库,找根因)
3. 确定修复方案(不是第一个可行方案,是最好的方案)
4. 设计 TDD 修复计划(先写测试,再修复)
5. 创建 GitHub Issue(诊断报告 + 修复计划 + 验收标准)
注意:这个技能的输出不是代码,是 GitHub Issue。它的价值在于,当你(或另一个 Agent)去执行修复时,已经有了清晰的根因分析和测试驱动的路线图。
design-an-interface------强制多方案比较
这个技能实现了 John Ousterhout 在《A Philosophy of Software Design》中提出的"Design It Twice"原则:对任何重要决策,先生成至少两个真正不同的方案,再做选择。
实现方式:启动多个并行子 Agent,每个被限制在不同维度:
css
子 Agent A:最少方法数(追求最简接口)
子 Agent B:最大灵活性(追求最强扩展性)
子 Agent C:优化最常见场景(追求最低使用摩擦)
三个方案出来之后,从简洁性、泛化能力、实现效率、"深度"(接口隐藏了多少复杂性)四个维度评估,帮你做决策。
to-issues------垂直切片分解
把一个功能计划拆解成 GitHub Issues------听起来很普通,但关键在于它的拆分原则:垂直切片(Vertical Slice)。
yaml
❌ 水平切片(别这么做):
Issue 1: 数据库 Schema
Issue 2: API 层
Issue 3: 前端 UI
Issue 4: 测试
✅ 垂直切片(Matt 的方式):
Issue 1: 用户可以创建基础草稿(schema + API + UI + tests 全穿透)
Issue 2: 草稿可以添加富文本内容
Issue 3: 草稿可以发布
每个 Issue 被分类为:
- HITL(Human In The Loop):需要人工决策介入
- AFK(Away From Keyboard):可以无人值守让 Agent 执行
git-guardrails-claude-code------防 AI 删库
通过 Claude Code 的 PreToolUse hook 拦截危险 git 命令。被拦截的操作包括:
css
git push(含 --force)
git reset --hard
git clean -f / -fd
git branch -D
git checkout .
git restore .
当 Claude 尝试执行这些命令时,它会收到消息:"it lacks authority to access these commands"。可以配置为项目级或全局级。
其他技能一览
| 技能 | 作用 |
|---|---|
to-prd |
对话上下文 → 结构化 PRD,直接提交为 GitHub Issue |
request-refactor-plan |
创建带细小 commit 的重构计划,通过用户访谈细化 |
improve-codebase-architecture |
结合 CONTEXT.md 和 ADR 文档,寻找架构"深化"机会 |
setup-pre-commit |
配置 Husky + lint-staged + Prettier + 类型检查 |
ubiquitous-language |
从对话中提取 DDD 风格的统一语言词汇表 |
write-a-skill |
按规范结构创建新 skill(技能生成技能) |
edit-article |
通过重组章节、提升清晰度来改进文章 |
obsidian-vault |
在 Obsidian vault 中搜索、创建和管理笔记 |
项目详细剖析
Skill 文件的结构
每个技能是一个独立文件夹,主文件为 SKILL.md。以 tdd 为例:
bash
skills/tdd/
├── SKILL.md ← 主技能定义(任务目标、执行步骤、约束条件)
├── deep-modules.md ← 参考资料:深模块设计原则
├── interface-design.md
├── mocking.md
├── refactoring.md
└── tests.md
SKILL.md 的典型结构:
markdown
# TDD
## Goal
Build features one vertical slice at a time using TDD...
## Steps
1. Tracer Bullet: First, write the minimal...
2. Increment: For each behavior to implement...
a. Write a failing test
b. Write minimal code to pass the test
c. Refactor if needed
## Rules
- NO horizontal slicing...
- Tests should verify behavior, not implementation...
## Resources
@deep-modules.md
@interface-design.md
为什么"配置 AI"正在成为工程实践
同一天出现三个 AI 配置类仓库霸占 Trending,不是巧合。
css
同样的模型(GPT-4o / Claude Opus)
同样的工具(Cursor / Claude Code)
同样的订阅费
为什么有人效率翻倍,有人整天在跟废代码搏斗?
差距不在模型,在配置:
• 怎么描述问题的边界
• 在哪些节点要求 AI 停下来等你确认
• 遵循什么工程约定
• 容忍哪些错误,不容忍哪些
这些东西没有人教你,也没有人卖给你。
只能在日复一日的使用中磨出来。
Matt 把他磨出来的那一套公开了。业界把这件事称为 Claude Code Skills 生态的 "npm 时刻"------就像当年 npm 让 Node.js 社区能共享工具包,Skills 让 Claude Code 社区开始共享工作流配方。JetBrains 等大厂也在这个事件之后开始发布官方 skills 包。
"你的 .claude 目录是空的吗?"
这是这个项目引发的最有价值的问题。
如果你的 .claude 目录(或 .cursorrules、AGENTS.md)是空的,那你每次都在从零开始。你的 AI 不记得你上次踩过什么坑,不知道你项目的架构约定,不清楚你团队的代码规范。每次都是一个什么都不知道的新人。
Matt 的 21 个技能不是让你照单全收的------他写 TypeScript,做教育产品,工作流跟你大概率不同。但他提供了一个活的样本,让你看到:一个认真用 AI 干活的工程师,他的"配方"长什么样。
项目地址与资源
官方资源
- 🌟 GitHub : github.com/mattpocock/...
- 📦 安装工具 :
npx skills@latest - 📰 AI Hero Newsletter : aihero.dev(60,000 订阅者)
- 🎓 Total TypeScript : totaltypescript.com
相关项目
- ts-reset (8,400 ⭐): github.com/total-types...
- evalite(1,500 ⭐): LLM 应用评估工具
- Simon Willison 的 skills: 另一个被广泛参考的 Claude skills 个人仓库
- MCP 协议文档 : modelcontextprotocol.io
总结与展望
核心要点
- 反氛围编程:Matt 的技能大多不是帮你更快生成代码,而是帮你在写代码之前把问题想清楚------这是高级工程师使用 AI 的方式
- 垂直切片优先 :
tdd、to-issues、triage-issue都强调"一次一个完整路径",而非"先把所有 X 层做完" - Skill 文件是工程产物 :就像 Dockerfile、
.eslintrc、tsconfig.json,你的 AI 配置也是需要维护的工程产物 - "npm 时刻"的意义:这个仓库的走红标志着 Claude Code Skills 生态开始出现社区共享规范------从个人配置到可复用的工作流包
- 差距在配置,不在模型:同样的 Claude Opus,有人用来 vibe coding,有人用来严肃工程;差距在你喂给它的那些东西
适合谁使用
- Claude Code 重度用户:你已经在用 Claude Code,想让工作流更严格、更可靠
- TypeScript 工程师 :部分技能(
migrate-to-shoehorn、scaffold-exercises)高度针对 TypeScript 生态 - 想建立自己 skill 库的工程师 :Matt 的仓库是最好的参考样本,
write-a-skill技能甚至能帮你生成新技能 - 团队工程实践负责人 :
git-guardrails、to-issues、triage-issue可以直接标准化团队的 AI 使用规范
值得思考的问题
Matt Pocock 在 README 写的那句话值得反复读:"给真正工程师的 Agent 技能,不是氛围编程。"
这句话背后有一个判断:AI 编程有两条路。一条是用 AI 生成更多代码,更快交付------Vibe Coding。另一条是用 AI 把每一行代码前的思考做得更彻底------让 AI 成为你更严格的思维伙伴,而不是更快的打字机。
两条路都能到达,但到达的地方不一样。
访问我的个人网站,探索更多实用知识和有趣产品