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

9.4 KiB
Raw Permalink Blame History

description, argument-hint, allowed-tools
description argument-hint allowed-tools
Create Skill
技能描述
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 的定位:

檢查清單

- [ ] 多處使用2+ 個地方)
- [ ] 邏輯複雜5+ 個步驟)
- [ ] 可獨立呼叫?(使用者可能單獨執行)
- [ ] 需要獨立維護?(邏輯會經常更新)

評估結果

符合 3+ 項 適合建立 Skill繼續流程

符合 1-2 項 提供建議

根據 YAGNI 原則,這個功能可能更適合:
- Command如果使用者需要直接呼叫
- 直接寫在現有的 Command/Agent 中:如果只在一個地方使用

是否仍要繼續建立 Skill

符合 0 項 不建議建立 Skill

這個功能不符合 Skill 的定位,建議:
1. 如果使用者需要直接呼叫 → 建立 Command
2. 如果需要複雜互動 → 建立 Agent
3. 如果邏輯簡單 → 直接寫在現有檔案中

提供替代方案建議。

步驟 3設計 Skill 結構

如果確定要建立 skill開始設計細節

3-1. 確認命名

Skill 名稱(使用 kebab-case

  • 清楚描述功能
  • 遵循 {功能動詞}-{對象} 格式
  • 範例:analyze-atomicitygenerate-commit-message

YAML Front Matter 名稱(使用 PascalCase 或自然語言):

  • 範例:Analyze AtomicityGenerate Commit Message

Description(一句話說明):

  • 簡潔明瞭50 字以內
  • 說明核心功能和使用場景

3-2. 設計輸入輸出

輸入條件

  • 需要哪些前置資訊?
  • 依賴哪些工具或環境?
  • 有什麼前提條件?

輸出結果

  • 返回什麼資訊?
  • 如何被其他 commands/skills 使用?
  • 會產生哪些副作用(如建立檔案、修改狀態)?

3-3. 規劃執行步驟

將工作流程分解成清晰的步驟:

## 執行步驟

### 步驟 1[第一個階段]
- 子步驟 1-1
- 子步驟 1-2

### 步驟 2[第二個階段]
- 子步驟 2-1
- 子步驟 2-2

### 步驟 N[最後階段]
- 完成並輸出結果

注意事項

  • 每個步驟應該有明確的目標
  • 步驟之間的依賴關係要清楚
  • 包含錯誤處理的說明

3-4. 提供使用範例

設計實際的使用場景和範例:

## 使用範例

### 場景 1[典型使用情況]
[描述場景和範例程式碼]

### 場景 2[特殊情況]
[描述場景和範例程式碼]

步驟 4確認設計

在產生檔案前,向使用者確認完整的設計:

## Skill 設計摘要

**Plugin**{plugin-name}
**Skill 名稱**{skill-name}
**描述**{description}

**輸入條件**
- [列出輸入項目]

**執行步驟**
1. [步驟 1]
2. [步驟 2]
...

**輸出結果**
- [列出輸出項目]

**使用場景**
- [場景 1]
- [場景 2]

確認以上設計無誤?

使用 AskUserQuestion 確認,如果使用者提出修改意見,調整設計後再次確認。

步驟 5產生檔案

5-1. 建立目錄結構

mkdir -p plugins/{plugin-name}/skills/{skill-name}

5-2. 產生 SKILL.md

使用 Write tool 建立 plugins/{plugin-name}/skills/{skill-name}/SKILL.md

---
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

### `{plugin-name}:{skill-name}`

{description}

**功能特點:**

- {特點 1}
- {特點 2}

**適用場景:**

- {場景 1}
- {場景 2}

**使用方式:**

{簡要的使用說明}

6-2. 更新 CHANGELOG.md

讀取 plugins/{plugin-name}/CHANGELOG.md,在 [Unreleased] 區段的 ### Added 下加入:

- 新增 `{plugin-name}:{skill-name}` Skill
  - {功能說明 1}
  - {功能說明 2}
  - {功能說明 3}

如果 [Unreleased] 區段不存在,創建它。 如果 ### Added 區段不存在,創建它。

步驟 7總結並提供後續建議

完成後向使用者報告:

✅ 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. 文件完善
   - 根據實際使用情況補充更多範例
   - 加入常見問題和注意事項

設計原則提醒

在整個流程中,持續提醒並應用以下原則:

YAGNIYou Aren't Gonna Need It

  • 不要為「可能的」未來需求過度設計
  • 保持簡單,專注於當前的實際需求

DRYDon't Repeat Yourself

  • 確保這個 skill 真的能避免重複
  • 如果只有一個使用場景,考慮延後創建

單一職責原則

  • 一個 skill 只做一件事
  • 職責要清晰明確

清晰介面

  • 輸入輸出要明確
  • 文件要完整清楚

特殊情況處理

情況 1Plugin 不存在

如果使用者指定的 plugin 不存在,詢問:

Plugin `{plugin-name}` 不存在。

你想要:
1. 建立新的 plugin `{plugin-name}`
2. 選擇其他現有的 plugin

如果選擇建立新 plugin提示

建立新 plugin 需要:
- .claude-plugin/plugin.json
- README.md
- CHANGELOG.md

建議先使用其他工具建立 plugin再回來建立 skill。
或者我可以協助你建立基本的 plugin 結構?

情況 2Skill 已存在

如果 skill 已經存在,詢問:

Skill `{plugin-name}:{skill-name}` 已存在。

你想要:
1. 覆蓋現有的 skill會備份舊版本
2. 使用不同的名稱
3. 取消操作

情況 3使用者提出的功能不適合 Skill

根據評估結果,提供替代建議:

建議建立 Command

這個功能更適合建立 Command因為
- [列出理由]

Command 的優點:
- 使用者可以直接呼叫(/plugin-name:command-name
- 輕量快速
- 適合工具型功能

要改為建立 Command 嗎?

建議建立 Agent

這個功能更適合建立 Agent因為
- [列出理由]

Agent 的優點:
- 可以深入分析和思考
- 支援複雜的多輪互動
- 適合需要專業判斷的場景

要改為建立 Agent 嗎?

錯誤處理

檔案操作錯誤

如果建立檔案失敗:

❌ 建立檔案時發生錯誤:{錯誤訊息}

可能的原因:
- 權限不足
- 路徑不存在
- 檔案名稱不合法

請檢查並重試。

格式錯誤

如果 YAML Front Matter 格式錯誤:

⚠️ 檢測到格式問題:

- YAML Front Matter 缺少 `---` 分隔線
- name 或 description 欄位缺失

已自動修正格式。

品質檢查清單

在完成前確認:

  • SKILL.md 的 YAML Front Matter 格式正確
  • 檔案結尾有空行
  • Markdown 格式規範(標題、列表、程式碼區塊)
  • 輸入輸出說明清楚
  • 執行步驟完整且有邏輯順序
  • 至少有一個使用範例
  • README.md 已更新
  • CHANGELOG.md 已更新
  • 檔案路徑和命名符合規範

參考資源

  • 設計原則:參考 plugin-dev:skills-development skill
  • 檔案結構:參考專案 CLAUDE.md 中的目錄結構說明
  • 版本管理:參考 CLAUDE.md 中的版本管理規範