從重複模式提煉 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 見:

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

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

小夜