Skills 编写教程

如何编写 Skills

30 分钟主线 11 个递进模块 6 张重点信息图 + 7 张结构图
repeated-workflow.log
1每次都要提醒 agent:先读文件、再跑验证、最后输出固定格式。
2每次都要重复写:哪些工具可以用,哪些资料必须先看。
3每次都要纠正:触发条件、边界、常见错误和验收标准。
沉淀为一个可复用能力包
---
name: my-workflow-skill
description: Use when the user asks to run this recurring workflow.
---

1. Confirm the real input and boundary.
2. Load only the references needed for this branch.
3. Execute the workflow with verification.
4. Report result, evidence, and remaining uncertainty.
0

为什么需要 Skills

Skill 解决的不是“模型不会写代码”,而是“同一类工作每次都要重新解释、重新纠错、重新找资料”。当一个工作流反复出现、容易漏步骤、需要固定资源或脚本时,就值得沉淀成 skill。

从临时提示到可复用 Skill 重复提示 工具顺序、输出格式 重复纠错 边界、gotchas、验收 重复找资料 schema、模板、示例 skill/ ├── SKILL.md ├── references/ ├── scripts/ └── assets/ 可复用、可审查、可迭代 Agent 按需读取和执行
判断标准:如果你已经第三次写同一段长 prompt,通常该考虑 skill。
适合写

重复出现的工作流

例如每周报告、固定文件转换、CI 失败排查、设计实现检查。

适合写

有私有上下文的任务

例如内部 schema、团队规范、模板、常用脚本和验收标准。

不必写

一次性简单请求

如果模型本来就能稳定完成,普通 prompt 更轻。

一句话:Skill 是给 agent 的可复用操作手册和工具包,不是把 prompt 写得更长。

1

Skill 的最小可运行模型

最小 skill 只有一个文件夹和一个 `SKILL.md`。`name` 是身份,`description` 是触发入口,正文是触发后才会读取的操作说明。

最小 Skill 文件结构 roll-dice/ SKILL.md 可选资源目录 最小版只需要 SKILL.md。
先把最小文件写对,再决定是否增加资源目录。
SKILL.md最小示例
---
name: roll-dice
description: Roll dice using a random number generator.
  Use when asked to roll a die, roll dice, or generate
  a random dice roll.
---

To roll a die, generate a random number from 1 to the
requested number of sides.

读这个示例时看三件事

  • `name` 使用小写和连字符,短且可识别。
  • `description` 同时写“做什么”和“什么时候用”。
  • 正文只写触发后才需要知道的执行方法。

如果 `description` 写得模糊,skill 再强也可能不会被正确触发。

2

先发现和复用高质量 Skills

不必默认从空白文件开始写。更稳的路径是先看官方 skill、一手仓库和维护良好的社区案例;但安装前必须完整审计,确认没有错误、隐私泄露风险或安全风险,再决定安装、改造或放弃。

如何判断一个已有 skill 值不值得安装? Star 是线索,不是结论

候选来源

1官方示例:优先级最高,规范最可信。
2高 star 仓库:说明有人关注,但仍需审查。
3同类任务历史:和你的真实工作流最接近。

安装前完整审计

A完整阅读 `SKILL.md`、references、scripts、assets 和依赖说明。
B检查是否有硬编码密钥、私有路径、上传日志、外部回传等隐私风险。
C检查脚本是否会删除文件、改全局配置、联网、读取凭据或自动执行危险命令。
D确认触发条件、停止条件、示例和验证方式没有明显错误或 bug。

处理结果

审计通过,任务匹配,先在低风险环境试用。
结构好但边界不同,删除风险内容后定制自己的版本。
触发模糊、脚本不可审、隐私或安全边界不清。
这张图把“找高质量 skill”拆成来源、安装前审计和处理结果:没有读完和审完,不要安装。
先找

官方和高质量仓库

优先看官方示例、活跃维护的 repo、star 较高且最近仍有更新的 skill 集合。Star 是线索,不是结论。

先审

完整阅读和安全检查

安装前自己读完,或让 AI 辅助审计所有说明、脚本、依赖、网络访问和隐私风险。

再试

低风险环境试跑

不要直接上真实项目。先用样例或临时目录试跑,观察是否触发准确、步骤完整、输出稳定。

再改

基于成熟模式定制

保留好结构,替换业务规则、私有资源、验收标准和语言偏好,避免无意义重写。

能复用也要先审计。自己写或改 skill 的价值,不只是复用结构,更是把隐私、安全、触发边界和验收标准控制在自己能负责的范围内。

