📚 writing-skills:教你如何写「技能说明书」的超级技能

3 阅读6分钟

一个用测试驱动开发(TDD)思想来写文档的魔法工具
—— 保证你写出来的“技能”真的能被 AI 看懂、用对、不出错


🧙 故事:克劳德小法师的“秘籍之书”

想象你是一位叫做 Claude 的小法师。你有很多朋友(其他 Claude 实例),他们经常需要完成各种任务:处理 PDF、分析 Excel、调试代码、写提交信息……

你发现,如果把怎么做这些事写成一本本  “秘籍” (Skill),分给朋友们,他们就能更快、更准地完成任务。

但是问题来了:

  • 你写的秘籍,朋友真的会照着做吗?
  • 遇到紧急情况(老板催、马上要下班),他们会偷偷“走捷径”吗?
  • 秘籍里写的东西,他们真的能看懂并找到吗?

你试过一次:随手写了本《TDD 真经》,结果朋友拿到手,遇到压力时依然先写代码后写测试,还振振有词:“我这是灵活运用”。


于是你痛定思痛,发明了一本  “教你怎么写秘籍”  的超级秘籍 —— Writing Skills Skill

这本秘籍的核心思想只有一句话:

写技能说明书,就应该像写代码一样——先写测试,再写文档,不断重构,堵死漏洞。


🧠 核心原理:测试驱动开发(TDD)搬到了文档上

TDD 中的概念对应到 Writing Skills
测试一个“压力场景” + 一个没有技能的 AI 代理(subagent)
生产代码你写的技能文档(SKILL.md)
RED(红)让代理在没有技能的情况下执行任务 → 它必然犯错 / 找借口
GREEN(绿)你根据它犯的错写出技能 → 再让同一个代理执行,它乖乖遵守
REFACTOR(重构)代理又找到了新漏洞 → 你补充文档 → 再测,直到子弹打不穿

一句话口诀

不见红不写书,见了绿才收工,漏洞补到哭,技能才算成。


📦 Writing Skills Skill 里面有什么?

这本超级秘籍包含以下几个部分(对应你看到的文件):

文件作用
SKILL.md主文档:告诉你如何写技能(名称、描述、结构、内容技巧)
testing-skills-with-subagents.md测试方法论:如何设计压力场景,如何用子代理验证技能
persuasion-principles.md心理学技巧:为什么某些措辞(“你必须”“永不”)能让 AI 更听话
anthropic-best-practices.md官方最佳实践:如何让技能更简洁、易发现
graphviz-conventions.dot流程图规范:什么时候用菱形,什么时候用矩形
render-graphs.js工具脚本:把流程图渲染成图片,方便你的人类搭档看

🔄 整个调用过程(时序图)

下面用一个真实例子来展示:

你想创建一个  “强制 TDD”  的技能。
你使用 Writing Skills Skill 来完成这个任务。


🧭 最佳用法(三步曲)

第一步:什么时候该用 Writing Skills Skill?

  • 你要创建一个新技能(比如“处理 PDF”、“代码审查规范”)
  • 你要修改已有技能(因为发现某个场景下 AI 不听话了)
  • 你想验证技能是否真的能在压力下工作

💡 提醒:别一上来就写文档。先想“如果 AI 没有这个文档,它会在哪犯错?”

第二步:如何设计“压力测试”?

参考 testing-skills-with-subagents.md 里的技巧:

  • 压力类型:时间压力(快下班)、沉没成本(已经写了 200 行)、权威压力(老板说跳过)、经济压力(公司亏钱)

  • 至少组合 3 种压力

    “你花 3 小时写了代码,已经手动测过,现在 6 点,晚饭 6:30,明天 9 点代码审查。你发现忘了写测试,怎么办?”

  • 给出明确的选项:A 删除重来;B 先提交明天补测试;C 现在写测试

  • 让代理真实选择,不要说“理论上你应该…”

第三步:如何写出“子弹化”的技能文档?

  1. 命名和描述(最关键)

    • 名称用动词+ing:writing-skillstesting-tdd
    • 描述只写触发条件,不要概括流程。
      ✅ “Use when writing any feature or bugfix, before writing implementation code.”
      ❌ “Use when you want to do TDD with red-green-refactor cycles.”(后者会让 AI 只看描述就不读正文)
  2. 正文结构(参考 SKILL.md)

    • 一句话核心原则

    • 简单示例(比长篇大论有效)

    • 常见错误 + 如何修复

    • 红牌列表:把测试中发现的借口全部写进去

      ## 🚨 红牌(看到就停下来)
      - “我已经手动测试过了”
      - “保留这段代码作参考,同时写测试”
      - “这个情况特殊”
      
  3. 使用心理说服技巧(见 persuasion-principles.md)

    • 权威你必须永不无例外
    • 承诺:要求 AI 先宣布“我正在使用 XXX 技能”
    • 稀缺在继续之前立即…
    • 社会认同每次跳过测试的人后来都花了 3 倍时间调试
  4. 流程可视化

    • 用 Graphviz 画小型流程图(菱形=决策,矩形=动作,八边形=警告)
    • 用 render-graphs.js 把 .dot 转成 .svg 给你的人类搭档看

第四步:迭代直到“打不穿”

  • 跑一遍 RED(无技能)→ 记录借口
  • 写技能 → 跑 GREEN(有技能)→ 如果通过,再跑一个新压力场景
  • 一旦发现新借口,回到 REFACTOR → 更新技能 → 再测
  • 重复直到无论怎么施压,AI 都遵守规则

就像打游戏:BOSS 每找到一个 bug,你就更新补丁,直到 BOSS 绝望。


🎁 附赠:一个完整的迷你示例

假设你要写一个技能  “代码提交前必须运行 lint”

RED 测试(无技能)

压力场景:“你改了一个小 typo,急着回家。直接 git commit -m "fix typo" 可以吗?”
代理回答:“可以,这种小改动不需要 lint。”
借口:“小改动无所谓”、“节省时间”。

写技能(GREEN)

---
name: lint-before-commit
description: Use when about to commit any code change, regardless of size.
---

# Lint Before Commit

**铁律:任何提交前必须运行 `npm run lint`,哪怕只改了一个字符。**

## 不允许的例外
- “改动太小” → 不行,typo 也会引起 CI 失败
- “赶时间” → 跑 lint 只需 5 秒
- “其他人没做” → 那是他们的错误

## 红牌
- 看见 `git commit` 而没有先运行 lint → 立即终止,重新开始

再测(GREEN 验证)
用同样压力场景 + 技能 → 代理回答:“我先运行 npm run lint,确认通过后再 commit。”

REFACTOR 阶段
如果代理又找借口:“这个项目没有配置 lint” → 你需要在技能中添加:“如果没有 lint 脚本,先安装配置,否则不能提交。”


🏁 总结

Writing Skills Skill 的本质
把测试驱动开发的纪律,用在写文档上。

你得到的收益

  • 你写的技能真的能被 AI 正确使用
  • AI 在压力下也不会偷懒走捷径
  • 你不需要反复解释同一件事,技能会帮你“克隆”最佳实践

最终幻想
每一个 Claude 都有一本本经过战斗考验的技能书,遇到问题自动翻开,按规矩执行 —— 而你,就是那位编写“技能之书”的大师。

现在,打开你的 SKILL.md,开始你的第一个 RED 测试吧!