从重复模式提炼 Skill:building-skills-from-patterns 元技能详解

前言

用 Cursor 写代码久了,总会遇到一类「似曾相识」的场景:每次合并前都要跑 lint、tsc 和测试;每次发预览分支都要走同一套部署命令;你纠正 Agent 一句「这里不能用 raw SQL,必须走 repository 层」,下个会话它又会忘掉。

这些步骤本身并不复杂,难的是它们会在不同任务里反复出现。Agent 每次都要重新推导,你每次都要重复说明,时间就这样耗在「肌肉记忆」上。

Agent Skills 的出现,本来就是为了把这类可复用的工作流固化下来。但问题是:当你还没意识到某个流程值得封装时,它往往已经重复了三四遍。building-skills-from-patterns 正是针对这个空白——它是一条「元技能」,教 Agent 识别重复模式,并把它沉淀成 .cursor/skills/ 下的 SKILL.md,让后续会话自动加载、按需触发。

本文基于 awesome-cursor-skills 仓库中的官方 SKILL.md 原文,以及 Cursor 官方 Skills 文档 交叉核实,介绍这条元技能是什么、何时该用、怎么安装,以及如何配合 Rules 与 Hooks 分工。

这是什么

building-skills-from-patterns 是一条面向 Cursor Agent 的元技能(meta-skill),维护在 GitHub 仓库 spencerpauly/awesome-cursor-skillsresources/building-skills-from-patterns/ 目录下。

它的核心定位可以用一句话概括:当同一套多步工作流在 Cursor 里反复出现时,把它捕获成可复用的 SKILL.md,研究一次、编码一次、永久复用。

Skills 本质上是可版本控制的 SKILL.md 文件包,遵循 Agent Skills 开放标准,在 Cursor、Claude Code、Codex CLI 等支持该标准的工具中均可使用。与 Anthropic 官方的 skill-creator(侧重从零创建与 eval 评测)不同,building-skills-from-patterns 更强调从日常重复中被动发现模式,适合已经有一堆「口头约定」、却还没写成文件的团队。

核心功能与亮点

1. 明确的触发条件

官方 SKILL.md 列出了三类典型触发场景:

  • 用户三次及以上要求同一操作序列,例如「提交前永远先跑 lint、tsc、test」。
  • Agent 发现自己在每个任务里都在重新推导同一套步骤,例如「这个仓库预览分支怎么部署」。
  • 用户的纠正听起来像一条策略(policy)。若需要始终生效,应配合 suggesting-cursor-rules 写成 Rule;若是有分支、有步骤的流程(procedure),则更适合写成 Skill。

这三条判断标准很实用:它帮你在「该写 Rule 还是该写 Skill」之间做分流,避免把所有约定都堆进 Rules,导致上下文膨胀。

2. 四步标准化工作流

触发后,Agent 按以下流程执行:

  1. 命名模式(Name the pattern)
    取一个短 slug,小写加连字符,如 verifying-api-before-mergereleasing-mobile-build

  2. 起草 SKILL.md(Draft)
    .cursor/skills/<slug>/SKILL.md 创建文件。若向 awesome-cursor-skills 上游贡献,则放在 resources/<slug>/SKILL.md

  3. 校验(Validate)
    检查 description 是否足够具体以便 Agent 匹配;步骤是否可执行、不含密钥或机器专属路径。

  4. 告知用户(Point the user to it)
    说明文件位置,并提示下次在该工作区开聊时 Agent 会自动发现。

3. 与 Rules、Hooks 的分工表

官方文档用一张对照表厘清三种机制:

机制 适用场景
Skill 按需调用的流程,含分支步骤与工具使用
Rule.cursor/rules/ 始终生效的约定、风格、文件模式
Hook.cursor/hooks.json 文件保存、Agent 停止等事件后的自动化

简单记法:「每次保存都跑 X」→ Hook;「全局代码风格」→ Rule;「当我要求发布/合并时才走的多步流程」→ Skill。

4. 写作规范与最佳实践

  • 每个 Skill 只覆盖一条工作流,避免「万能大 Skill」。
  • 工作流演进时更新已有 Skill,不要另起炉灶造成重复。
  • 正文保持精简:标题、何时使用、编号步骤、注意事项;命令写具体,少废话。
  • description 字段要写清「做什么 + 何时触发」,这是 Agent 自动匹配的关键。

安装与启用

目录结构

Cursor 启动时会自动扫描以下路径中的 Skill(官方文档):

路径 作用域
.cursor/skills/ 项目级
.agents/skills/ 项目级
~/.cursor/skills/ 用户级(全局)
~/.agents/skills/ 用户级(全局)

为兼容 Claude Code 与 Codex CLI,也支持 .claude/skills/.codex/skills/ 及对应的用户目录。

每个 Skill 是一个文件夹,内含 SKILL.md;可选子目录包括 scripts/references/assets/

安装 building-skills-from-patterns

方式一:手动复制(推荐)

mkdir -p .cursor/skills/building-skills-from-patterns
curl -o .cursor/skills/building-skills-from-patterns/SKILL.md \
  https://raw.githubusercontent.com/spencerpauly/awesome-cursor-skills/main/resources/building-skills-from-patterns/SKILL.md

方式二:克隆仓库后复制

git clone https://github.com/spencerpauly/awesome-cursor-skills.git
cp -r awesome-cursor-skills/resources/building-skills-from-patterns .cursor/skills/

方式三:从 GitHub 远程导入