把个人经验校准成可教学规则 经验可用,但必须标注证据级别
AI 生成草稿 官方文档支持用 `$skill-creator` 起步;但草稿不等于可用 skill,后面必须审核和验证。
复用已有 skill 官方和一手仓库可作为高置信参考;GitHub star 只能作为发现线索,不能当作质量证明。
真实链路提炼 “把工作过的线程、runbook、测试命令转成 skill”有官方支持;中文 workflow 审核是适合中文团队的实践。
迭代但不过拟合 官方 eval 建议用真实 prompt、trace 和检查项防回归;单个失败不要直接写成狭窄特判。
教程后续会把“经验”写成经过来源校准的推荐流程:能被官方或一手实践支持的强化,缺少标准依据的加限定。
3

Skill 的构成:四类文件各司其职

无论是复用别人的 skill,还是让 AI 生成自己的 skill,都要看懂它的文件结构。把所有信息塞进一个 `SKILL.md` 会污染上下文;好的 skill 会把“每次都要看”和“特定分支才要看”的内容分层。

Skill 目录结构和职责 my-skill/ ├── SKILL.md ├── references/ ├── scripts/ ├── assets/ └── agents/ required: SKILL.md optional: 资源目录和 UI 元数据 SKILL.md 核心流程、决策树、输出模板 每次触发都要读 references/ API 文档、schema、规范 按场景读取 scripts/ 确定性、重复、易错流程 可直接运行 assets/ 模板、图片、字体、样例 用于最终产物 agents/openai.yaml UI 元数据、默认 prompt、工具依赖
分层的目标是减少上下文占用,同时让 agent 知道每个资源在什么时候有用。

正文适合放什么

  • 必须遵守的流程和安全边界。
  • 选择路径的决策树。
  • 短模板、短示例、关键 gotchas。

资源目录适合放什么

  • 长文档、API 细节、schema、参考表。
  • 重复写错的脚本和验证器。
  • 最终输出要复用的模板和素材。
4

原理:Progressive Disclosure

Skill 的关键设计是渐进披露:不是一开始把所有资料塞进上下文,而是先暴露最小索引,任务匹配后再逐层加载。

Progressive Disclosure 三层加载 启动时 metadata name + description + path 每个 skill 只暴露一点索引。 Codex 用这些信息判断是否相关。 匹配任务时 SKILL.md body 流程、边界、关键示例 这时才加载完整操作说明。 所以正文不负责“提醒触发”。 执行中 resources references / scripts / assets 需要哪个分支,就读哪个文件。 脚本可执行,不必全文塞上下文。 上下文预算:先少量索引,再按需展开;description 要前置关键词。
OpenAI 文档说明 Codex 初始 skills 列表有上下文预算,skill 多时会优先缩短 description。
5

Skill 和 Prompt、Tool、MCP、Subagent 的区别

这些概念经常被混在一起。最简单的判断:skill 是“如何完成一类任务”的可复用知识和流程,tool/MCP 是“能调用什么”,subagent 是“谁来做”。

概念
主要用途
是否可复用
是否携带文件
典型例子
Prompt
一次性指令
低,复制粘贴为主
“帮我写一个提交信息”
AGENTS.md
项目/全局工作契约
高,但偏长期规则
通常否
代码风格、权限、沟通规则
Skill
任务能力包
高,可触发、可迭代
PDF、CI 修复、安全威胁建模
Tool / MCP
实际外部能力接口
高,偏操作能力
不负责教学流程
GitHub、Playwright、数据库
Subagent
独立上下文执行者
按任务临时使用
由任务决定
并行调研、独立验证、对抗审查
Skill 在 Agent 工作中的位置 Skill 告诉 agent 何时、为何、按什么顺序做 SKILL.md references/ scripts/ Tools / MCP 提供可调用能力 Subagent 提供独立执行上下文 用户任务 完成一个具体目标 并交付可验证结果
Skill 不替代工具;skill 教 agent 如何可靠地使用工具。
6

现代写法:让 AI 生成 Skill 草稿

很多场景下,skill 不必从空白文件手写,可以先用 `skill-creator` 这类 creator skill 生成结构化草稿。注意:AI 生成只解决“起草成本”,不证明 skill 准确、可用或符合要求;人的工作重点是提供真实输入、审核逻辑、控制边界并验证效果。

用 `skill-creator` 时,人和 AI 分别负责什么? 关键不是“自动写”,而是“可审核地生成”

你负责决策

  • 任务边界:什么请求应该触发,什么不该触发。
  • 真实素材:任务记录、输入样例、失败案例、已有脚本。
  • 验收标准:成功输出长什么样,必须验证什么。
  • 风险边界:哪些动作必须先问,哪些不能做。
你给的是“真实工作流和判断标准”。

