# Skills 實施指南 本文件提供詳細的 skill 實施指南,包含檔案結構、格式規範、命名規範和實施步驟。 ## Skill 檔案結構 ### 基本結構 每個 skill 都是一個獨立的資料夾,裡面的結構如下: ``` / ├── SKILL.md # 必須:Skill 定義檔 ├── scripts/ # 可選:可執行腳本 │ ├── setup.sh │ └── helper.py ├── templates/ # 可選:範本檔案 │ ├── config.yaml │ └── example.md └── resources/ # 可選:其他資源 ├── diagrams/ └── references/ ``` ### 目錄命名規範 **官方標準 vs 本專案擴充** 根據 [Claude Code Skills 官方規範](https://docs.claude.com/en/docs/claude-code/skills),以下是目錄命名的規範: | 目錄名稱 | 性質 | 說明 | 建議 | |--------------|-------|---------------------------|-------------------------| | `SKILL.md` | 官方必須 | Skill 定義檔,也可以是其他 `.md` 檔案 | 強烈建議使用 `SKILL.md` 保持一致性 | | `scripts/` | 官方建議 | 存放可執行腳本的標準目錄 | **建議使用**官方名稱以保持跨平台相容性 | | `resources/` | 官方建議 | 存放輔助資源的標準目錄 | **建議使用**官方名稱以保持跨平台相容性 | | `templates/` | 本專案擴充 | 本專案新增的範本檔案目錄 | 可選使用,不影響官方相容性 | **自訂目錄名稱** 雖然官方沒有強制規定目錄名稱,但為了保持一致性和跨平台相容性: - ✅ **建議**:使用官方推薦的 `scripts/` 和 `resources/` 名稱 - ✅ **可以**:新增本專案的 `templates/` 或其他自訂目錄 - ⚠️ **不建議**:修改官方推薦的目錄名稱(如將 `scripts/` 改為 `bin/`) - ❌ **避免**:使用可能與官方未來擴充衝突的名稱 **重要提醒**: - 使用官方名稱可確保 skill 在不同平台(Claude.ai、Claude Code、Claude API)間正常運作 - 自訂目錄只能在支援的平台上使用,可能影響可移植性 ### 必須的檔案 #### SKILL.md **用途**:定義 skill 的核心工作流程和行為 **必須包含**: - YAML Front Matter(name, description) - 核心功能說明 - 執行步驟 **範例**: ```markdown --- name: example-skill description: 簡短描述這個 skill 的核心功能 --- # Skill 標題 ## 核心功能 - 功能 1 - 功能 2 ## 執行步驟 1. 步驟 1 2. 步驟 2 3. 步驟 3 ``` ### 可選的資源類型 #### 腳本檔案 (scripts/) **用途**:存放可執行的腳本 **適用情境**: - Skill 需要執行系統命令 - 包含可重複使用的腳本邏輯 - 需要與外部工具整合 **範例**: ``` scripts/ ├── analyze.py # Python 分析腳本 ├── format.sh # Bash 格式化腳本 └── validate.js # JavaScript 驗證腳本 ``` **注意事項**: - 腳本應該有可執行權限(`chmod +x`) - 在 SKILL.md 中說明如何使用這些腳本 - 腳本應該有清晰的錯誤處理 #### 範本檔案 (templates/) **用途**:存放範本檔案 **適用情境**: - Skill 需要產生標準格式的檔案 - 提供可自訂的配置範本 - 包含文件範本 **範例**: ``` templates/ ├── README.template.md # README 範本 ├── config.template.yaml # 配置檔範本 └── test.template.js # 測試檔案範本 ``` **注意事項**: - 範本中使用清晰的佔位符(如 `{{PLACEHOLDER}}`) - 在 SKILL.md 中說明如何使用範本 - 提供範本的填寫說明 #### 輔助資源檔案 (resources/) **用途**:存放其他輔助資源 **適用情境**: - 需要參考的圖表或文件 - 靜態資料檔案 - 額外的說明文件 **範例**: ``` resources/ ├── diagrams/ │ └── workflow.mermaid # Mermaid 流程圖 ├── references/ │ └── api-spec.json # API 規格 └── data/ └── examples.json # 範例資料 ``` --- ## SKILL.md 格式規範 ### YAML Front Matter 位於檔案開頭,使用 `---` 包圍: ```yaml --- name: Skill-Name # 必須:skill 的名稱 description: 簡短描述 # 必須:一句話說明核心功能 --- ``` #### name 欄位 **必須欄位** **格式**: - 使用 kebab-case(如 `skills-development`) - 與資料夾名稱完全一致 **範例**: ``` # ✅ 正確 name: resolving-conflict name: skills-development name: quick-fix # ❌ 錯誤 name: Resolving-Conflict # 首字母大寫 name: resolvingConflict # camelCase name: resolving_conflict # snake_case name: RESOLVING-CONFLICT # SCREAMING-KEBAB-CASE ``` #### description 欄位 **必須欄位** **用途與重要性** description 是 **AI 發現和選擇 skill 的關鍵**: 1. **啟動時預載入**:Claude 在啟動時會預載入所有 skills 的 name 和 description 到 system prompt 2. **動態發現**:工作時 Claude 會掃描 descriptions 來找到相關的 skills 3. **漸進式揭露**:只有在需要時才載入完整的 SKILL.md 內容 4. **Token 效率**:每個 skill 只佔用幾十個 tokens,保持 Claude 快速運作 **內容要求** description 必須包含兩個關鍵資訊: 1. ✅ **What(做什麼)**:這個 skill 的核心功能 2. ✅ **When(何時使用)**:Claude 應該在什麼情況下使用它 **格式規範** - **官方限制**:最大 1024 字元 - **建議長度**:50-150 字(一到兩句話) - **語言**:繁體中文(本專案規範) - **語態**:使用主動語態,直接說明功能 **範例** ```yaml # ✅ 優秀範例(包含 What 和 When) description: 協助解決 Git Rebase 或 Merge 過程中的衝突,提供系統化的衝突解決流程。 # What: 解決 Git 衝突 # When: Git Rebase 或 Merge 過程中 description: 協助設計和開發 Claude Code Skills,提供 skill 設計的思考邏輯和最佳實踐 # What: 協助設計和開發 Skills # When: 設計 Skills 時需要思考邏輯和最佳實踐 # ⚠️ 需要改進 description: 解決衝突 # 問題:太簡短,缺少 When(何時使用) description: 這個 skill 是用來幫助使用者解決 Git 衝突的工具 # 問題:不要用「這個 skill」開頭,語句冗長 description: 處理資料 # 問題:太模糊,沒有說明做什麼資料處理、何時使用 # ❌ 錯誤範例 description: Helps resolve git conflicts # 問題:應使用繁體中文(本專案規範) description: 解決 Git 衝突的工具,可以幫助使用者在遇到衝突時進行處理,包含自動分析、手動編輯、衝突標記移除等多種功能,並且支援 rebase 和 merge 兩種模式 # 問題:太冗長,應該簡潔明瞭 ``` **撰寫技巧** 1. **直接說明功能** - ✅ 協助解決 Git Rebase 或 Merge 過程中的衝突 - ❌ 這是一個用來解決 Git 衝突的 skill 2. **包含使用時機** - ✅ 在 Git Rebase 或 Merge 過程中遇到衝突時 - ❌ 解決衝突(沒說明什麼時候) 3. **保持簡潔但完整** - ✅ 一到兩句話,涵蓋 What 和 When - ❌ 過度詳細的功能列表(這些應該放在 SKILL.md 內容中) 4. **使用具體的情境** - ✅ Git Rebase 或 Merge 過程中 - ❌ 當你需要處理版本控制問題時 ### 內容結構 **建議的章節順序**: ```markdown --- name: skill-name description: 簡短描述 --- # Skill 標題 簡短的介紹(1-2 段) ## 核心功能 - 列出主要功能 ## 輸入條件(可選) - 列出前置條件 - 需要的資訊或工具 ## 執行步驟 1. 步驟 1 2. 步驟 2 3. 步驟 3 ## 輸出結果(可選) - 說明產出內容 - 如何被其他 commands/skills 使用 ## 使用場景 - 適用情境 - 工作流程範例 ## 注意事項 - 安全檢查 - 常見錯誤 ## 整合其他工具(可選) - 相關的 commands、skills、agents ``` ### 章節說明 #### 核心功能(必須) 列出 skill 的主要功能,使用條列式: ```markdown ## 核心功能 - 偵測當前的衝突狀態(rebase 或 merge) - 列出所有衝突的檔案 - 逐個檢視並解決衝突 - 完成 rebase 或 merge 流程 ``` #### 執行步驟(必須) 詳細說明工作流程,使用編號列表: ```markdown ## 執行步驟 ### 1. 準備階段 檢查前置條件: - 確認工具已安裝 - 驗證環境設定 ### 2. 執行階段 1. **第一步** - 詳細說明 - 可能的指令 2. **第二步** - 詳細說明 - 注意事項 ### 3. 完成階段 清理和驗證: - 檢查結果 - 產生報告 ``` #### 使用場景(建議) 提供實際的使用範例: ```markdown ## 使用場景 ### 適用情境 - 情境 1 - 情境 2 ### 工作流程範例 \`\`\` [使用者的操作] User: 描述使用者的請求 Agent: Claude 的回應和操作 [執行 skill 的過程] User: 使用者的後續互動 Agent: 完成的回應 \`\`\` ``` --- ## 命名規範 ### 資料夾命名 **格式**:kebab-case(全小寫,單字用 `-` 分隔) **規則**: - ✅ 使用小寫字母和數字 - ✅ 使用 `-` 分隔單字 - ❌ 不使用 `_`(底線) - ❌ 不使用大寫字母 - ❌ 不使用特殊字元 **範例**: | ✅ 正確 | ❌ 錯誤 | 原因 | |---------------------------|---------------------------|---------------| | `resolving-conflict` | `ResolvingConflict` | 不使用大寫 | | `skills-development` | `skills_development` | 使用 `-` 而非 `_` | | `quick-fix` | `quickFix` | 不使用 camelCase | | `generate-commit-message` | `generate.commit.message` | 不使用 `.` | | `api-v2-client` | `api_v2_client` | 使用 `-` 而非 `_` | ### YAML name 欄位命名 **格式**:kebab-case(全小寫,與資料夾名稱完全一致) **規則**: - ✅ 使用 kebab-case 與資料夾名稱完全一致 - ❌ 不使用首字母大寫 - ❌ 不使用 camelCase - ❌ 不使用 snake_case - ❌ 不使用 PascalCase **範例**: | 資料夾名稱 | ✅ 正確的 name | ❌ 錯誤的 name | |----------------------|----------------------|-------------------------------------------------------------| | `resolving-conflict` | `resolving-conflict` | `Resolving-Conflict`
`resolvingConflict`
`resolving_conflict` | | `skills-development` | `skills-development` | `Skills-Development`
`skillsDevelopment`
`SKILLS-DEVELOPMENT` | | `quick-fix` | `quick-fix` | `Quick-Fix`
`quickFix`
`QuickFix` | **推薦做法**: ```yaml # 推薦:與資料夾名稱完全一致 資料夾:skills-development/ name: skills-development ``` ### 描述性命名 Skill 名稱應該清楚描述功能: **✅ 好的命名**: | 名稱 | 說明 | |---------------------------|--------------| | `analyze-atomicity` | 明確說明「分析原子性」 | | `generate-commit-message` | 明確說明「產生提交訊息」 | | `resolving-conflict` | 明確說明「解決衝突」 | | `validate-config` | 明確說明「驗證配置」 | **❌ 壞的命名**: | 名稱 | 問題 | |-------------|------------| | `helper` | 太抽象,不知道幫什麼 | | `utils` | 太通用,應該明確功能 | | `processor` | 不知道處理什麼 | | `manager` | 不知道管理什麼 | | `do-stuff` | 完全不清楚功能 | ### 命名最佳實踐 #### 1. 使用動詞開頭 描述 skill 的動作: ``` ✅ analyze-atomicity (分析原子性) ✅ generate-message (產生訊息) ✅ validate-input (驗證輸入) ✅ resolve-conflict (解決衝突) ❌ atomicity-analyzer (應該用動詞開頭) ❌ message-generator (應該用動詞開頭) ``` #### 2. 保持簡潔但清楚 ``` ✅ validate-config (簡潔清楚) ✅ parse-json (簡潔清楚) ❌ validate-all-configuration-files (太長) ❌ val-cfg (縮寫不清楚) ``` #### 3. 避免重複 ``` ✅ git/skills/resolve-conflict/ (git 已在 plugin 名稱中) ❌ git/skills/git-resolve-conflict/ (重複 git) ✅ jira/skills/analyze-ticket/ ❌ jira/skills/jira-analyze-ticket/ ``` --- ## 實施計畫 當你決定要創建一個新的 skill 時,按照以下步驟進行: ### 步驟 1:創建檔案結構 ```bash # 進入 plugin 目錄 cd plugins/{plugin-name} # 創建 skill 資料夾 mkdir -p skills/{skill-name} # 創建核心定義檔 touch skills/{skill-name}/SKILL.md # 如果需要,創建可選的資源資料夾 mkdir -p skills/{skill-name}/scripts mkdir -p skills/{skill-name}/templates mkdir -p skills/{skill-name}/resources ``` ### 步驟 2:設計 SKILL.md **2.1 撰寫 YAML Front Matter** ```yaml --- name: your-skill-name description: 一句話說明這個 skill 的核心功能(50-100 字) --- ``` **2.2 撰寫核心內容** 按照以下順序組織內容: 1. **主標題和簡介** ```markdown # Skill 標題 簡短介紹這個 skill 的用途和價值(1-2 段) ``` 2. **核心功能** ```markdown ## 核心功能 - 功能 1 - 功能 2 - 功能 3 ``` 3. **執行步驟** ```markdown ## 執行步驟 ### 1. 步驟標題 詳細說明... ### 2. 步驟標題 詳細說明... ``` 4. **其他章節**(視需要加入) - 輸入條件 - 輸出結果 - 使用場景 - 注意事項 - 整合其他工具 **2.3 撰寫範例** 提供實際的使用範例,幫助使用者理解: ```markdown ## 工作流程範例 \`\`\` User: [使用者的請求] Agent: [Claude 的回應] [執行 skill 的步驟] User: [使用者的後續互動] Agent: [完成的回應] \`\`\` ``` ### 步驟 3:重構現有程式碼(如果適用) 如果是從現有的 command/agent 中抽取 skill: **3.1 識別要抽取的邏輯** 找出重複使用或可以獨立的部分 **3.2 更新原始檔案** 移除重複的邏輯,改為引用新的 skill: ```markdown ## 執行步驟 1. 準備工作 2. **使用 `{plugin-name}:{skill-name}` skill** 執行主要邏輯 3. 後續處理 ``` **3.3 測試功能** 確保重構後功能正常: - 測試所有引用這個 skill 的 commands - 確認 skill 可以獨立執行 - 檢查錯誤處理 ### 步驟 4:更新文件 **4.1 更新 Plugin README.md** 在 plugin 的 README 中加入新的 skill: ```markdown ## Skills ### {skill-name} 簡短說明這個 skill 的功能。 **位置**:`skills/{skill-name}/SKILL.md` **主要功能**: - 功能 1 - 功能 2 **使用方式**: 在 commands 或 agents 中引用這個 skill ``` **4.2 更新 CHANGELOG.md** 記錄到 plugin 的 CHANGELOG: ```markdown ## [Unreleased] ### Added - 新增 `{skill-name}` skill:{簡短說明} ``` **4.3 更新版本號**(如果需要發布) 在 `.claude-plugin/plugin.json` 中更新版本號: ```json { "name": "plugin-name", "version": "1.1.0", ... } ``` --- ## 品質檢查清單 創建或修改 skill 後,使用這個檢查清單確保品質: ### 檔案結構 - [ ] `SKILL.md` 檔案存在且位於正確位置 - [ ] 資料夾名稱使用 kebab-case - [ ] 檔案結尾有空行 - [ ] 可選的資料夾(scripts, templates, resources)有適當的組織 ### YAML Front Matter - [ ] 包含 `name` 欄位 - [ ] 包含 `description` 欄位 - [ ] `name` 使用 PascalCase 或 kebab-case - [ ] `description` 清楚簡潔(50-100 字) - [ ] 使用繁體中文 - [ ] YAML 格式正確(使用 `---` 包圍) ### 內容品質 - [ ] 包含「核心功能」章節 - [ ] 包含「執行步驟」章節 - [ ] 執行步驟清晰且可操作 - [ ] 提供使用範例或場景 - [ ] 包含注意事項(如果適用) - [ ] Markdown 格式正確 - [ ] 沒有錯字和語法錯誤 ### 命名規範 - [ ] 資料夾名稱使用 kebab-case - [ ] YAML name 與資料夾名稱一致(推薦) - [ ] 名稱具有描述性,清楚說明功能 - [ ] 使用動詞開頭(建議) - [ ] 避免重複 plugin 名稱 ### 功能驗證 - [ ] Skill 可以獨立執行 - [ ] 所有引用這個 skill 的 commands/agents 都能正常運作 - [ ] 測試過主要使用場景 - [ ] 錯誤處理完善 ### 文件更新 - [ ] 更新 Plugin README.md - [ ] 更新 CHANGELOG.md - [ ] 更新版本號(如果需要發布) - [ ] 所有文件間的連結正確 ### 整合檢查 - [ ] 與其他 skills 的介面清楚 - [ ] 與 commands 的整合正確 - [ ] 與 agents 的整合正確 - [ ] 沒有與其他 skills 重複的功能 --- ## 常見問題 ### Q1:應該創建多少個可選資料夾? **A**:只創建你實際需要的資料夾。 - 如果沒有腳本,不要創建空的 `scripts/` 資料夾 - 如果沒有範本,不要創建空的 `templates/` 資料夾 - 保持結構簡單,遵循 YAGNI 原則 ### Q2:YAML name 必須使用 kebab-case 嗎? **A**:**是的,統一使用全小寫的 kebab-case** 與資料夾名稱完全一致。 範例: ``` 資料夾:skills-development/ YAML: name: skills-development (全小寫的 kebab-case) ``` 這樣可以保持命名的一致性,便於維護和識別。 ### Q3:description 應該寫多長?要包含什麼內容? **A**:**建議 50-150 字**,一到兩句話,必須包含 **What(做什麼)** 和 **When(何時使用)**。 **原因**: - description 是 AI 發現 skill 的關鍵,會被預載入到 system prompt - Claude 透過掃描 descriptions 來決定使用哪個 skill - 官方限制最大 1024 字元 **範例**: - ✅ 優秀:「協助解決 Git Rebase 或 Merge 過程中的衝突,提供系統化的衝突解決流程。」 - What: 解決 Git 衝突 - When: Git Rebase 或 Merge 過程中 - ❌ 太簡短:「解決衝突」(缺少 When 和具體情境) - ❌ 太冗長:列出所有功能細節(應該放在 SKILL.md 內容中) ### Q4:可以在 skill 中引用其他 skills 嗎? **A**:可以,但要注意避免循環依賴。 ```markdown ## 執行步驟 1. 使用 `analyze-changes` skill 分析變更 2. 根據分析結果決定策略 3. 執行對應的操作 ``` ### Q5:如何處理 skill 的版本控制? **A**:Skills 的版本跟隨 plugin 的版本。 - 修改 skill 時更新 plugin 的 CHANGELOG - 如果是重大變更,考慮增加 plugin 的 MAJOR 版本號 - 在 CHANGELOG 中明確記錄 skill 的變更 --- ## 與其他文件的關聯 - **[SKILL.md](SKILL.md)**:核心判斷標準,決定是否需要創建 skill - **[official-reference.md](official-reference.md)**:官方格式規範的詳細說明 - **[examples.md](examples.md)**:實際案例,看其他 skills 如何實作 - **[best-practices.md](best-practices.md)**:避免實施中的常見錯誤 --- **最後更新**:2025-10-19