SKILL 33 / PKM · DEEP DIVE

从重复劳动里长出自己的 Skill

观察「每次都要重新解释的东西」——一次真实任务 → 一个 skill 的最短路径

2026-10-04 · BigCat

上一期的结论是「产出层得自己写」。这一期回答怎么写:别坐下来凭空写 skill,先把活干完一遍,再让模型把你纠正过它的地方抽出来。下面点名 9 个真实可装 / 可读的条目,官方文档、官方插件、内置命令和一份社区方法论都有。

同系列 → Skill 32 个人生产力类榜单 · Skill 7 给 Skill 写 Eval · Skill 27 Hooks 与确定性自动化

// WHY THIS MATTERS

Claude Code 官方文档给「什么时候该建 skill」写了一句判据:Create a skill when you keep pasting the same instructions, checklist, or multi-step procedure into chat——当你反复往对话里粘同一段指令、清单或多步流程时。claude.com 的教程换了个说法:当你发现自己用同样的话纠正 Claude。两句话指向同一个信号:重复解释就是 skill 的原材料。问题只剩一个——怎么把它从对话里捞出来,而不是坐下来另写一份泛泛的「最佳实践」。

// 01

它替你干掉什么 · 装法 · 第一条能跑的用法

论断:最短路径只有三步——照常把活干完 → 一句「turn this into a skill」→ 拿下一个真实任务去验。

它替你干掉的是「每个新会话从头解释一遍」:表名和口径、你们的报告格式、「这类请求先排除测试账号」这种规矩。主力工具是官方的 skill-creator:

# Claude Code:官方 marketplace 里的 skill-creator 插件
/plugin install skill-creator@claude-plugins-official
# 若报 Marketplace not found,先加官方 marketplace 再重装
/plugin marketplace add anthropics/claude-plugins-official

# 第一条用法:在刚干完活的同一个会话里说
把我们刚才这套流程做成一个 skill,用 skill-creator。
重点保留我中途纠正你的那几处。

为什么要在同一个会话里说?因为 skill-creator 的第一步 Capture Intent 写明:如果当前对话里已有用户想捕获的流程(比如用户说 turn this into a skill),先从对话历史里抽答案——用过的工具、步骤顺序、用户做过的纠正、观察到的输入/输出格式,缺的再问你、并让你确认。换个新窗口,这些原材料就全丢了。

它写出来的文件放哪:~/.claude/skills/<name>/SKILL.md 是个人级(本机所有项目生效),.claude/skills/<name>/SKILL.md 是项目级(提交进仓库给团队用)。之后 Claude 会按 description 自动调用,你也可以直接敲 /<name>。

别装的时候:这件事你只做一次。官方 claude.com 教程原话——一次性任务,直接在对话里描述就行。
// 02

机制:为什么「先干一遍再抽」比「直接让它写」好

论断:凭空生成的 skill 只有模型的通识;从真实任务里抽出来的,才装着它不知道的东西。

Agent Skills 开放规范的官方站 agentskills.io 在《Best practices for skill creators》开篇就点名了这个坑:只让 LLM 凭训练知识写 skill,得到的是「妥善处理错误」「遵循认证最佳实践」这类空话。它给的第一种解法就叫 Extract from a hands-on task,让你盯四样东西:

Anthropic 的《Skill authoring best practices》把同一件事写成 Claude A / Claude B 七步:先不用 skill 和 Claude A 把任务做完,Notice what information you repeatedly provide;再识别可复用模式、让 A 写 skill、删掉多余解释、整理信息结构;然后开一个装了 skill 的新实例 B 去做相似任务,观察它漏了什么,带回给 A 改。官方还特意提示:不需要专门的「写 skill 的 skill」,直接让 Claude 写它就会按格式写。

社区这边最硬的一份是 obra/superpowers 里的 writing-skills,它把这件事当 TDD 做:先跑没有 skill 的基线、记下 agent 的原话借口(RED),再写只针对这些违规的最小 skill(GREEN),最后堵漏洞(REFACTOR)。它的核心句是:If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing.

干一遍(Claude A) 抽取 验(Claude B · 新会话) ────────────────── ─────────────────── ────────────────────── 真实任务 + 你的纠正 → 步骤 / 纠正 / 格式 / → 相似的下一个真实任务 上下文 → SKILL.md 漏了什么 → 带回 A 改
// 03

真实用法与边界:哪些重复该长成 skill,哪些不该

论断:重复是必要条件,不是充分条件。三类重复各有更好的归宿。

怎么发现重复

三类不该长成 skill 的重复

两个必须设对的开关

有副作用的流程(部署、提交)在 frontmatter 加 disable-model-invocation: true,只允许你手动 /name 触发。需要当下数据的,用 !`git diff HEAD` 这种行内命令——它在 Claude 看到 skill 之前就执行,把实时输出注入进去。