AI 负责生成

  • 把流程整理成 `SKILL.md` 的可执行步骤。
  • 把长资料拆到 `references/`,把重复操作建议脚本化。
  • 生成触发描述、不触发条件、停止条件和输出模板。
  • 根据审核和验证结果重写,而不是一次定稿。
AI 产出的是“可审查的 skill 草稿”。
这张图强调职责分工:人给真实边界和验收,AI 做结构化生成,最后仍由人审核和测试逻辑是否成立。
1. 给目标说明这个 skill 要解决哪类重复任务,什么时候应该触发,什么时候不应该触发。
2. 给素材提供真实任务记录、示例输入、输出样例、失败案例、已有脚本或模板。
3. 让 AI 生成用 `$skill-creator` 或同类 creator skill 生成目录、`SKILL.md`、references、scripts 建议。
4. 人来审核和验证重点看触发边界、执行顺序、安全停止条件、是否过度宽泛,并用真实 prompt 跑一次。
推荐请求方式给 skill-creator
$skill-creator
请根据下面这类真实任务,先提炼 workflow,再生成一个可安装的 skill。
要求:
1. 先输出中文 workflow 框架让我审核。
2. 审核通过后再生成完整 skill 内容。
3. 如果团队认为更利于模型理解,可把给模型读取的核心说明转成英文。
4. 无论 skill 内部说明用什么语言,与用户交互和最终输出默认保持中文。
5. 标出触发条件、不触发条件、安全停止条件和验证方式。
6. 生成后先用 2-3 个真实 prompt 手工试跑;准备分享前再扩展到 10-20 个测试 prompt。

AI 生成不是跳过设计,也不是质量保证;它只是把“写 Markdown 草稿”的体力活交给 AI,把“这个 workflow 是否真的成立、是否经过验证”的判断留给人。

7

从真实链路提炼,而不是凭空设计

自己撰写 skill 时,更可靠的素材来自已经跑通过的真实链路:工作过的线程、runbook、测试命令、评审规则、失败修复记录。等任务跑通后,再从真实过程里提炼 skill,而不是一开始就写一份抽象规则。

从一次真实执行提炼 skill:不要跳过中间审核层 真实轨迹 → 可审核框架 → Skill 草稿
1. 真实跑通 让 AI 在真实文件、真实环境、真实目标下完整完成一次任务。
2. 抽取轨迹 记录输入假设、工具顺序、失败恢复、验证命令和输出格式。
3. 可审核框架 先让 AI 提炼 workflow 框架。中文团队可先用中文,方便检查逻辑是否完整。
4. 生成 skill 审核通过后再生成 `description`、正文、references 和 scripts。
5. 规范化核心 核心规则要短、明确、可触发。是否英文化是可选实践,不是标准要求。
这张图把“从经验到 skill”的中间层画出来:先审核 workflow,再进入完整 skill 生成;中文框架和英文化只是可选语言策略。
从真实任务到 Skill 的生产线 真实任务 真实文件 真实环境 完整跑通 分步指导 真实验证 审核框架 workflow 先人工审核 生成草稿 SKILL.md 资源拆分 规范化 短而明确 语言策略可选 测试迭代 真实 prompt with/without 好 skill = 真实执行轨迹 + 人工审核 workflow + 明确触发边界 + 可验证反馈环
真实任务比抽象“最佳实践”更能暴露 skill 需要处理的边界。

推荐提炼顺序

  1. 先让 AI 按你的指导完整完成一次真实任务。
  2. 让 AI 先提炼可审核的 workflow 框架,而不是直接写最终 skill。
  3. 你审核框架,补上遗漏边界、失败恢复和验收标准。
  4. 审核后再生成完整 skill 内容,必要时先保留中文。
  5. 如果团队认为有必要,再把给 AI 读取的核心说明转成英文;这不是官方强制要求。

语言策略

  • 官方资料强调清晰、具体、可触发,没有把英文写成硬性标准。
  • 给模型读的流程、触发条件、停止条件可以英文,也可以用团队更容易审核的语言。
  • 面向用户的交互、输出格式、报告语言要单独明确,例如“默认中文输出”。
8

使用中迭代:变稳,但不要过拟合

Skill 很难一次做到很好。正确做法是多使用、记录偏差、提炼共性,再用真实 prompt 和执行 trace 验证改动;错误做法是每遇到一个孤立失败就加一条很窄的规则。

迭代 skill 时,什么是过拟合?什么是通用改进? 先看模式,再改规则

过拟合式修改

  • 只因为一次失败,就写一条很窄的特判。
  • 把某个文件名、某个临时路径、某个异常状态写死。
  • 规则越加越多,但触发范围越来越混乱。
结果:这个案例好了,其他任务更容易坏

