如何写一个好的skill 让你的效率加倍

2026-04-11 08:211阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

如何写一个好的skill

帖子最下面有项目示例o_O

借鉴Anthropic 官方经验(https://x.com/trq212/status/2033949937936085378)。


一、Skill 不只是一个 Markdown 文件

Skill 不只是一个 Markdown 文件

Skill 是一个文件夹,可以包含 Markdown、脚本、资产、数据、配置等。Agent 会自主发现和使用其中的所有内容。

把它想成一个小型项目,而不是一份文档。

这个非常重要
如果是一个很小的skill,用文件也是没问题的,但是俺公司有一个2000字的文档,ai根本读不到…而且拓展性极差

skills/<name>/ ├── SKILL.md # 入口:路由表 + 优先级 ├── rules/ # 长期约束 ├── workflows/ # 步骤流程 ├── references/ # 背景资料:架构、坑点、索引 │ └── gotchas.md # 已知的坑(通常是最高价值内容) ├── docs/ # 可选:提示词、报告 └── scripts/ # 可选:辅助脚本、脚手架工具

Skill 文件夹能放什么

image1438×544 39.8 KB

来自 Anthropic 的关键洞察: 让 Agent 花时间在组合编排上,而非从头写样板代码。Skill 文件夹中的脚本和可复用资产能显著降低 Agent 的出错率。


二、什么时候需要目录结构

什么时候需要目录结构

image1404×392 24.5 KB

小项目从最小模板开始,当单文件开始膨胀、出现重复或需要主动维护时,再升级到完整目录结构。


三、四类内容严格分离

四类内容严格分离

image1412×330 37.3 KB

混在一起会怎样?在 300 行约束中翻找检查清单,或者一个"规则"文件里藏着流程步骤。Agent 浪费 token 读无关内容,维护也变成噩梦。

边缘情况分类

有些内容既是解释性的又容易违反(如"输入验证的坑"),按形式决定:

  • “你必须做 X”(指令性的)→ Rule
  • “小心 X”(警告性的)→ Reference(references/gotchas.md
  • 第 1 步、第 2 步、第 3 步(流程性的)→ Workflow

文件大小参考值

image858×380 20.9 KB

非常重要
这个也是很重要的一个事情,一个良好的skill,如果单个文件太大,不可避免会导致agent无法读到正确的内容,那么在一定情况下自动拆或者合并规则文件是必须的,但是也不是一定要触发,如果大于标准但是都是同一个模块的,那么也不应该拆分

行数是信号,不是命令。超标触发评估,不是自动拆分。


四、SKILL.md:导航中心,不是百科全书

SKILL.md:导航中心,不是百科全书

SKILL.md 应该很短(<= 100 行),只负责告诉 Agent 读什么、什么时候读

一个skill里面的文件最重要的是什么呢?

name?version?description?还是下面的内容?,我相信答案一定是description

4.1 Description = 触发条件

description 字段是 Agent 决定"要不要激活这个 Skill"的依据。它不是摘要,是触发条件。

# 错误 — Agent 无法匹配 description: API development helper # 正确 — 明确触发短语 + 激活条件 description: > This skill should be used when the user asks to "add a new API endpoint", "write controller logic", "fix a backend bug", or "add a database migration". Activate when the task involves REST routes, request validation, service layer logic, or MyBatis mapper changes.

质量检查:

image890×330 15.8 KB

一个 Description 写不好的 Skill,等同于不存在。

4.2 两层路由:Always Read + Common Tasks

第一层 — Always Read(每次任务都读,2-3 个文件):

## Always Read 1. `rules/project-rules.md` 2. `rules/coding-standards.md`

第二层 — Common Tasks(按任务类型路由到不同文件):

## Common Tasks - Add Controller → read `rules/backend-rules.md` + follow `workflows/add-controller.md` - Fix bug → read task-relevant `rules/*.md` + follow `workflows/fix-bug.md`; ref: `references/gotchas.md` - **Other / unlisted task** → proceed with Always Read; check `workflows/` for closest match

规则:

  • Agent 只读当前任务需要的文件,不多读
  • 每个条目必须列出精确路径,不能只写"follow the workflow"
  • Common Tasks 控制在 8-10 条以内;超出时按领域分组
  • 必须包含 “Other / unlisted task” 兜底条目

4.3 Known Gotchas

在 SKILL.md 中暴露最关键的坑点摘要,链接到详细内容:

## Known Gotchas - Filter 必须在 app init 之前注册,否则首次渲染空白 → see `references/gotchas.md#filter-registration`

坑点是整个 Skill 中价值密度最高的内容。


五、薄壳与跨工具兼容

薄壳与跨工具兼容

为什么需要内联路由表

Agent 在长对话中会压缩历史上下文。“Scan skills/*/SKILL.md” 这样的自然语言指令会在压缩后丢失。内联路由表直接嵌入在入口文件中,压缩后仍存活。

各工具入口

image1378×328 25.2 KB

关键: 如果正式 Skill 在 skills/<name>/ 但没有 .cursor/skills/<name>/SKILL.md,Cursor 永远发现不了它。

薄壳模板

所有薄壳共享同一个核心结构(<= 15 行):

Formal docs live under `skills/`. Read `skills/*/SKILL.md`. ## Quick Routing (survives context truncation) | Task | Required reads | Workflow | |------|---------------|----------| | Fix bug | `rules/project-rules.md` + `rules/coding-standards.md` | `workflows/fix-bug.md` | | Add feature X | `rules/<domain>-rules.md` | `workflows/<task>.md` | | Other | `rules/project-rules.md` | Check `workflows/` for closest match | ## Auto-Triggers - Before declaring any non-trivial task complete → run Task Closure Protocol

Auto-Triggers

薄壳不只做路由,还编码事件→动作映射。最重要的一条是 Task Closure Protocol 的触发。


六、任务闭环:Task Closure Protocol

任务闭环:Task Closure Protocol

核心机制:不再把 AAR 当作可选的附加步骤,而是定义为任务完成的一部分

协议定义

一个任务在以下条件全部满足前不算完成: 1. 主体工作完成并验证 2. 30 秒 AAR 扫描(4 个问题——全部 "否" 则到此结束) 3. 如果任何一个 "是" → 通过录入标准 → 通过则记录 任何 workflow 不得在跳过第 2 步的情况下声明完成。

AAR 的 4 个问题

- [ ] 新模式? — 用了未记录的模式或约定吗? - [ ] 新陷阱? — 遇到了不提前知道就会浪费大量时间的问题吗? - [ ] 缺失规则? — 因为缺少某条规则导致走了弯路吗? - [ ] 过时规则? — 发现现有规则已经不准确或不再适用吗?

为什么要降低触发门槛

之前:“After behavior-changing bug fix → run AAR”——Agent 倾向于把自己的改动归类为不算,从而跳过复盘。

现在:“Before declaring any non-trivial task complete → run Task Closure Protocol”。判断门槛从"行为变化"降低到"非琐碎",后者更容易正确判断。

跳过条件明确且窄:仅格式化、仅注释、仅依赖版本变更、无新教训的行为保持性重构。


七、录入标准与泛化规则

录入标准与泛化规则

一个好的skill,应该会记录需要的信息并且记录下来
这个模块决定了一个skill是否有了自动进化的能力

7.1 Recording Threshold(2/3 录入标准)

不是所有发现都值得记录。录入前通过阈值过滤:

条件 问题
可重复 未来的任务还会遇到吗?
代价高 不知道的话浪费多少时间?几分钟试错不值得;30 分钟调试值得
代码不可见 光看代码能推断出来吗?如果能,不用额外记录

至少 2/3 通过才录入。

通过阈值的典型内容

  • 框架生命周期坑(注册时序、挂载/卸载陷阱)
  • 隐藏的路由依赖(注册顺序有影响)
  • 非显而易见的同步或状态重置要求
  • 跨层交互陷阱(对话框 + Tab + 嵌套服务)

不通过的典型内容

  • 一次性变通方案(只和当前 bug 相关)
  • 看代码就能明白的事情
  • 轻微的风格偏好
  • 官方文档已充分覆盖的内容

实战示例

Agent 完成任务:添加了一个新页面,用到 Recoil atom + 自定义 filter。 发现 1:Atom 命名约定(xxxAtom) 可重复? 是 → 通过 代价高? 否(命名不一致不会导致错误)→ 不通过 代码不可见? 否(现有 atom 已经清晰展示了模式)→ 不通过 结果:1/3 → 不录入 发现 2:Filter 必须在 app init 之前注册 可重复? 是 → 通过 代价高? 是(首次渲染空白,30+ 分钟调试)→ 通过 代码不可见? 是(时序依赖从代码中看不出来)→ 通过 结果:3/3 → 录入

7.2 Generalization Rule(泛化规则)

记录的内容必须脱离当前项目上下文也能看懂。

好坏对比

坏(项目叙事体) 好(泛化知识)
在产品迭代模块中,分页需要在切换 tab 时重置 切换上下文(tab、视图、筛选器)时,必须重置分页到第 1 页
我们的 UserService.createUser 方法里要先查重 创建实体前必须做唯一性校验——数据库约束是最后防线
OrderController 里日期参数用的是 yyyy-MM-dd API 日期参数统一使用 ISO 8601 格式,在 Controller 入口层校验
admin-dashboard 加载慢是因为没加分页 列表接口必须支持分页,未分页全量查询必然成为性能瓶颈

改写公式

具体发现 → 抽象为通用 pattern → 说明不遵守的后果

7.3 录入位置

内容类型 目标
稳定约束或约定 rules/
陷阱、架构笔记、生命周期坑点 references/
有序步骤或完成检查 workflows/
任务路由变更 SKILL.md
入口路由变更 薄壳文件

录入格式选最轻的: 一句话 bullet → 一小段加到现有文件 → 新文件(通常不需要)。

7.4 激活优于存储

一个陷阱仅记录在 references/ 中是不够的。高代价陷阱必须同时:

  • 存储在正确的文件中
  • 激活在会触发它的任务路径上(workflow 检查项、SKILL.md 路由、或 rules 摘要)

八、错误学习与规则清退

错误学习与规则清退

Learn from Mistakes

Agent 犯错并被纠正后:

  1. 先搜索 — 确认规则是否已存在
  2. 分类根因:
    • 规则缺失 → 通过录入标准后新增
    • 规则过时 → 直接更新(无需门槛)
    • 规则废弃 → 走清退流程
    • 规则未被遵循 → 检查醒目度

Rule Deprecation

规则只增不减会导致文档膨胀。清退条件:

  • 相关技术已移除 → 直接删除
  • 正在迁移中 → 加作用域标注
  • 不确定 → 加 <!-- DEPRECATED: reason, date --> 注释

九、自维护

自维护

评估式拆分

文件超标时回答三个问题:

  1. 话题可分离?
  2. 导航困难?
  3. 拆后各部分能独立存在?

三个都 Yes → 拆。任何一个 No → 不拆。

评估式合并

碎片文件过多时:

  1. 话题相关?
  2. 合并后更好找?
  3. 合并后不超标?

三个都 Yes → 合并。


十、Skill 的 9 大类型

写 Skill 前先对号入座,避免一个 Skill 横跨多个类别

image1424×864 72.6 KB


十一、来自 Anthropic 的建议

来自 Anthropic 的建议

不要陈述显而易见的事情

聚焦于项目特有的约定、与主流做法不同的地方、Agent 默认行为会出错的场景。通用编程知识不需要写进 Skill。

避免过度指令化

提供约束和上下文,不要把每一步都写死。

# 坏 — 过度指令化 添加按钮时使用 Tailwind class "bg-blue-500 hover:bg-blue-700..." # 好 — 约束 + 上下文 按钮使用项目的设计系统 token(见 `rules/frontend-rules.md`)。 交互元素必须有可见的 hover/focus 状态。

利用脚本和代码库

在 Skill 中提供辅助脚本。Agent 调用脚本比从头写样板代码可靠得多。

测试和迭代 Skill

Skill 也是代码,需要测试和迭代:

  1. 写 Skill —— 触发条件和路由
  2. 测试激活 —— Agent 在正确任务时能触发吗?
  3. 测试路由 —— 每种任务类型读对了文件吗?
  4. 观察失败 —— Agent 在哪里仍然出错?
  5. 通过 AAR 更新 —— 用 Task Closure Protocol 改进 Skill

保持 Skill 聚焦

一个想做所有事的 Skill 什么都做不好。需要拆分的信号:

  • Description 列了 10+ 个来自不同领域的触发短语
  • Common Tasks 有 15+ 条覆盖不相关的工作
  • Agent 经常为只涉及一个子领域的任务激活整个 Skill

十二、Skill 生命周期

阶段 1:诞生(最小模板)

从单个 SKILL.md 开始,还不需要目录。

阶段 2:成长(初步结构化)

单文件超过 ~150 行或规则开始重复时:

skills/<name>/ ├── SKILL.md ├── rules/ │ ├── project-rules.md │ └── coding-standards.md └── workflows/ ├── fix-bug.md └── update-rules.md

阶段 3:成熟(完整结构)

项目有多个领域、反复踩坑、成熟工作流时。

阶段 4:裂变(拆分)

领域显著分化时拆为独立 Skill。


十三、多 Skill 协作

共存规则

  1. 独立入口 — 每个 Skill 有自己的 SKILL.md
  2. 注册 — 每个 Skill 需要 .cursor/skills/<name>/SKILL.md
  3. 优先级 — 任务明确属于某个 Skill 时,该 Skill 的规则优先
  4. 共享规则 — 跨 Skill 约定放 skills/shared/
  5. 不要强行合并 — 不同领域保持独立更清晰

十四、反模式清单

image1422×970 86.4 KB


十五、最终检查清单

写完一个 Skill 后逐条检查:

image1272×1336 86.3 KB

附上一个自己写的让ai适配自己项目的skill

github.com

GitHub - WoJiSama/skill-based-architecture: A meta-skill that transforms oversized single-file...

A meta-skill that transforms oversized single-file skills and scattered project rules into a clean, modular skills/<name>/ directory — so AI agents read only what they need, every time.

网友解答:
--【壹】--:

github的网址吗还是什么链接呢???


--【贰】--:

学习了,感谢分享。后面再试试。感谢感谢。


--【叁】--:

其实很简单,写skill就跟写书一样,写好目录索引,然后保证每一章的内容不多不少


--【肆】--:

感谢分享。先mark一下,后面用到的时候再看。


--【伍】--:

基本上我都是用ai自己写skill,然后自己修改,这个项目还是有很多问题的,包括agent自己读不到,各种蠢蠢的问题,大家一起学习,一起进步!


--【陆】--:

其实有两种写法,如果是纯外接的技能,其实是一个生成好的skill文件夹,或者就像是我文章最后的项目里面的一样,是一个上游skill,用这个上游skill来生成项目的skill


--【柒】--:

学习了,感谢分享。先mark一下 ,希望写出牛逼的skill


--【捌】--:

感谢佬友,这个要有空来慢慢学习,可以先尝试一个简单的项目


--【玖】--:

官方链接现在访问不了,出现 404 错误


--【拾】--:

这个其实更多的是我吃公司的项目的屎的时候,踩坑踩出来的,被逼无奈


--【拾壹】--:

这个项目其实非常简单,你只要发给ai,然后让他实现在你的项目里面就可以了,会自动扫你的项目,然后建好一个名字是你的项目名的skill,


--【拾贰】--:

学习了,感谢分享,最近刚好在写一个skill


--【拾叁】--:

很好!看完之后,感觉我又可以正确的使用AI了


--【拾肆】--:

看上去挺复杂的,就像写user story,码住后面看


--【拾伍】--:

感谢佬的分享,目前我还停留在写提示词,或者说规范别的skill,连workflow都是提示词里面写的,我后面按照你的教程封装一些skills,感谢。


--【拾陆】--:

感谢佬友分享,写的很好很详细了,先mark一下


--【拾柒】--:

这个分享很棒,不仅有明确和详细的思路,还有可使用的工具,感谢大佬


--【拾捌】--:

看前面还在想这么多规则看起来挺复杂的结果最后有个项谢谢佬的分享


--【拾玖】--:

其实简单的说,就是让agent更快更准确的找到要找的东西