// 04

代价与替代品

论断:skill 不是越多越好;长出来之后,你还欠它一次验收。

① 过拟合到那一次任务

skill-creator 自己警告:你们在几个例子上反复迭代,是因为快;但如果 skill 只对这几个例子有效,它就没用——要造的是能被用一百万次的 skill,而不是塞「抠细节的补丁和压迫性的 MUST」。抽出来之后必须换一个没见过的真实任务去验。

② 清单预算会挤掉冷门 skill 的描述

官方文档:skill 名字和描述常驻一份清单,预算是模型上下文窗口的 1%;超了就从你最少调用的 skill 开始丢描述,丢了描述它就很难被自动触发。单条 description 加 when_to_use 也会在 1,536 字符处截断。加载后的 body 会一直留在上下文里,每一行都是持续的 token 成本。

③ 菜谱会过期

记下来的流程只对记录那天的环境成立。官方对 /run-skill-generator 的要求就是:构建或启动方式变了,再跑一次。个人 skill 没有这种提醒,过期了只会悄悄跑错。

替代品,按成本从低到高:直接粘贴(一次性)→ CLAUDE.md 一行(每次都该知道的事实)→ hook(必须每次成立的规则)→ 一个 skill(反复粘贴的流程)→ 打包成 plugin(多个 skill 要一起装、一起分享)。先问能不能往左挪一格。
来源:Claude Code · Extend Claude with skills(清单 1% 预算、1,536 字符截断、body 常驻、hook 排障) · skill-creator SKILL.md(「一百万次」)(均据各页 2026-10)

// 一页选购卡

先装这三个:① /plugin install skill-creator@claude-plugins-official——干完活在同一个会话里说「把这套做成 skill」,它从对话历史里抽步骤和你的纠正,再跑有 / 无 skill 的对比。② 读一遍官方《Skill authoring best practices》里的 Claude A / Claude B 七步,照它的节奏验。③ 读 obra/superpowers 的 writing-skills——不必装整套 Superpowers,只抄它「先看 agent 失败再写」的 RED 步骤。

按需再加:/run-skill-generator(项目启动步骤复杂时)· /insights(本地会话多、想找自己在哪反复卡住)· anthropics/skills 的 template/(手写时的最小骨架) · skills-ref validate(要分享前校验 frontmatter)。

明确别做:凭空让模型「写一个某某 skill」而不给真实上下文 · 在新会话里补抽取(原材料已丢)· 把每次都该知道的事实写成 skill · 把必须成立的规则只写在 skill 里。

// 术语表

Capture Intent
skill-creator 的第一步:先从当前对话里抽出工具、步骤、纠正、输入/输出格式,缺口再问你。
Claude A / Claude B
官方迭代法:A 陪你写 skill,B 是装了 skill 的新实例,负责在真实任务里暴露漏洞。
基线(baseline)
不装 skill 时模型怎么做。没有基线,就不知道 skill 到底改了什么。
disable-model-invocation
frontmatter 开关,设为 true 后 Claude 不会自动调用,只能你手动 /name。
清单预算(listing budget)
所有 skill 名字与描述常驻上下文的那份清单,占上下文窗口的 1%,超出后先丢最少用的 skill 的描述。

// 三个想不通的地方

官方说 description 要写「做什么 + 什么时候用」,writing-skills 却说只写「什么时候用」,听谁的?
两者的出发点不同。官方要的是被选中:Claude 要从上百个 skill 里挑,description 得有关键词。writing-skills 防的是被选中之后不读正文:它记录过一次实测,description 里概括了流程(「任务间做 code review」),agent 就只做了一次 review,跳过了正文流程图里的两段式审查;改成只写触发条件后才按正文走。我的折中:写清「什么时候用」和关键词,别把步骤摘要塞进去——流程本身留给正文。
「重复几次才值得做成 skill」有没有标准答案?
官方文档没有给次数,只给了形态:反复粘贴的指令、清单、多步流程,或者你用同样的话纠正 Claude。我自己的经验线是第三次重新解释同一件事时动手——这是个人习惯,不是官方规则。更好的判据是成本:如果它能用 CLAUDE.md 一行解决,就别建 skill;如果它会出事故,就上 hook。
既然直接让 Claude「写个 skill」它也会写,为什么还要先干一遍?
因为它写的是它已经知道的东西。agentskills.io 的判据是:逐条问「没有这条指令,agent 会做错吗?」——不会就删。凭空写出来的 skill,大部分条目都过不了这一问;从真实任务里抽出来的,留下的正好是你纠正过它的那几处。这也是为什么 skill 要在同一个会话里抽,新窗口里它只能回到通识。

// 延伸阅读