Files
2025-11-30 08:40:34 +08:00

328 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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)