Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:40:34 +08:00
commit 7c88e7d08d
10 changed files with 3266 additions and 0 deletions

View File

@@ -0,0 +1,327 @@
---
name: skills development
description: 協助設計和開發 Claude Code Skills提供 skill 設計的思考邏輯和最佳實踐
---
# Skills 設計指南
> 本指南遵循 [Claude Code Skills 官方規範](https://docs.claude.com/en/docs/claude-code/skills)
> 並整合此 marketplace 專案的最佳實踐。
協助你設計和開發 Claude Code Skills提供清晰的判斷標準、設計原則和實際案例確保 skill 的設計符合「可重複使用的工作流程」的核心定位。
## 📚 文件導覽
本 skill 包含以下文件:
1. **[SKILL.md](SKILL.md)**(本文件):核心判斷標準和設計原則
2. **[official-reference.md](official-reference.md)**:官方定義、特性和參考資源
3. **[examples.md](examples.md)**:實際案例分析和專案範例
4. **[implementation.md](implementation.md)**:實施指南、檔案結構和命名規範
5. **[best-practices.md](best-practices.md)**:最佳實踐和常見錯誤
**建議閱讀順序**
1. 先閱讀本文件了解核心概念和判斷標準
2. 查看 [official-reference.md](official-reference.md) 了解官方定義
3. 閱讀 [examples.md](examples.md) 學習實際案例
4. 使用 [implementation.md](implementation.md) 進行實作
5. 參考 [best-practices.md](best-practices.md) 避免常見錯誤
---
## 核心概念
### 什麼是 Skill
Skill 是 **可重複使用的工作流程**,定義在 `SKILL.md` 檔案中,可以在多個 commands、agents 或其他 skills 中被引用和重複使用。
#### 關鍵特性
- **模組化設計**:每個 skill 是獨立的資料夾,包含指令、說明和相關資源
- **跨平台通用**:可在 Claude.ai、API 和 Claude Code 之間共用
- **動態載入**Claude 會在相關時自動發現和載入 skills
- **單一定義**:設計一次,可在多個地方重複使用
> 詳細的官方定義請參閱:[official-reference.md](official-reference.md)
---
## 判斷標準
### 何時「需要」獨立成 Skill
使用以下檢查清單來判斷:
#### ✅ 強烈建議獨立
1. **多處重複使用**
-**2 個以上** 的 commands/agents 需要使用相同的邏輯
- 預期未來會有更多地方需要這個功能
2. **邏輯複雜度高**
- 工作流程包含 **5 個以上** 的步驟
- 需要複雜的條件判斷或分支邏輯
- 維護和測試時需要獨立處理
3. **使用者可能單獨呼叫**
- 這個功能本身具有獨立的使用價值
- 使用者可能只想執行這個特定的工作流程
4. **需要獨立維護和版本控制**
- 這個邏輯的更新頻率較高
- 需要獨立測試和驗證
- 多個開發者協作時需要獨立的職責劃分
#### ❌ 不建議獨立
1. **單一使用場景**
- 只在 **1 個** command/agent 中使用
- 未來也不太可能在其他地方重複使用
2. **邏輯簡單**
- 只有 **3 個以下** 的簡單步驟
- 沒有複雜的條件判斷
3. **與特定 command 緊密耦合**
- 邏輯與 command 的其他部分緊密相關
- 獨立出來反而降低可讀性
4. **過度工程化**
- 為了「可能的」未來需求而設計
- 增加不必要的抽象層次
> 詳細的案例分析請參閱:[examples.md](examples.md)
---
## 設計原則
### 1. YAGNI 原則You Aren't Gonna Need It
**不要過度設計**
❌ 錯誤思維:
> 「雖然現在只有一個地方用到,但未來可能會用到,所以我先獨立成 skill 好了。」
✅ 正確做法:
> 「目前只有一個地方使用,先保持簡單。等到第二個地方需要時,再考慮重構成 skill。」
### 2. DRY 原則Don't Repeat Yourself
**避免重複邏輯**
時機點:
- **1st 使用** → 直接寫在 command/agent 中
- **2nd 使用** → 考慮抽取成 skill
- **3rd 使用** → 必須抽取成 skill
### 3. 單一職責原則
**一個 Skill 只做一件事**
✅ 好的設計:
- `analyze-atomicity`: 只負責分析提交的原子性
- `generate-commit-message`: 只負責產生提交訊息
- `resolve-conflict`: 只負責解決 Git 衝突
❌ 不好的設計:
- `commit-helper`: 包含原子性分析、訊息產生、推送等多個功能(職責不清晰,難以重複使用)
### 4. 清晰的介面設計
**明確的輸入和輸出**
每個 skill 應該清楚定義:
```markdown
## 輸入條件
- 需要哪些前置資訊?
- 依賴哪些工具或環境?
## 執行步驟
1. 步驟 1
2. 步驟 2
3. 步驟 3
## 輸出結果
- 返回什麼資訊?
- 如何被其他 commands/skills 使用?
```
> 詳細的實施指南請參閱:[implementation.md](implementation.md)
---
## 決策樹
使用這個決策樹快速判斷:
```mermaid
flowchart TD
Start([開始]) --> Q1{是否有 2+ 個<br/>地方使用?}
Q1 -->|是| Q2{邏輯是否複雜<br/>5+ 步驟?}
Q1 -->|否| Q3{邏輯是否非常複雜<br/>10+ 步驟?}
Q2 -->|是| A1[✅ 強烈建議獨立成 Skill]
Q2 -->|否| A2[✅ 建議獨立成 Skill<br/>便於維護]
Q3 -->|是| Q4{使用者是否<br/>可能單獨呼叫?}
Q3 -->|否| A3[❌ 不需要獨立<br/>遵循 YAGNI 原則]
Q4 -->|是| A4[✅ 建議獨立<br/>便於測試和使用]
Q4 -->|否| A5[❌ 暫不獨立<br/>保留重構空間]
style A1 fill:#90EE90
style A2 fill:#90EE90
style A4 fill:#90EE90
style A3 fill:#FFB6C1
style A5 fill:#FFB6C1
style Start fill:#87CEEB
```
---
## 執行步驟
當使用者詢問「是否需要將某個功能獨立成 skill」時按照以下步驟進行分析
### 步驟 1收集資訊
收集以下資訊(使用 AskUserQuestion 或直接分析):
1. **目前使用情況**
- 這個功能目前在哪些地方使用?
- 使用次數是 1 次、2 次還是更多?
2. **未來使用預期**
- 是否已經規劃其他會使用這個功能的 command/agent
- 使用者是否明確表達未來的擴展需求?
3. **邏輯複雜度**
- 包含幾個步驟?
- 是否有複雜的條件判斷或分支邏輯?
4. **獨立使用價值**
- 使用者是否可能單獨執行這個功能?
- 這個功能是否具有獨立的使用場景?
### 步驟 2套用判斷標準
根據「判斷標準」章節的檢查清單進行評估:
```markdown
檢查清單:
- [ ] 多處使用?
- [ ] 邏輯複雜?
- [ ] 可獨立呼叫?
- [ ] 需要獨立維護?
評分:勾選 3+ 項 → ✅ 建議獨立
勾選 1-2 項 → ❓ 視情況決定
勾選 0 項 → ❌ 不建議獨立
```
### 步驟 3提供建議
根據評估結果,提供清晰的建議:
#### 如果建議獨立
```markdown
✅ 建議獨立成 Skill
理由:
1. [列出符合的條件]
2. [說明獨立後的好處]
3. [未來的擴展可能性]
建議的 Skill 設計:
- 名稱:{plugin-name}:{skill-name}
- 位置plugins/{plugin-name}/skills/{skill-name}/SKILL.md
- 核心功能:[簡述]
- 預期使用者:[列出會使用這個 skill 的 commands/agents]
```
#### 如果不建議獨立
```markdown
❌ 目前不建議獨立成 Skill
理由:
1. [列出不符合的條件]
2. [說明保持現狀的好處]
3. [遵循的設計原則]
建議:
- 保持在 {current-location} 中
- 等到出現第二個使用場景時再考慮重構
未來觸發條件:
[列出什麼情況下應該重新評估]
```
### 步驟 4提供實施計畫如果建議獨立
如果決定要獨立成 skill引導使用者查看詳細的實施計畫
> 詳細的實施步驟請參閱:[implementation.md](implementation.md)
主要步驟:
1. 創建 Skill 檔案結構
2. 設計 SKILL.mdYAML Front Matter、內容結構
3. 重構現有 Command/Agent移除重複邏輯、引用新 skill
4. 更新文件README.md、CHANGELOG.md、版本號
---
## 快速參考
### 常見問題快速解答
| 問題 | 答案 | 參考文件 |
|------|------|---------|
| 第一次使用這個邏輯,要獨立嗎? | ❌ 不要,遵循 YAGNI 原則 | [best-practices.md](best-practices.md) |
| 第二次使用,要獨立嗎? | ✅ 強烈建議獨立 | [examples.md](examples.md) |
| 邏輯很複雜但只用一次? | 視情況,看是否有獨立價值 | [SKILL.md](SKILL.md#判斷標準) |
| 如何命名 skill | 使用 kebab-case動詞開頭 | [implementation.md](implementation.md#命名規範) |
| SKILL.md 必須包含什麼? | YAML Front Matter、核心功能、執行步驟 | [implementation.md](implementation.md#skillmd-格式規範) |
| 可以在 skill 中引用其他 skills 嗎? | 可以,但要避免循環依賴 | [best-practices.md](best-practices.md) |
### 設計檢查清單
創建 skill 前快速檢查:
- [ ] 有 2+ 個使用場景(或邏輯極其複雜)
- [ ] 職責單一且清晰
- [ ] 名稱具有描述性
- [ ] 規劃了完整的文件結構
- [ ] 考慮了與現有 commands/skills 的整合
---
## 總結
設計 Skill 的核心原則:
1. **YAGNI**:不要過度設計,等需求明確時再抽取
2. **DRY**:出現重複時才抽取,而不是提前
3. **單一職責**:一個 skill 只做一件事
4. **清晰介面**:明確的輸入輸出,完整的文件
**記住:保持簡單永遠是最好的設計。**
---
## 延伸閱讀
- **官方資訊**[official-reference.md](official-reference.md) - Claude Code Skills 官方定義和特性
- **實際案例**[examples.md](examples.md) - 包含成功和失敗的設計案例
- **實作指南**[implementation.md](implementation.md) - 詳細的檔案結構和命名規範
- **避免錯誤**[best-practices.md](best-practices.md) - 常見錯誤和最佳實踐
**專案相關**
- 專案結構說明:[`CLAUDE.md`](../../../../CLAUDE.md)
- 其他 skills 範例:
- [`plugins/git/skills/resolving-conflict/SKILL.md`](../../../git/skills/resolving-conflict/SKILL.md)
- [`plugins/plugin-dev/skills/quick-fix/SKILL.md`](../test/plugin-dev/quick-fix/SKILL.md)