通用改进式修改

  • 先比较 2-3 个真实样例,确认失败有共性;分享前扩展到 10-20 个 prompt。
  • 把共性提炼成触发边界、决策树、验证步骤或脚本。
  • 同时补充反例,说明哪些请求不该触发。
结果:一类任务整体更稳定
这张图把“迭代优化”和“过拟合修补”区分开:只有能改善一类任务,并经真实 prompt 或 trace 验证的规则,才适合写进 skill。
内容应该放在哪里的决策图 这次反馈是什么? 触发不准 改 description 流程漏步 改 SKILL.md 重复易错 加 scripts/ 长资料缺失 加 references/ 原则:先判断失败属于哪一类,再改最小合适位置,不要把正文越写越臃肿。
迭代时要改对位置:触发问题改 description,稳定操作脚本化,长资料放 reference。
多跑真实任务
早期至少保留 2-3 个不同输入;准备复用或分享时扩展到 10-20 个 prompt。
记录失败类型
区分触发错误、流程漏步、工具误用、验收不清。
优先通用规则
把共性写成原则、决策树或脚本,不写狭窄特判。
保留反例
明确哪些请求不应该触发,避免 skill 过宽。
with/without 对照
比较有 skill 和没 skill 时输出稳定性是否真的提高。
审查副作用
第三方或脚本型 skill 要审查依赖、网络、凭据和写入边界。

避免过拟合的判断:如果一条规则只能解释一次失败,而且会让其他任务更难做,先不要写进 skill;先把它放进待观察记录。

9

常见 Skills 类型

最适合做 skill 的不是“某个知识点”,而是会反复出现、容易出错、带固定验收标准的工作流。

文件类

PDF / DOCX / PPTX / XLSX

适合封装工具选择、格式坑、渲染检查和模板复用。

工程类

CI / 安全 / 部署

适合封装日志读取顺序、审批边界、验证命令和停止条件。

研究类

搜索 / 引用 / 证据

适合封装来源优先级、过滤标准、引用格式和不确定性标注。

前端类

设计 / 截图 / 响应式

适合封装 UI 标准、浏览器验证、截图检查和常见布局风险。

团队类

Runbook / 评审 / 文档

适合封装团队偏好、输出格式、角色分工和历史教训。

内容类

日报 / PPT / 长文

适合封装选题、素材整理、风格统一、发布前检查。

选题原则:高频、易错、有固定资源、有验收标准,四个条件满足得越多,越值得做成 skill。

10

练习:用 AI 起草第一个最小 Skill

这个练习的目标不是背答案,而是学会把“功能要求、触发边界、输出格式、停止条件和 description”说清楚,再让 `$skill-creator` 起草。

题目要求

  • 创建一个 `commit-message-helper` skill。
  • 当用户要求“写、润色、选择 commit message”时触发。
  • 输入来源必须是当前仓库的 staged git diff。
  • 输出 3 个 Conventional Commit 候选。
  • 每个 subject 不超过 72 个字符。
  • 只有从路径或 diff 能明显看出 scope 时才写 scope。

边界和停止条件

  • 如果没有 staged diff,必须说明无法生成,不要编造。
  • 不要执行 `git commit`,只生成候选信息。
  • 用户只是问 Conventional Commit 规范时,不一定要触发这个 skill。
  • `description` 要准确、简洁、具体:说明任务对象、输入来源和触发场景。
commit-message-helper/SKILL.md参考草稿
---
name: commit-message-helper
description: Draft 3 concise Conventional Commit candidates
  from staged git diffs. Use when the user asks to write,
  polish, or choose a commit message for staged changes.
  Do not use for general Conventional Commit explanations.
---

1. Inspect the staged diff with `git diff --staged`.
2. If no staged changes exist, stop and say no staged diff is available.
3. Identify the primary change type from the diff.
4. Output 3 candidate Conventional Commit messages.
5. Do not run `git commit`.
6. Keep each subject under 72 characters.
7. Mention scope only when it is obvious from changed paths.
Skill 创建前检查清单 description 单独检查

值得写吗?

1是否先找过高质量已有 skill?
2任务是否反复出现且容易漏?
3是否有固定验收标准?
4是否比普通 prompt 更稳定?

怎么生成?

1是否先跑通过真实链路?
2是否先审核可读 workflow?
3是否区分 AI 读取语言和用户输出语言?
4`description` 是否准确、简洁、具体?

怎么验证?

1是否有真实 prompt 和负例?
2是否比较 with / without?
3是否避免只为单例失败加规则?
4是否测试应该触发和不该触发的请求?
这张清单把“发现、真实链路、AI 生成、description 审核、触发测试、迭代”串成一个完整闭环。