@max_ai_max: https://x.com/max_ai_max/status/2060221653259547069
摘要
本文分享了编写一个真正可用的Claude Skill的实践指南,涵盖运行机制、目录骨架、frontmatter写作、迭代方法等,帮助开发者高效构建和调试自定义技能。
查看缓存全文
缓存时间: 2026/05/29 12:06
如何写一个真正能用的 Claude Skill
很多人第一次看到 SKILL.md 都会觉得“不就是把提示词写成文件吗“。写完一两个之后才发现:写得潦草的 skill 要么根本不被触发,要么触发了反而帮倒忙——把上下文撑爆、把 Claude 带偏、还白白烧 token。
这篇把官方 best practices、32 页 PDF guide、Reddit 上几条几千赞的帖子、以及若干一线工程师的复盘合在一起,把“写一个能用的 skill“拆成几件事讲清楚。
目录
一、先理解 skill 的运行机制:渐进式披露(Progressive
Disclosure)
二、目录骨架:一份能直接复用的模板
三、frontmatter:决定 skill 命运的“身份证“
四、正文写作:concise is everything
五、复杂任务三件套:workflow + checklist + feedback
loop
六、迭代方法:Claude A / Claude B 双开
七、必须避免的反模式
八、评估优先:在写大量文档之前先写测试
九、最终 checklist
十、一些没人告诉你的小事
一、先理解 skill 的运行机制:渐进式披露(Progressive Disclosure)
不理解这一点写出来的 skill 全是废纸。Claude 加载 skill 分三个层级:
L1 层 — 仅 frontmatter 的 name + description
-
触发时机:会话启动时
-
典型大小:~100 token / skill
L2 层 — 完整 SKILL.md 正文
-
触发时机:LLM 判定该 skill 与当前请求相关
-
典型大小:< 5000 token
L3 层 — references/、scripts/、assets/ 等子文件
-
触发时机:SKILL.md 正文中显式引用、且任务真的需要
-
典型大小:任意大
这意味着两个反直觉的结论:
-
L1 才是“决定生死“的地方——如果 description 写不清楚什么时候该用这个 skill,Claude 永远不会触发它,正文写得再好也是死字。
-
L3 没有上下文成本——你完全可以把 200KB 的 API reference 塞进 references/,只要 SKILL.md 没读它,token 就不烧。
Anthropic 自己的话:“context window is a public good”。SKILL.md 一旦被加载,每个 token 都在和对话历史、其他 skill 抢位置。
二、目录骨架:一份能直接复用的模板
四条骨架原则:
-
scripts vs references 不要混——脚本是“被执行的“,reference 是“被读取的“。在 SKILL.md 里要明确写“运行 analyze.py“还是“参考 analyze.py 的算法“。
-
路径一律用正斜杠:scripts/helper.py,不要 scripts\helper.py。Windows 风格路径在 Unix 上直接报错。
-
文件命名要描述性:form_validation_rules.md > doc2.md。Claude 是按文件名挑要不要读的。
-
引用层级控制在 1 层——SKILL.md 直接引用 reference 文件,不要让 reference 再去引用别的 reference。Claude 在嵌套引用时可能只 head -100 抽样,会漏内容。
三、frontmatter:决定 skill 命运的“身份证“
就这么两个必填字段,但每一个细节都要抠。
name 的硬规则
-
≤ 64 字符
-
仅小写字母、数字、连字符
-
不能含 anthropic、claude 这类保留词
-
推荐用动名词形式(gerund):processing-pdfs、analyzing-spreadsheets、reviewing-code
-
避开 helper、utils、tools 这种含糊的词
为什么用动名词?因为它直接表达“这个 skill 在做什么动作“。Claude 在挑 skill 时是按语义匹配,“analyzing-spreadsheets” 比 “spreadsheet” 触发率高一截。
description 的写法(这是最重要的字段)
description 不是给人看的简介,是给 Claude 做路由决策的提示。Claude 会拿用户输入和所有 skill 的 description 一起塞进上下文,让模型自己挑哪个匹配。
四条铁律:
-
第三人称——“Processes Excel files and generates reports”,不是 “I can help you…” 也不是 “You can use this…”。第一/第二人称会污染系统提示语境,导致触发不稳定。
-
同时说“做什么“和“什么时候用“——这是最常被忽略的一条。
-
塞关键词——用户可能用什么词描述这个任务,就把那些词写进去(PDF、forms、extraction、spreadsheet、.xlsx 都堆上)。
-
≤ 1024 字符,但实践中控制在 200 字以内最稳。
对比示例:
一个反复被忽视的事实:LLM 倾向于“undertrigger“
模型默认觉得“我自己就能搞定“,所以简单任务往往不触发 skill。“读一下这个 PDF” 这种请求,如果不在 description 里加 “use whenever PDF files are mentioned” 这种强信号,很可能不会激活。
复杂多步任务、专业领域任务的触发率明显更高。
四、正文写作:concise is everything
目标行数:< 500 行。超过就要拆 reference 文件。
4.1 默认假设:Claude 已经很聪明了
每写一段就问自己三个问题:
-
Claude 真的需要这段解释吗?
-
这是不是 Claude 已经知道的常识?
-
这一段值不值它消耗的 token?
对比:
啰嗦版(约 150 token):
PDF(Portable Document Format)是一种常见的文件格式,包含文本、图像和其他内容。要从 PDF 提取文本,你需要使用一个库。可用的库有很多,但推荐用 pdfplumber,因为它易于使用且能处理大多数情况。首先,你需要通过 pip 安装它…
简洁版(约 50 token):
简洁版假设 Claude 知道什么是 PDF、什么是 pip——它确实知道。
4.2 自由度匹配:narrow bridge vs open field
把 Claude 想象成一个机器人在走路:
- 悬崖之间的窄桥——只有一条安全路。给精确指令,禁止偏离。
例:数据库迁移必须按这个命令跑:python migrate.py --verify --backup,不要加任何其他参数。
- 开阔原野——很多路都通。给方向,让 Claude 自己挑。
例:Code review 时检查代码结构、潜在 bug、可读性、项目风格符合度。
判断标准:任务越脆弱、错一次代价越大,自由度就越低。
4.3 渐进式披露的三种正文模式
模式 A:高层导航 + 子文件
模式 B:按领域拆分(多领域 skill 必备)
用户问销售数据,Claude 只读 sales.md,其他 dataset 的 schema 不进上下文。
模式 C:基础 + 条件展开
4.4 给 reference 文件加目录
任何 > 100 行的 reference 文件,开头必须有目录。原因:Claude 偶尔会用 head -100 抽样,没目录的话它根本不知道后面还有什么。
五、复杂任务三件套:workflow + checklist + feedback loop
5.1 工作流 + 进度清单
复杂任务直接给 Claude 一份 checklist 让它复制到回复里逐项打勾:
这个 pattern 对降低跳步率效果立竿见影。
5.2 反馈循环:跑校验 → 修错 → 再跑
让 Claude 自己跑校验,比你事后人肉 review 高效十倍。s
5.3 Plan-Validate-Execute 模式
批量、破坏性、高风险操作,强制三阶段:
-
plan:把要做的所有变更写到一份 changes.json
-
validate:跑校验脚本检查这份 plan 是否合法
-
execute:才真正动 production 数据
校验脚本要给具体错误信息:
而不是 Validation failed。
六、迭代方法:Claude A / Claude B 双开
这是官方文档里最实用的一段,但被很多人略过。
核心思路:用一个 Claude 实例(A)帮你写和改 skill,用另一个 Claude 实例(B)真正使用这个 skill 完成任务。
完整流程:
-
不带 skill 让 Claude A 完成一次任务,注意你反复提供了哪些上下文
-
让 Claude A:“把这次的模式整理成一个 skill”——Claude 原生就懂 SKILL.md 格式,不需要任何特殊提示词
-
review 简洁度:“把’什么是胜率’那段删了,Claude 已经知道”
-
review 信息架构:“把表 schema 拆到独立文件去,将来还会加表”
-
让 Claude B 加载这个 skill 跑真实任务
-
观察 B 哪里卡住、哪里跳步、哪里没读到关键文件
-
拿这些观察回去找 Claude A 改 SKILL.md
-
循环
几条具体的观察指标:
-
意外的探索路径——B 读文件的顺序和你设想的不一样?说明结构不直觉
-
漏掉的引用——B 没去读你引用的 reference?引用要更显眼
-
过度依赖某个段落——B 反复读同一个文件?那段内容可能该挪到 SKILL.md 主文里
-
从来没被读到的文件——多余了,删掉
## 七、必须避免的反模式
时效性表述
会过期的写法:
用历史模式:
选择困难症
给一堆选项的写法:
你可以用 pypdf、pdfplumber、PyMuPDF、pdf2image…
给默认 + 逃生通道:
用 pdfplumber:
import pdfplumber
扫描件需要 OCR 时改用 pdf2image + pytesseract。
术语漂移
同一份 SKILL.md 里出现 “field”、“box”、“element”、“control” 互相替换,Claude 会在心里 reify 出多个不同概念。选一个词用到底。
voodoo constants
没人知道为什么的写法:
自解释的写法:
Ousterhout 定律:如果你都不知道这个值该取多少,Claude 怎么会知道?
脚本“甩锅给 Claude“
失败就交给 Claude 处理:
在脚本里就处理掉:
脚本能解决的不要让 LLM 来想——脚本是 deterministic,LLM 不是。
八、评估优先:在写大量文档之前先写测试
这是被 95% 的 skill 作者跳过、也是导致 skill 不好用的根本原因。
五步评估驱动开发:
-
找差距:不带 skill 让 Claude 跑一遍真实任务,记下它具体哪里失败
-
建评估:针对这些失败建 3 个测试场景
-
建立基线:测出“无 skill 时“的成功率
-
写最小 skill:只写刚好能让评估通过的内容
-
迭代:跑评估,对比基线,再改
评估的格式可以很简单:
没有官方的 evaluation runner,自己写一个 5 行 Python 脚本调 API 跑一遍就行。
为什么要 evaluation-first?因为大多数 skill 是在解决“想象中的问题“——作者觉得用户会需要、实际从来没人触发那个分支。Eval 强迫你先证明问题真的存在。
九、最终 checklist
发布前过一遍:
核心质量
-
description 含具体关键词 + “什么时候用”
-
description 全程第三人称
-
SKILL.md 正文 < 500 行
-
reference 文件层级 ≤ 1
-
长 reference 有目录
-
全文术语一致
-
无时效性内容(或放在“old patterns“)
-
例子是具体的,不是抽象的
脚本
-
脚本自己处理错误,不甩锅
-
没有 magic numbers
-
列出依赖包并说明怎么装
-
路径全用 /
-
关键操作有校验/反馈环
测试
-
至少 3 个 evaluation
-
在 Haiku、Sonnet、Opus 都测过
-
用真实 workflow 跑过(不是只跑 eval)
十、一些没人告诉你的小事
-
skill 没有版本字段——但 frontmatter 里有可选的 metadata map,把 version、author、last-updated 塞进去。更好的做法是把整个 skill 目录扔进 git。
-
Claude Code 有热重载——改了 SKILL.md 直接保存,下一轮交互就生效,不用重启。但这也意味着你不能边跑生产任务边改 skill。
-
allowed-tools 字段(实验中)——可以声明 skill 只能用哪些工具,比如 Bash(git:*) Read。一个写 Word 文档的 skill 突然要 shell 全权限就是危险信号。
-
从 marketplace 装 skill 前先读它——SKILL.md 是纯文本。装一个 skill 等于把作者的指令注入你的上下文窗口。这就是 prompt injection 的另一种包装。优先用项目级 .claude/skills/ 限制爆炸半径,慎用全局 ~/.claude/skills/。
-
跨平台可用——agentskills.io 是开放标准,你今天写的 skill 同样能在 VS Code Copilot、Cursor、OpenAI Codex 里跑。这是相比闭源 prompt 模板的最大优势。
写在最后
skill 不是万灵药。它适合程序化的领域专长——多步流程、格式规则、代码模式、校验清单、领域陷阱。它不适合需要长期记忆、复杂动态分支、实时反馈的场景——那些东西该用 agent 框架或专门的工具解决。
但凡你发现自己在不同对话里反复粘贴同一段上下文,那就是该写一个 skill 的时刻。
相似文章
Skills Make Claude 10x More Powerful
本文介绍Claude中的“技能”功能,它是一组可复用的指令和上下文,能自动化常见任务、减少重复输入提示词。文章详细说明了如何创建、测试和共享自定义技能,以及安全注意事项。
@AomyYing: https://x.com/AomyYing/status/2062414031244398791
这篇文章介绍如何通过创建和销售Claude Skills(即插即用的AI专家工作流文件)来实现被动收入,详细说明了从选题、定义、编写SKILL.md文件到测试、发布和营销的完整变现流程。
@ZionFeng3364: https://x.com/ZionFeng3364/status/2062702195750191182
本文介绍如何利用 Claude Code 的 Skill 功能在十分钟内构建个人工作流,将重复性任务固化为可触发的自动化流程,并展示了装 Skill、写 Skill、组合 Skill 三种能力。
@axichuhai: https://x.com/axichuhai/status/2062146611472400461
分享8个精选的AI Skill(技能),涵盖基础配置、产品开发和内容创作,帮助提升AI生产力,适用于Claude Code和CodeX等Agent。
@ai_suxiaole: 看到一个 Claude Skills 合集: claude-skill 19K 它收录了 170 个生产级技能包,覆盖工程、产品、营销、合规、管理等 9 个领域 每个技能包都包含指令文档、Python 工具脚本和参考资料,可以直接安装使用…
该项目收录了170个生产级Claude技能包,覆盖9个领域,包含指令文档、Python脚本和参考资源,可直接安装使用,支持多种AI编码工具。