教程2026-10-19 · 智涌AI

10 分钟写出第一个 Agent Skill:SKILL.md 怎么写、怎么校验、4 个坑

如果你每次让 AI 校对公众号稿,都要把「中英文之间加空格、别用半角逗号」这几条规矩再粘贴一遍,那就该把它写成一个 Skill 了。我在自己的 Linux 机器上照着 Agent Skills 规范从零写了一个,又用官方工具校验、打包了一遍,下面只写实际跑出来的结果。

10 分钟写出第一个 Agent Skill

本文依据的一手资料:agentskills.io 上的 Agent Skills 规范、Claude 文档里的《Skill authoring best practices》、Claude Code 的 Skills 文档,以及 Anthropic 开源的 anthropics/skills 仓库(本文核对的是 2026-10-09 的最新提交)里的 skill-creator。之前我们拆过一个现成的 Skill(古人说唱 Battle),这篇讲怎么自己写一个。

Skill 是什么:一份按需加载的说明书

一个 Skill 就是一个文件夹,里面至少有一个 SKILL.md:开头是 YAML 头信息(name 和 description 必填),后面是用 Markdown 写的操作说明,旁边还可以放 scripts/、references/、assets/。

它和把规则写进 CLAUDE.md 或系统提示词的区别在于渐进加载。规范写得很具体:启动时只加载所有 Skill 的 name 和 description(约 100 token);判断任务相关时才读 SKILL.md 正文(建议少于 5000 token、500 行以内);脚本和参考文件要用时才读,脚本甚至可以只执行、不进上下文。所以装几十个 Skill 也不会把上下文撑满。

Claude Code 文档给的判断标准很好用:当你总在对话里粘贴同一段说明、检查清单或多步流程,或者 CLAUDE.md 里某一节已经从「事实」长成了「流程」,就该写成 Skill。

前置条件

第一步:起名字,写 description

先建目录,目录名必须和 name 一致:

mkdir -p ~/.claude/skills/checking-zh-copy/scripts
cd ~/.claude/skills/checking-zh-copy

name 的规则:最多 64 个字符,只能用小写字母、数字和连字符,不能以连字符开头或结尾,不能出现连续的 --。Claude 文档推荐用动名词,例如 processing-pdfs,避免 helper、utils 这种含糊的名字。

description 才是重点,Agent 就是靠它决定什么时候调用你的 Skill。它最多 1024 个字符,要同时写清做什么和什么时候用,并且用第三人称来写(它会被注入系统提示词,人称不一致会影响识别)。skill-creator 里还提醒了一句:模型目前倾向于「该用的时候不用」,所以 description 可以写得积极一点,把用户可能的各种说法都列进去。

第二步:写 SKILL.md 正文

---
name: checking-zh-copy
description: 检查并修正中文文案的排版问题:中英文/数字之间缺空格、中文句子里混用半角逗号句号、连续感叹号。当用户要求校对、润色、检查排版,或提到公众号稿、文案、README 中文版时使用,即使用户没说「排版」两个字。
---

# 中文文案排版检查

1. 运行 `python3 scripts/check.py 文件路径`,它会逐行列出问题(行号、类型、原文片段)。
2. 只改脚本报出的问题,不改措辞、不改观点。
3. 改完再跑一遍脚本,直到输出 `OK`。
4. 最后给用户一张「改了哪几处」的清单。

例外:代码块、URL、命令行里的内容不要改。

这十几行对应了最佳实践里的三条:只写模型不知道的(不用解释什么是排版);易错的步骤交给脚本(低自由度,结果稳定);形成反馈闭环(检查 → 修改 → 再检查,直到 OK)。

第三步:写一个检查脚本

把能确定判断的规则写成脚本,比每次让模型「注意一下」可靠得多,也省 token。我的 scripts/check.py 核心只有三条正则:

RULES = [
    ("中英文之间缺空格", re.compile(r"[\u4e00-\u9fff][A-Za-z0-9]|[A-Za-z0-9][\u4e00-\u9fff]")),
    ("中文后用了半角标点", re.compile(r"[\u4e00-\u9fff][,.!?;:]")),
    ("连续感叹号", re.compile(r"[!!]{2,}")),
]
# 跳过 ``` 代码块,去掉 URL 和 `行内代码` 后逐行匹配;
# 没问题输出 OK、退出码 0,有问题列出明细、退出码 1

拿一句「用Claude写周报,效率翻倍!!」测试,脚本报了 5 处:两处缺空格、两处半角标点、一处连续感叹号,退出码为 1;代码块里的 npm i -g foo,bar 被正确跳过。退出码很重要,Agent 靠它判断这一轮是否通过。

规则能写成脚本的,就别写成提示词:脚本只执行、不进上下文,结果每次都一样。

第四步:用官方工具校验、打包

有两个现成的校验工具。一个是 anthropics/skills 仓库里 skill-creator 自带的脚本,另一个是规范页面推荐的参考库 skills-ref(PyPI 上当前是 0.1.1):

# 1) skill-creator 自带
git clone --depth 1 https://github.com/anthropics/skills
pip install pyyaml
python3 skills/skills/skill-creator/scripts/quick_validate.py ~/.claude/skills/checking-zh-copy
# → Skill is valid!

# 2) 规范参考库(注意命令名,见下面的坑)
pip install skills-ref
agentskills validate ~/.claude/skills/checking-zh-copy
# → Valid skill: checking-zh-copy

# 3) 打包成 .skill(本质是 zip),方便分享
cd skills/skills/skill-creator
python3 -m scripts.package_skill ~/.claude/skills/checking-zh-copy ./out

打包产物 checking-zh-copy.skill 只有 1.5 KB,用 unzip -l 看就是 SKILL.md 加 scripts/check.py。agentskills to-prompt 还能输出 Agent 启动时实际看到的 <available_skills> 片段,可以用来检查 description 读起来是否清楚。

放进 ~/.claude/skills/ 后,在 Claude Code 里可以直接输入 /checking-zh-copy 调用;说「帮我校对这篇公众号稿」时,Claude 也会根据 description 自己决定是否加载它。如果你只想手动调用、不想让它自动触发,可以在头信息里加 disable-model-invocation: true。

常见坑:我实测踩到的 4 个

我故意写错了几个版本,分别交给两个工具校验:

写错的地方quick_validate.pyagentskills validate
name 带大写报错报错
目录名和 name 不一致通过报错
description 带尖括号报错通过
name 带 claude通过通过

完成标准

说明:我在机器上验证了目录结构、两个校验工具、脚本和打包;自动触发效果和模型、客户端有关,请以你自己的 Agent 实测为准。

最后

挑一件你这周重复交代了 3 次以上的事,照上面四步写成你的第一个 Skill,今天就放进 ~/.claude/skills/ 试一次。

📬 订阅《智涌AI周报》

每周一封,精选 AI 大事和实用技巧。