--- description: Create Skill argument-hint: [技能描述] allowed-tools: Read,Write,Edit,Bash(mkdir:*),AskUserQuestion --- # 建立新的 Skill 協助你從構思到實作,建立一個符合最佳實踐的 Claude Code Skill。 ## 參數說明 接收一個可選的技能描述參數: ``` /plugin-dev:create-skill [技能描述] ``` - 如果有提供描述,直接進入設計流程 - 如果沒有提供,先詢問使用者想要建立什麼 skill ## 執行流程 ### 步驟 1:收集需求 #### 1-1. 取得技能描述 如果使用者沒有提供描述,使用 AskUserQuestion 詢問: **問題**:你想建立什麼樣的 Skill? - 請描述這個 skill 的主要功能 - 它會在什麼場景下使用? #### 1-2. 收集基本資訊 詢問以下資訊(使用一次 AskUserQuestion 同時詢問): 1. **所屬 Plugin**:這個 skill 屬於哪個 plugin? - 提供當前可用的 plugins 清單作為選項 - 允許使用者輸入新的 plugin 名稱 2. **使用場景**: - 目前有哪些地方會使用這個 skill? - 預期未來會在哪些地方使用? 3. **邏輯複雜度**: - 大概需要幾個步驟?(簡單 3-5、中等 5-10、複雜 10+) ### 步驟 2:套用設計原則 **引用 `plugin-dev:skills-development` 的判斷標準** 根據收集到的資訊,評估是否符合 skill 的定位: #### 檢查清單 ```markdown - [ ] 多處使用?(2+ 個地方) - [ ] 邏輯複雜?(5+ 個步驟) - [ ] 可獨立呼叫?(使用者可能單獨執行) - [ ] 需要獨立維護?(邏輯會經常更新) ``` #### 評估結果 **符合 3+ 項**:✅ 適合建立 Skill,繼續流程 **符合 1-2 項**:❓ 提供建議 ```markdown 根據 YAGNI 原則,這個功能可能更適合: - Command:如果使用者需要直接呼叫 - 直接寫在現有的 Command/Agent 中:如果只在一個地方使用 是否仍要繼續建立 Skill? ``` **符合 0 項**:❌ 不建議建立 Skill ```markdown 這個功能不符合 Skill 的定位,建議: 1. 如果使用者需要直接呼叫 → 建立 Command 2. 如果需要複雜互動 → 建立 Agent 3. 如果邏輯簡單 → 直接寫在現有檔案中 提供替代方案建議。 ``` ### 步驟 3:設計 Skill 結構 如果確定要建立 skill,開始設計細節: #### 3-1. 確認命名 **Skill 名稱**(使用 kebab-case): - 清楚描述功能 - 遵循 `{功能動詞}-{對象}` 格式 - 範例:`analyze-atomicity`、`generate-commit-message` **YAML Front Matter 名稱**(使用 PascalCase 或自然語言): - 範例:`Analyze Atomicity`、`Generate Commit Message` **Description**(一句話說明): - 簡潔明瞭,50 字以內 - 說明核心功能和使用場景 #### 3-2. 設計輸入輸出 **輸入條件**: - 需要哪些前置資訊? - 依賴哪些工具或環境? - 有什麼前提條件? **輸出結果**: - 返回什麼資訊? - 如何被其他 commands/skills 使用? - 會產生哪些副作用(如建立檔案、修改狀態)? #### 3-3. 規劃執行步驟 將工作流程分解成清晰的步驟: ```markdown ## 執行步驟 ### 步驟 1:[第一個階段] - 子步驟 1-1 - 子步驟 1-2 ### 步驟 2:[第二個階段] - 子步驟 2-1 - 子步驟 2-2 ### 步驟 N:[最後階段] - 完成並輸出結果 ``` **注意事項**: - 每個步驟應該有明確的目標 - 步驟之間的依賴關係要清楚 - 包含錯誤處理的說明 #### 3-4. 提供使用範例 設計實際的使用場景和範例: ```markdown ## 使用範例 ### 場景 1:[典型使用情況] [描述場景和範例程式碼] ### 場景 2:[特殊情況] [描述場景和範例程式碼] ``` ### 步驟 4:確認設計 在產生檔案前,向使用者確認完整的設計: ```markdown ## Skill 設計摘要 **Plugin**:{plugin-name} **Skill 名稱**:{skill-name} **描述**:{description} **輸入條件**: - [列出輸入項目] **執行步驟**: 1. [步驟 1] 2. [步驟 2] ... **輸出結果**: - [列出輸出項目] **使用場景**: - [場景 1] - [場景 2] 確認以上設計無誤? ``` 使用 AskUserQuestion 確認,如果使用者提出修改意見,調整設計後再次確認。 ### 步驟 5:產生檔案 #### 5-1. 建立目錄結構 ```bash mkdir -p plugins/{plugin-name}/skills/{skill-name} ``` #### 5-2. 產生 SKILL.md 使用 Write tool 建立 `plugins/{plugin-name}/skills/{skill-name}/SKILL.md`: ```yaml --- name: {Skill Name} description: {簡短描述} --- # {Skill 標題} {詳細說明這個 skill 的功能和目的} ## 核心功能 - {功能點 1} - {功能點 2} - {功能點 3} ## 輸入條件 - {前置條件 1} - {前置條件 2} ## 執行步驟 ### 步驟 1:{步驟名稱} {詳細說明} ### 步驟 2:{步驟名稱} {詳細說明} ## 輸出結果 - {輸出項目 1} - {輸出項目 2} ## 使用範例 ### 場景 1:{場景名稱} {範例說明} ## 注意事項 - {注意事項 1} - {注意事項 2} ``` **重要**: - 檔案結尾要留一個空行 - YAML Front Matter 格式要正確 - Markdown 格式要規範 #### 5-3. 確認檔案已建立 使用 Read tool 讀取剛建立的 SKILL.md,確認內容正確。 ### 步驟 6:更新文件 #### 6-1. 更新 README.md 讀取 `plugins/{plugin-name}/README.md`,在 Skills 清單中加入新的 skill: ```markdown ### `{plugin-name}:{skill-name}` {description} **功能特點:** - {特點 1} - {特點 2} **適用場景:** - {場景 1} - {場景 2} **使用方式:** {簡要的使用說明} ``` #### 6-2. 更新 CHANGELOG.md 讀取 `plugins/{plugin-name}/CHANGELOG.md`,在 `[Unreleased]` 區段的 `### Added` 下加入: ```markdown - 新增 `{plugin-name}:{skill-name}` Skill - {功能說明 1} - {功能說明 2} - {功能說明 3} ``` 如果 `[Unreleased]` 區段不存在,創建它。 如果 `### Added` 區段不存在,創建它。 ### 步驟 7:總結並提供後續建議 完成後向使用者報告: ```markdown ✅ Skill 建立完成! **檔案位置**: - SKILL.md: plugins/{plugin-name}/skills/{skill-name}/SKILL.md - README.md: 已更新 - CHANGELOG.md: 已更新 **後續步驟建議**: 1. 測試 Skill - 在實際場景中使用這個 skill - 確認執行步驟是否清晰 - 驗證輸入輸出是否符合預期 2. 更新引用 - 在需要使用這個 skill 的 commands/agents 中加入引用 - 移除重複的邏輯程式碼 3. 版本管理 - 如果這是重要更新,考慮更新 plugin 版本號 - 在 CHANGELOG.md 中補充更詳細的說明 4. 文件完善 - 根據實際使用情況補充更多範例 - 加入常見問題和注意事項 ``` ## 設計原則提醒 在整個流程中,持續提醒並應用以下原則: ### YAGNI(You Aren't Gonna Need It) - 不要為「可能的」未來需求過度設計 - 保持簡單,專注於當前的實際需求 ### DRY(Don't Repeat Yourself) - 確保這個 skill 真的能避免重複 - 如果只有一個使用場景,考慮延後創建 ### 單一職責原則 - 一個 skill 只做一件事 - 職責要清晰明確 ### 清晰介面 - 輸入輸出要明確 - 文件要完整清楚 ## 特殊情況處理 ### 情況 1:Plugin 不存在 如果使用者指定的 plugin 不存在,詢問: ```markdown Plugin `{plugin-name}` 不存在。 你想要: 1. 建立新的 plugin `{plugin-name}`? 2. 選擇其他現有的 plugin? ``` 如果選擇建立新 plugin,提示: ```markdown 建立新 plugin 需要: - .claude-plugin/plugin.json - README.md - CHANGELOG.md 建議先使用其他工具建立 plugin,再回來建立 skill。 或者我可以協助你建立基本的 plugin 結構? ``` ### 情況 2:Skill 已存在 如果 skill 已經存在,詢問: ```markdown Skill `{plugin-name}:{skill-name}` 已存在。 你想要: 1. 覆蓋現有的 skill(會備份舊版本) 2. 使用不同的名稱 3. 取消操作 ``` ### 情況 3:使用者提出的功能不適合 Skill 根據評估結果,提供替代建議: **建議建立 Command:** ```markdown 這個功能更適合建立 Command,因為: - [列出理由] Command 的優點: - 使用者可以直接呼叫(/plugin-name:command-name) - 輕量快速 - 適合工具型功能 要改為建立 Command 嗎? ``` **建議建立 Agent:** ```markdown 這個功能更適合建立 Agent,因為: - [列出理由] Agent 的優點: - 可以深入分析和思考 - 支援複雜的多輪互動 - 適合需要專業判斷的場景 要改為建立 Agent 嗎? ``` ## 錯誤處理 ### 檔案操作錯誤 如果建立檔案失敗: ```markdown ❌ 建立檔案時發生錯誤:{錯誤訊息} 可能的原因: - 權限不足 - 路徑不存在 - 檔案名稱不合法 請檢查並重試。 ``` ### 格式錯誤 如果 YAML Front Matter 格式錯誤: ```markdown ⚠️ 檢測到格式問題: - YAML Front Matter 缺少 `---` 分隔線 - name 或 description 欄位缺失 已自動修正格式。 ``` ## 品質檢查清單 在完成前確認: - [ ] SKILL.md 的 YAML Front Matter 格式正確 - [ ] 檔案結尾有空行 - [ ] Markdown 格式規範(標題、列表、程式碼區塊) - [ ] 輸入輸出說明清楚 - [ ] 執行步驟完整且有邏輯順序 - [ ] 至少有一個使用範例 - [ ] README.md 已更新 - [ ] CHANGELOG.md 已更新 - [ ] 檔案路徑和命名符合規範 ## 參考資源 - 設計原則:參考 `plugin-dev:skills-development` skill - 檔案結構:參考專案 CLAUDE.md 中的目錄結構說明 - 版本管理:參考 CLAUDE.md 中的版本管理規範