
其他 Skills:压缩沟通、交接、教学、写 Skill 与安全护栏
汇总 mattpocock/skills 里非主线但值得知道的一组小工具:caveman、handoff、teach、write-a-skill,以及 git guardrails、setup-pre-commit、migrate-to-shoehorn、scaffold-exercises
为什么不逐个展开
Matt 的 README 把 skills 分成三类:
- Engineering:每天写真实代码用
- Productivity:通用工作流工具
- Misc:他自己留着备用的小工具
前面几篇已经覆盖了主线 engineering skill。这一篇把剩下的 productivity 和 misc 合在一起讲,因为它们多数不是完整研发流程,而是在特定场景下很好用的小开关。
如果你只装 5 个,我仍然建议优先装:
但如果你已经把主线跑起来,下面这些会让日常体验更顺。
Productivity Skills
caveman:极限压缩沟通
/caveman 是一个「少 token 模式」。它要求 agent 去掉寒暄、填充词、过度解释和模糊缓冲,只保留技术信息。
它适合:
- 你已经在高频迭代,不想读长回复
- debug 时只要事实、原因、下一步
- 长上下文快满了,需要压缩输出
- 你想强制 AI 少说漂亮话
它不是让 AI 变粗鲁,而是让它用更短的语法保留完整技术精度。注意它会持续生效,直到你说退出。
我会把它当作一个临时档位,而不是长期默认。对于高风险操作、安全警告、复杂多步骤指令,太短反而容易误读。
handoff:把当前会话交给下一个 agent
/handoff 的目标是把当前会话压缩成一个交接文档,并保存到系统临时目录,而不是污染当前 workspace。
它会包含:
- 当前目标
- 已做决策
- 关键路径和文件
- 剩余任务
- 建议下个 agent 调用哪些 skill
- 敏感信息脱敏
它特别适合长任务中断、上下文快满、或你想换一个 agent 继续做的时候。
关键点是:不要复制已经存在于 PRD、issue、ADR、commit、diff 里的内容,只引用路径或 URL。交接文档的价值是把散在对话里的状态补齐,不是再造一份项目文档。
teach:把当前目录变成学习工作区
/teach 是这组里最重的一个。它把当前目录当作一个长期学习 workspace,维护:
MISSION.md:你为什么要学这个主题RESOURCES.md:高质量资源列表learning-records/*.md:学习记录,类似 ADRlessons/*.html:每次一节的互动课程reference/*.html:速查资料NOTES.md:教学偏好和工作笔记
它的亮点是把学习看成长期系统,而不是一次问答。尤其强调:
- mission 先行:为什么学,比学什么更重要
- retrieval practice:用回忆练习建立长期记忆
- spacing / interleaving:不要被短期流畅感骗了
- 高信任资源:先找资料,不凭模型记忆硬讲
如果你只是问「解释一下 X」,不需要它;如果你想连续几周学一个主题,它就很合适。
write-a-skill:写新 skill 的脚手架
/write-a-skill 是 Matt 对 skill 结构本身的抽象。
它要求一个 skill 至少有:
skill-name/
├── SKILL.md
├── REFERENCE.md
├── EXAMPLES.md
└── scripts/当然后三个不是必需,只有内容太长、示例有价值、或操作可脚本化时才加。
它最重要的判断是:description 是 agent 决定是否加载 skill 时唯一先看到的信息。因此 description 不能写成「帮助处理文档」这种空话,必须说明:
- 它提供什么能力
- 什么时候触发
- 触发词或上下文是什么
这和我自己写 skill 的经验一致:很多 skill 失效不是因为正文写得差,而是 description 写得太泛,agent 根本不知道该加载它。
Misc Skills
git-guardrails-claude-code:拦危险 git 命令
这个 skill 会给 Claude Code 配一个 PreToolUse hook,在执行 Bash 前拦截危险 git 命令。
默认会挡:
git pushgit reset --hardgit clean -f/git clean -fdgit branch -Dgit checkout ./git restore .
它的价值很直接:防止 agent 在你没授权时推送、硬重置、清掉未跟踪文件。
如果你经常让 AI 在真实仓库里工作,这个 skill 很值得装。它不是不信任 AI,而是把高破坏性操作放到工具层拦截,而不是靠 prompt 祈祷。
setup-pre-commit:给项目加提交前检查
/setup-pre-commit 会设置:
- Husky pre-commit hook
- lint-staged + Prettier
- typecheck
- test
它会先检测包管理器,再按项目已有 script 决定 pre-commit 里该跑什么。没有 typecheck 或 test 时不会硬造,而是省略并告诉你。
这个 skill 的价值不在配置本身,而在 Matt 的质量观:不要只让 AI 自己说代码没问题,要让它过确定性检查。
migrate-to-shoehorn:测试里少写 as
这是一个很 Total TypeScript 风格的小工具。它把测试里的 TypeScript as 类型断言迁移到 @total-typescript/shoehorn。
典型替换:
| 旧写法 | 新写法 | 场景 |
|---|---|---|
obj as Request | fromPartial(obj) | 测试里只关心大对象的几个字段 |
obj as unknown as Request | fromAny(obj) | 故意传错类型测错误路径 |
| 完整对象假数据 | fromExact(obj) | 需要强制完整形状 |
它明确只用于测试代码,不用于生产代码。
这个 skill 很窄,但很符合 Matt 的工程品味:不要为了类型系统在测试里造 20 个无意义字段,也不要用裸 as 把类型安全完全关掉。
scaffold-exercises:给课程仓库生成练习目录
这个 skill 明显来自 Matt 自己做课程的工作流。它会按规范创建:
exercises/
└── 05-memory-skill-building/
└── 05.02-short-term-memory/
├── explainer/
├── problem/
└── solution/每个子目录至少有非空 readme.md,必要时有 main.ts,并且要通过 pnpm ai-hero-cli internal lint。
它对大多数工程项目没用,但对课程、训练营、练习仓库非常实用。更重要的是,它展示了一个好 skill 的特征:把重复、机械、容易漏细节的格式工作交给 agent。
不建议现在写进主线的目录
上游仓库里还有 deprecated/、in-progress/、personal/。
我建议暂时不要把它们写成正式使用指南:
| 目录 | 为什么不放主线 |
|---|---|
deprecated/ | 已废弃,容易误导读者继续采用旧流程 |
in-progress/ | 还在实验,行为和命名都可能变 |
personal/ | 更像 Matt 自己的私人工作区,不一定适合通用读者 |
如果以后要写,可以单独做一篇「Matt Pocock skills 仓库考古」,而不是混在稳定推荐里。
这组小工具的共同点
这些 skill 看起来很散,但背后有同一个原则:
把 agent 容易漂移的事情,变成小而明确的工作模式。
caveman防止沟通漂移handoff防止上下文丢失teach防止学习变成一次性问答write-a-skill防止 skill 结构随手写git-guardrails防止危险命令靠自觉setup-pre-commit防止质量检查靠 AI 自述migrate-to-shoehorn防止测试类型断言失控scaffold-exercises防止课程结构手工漏项
这也是 Matt 这套 repo 最值得学习的地方:skill 不需要宏大。一个高频小偏差,如果能被 20 行指令稳定纠正,就值得写成 skill。
参考资源
caveman 源文件
极限压缩沟通模式,减少 token 和废话。
handoff 源文件
把当前对话压缩成下一个 agent 可接手的交接文档。
write-a-skill 源文件
按正确结构和渐进披露原则创建新的 agent skill。
teach 源文件
在一个有状态的学习工作区里持续教授新技能或新概念。
git-guardrails-claude-code 源文件
配置 Claude Code hook,拦截危险 git 命令。
setup-pre-commit 源文件
为项目配置 Husky、lint-staged、Prettier、类型检查和测试的提交前检查。
migrate-to-shoehorn 源文件
把测试文件里的 TypeScript `as` 断言迁移到 @total-typescript/shoehorn。
scaffold-exercises 源文件
按课程仓库规范生成练习目录结构,并通过课程 lint。