Claude Code 技能:為你的 AI 編程助手構建自定義工作流
Claude Code 內置了一個通用的 AI 助手。而「技能」(Skills)能讓你使其專業化。技能是一個 Markdown 文件,用於教導 Claude Code 如何處理特定類型的任務:部署到 Kubernetes、編寫數據庫遷移、審查 Pull Request,或遵循團隊的編碼規範。
「幫我寫一個 React 組件」與「幫我寫一個遵循我們設計系統、使用自定義 Hook、具備適當錯誤邊界(Error Boundaries)和無障礙屬性(Accessibility Attributes)的 React 組件」之間的區別,就在於技能。
技能究竟是什麼
技能是位於 .claude/commands/(專案級別)或 ~/.claude/commands/(全域級別)中的 Markdown 文件。當你在 Claude Code 中輸入 /skill-name 時,該文件的內容會作為指令注入到對話中。
.claude/
commands/
deploy.md # /deploy
review-pr.md # /review-pr
write-test.md # /write-test
就是這樣。沒有特殊的語法,不需要編譯,也沒有 SDK。只需用 Markdown 描述如何執行某項操作即可。
編寫你的第一個技能
這是一個實際範例:一個強制執行團隊 Commit 訊息規範的技能。
創建 .claude/commands/commit.md:
# Commit 工作流
## 步驟
1. 執行 `git diff --staged` 查看正在提交的內容
2. 分析更改並分類:feat, fix, refactor, docs, test, chore
3. 按照我們的規範編寫 Commit 訊息:
- 格式:`type(scope): description`
- Scope 是套件或模組名稱
- Description 使用祈使句、小寫、不加句號
- 正文解釋「為什麼」,而非「做了什麼」
4. 如果更改涉及多個 Scope,請創建分開的 Commit
5. 使用生成的訊息執行 `git commit -m "message"`
## 規則
- 絕不使用 `--no-verify` 來跳過 Hook
- 絕不修改已發佈的 Commit
- 如果 pre-commit 測試失敗,請先修復問題
## 範例
- `feat(billing): add stripe webhook handler`
- `fix(auth): handle expired refresh tokens`
- `refactor(api): extract rate limiter to shared package`
現在,/commit 會為 Claude Code 提供一個結構化的工作流,而不是模糊的「提交我的更改」指令。
技能設計模式
清單模式 (The Checklist Pattern)
最適用於具有多個驗證步驟的任務。
# 部署前清單
在部署之前,請驗證以下各項:
- [ ] `pnpm typecheck` 通過
- [ ] `pnpm test` 通過
- [ ] 生產環境代碼中沒有 console.log 語句
- [ ] 環境變量已在 .env.example 中記錄
- [ ] 數據庫遷移是可逆的
- [ ] API 更改是向後兼容的
如果任何檢查失敗,請停止並報告問題。不要繼續部署。
決策樹模式 (The Decision Tree Pattern)
最適用於處理方式取決於上下文的任務。
# Bug 修復工作流
1. 重現 Bug(找到或編寫一個失敗的測試)
2. 確定根本原因:
- 如果是類型錯誤 → 在源頭修復類型定義
- 如果是競態條件 → 添加適當的鎖定/排序
- 如果是缺少驗證 → 在邊界添加 Schema 驗證
- 如果是邏輯錯誤 → 修復並添加回歸測試
3. 驗證修復不會破壞現有測試
4. 編寫一個本可以捕獲此 Bug 的測試
模板模式 (The Template Pattern)
最適用於生成一致的輸出。
# 新 API 端點
按照我們的規範創建一個新的 API 端點:
## 文件結構
- 路由處理器:`apps/api/src/routes/{resource}/{action}.ts`
- Schema:`apps/api/src/schemas/{resource}.ts`
- 測試:`apps/api/src/routes/{resource}/__tests__/{action}.test.ts`
## 必要元素
- 用於請求驗證的 Zod schema
- 身份驗證中間件
- 速率限制 (Rate limiting)
- 使用 errorResponse() 的結構化錯誤響應
- 使用 successResponse() 的成功響應
- OpenAPI 文檔註釋
安裝社群技能
Claude Code 生態系統擁有一個不斷增長的社群技能庫。使用以下命令安裝它們:
npx add-skill username/repo-name -y
熱門技能集合:
coreyhaines31/marketingskills(29 個營銷/SEO 技能)hedging8563/lemondata-api-skill(LemonData API 集成)
安裝的技能會出現在 ~/.claude/commands/ 中,並可在所有專案中使用。
專案技能 vs 全域技能
| 位置 | 範圍 | 使用場景 |
|---|---|---|
.claude/commands/ |
僅限此專案 | 專案規範、部署工作流 |
~/.claude/commands/ |
所有專案 | 個人偏好、通用工具 |
專案技能應該提交到你的代碼倉庫中,以便整個團隊受益。全域技能則用於個人工作流偏好。
進階:帶有 Hook 的技能
技能可以引用 Hook(在特定事件上運行的 Shell 命令)來實現自動化執行:
# Pre-Commit 檢查
在任何 Commit 之前,以下 Hook 會自動運行:
- `pre-commit`: 運行 typecheck + lint
- `post-commit`: 更新 changelog
如果 Hook 失敗,請調查錯誤輸出並修復問題。
不要使用 --no-verify 來繞過 Hook。
Hook 本身在 .claude/settings.json 中配置:
{
"hooks": {
"pre-commit": "pnpm typecheck && pnpm lint-staged"
}
}
編寫高效技能的提示
明確指定文件路徑和命名規範。「創建一個組件」很模糊。「在
src/components/ui/中使用 PascalCase 命名創建一個組件」則具有可操作性。包含正確輸出的範例。Claude Code 從範例中學習的效果比從抽象規則中學習更好。
定義「不要做什麼」。「絕不使用
any類型」比「使用適當的類型」更容易執行。保持技能專注。一個工作流對應一個技能。一個涵蓋所有內容的 200 行技能,不如五個各司其職的 40 行技能有用。
對技能進行版本管理。隨著規範的演進,請更新技能。過時的技能比沒有技能更糟糕,因為它們會強制執行舊的模式。
現實世界的影響
採用技能的團隊報告了持續的改進:
- Code Review 週期縮短,因為規範在審查前就已執行
- 入職培訓時間減少,因為新開發者能獲得與資深開發者相同的指導
- AI 生成的代碼質量提高,因為 AI 擁有了關於專案標準的明確上下文
這項投資很小(編寫你的前幾個技能只需 30 分鐘),而回報會隨著每次交互而不斷累積。
使用 AI 構建,由你自己的規則引導。lemondata.cc 為 AI 驅動的開發工具提供 API 基礎設施。