在 Cursor 侧边栏打开 Customize → Rules → Add Rule → Remote Rule (Github),填入仓库 URL。此方式适用于导入整个规则/技能仓库,具体以 Cursor 界面为准。

启用与调用

  • 自动发现:文件就位后,重启 Cursor 或新开 Agent 会话即可。Agent 会根据 description 判断何时加载。
  • 手动调用:在 Agent 聊天框输入 /,搜索 building-skills-from-patterns 或其中文描述关键词。
  • 查看已安装 SkillCustomize → Skills,在 Agent Decides 区域可看到项目与用户级 Skill。

该 Skill 的 frontmatter 含 user-invocable: true,表示用户可通过名称显式唤起。

在其他 AI 编程工具中使用

SKILL.md 是开放标准格式。Claude Code 通常使用 .claude/skills/;Codex CLI 使用 .codex/skills/。把同一文件夹复制到对应目录即可,frontmatter 中的 name 需与父文件夹名一致。

典型用法示例

场景:合并前检查流程反复出现

假设你在三个 PR 里都告诉 Agent:「先 npm run lint,再 npx tsc --noEmit,最后 npm test,全过再提交。」

此时可主动对 Agent 说:

我们合并前的检查流程已经重复多次了,请按 building-skills-from-patterns
把它沉淀成一个 Skill。

Agent 会按元技能流程产出类似结构:

---
name: verifying-api-before-merge
description: 合并前运行 lint、tsc 与测试。在用户要求合并、提交 PR 或说「检查一遍再合」时使用。
user-invocable: true
---

# 合并前 API 验证

## 何时使用

- 用户要求 merge、land PR 或提交前验证
- 涉及 API 层改动的 feature 分支

## 步骤

1. 从 lockfile 检测包管理器(npm / pnpm / yarn)
2. 运行 lint:`npm run lint`
3. 运行类型检查:`npx tsc --noEmit`
4. 运行测试:`npm test`
5. 全部通过后再执行 git 操作

## 注意事项

- 任一步失败则停止,向用户报告具体错误
- 不要跳过测试直接 commit

文件保存为 .cursor/skills/verifying-api-before-merge/SKILL.md 后,下次你说「帮我合这个 PR」,Agent 有机会自动匹配并执行,而不必你再口述一遍。

与 Cursor 内置 Skill 的配合

Cursor 2.4 起内置多条相关 Skill,可组合使用:

内置 Skill 作用
/create-skill 引导创建 Agent Skill 的目录结构与 SKILL.md
/migrate-to-skills 将符合条件的动态 Rule 与斜杠命令迁移为 Skill
/create-rule 创建始终生效的 Cursor Rule

推荐路径:先用 building-skills-from-patterns 识别重复流程并起草内容,若格式不确定再调用 /create-skill 补全结构;若旧项目里已有大量动态 Rule,可用 /migrate-to-skills 批量转换。

SKILL.md frontmatter 参考

Cursor 官方要求的必填字段:

---
name: my-skill          # 小写字母、数字、连字符;与文件夹名一致
description: 一句话说明做什么、何时触发;Agent 靠它做相关性匹配
---

常用可选字段:

  • paths:glob 模式,限定 Skill 仅对匹配文件生效
  • disable-model-invocation: true:仅用户用 /skill-name 显式调用时不自动匹配
  • user-invocable: true:允许用户在 / 菜单中搜索调用

适用场景与注意事项

适合谁

  • 已在 Cursor 中形成固定流程,但尚未文档化的个人开发者或小团队。
  • 维护 monorepo、多包仓库,不同子目录有各自部署/测试惯例的工程师。
  • 想系统了解 Skill 生态、从「用别人的 Skill」进阶到「自造 Skill」的读者。

适合沉淀成 Skill 的模式

  • 多命令串联的发布、部署、验证流程
  • 依赖特定 MCP 工具或 CLI(如 ghkubectl)的操作序列
  • 需要分支判断(staging / production)但仍属「按需触发」的任务

不适合写成 Skill 的情况

  • 始终生效的代码风格 → 用 Rule(.cursor/rules/
  • 保存文件即触发 → 用 Hook(.cursor/hooks.json
  • 一次性、不会再做的任务 → 直接对话即可,不必封装

常见坑

  1. description 太笼统
    「帮助开发」这类描述无法被 Agent 匹配。应写「在用户提到 deploy preview 时,按以下步骤……」

  2. 步骤依赖未说明的仓库布局
    官方要求步骤可执行,或明确写「从 lockfile 检测包管理器」,避免 Agent 猜路径。

  3. 混入密钥或本机绝对路径
    Skill 会进 Git,Secrets 应走环境变量,路径用相对路径或检测逻辑。

  4. 与 Rule 重复
    同一条「永远不要用 var」写进 Skill 和 Rule 会浪费上下文。策略归 Rule,流程归 Skill。

  5. 一个 Skill 包打天下
    官方明确建议 one skill per workflow;复杂域可按子目录分组,例如 .cursor/skills/shipping/land-it/SKILL.md,Cursor 会递归发现。

小结

building-skills-from-patterns 解决的不是「会不会写 SKILL.md」,而是「什么时候该写、写完后放哪、和 Rule/Hook 怎么分工」。它把团队里口头重复了多遍的流程,变成 Agent 下次能自动加载的 muscle memory。

若你已经在 Cursor 里第三次解释同一条流程,不妨让 Agent 按这条元技能把它固化下来。官方 Skill 原文与示例 frontmatter 见:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