10 10
11本頁面適用於編寫自己外掛程式的人員。11本頁面適用於編寫自己外掛程式的人員。
12 12
13<Note>13> [!NOTE]
14 其他頁面涵蓋了這些情況:14>
15 15> 其他頁面涵蓋了這些情況:
16 * **安裝他人的外掛程式**:請參閱[安裝外掛程式](/docs/zh-TW/plugins/install)16>
17 * **不確定您是否需要外掛程式**:請參閱概述中的[決定是否需要外掛程式](/docs/zh-TW/plugins/overview#decide-whether-you-need-a-plugin)17> * **安裝他人的外掛程式**:請參閱[安裝外掛程式](/docs/zh-TW/plugins/install)
18 * **您的外掛程式使用者在 claude.ai 或 Cowork 上**:同一個資料夾會以不同的元件子集安裝在那裡。請參閱[外掛程式結構和測試](https://claude.com/docs/plugins/build)和[元件支援表](https://claude.com/docs/plugins/platform-support#compare-component-support-by-app)18> * **不確定您是否需要外掛程式**:請參閱概述中的[決定是否需要外掛程式](/docs/zh-TW/plugins/overview#decide-whether-you-need-a-plugin)
19</Note>19> * **您的外掛程式使用者在 claude.ai 或 Cowork 上**:同一個資料夾會以不同的元件子集安裝在那裡。請參閱[外掛程式結構和測試](https://claude.com/docs/plugins/build)和[元件支援表](https://claude.com/docs/plugins/platform-support#compare-component-support-by-app)
20 20
21從與您已有的內容相符的部分開始:21從與您已有的內容相符的部分開始:
22 22
23* **還沒有任何東西**:遵循[建立您的第一個外掛程式](#create-your-first-plugin),然後[在沒有市集的情況下開發](#develop-without-a-marketplace)和[測試和偵錯](#test-and-debug)。23* **還沒有任何東西**:遵循[建立您的第一個外掛程式](#create-your-first-plugin),然後[在沒有市集的情況下開發](#develop-without-a-marketplace)和[測試和偵錯](#test-and-debug)。
24* **已在 `.claude/` 下有檔案**:執行一次第一個外掛程式的逐步解說以了解佈局,然後遵循[轉換現有的 `.claude/` 設定](#convert-an-existing-claude-setup)。24* **已在 `.claude/` 下有檔案**:執行一次第一個外掛程式的逐步解說以了解佈局,然後遵循[轉換現有的 `.claude/` 設定](#convert-an-existing-claude-setup)。
25 25
26<h2 id="decide-when-to-use-a-plugin">26## 決定何時使用外掛程式
27 決定何時使用外掛程式
28</h2>
29 27
30技能、代理、hooks 和 MCP 伺服器都可以在您的專案或主目錄中獨立運作。當它只為一個專案或只為您服務時,保持該獨立設定。當您想與隊友分享設定、在多個專案中安裝,或發佈版本化版本時,請建立外掛程式。28技能、代理、hooks 和 MCP 伺服器都可以在您的專案或主目錄中獨立運作。當它只為一個專案或只為您服務時,保持該獨立設定。當您想與隊友分享設定、在多個專案中安裝,或發佈版本化版本時,請建立外掛程式。
31 29
36 34
37若要將現有設定移到外掛程式中,請參閱[轉換現有的 `.claude/` 設定](#convert-an-existing-claude-setup)。35若要將現有設定移到外掛程式中,請參閱[轉換現有的 `.claude/` 設定](#convert-an-existing-claude-setup)。
38 36
39<h2 id="create-your-first-plugin">37## 建立您的第一個外掛程式
40 建立您的第一個外掛程式
41</h2>
42 38
43在此逐步解說中,您建立一個外掛程式,其唯一元件是一個技能(問候),並使用 `--plugin-dir` 執行它,該選項會為一個工作階段載入外掛程式而不安裝它。外掛程式可以包含任何[元件](/docs/zh-TW/plugins/components)的組合,例如技能、代理、hooks 和 MCP 伺服器,且不需要任何一個;一個技能是展示佈局的最小範例。39在此逐步解說中,您建立一個外掛程式,其唯一元件是一個技能(問候),並使用 `--plugin-dir` 執行它,該選項會為一個工作階段載入外掛程式而不安裝它。外掛程式可以包含任何[元件](/docs/zh-TW/plugins/components)的組合,例如技能、代理、hooks 和 MCP 伺服器,且不需要任何一個;一個技能是展示佈局的最小範例。
44 40
46 42
47在您想保留外掛程式的目錄(例如 `~/projects`)中開啟終端機,並從該目錄執行這些步驟中的命令。您可以將外掛程式保留在任何地方,因為當您啟動工作階段時,您會將其路徑傳遞給 Claude Code。43在您想保留外掛程式的目錄(例如 `~/projects`)中開啟終端機,並從該目錄執行這些步驟中的命令。您可以將外掛程式保留在任何地方,因為當您啟動工作階段時,您會將其路徑傳遞給 Claude Code。
48 44
49<Steps>45**1. 建立外掛程式目錄**
50 <Step title="建立外掛程式目錄">46
51 建立外掛程式目錄,其中包含一個 `.claude-plugin/` 資料夾來保存清單:47建立外掛程式目錄,其中包含一個 `.claude-plugin/` 資料夾來保存清單:
48
49```bash theme={null}
50mkdir -p my-first-plugin/.claude-plugin
51```
52 52
53 ```bash theme={null}53**2. 編寫清單**
54 mkdir -p my-first-plugin/.claude-plugin
55 ```
56 </Step>
57 54
58 <Step title="編寫清單">55[清單](/docs/zh-TW/plugins/manifest-reference)是一個名為 `plugin.json` 的 JSON 檔案,它告訴 Claude Code 外掛程式的名稱並描述它。將此檔案儲存為 `my-first-plugin/.claude-plugin/plugin.json`:
59 [清單](/docs/zh-TW/plugins/manifest-reference)是一個名為 `plugin.json` 的 JSON 檔案,它告訴 Claude Code 外掛程式的名稱並描述它。將此檔案儲存為 `my-first-plugin/.claude-plugin/plugin.json`:
60 56
61 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}57```json my-first-plugin/.claude-plugin/plugin.json theme={null}
62 {58{
63 "name": "my-first-plugin",59 "name": "my-first-plugin",
64 "description": "A greeting plugin to learn the basics",60 "description": "A greeting plugin to learn the basics",
65 "version": "1.0.0",61 "version": "1.0.0",
66 "author": {62 "author": {
67 "name": "Your Name"63 "name": "Your Name"
68 }64 }
69 }65}
70 ```66```
71 67
72 這四個欄位的作用如下:68這四個欄位的作用如下:
73 69
74 * **`name`**:必需。它識別外掛程式並成為外掛程式提供的每個技能和代理的前綴。不要在其中放置空格。70* **`name`**:必需。它識別外掛程式並成為外掛程式提供的每個技能和代理的前綴。不要在其中放置空格。
75 * **`description`**:使用者在 `/plugin` 中看到的外掛程式文字。71* **`description`**:使用者在 `/plugin` 中看到的外掛程式文字。
76 * **`version`**:選用。設定它會讓使用者保持在該版本,直到您更改它;[發佈新版本](/docs/zh-TW/plugins/host-marketplace#release-a-new-version)說明何時設定或省略它。72* **`version`**:選用。設定它會讓使用者保持在該版本,直到您更改它;[發佈新版本](/docs/zh-TW/plugins/host-marketplace#release-a-new-version)說明何時設定或省略它。
77 * **`author`**:要歸功於誰。其中的 `name` 是必需的;`email` 和 `url` 是選用的。73* **`author`**:要歸功於誰。其中的 `name` 是必需的;`email` 和 `url` 是選用的。
78 74
79 每個其他欄位都在[清單參考](/docs/zh-TW/plugins/manifest-reference#fields)上。75每個其他欄位都在[清單參考](/docs/zh-TW/plugins/manifest-reference#fields)上。
80 76
81 只有 `plugin.json` 放在 `.claude-plugin/` 內。您接下來添加的技能直接放在 `my-first-plugin/` 下,在該資料夾旁邊。77只有 `plugin.json` 放在 `.claude-plugin/` 內。您接下來添加的技能直接放在 `my-first-plugin/` 下,在該資料夾旁邊。
82 </Step>
83 78
84 <Step title="添加技能">79**3. 添加技能**
85 此外掛程式的一個元件是一個技能。每個技能是 `skills/` 下的一個目錄,包含一個 `SKILL.md` 檔案。建立技能的目錄:
86 80
87 ```bash theme={null}81此外掛程式的一個元件是一個技能。每個技能是 `skills/` 下的一個目錄,包含一個 `SKILL.md` 檔案。建立技能的目錄:
88 mkdir -p my-first-plugin/skills/hello
89 ```
90 82
91 然後使用此內容建立 `my-first-plugin/skills/hello/SKILL.md`:83```bash theme={null}
84mkdir -p my-first-plugin/skills/hello
85```
92 86
93 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}87然後使用此內容建立 `my-first-plugin/skills/hello/SKILL.md`:
94 ---
95 name: hello
96 description: Greet the user with a friendly message
97 disable-model-invocation: true
98 ---
99 88
100 Greet the user warmly and ask how you can help them today.89```markdown my-first-plugin/skills/hello/SKILL.md theme={null}
101 ```90---
91name: hello
92description: Greet the user with a friendly message
93disable-model-invocation: true
94---
102 95
103 `disable-model-invocation: true` 行表示 Claude 不會自行執行該 skill。從您希望 Claude 自行執行的 skill 中移除該行。skill 的命令結合外掛程式名稱和 skill 的名稱,因此您將此 skill 執行為 `/my-first-plugin:hello`。對於其他 frontmatter 欄位,請參閱[skill frontmatter 參考](/docs/zh-TW/skills#frontmatter-reference)。96Greet the user warmly and ask how you can help them today.
104 </Step>97```
105 98
106 <Step title="驗證外掛程式">99`disable-model-invocation: true` 行表示 Claude 不會自行執行該 skill。從您希望 Claude 自行執行的 skill 中移除該行。skill 的命令結合外掛程式名稱和 skill 的名稱,因此您將此 skill 執行為 `/my-first-plugin:hello`。對於其他 frontmatter 欄位,請參閱[skill frontmatter 參考](/docs/zh-TW/skills#frontmatter-reference)。
107 在執行任何操作之前檢查清單和 skill 的 frontmatter:
108 100
109 ```bash theme={null}101**4. 驗證外掛程式**
110 claude plugin validate ./my-first-plugin
111 ```
112 102
113 該命令列印它檢查的清單路徑和 `✔ Validation passed`。如果它改為列印 `✘ Validation failed`,則該結果行上方的每一行都命名要修復的欄位。在[`claude plugin validate` 報告錯誤](/docs/zh-TW/plugins/troubleshooting#claude-plugin-validate-reports-errors)下查找每條訊息。103在執行任何操作之前檢查清單和 skill 的 frontmatter:
114 </Step>
115 104
116 <Step title="使用外掛程式執行 Claude Code">105```bash theme={null}
117 啟動已載入外掛程式的工作階段:106claude plugin validate ./my-first-plugin
107```
108
109該命令列印它檢查的清單路徑和 `✔ Validation passed`。如果它改為列印 `✘ Validation failed`,則該結果行上方的每一行都命名要修復的欄位。在[`claude plugin validate` 報告錯誤](/docs/zh-TW/plugins/troubleshooting#claude-plugin-validate-reports-errors)下查找每條訊息。
110
111**5. 使用外掛程式執行 Claude Code**
118 112
119 ```bash theme={null}113啟動已載入外掛程式的工作階段:
120 claude --plugin-dir ./my-first-plugin
121 ```
122 114
123 Claude Code 啟動後,執行技能:115```bash theme={null}
116claude --plugin-dir ./my-first-plugin
117```
124 118
125 ```text theme={null}119Claude Code 啟動後,執行技能:
126 /my-first-plugin:hello
127 ```
128 120
129 Claude 會回覆一個問候。121```text theme={null}
130 </Step>122/my-first-plugin:hello
131</Steps>123```
124
125Claude 會回覆一個問候。
132 126
133外掛程式只在您使用 `--plugin-dir` 啟動的工作階段中載入。若要在沒有該旗標的情況下繼續處理它,或測試 `.zip` 組建,請參閱[在沒有市集的情況下開發](#develop-without-a-marketplace)。127外掛程式只在您使用 `--plugin-dir` 啟動的工作階段中載入。若要在沒有該旗標的情況下繼續處理它,或測試 `.zip` 組建,請參閱[在沒有市集的情況下開發](#develop-without-a-marketplace)。
134 128
135若要讓 Claude 為您建立並檢查更大的外掛程式,請從 `claude-plugins-official` 市集[安裝](/docs/zh-TW/plugins/install#install-a-plugin) Anthropic 的 `plugin-dev` 外掛程式,該外掛程式會新增用於編寫技能、hooks 和 MCP 伺服器等元件的技能和代理,以及用於驗證完成的外掛程式的技能和代理。安裝後,執行 `/plugin-dev:create-plugin` 後跟您想要的外掛程式的描述,Claude 會引導您完成設計、建立和驗證它。129若要讓 Claude 為您建立並檢查更大的外掛程式,請從 `claude-plugins-official` 市集[安裝](/docs/zh-TW/plugins/install#install-a-plugin) Anthropic 的 `plugin-dev` 外掛程式,該外掛程式會新增用於編寫技能、hooks 和 MCP 伺服器等元件的技能和代理,以及用於驗證完成的外掛程式的技能和代理。安裝後,執行 `/plugin-dev:create-plugin` 後跟您想要的外掛程式的描述,Claude 會引導您完成設計、建立和驗證它。
136 130
137<h3 id="share-the-plugin">131### 分享您的外掛程式
138 分享您的外掛程式
139</h3>
140 132
141使用[建立您的第一個外掛程式](#create-your-first-plugin)建立的外掛程式只存在於您的機器上。當它準備好供其他人使用時,有三種方式可以將其提供給他們:133使用[建立您的第一個外掛程式](#create-your-first-plugin)建立的外掛程式只存在於您的機器上。當它準備好供其他人使用時,有三種方式可以將其提供給他們:
142 134
144* **在您自己的市集中列出它**:隊友添加您的市集一次並按名稱安裝外掛程式,他們會收到您的更新。請參閱[透過您自己的市集發佈](/docs/zh-TW/plugins/publish#publish-through-your-own-marketplace)。136* **在您自己的市集中列出它**:隊友添加您的市集一次並按名稱安裝外掛程式,他們會收到您的更新。請參閱[透過您自己的市集發佈](/docs/zh-TW/plugins/publish#publish-through-your-own-marketplace)。
145* **將其提交到 Anthropic 的社群市集**:列出後,任何添加該市集的人都可以安裝它。請參閱[提交到社群市集](/docs/zh-TW/plugins/publish#submit-to-anthropics-directory)。137* **將其提交到 Anthropic 的社群市集**:列出後,任何添加該市集的人都可以安裝它。請參閱[提交到社群市集](/docs/zh-TW/plugins/publish#submit-to-anthropics-directory)。
146 138
147<h3 id="plugin-layout">139### 外掛程式佈局
148 外掛程式佈局
149</h3>
150 140
151每種[元件](/docs/zh-TW/plugins/components)(例如技能、代理、hooks 和 MCP 伺服器)都放在外掛程式根目錄下的固定目錄中,外掛程式根目錄是您傳遞給 `--plugin-dir` 的目錄。只添加您使用的目錄。若要點擊完整的外掛程式目錄並閱讀每個檔案的作用,請開啟[外掛程式瀏覽器](/docs/zh-TW/plugins/components#explore-the-plugin-directory)。141每種[元件](/docs/zh-TW/plugins/components)(例如技能、代理、hooks 和 MCP 伺服器)都放在外掛程式根目錄下的固定目錄中,外掛程式根目錄是您傳遞給 `--plugin-dir` 的目錄。只添加您使用的目錄。若要點擊完整的外掛程式目錄並閱讀每個檔案的作用,請開啟[外掛程式瀏覽器](/docs/zh-TW/plugins/components#explore-the-plugin-directory)。
152 142
161| `hooks/hooks.json` | Hook 設定:一個頂級 `"hooks"` 鍵,其值的形狀與設定檔案中的 `hooks` 相同 |151| `hooks/hooks.json` | Hook 設定:一個頂級 `"hooks"` 鍵,其值的形狀與設定檔案中的 `hooks` 相同 |
162| `.mcp.json` | MCP 伺服器定義 |152| `.mcp.json` | MCP 伺服器定義 |
163 153
164<Warning>154> [!WARNING]
165 只有 `plugin.json` 放在 `.claude-plugin/` 內。保存在那裡的元件不會載入。155>
166 156> 只有 `plugin.json` 放在 `.claude-plugin/` 內。保存在那裡的元件不會載入。
167 外掛程式根目錄是外掛程式自己的目錄,不是 `~/.claude/` 本身。保存在 `~/.claude/.mcp.json` 的 `.mcp.json` 不會載入。157>
168</Warning>158> 外掛程式根目錄是外掛程式自己的目錄,不是 `~/.claude/` 本身。保存在 `~/.claude/.mcp.json` 的 `.mcp.json` 不會載入。
169 159
170<h2 id="develop-without-a-marketplace">160## 在沒有市集的情況下開發
171 在沒有市集的情況下開發
172</h2>
173 161
174您不需要[市集](/docs/zh-TW/plugins/overview#get-plugins-from-a-marketplace)來執行您正在編寫的外掛程式。改為直接從磁碟或 URL 載入它:162您不需要[市集](/docs/zh-TW/plugins/overview#get-plugins-from-a-marketplace)來執行您正在編寫的外掛程式。改為直接從磁碟或 URL 載入它:
175 163
179 167
180如果以不同方式載入的兩個外掛程式共享一個名稱,請參閱[名稱衝突](/docs/zh-TW/plugins/loading#name-conflicts)以了解 Claude Code 保留哪一個。168如果以不同方式載入的兩個外掛程式共享一個名稱,請參閱[名稱衝突](/docs/zh-TW/plugins/loading#name-conflicts)以了解 Claude Code 保留哪一個。
181 169
182<h3 id="load-a-directory-or-archive-for-one-session">170### 為一個工作階段載入外掛程式
183 為一個工作階段載入外掛程式
184</h3>
185 171
186您可以通過三種方式為單個工作階段載入外掛程式:使用 `--plugin-dir` 從磁碟上的目錄或 `.zip` 存檔,使用 `--plugin-url` 從 URL,或從環境變數(當您無法添加旗標時)。每個外掛程式只為該工作階段載入,沒有任何內容寫入您的設定。當您在工作階段期間編輯外掛程式的檔案時,執行 `/reload-plugins` 以載入變更。172您可以通過三種方式為單個工作階段載入外掛程式:使用 `--plugin-dir` 從磁碟上的目錄或 `.zip` 存檔,使用 `--plugin-url` 從 URL,或從環境變數(當您無法添加旗標時)。每個外掛程式只為該工作階段載入,沒有任何內容寫入您的設定。當您在工作階段期間編輯外掛程式的檔案時,執行 `/reload-plugins` 以載入變更。
187 173
188<span id="from-a-directory-or-zip" />174#### 從目錄或 `.zip` 載入外掛程式
189
190<h4 id="load-a-plugin-from-a-directory-or-zip">
191 從目錄或 `.zip` 載入外掛程式
192</h4>
193 175
194當您從 shell 啟動 `claude` 時,使用外掛程式的根目錄或其 `.zip` 存檔傳遞 `--plugin-dir`。重複該旗標以載入多個外掛程式:176當您從 shell 啟動 `claude` 時,使用外掛程式的根目錄或其 `.zip` 存檔傳遞 `--plugin-dir`。重複該旗標以載入多個外掛程式:
195 177
197claude --plugin-dir ./my-first-plugin --plugin-dir ./other-plugin.zip179claude --plugin-dir ./my-first-plugin --plugin-dir ./other-plugin.zip
198```180```
199 181
200<h4 id="load-a-folder-of-plugins">182#### 載入外掛程式資料夾
201 載入外掛程式資料夾
202</h4>
203 183
204若要從一個地方載入多個外掛程式,請傳遞一個保存它們的資料夾,例如 `--plugin-dir ./plugins`。載入外掛程式資料夾需要 Claude Code v2.1.265 或更新版本。184若要從一個地方載入多個外掛程式,請傳遞一個保存它們的資料夾,例如 `--plugin-dir ./plugins`。載入外掛程式資料夾需要 Claude Code v2.1.265 或更新版本。
205 185
214 194
215對於這些變更中的每一個,工作階段中都會出現一條訊息。如果在對話中途載入或卸載外掛程式會[使提示快取失效](/docs/zh-TW/prompt-caching#enabling-or-disabling-a-plugin),則該變更會被保留,訊息會告訴您執行 `/reload-plugins` 以應用它。195對於這些變更中的每一個,工作階段中都會出現一條訊息。如果在對話中途載入或卸載外掛程式會[使提示快取失效](/docs/zh-TW/prompt-caching#enabling-or-disabling-a-plugin),則該變更會被保留,訊息會告訴您執行 `/reload-plugins` 以應用它。
216 196
217<span id="fetch-an-archive-from-a-url-for-one-session" />197#### 從 URL 載入外掛程式
218
219<h4 id="load-a-plugin-from-a-url">
220 從 URL 載入外掛程式
221</h4>
222 198
223當您從 shell 啟動 `claude` 時,使用 `.zip` 存檔的位址傳遞 `--plugin-url`,例如您的 CI 發佈的組建成品:199當您從 shell 啟動 `claude` 時,使用 `.zip` 存檔的位址傳遞 `--plugin-url`,例如您的 CI 發佈的組建成品:
224 200
232 208
233如果 Claude Code 無法擷取存檔或存檔無效,它會在沒有外掛程式的情況下啟動,並記錄一個外掛程式載入錯誤,您可以在 `/plugin` 管理器的**錯誤**標籤中查看。209如果 Claude Code 無法擷取存檔或存檔無效,它會在沒有外掛程式的情況下啟動,並記錄一個外掛程式載入錯誤,您可以在 `/plugin` 管理器的**錯誤**標籤中查看。
234 210
235<span id="from-an-environment-variable" />211#### 從環境變數載入外掛程式
236
237<h4 id="load-plugins-from-an-environment-variable">
238 從環境變數載入外掛程式
239</h4>
240 212
241若要在無法添加 `--plugin-dir` 旗標的工作階段中載入外掛程式,請改為在 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-TW/env-vars#variables) 環境變數中列出它們的絕對路徑。Claude Code 會像載入 `--plugin-dir` 路徑一樣載入每個路徑。這些外掛程式會添加到您使用 `--plugin-dir` 傳遞的任何外掛程式中。[專案和本機設定無法設定此變數](/docs/zh-TW/settings-reference#variables-claude-code-ignores-in-env)。`CLAUDE_CODE_PLUGIN_DIRS` 需要 Claude Code v2.1.280 或更新版本。213若要在無法添加 `--plugin-dir` 旗標的工作階段中載入外掛程式,請改為在 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-TW/env-vars#variables) 環境變數中列出它們的絕對路徑。Claude Code 會像載入 `--plugin-dir` 路徑一樣載入每個路徑。這些外掛程式會添加到您使用 `--plugin-dir` 傳遞的任何外掛程式中。[專案和本機設定無法設定此變數](/docs/zh-TW/settings-reference#variables-claude-code-ignores-in-env)。`CLAUDE_CODE_PLUGIN_DIRS` 需要 Claude Code v2.1.280 或更新版本。
242 214
243受管設定可以關閉 `--plugin-dir` 和 `CLAUDE_CODE_PLUGIN_DIRS`。請參閱[為一個工作階段載入外掛程式的旗標](/docs/zh-TW/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)。若要一起測試外掛程式及其依賴的外掛程式,請參閱[在本機測試外掛程式及其依賴](/docs/zh-TW/plugins/dependencies#test-a-plugin-and-its-dependency-locally)。215受管設定可以關閉 `--plugin-dir` 和 `CLAUDE_CODE_PLUGIN_DIRS`。請參閱[為一個工作階段載入外掛程式的旗標](/docs/zh-TW/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)。若要一起測試外掛程式及其依賴的外掛程式,請參閱[在本機測試外掛程式及其依賴](/docs/zh-TW/plugins/dependencies#test-a-plugin-and-its-dependency-locally)。
244 216
245<h3 id="scaffold-a-plugin-that-loads-every-session">217### 讓外掛程式在每個工作階段中載入
246 讓外掛程式在每個工作階段中載入
247</h3>
248 218
249您的個人技能目錄是 `~/.claude/skills/`。Claude Code 會將那裡包含 `.claude-plugin/plugin.json` 的任何資料夾作為外掛程式在每個工作階段中載入,無需旗標和無需安裝步驟。`claude plugin init` 為您搭建其中一個外掛程式。219您的個人技能目錄是 `~/.claude/skills/`。Claude Code 會將那裡包含 `.claude-plugin/plugin.json` 的任何資料夾作為外掛程式在每個工作階段中載入,無需旗標和無需安裝步驟。`claude plugin init` 為您搭建其中一個外掛程式。
250 220
251<h4 id="scaffold-the-plugin-with-claude-plugin-init">221#### 使用 `claude plugin init` 搭建外掛程式
252 使用 `claude plugin init` 搭建外掛程式
253</h4>
254 222
255`claude plugin init` 在 `~/.claude/skills/` 下寫入一個啟動外掛程式。從您的 shell 搭建一個:223`claude plugin init` 在 `~/.claude/skills/` 下寫入一個啟動外掛程式。從您的 shell 搭建一個:
256 224
262 230
263傳遞 `--with skills` 以讓 `claude plugin init` 為您在 `skills/` 下搭建一個技能。其他 `--with` 值在[外掛程式命令參考](/docs/zh-TW/plugins/cli-reference#plugin-init)上。231傳遞 `--with skills` 以讓 `claude plugin init` 為您在 `skills/` 下搭建一個技能。其他 `--with` 值在[外掛程式命令參考](/docs/zh-TW/plugins/cli-reference#plugin-init)上。
264 232
265<h4 id="skill-names-in-a-scaffolded-plugin">233#### 在搭建的外掛程式中命名技能
266 在搭建的外掛程式中命名技能
267</h4>
268 234
269`~/.claude/skills/my-tool/SKILL.md` 的根技能也是個人技能,因此您將其作為 `/my-tool` 而不是 `/my-tool:my-tool` 呼叫。您在外掛程式內的 `skills/` 下添加的技能會取得外掛程式名稱前綴,例如 `/my-tool:example`。235`~/.claude/skills/my-tool/SKILL.md` 的根技能也是個人技能,因此您將其作為 `/my-tool` 而不是 `/my-tool:my-tool` 呼叫。您在外掛程式內的 `skills/` 下添加的技能會取得外掛程式名稱前綴,例如 `/my-tool:example`。
270 236
271<h4 id="stop-loading-the-plugin">237#### 停止載入外掛程式
272 停止載入外掛程式
273</h4>
274 238
275若要停止載入搭建的外掛程式,請刪除其目錄,或在 shell 中使用 `claude plugin init` 列印的 `my-tool@skills-dir` 名稱執行 `claude plugin disable my-tool@skills-dir`。在 ID `my-tool@skills-dir` 中,`skills-dir` 代替市集名稱,因為外掛程式從您的技能目錄而不是市集載入。239若要停止載入搭建的外掛程式,請刪除其目錄,或在 shell 中使用 `claude plugin init` 列印的 `my-tool@skills-dir` 名稱執行 `claude plugin disable my-tool@skills-dir`。在 ID `my-tool@skills-dir` 中,`skills-dir` 代替市集名稱,因為外掛程式從您的技能目錄而不是市集載入。
276 240
277<h4 id="load-a-plugin-for-everyone-in-one-repository">241#### 透過存放庫分享外掛程式
278 透過存放庫分享外掛程式
279</h4>
280 242
281`claude plugin init` 將外掛程式寫入您的個人技能目錄 `~/.claude/skills/`,因此它在每個專案中為您載入。若要讓外掛程式為一個存放庫中的每個人載入,請在 `<project>/.claude/skills/<name>/` 自己建立相同的佈局,包括其 `.claude-plugin/plugin.json`。請參閱[透過存放庫分享的外掛程式](/docs/zh-TW/plugins/loading#plugins-shared-through-a-repository)以了解 Claude Code 在什麼條件下載入它。243`claude plugin init` 將外掛程式寫入您的個人技能目錄 `~/.claude/skills/`,因此它在每個專案中為您載入。若要讓外掛程式為一個存放庫中的每個人載入,請在 `<project>/.claude/skills/<name>/` 自己建立相同的佈局,包括其 `.claude-plugin/plugin.json`。請參閱[透過存放庫分享的外掛程式](/docs/zh-TW/plugins/loading#plugins-shared-through-a-repository)以了解 Claude Code 在什麼條件下載入它。
282 244
283<h2 id="test-and-debug">245## 測試和偵錯
284 測試和偵錯
285</h2>
286 246
287當對外掛程式的變更沒有顯示時,按順序執行這些檢查。每一個都告訴您 Claude Code 對外掛程式做了什麼:247當對外掛程式的變更沒有顯示時,按順序執行這些檢查。每一個都告訴您 Claude Code 對外掛程式做了什麼:
288 248
297 257
298下一部分涵蓋您在開發時最可能遇到的失敗,[疑難排解頁面](/docs/zh-TW/plugins/troubleshooting#build-a-plugin)對每一個都有完整的條目。258下一部分涵蓋您在開發時最可能遇到的失敗,[疑難排解頁面](/docs/zh-TW/plugins/troubleshooting#build-a-plugin)對每一個都有完整的條目。
299 259
300<h3 id="a-component-path-isn’t-found">260### 找不到元件路徑
301 找不到元件路徑
302</h3>
303 261
304`/plugin` 的**錯誤**標籤顯示 `<component> path not found: <path>`,例如 `commands path not found`。清單中的元件路徑(例如 `commands`、`skills`、`agents` 或 `hooks`)指向不存在的內容。修復路徑或建立目錄,然後在工作階段中執行 `/reload-plugins`。請參閱[`commands path not found`](/docs/zh-TW/plugins/troubleshooting#commands-path-not-found)。262`/plugin` 的**錯誤**標籤顯示 `<component> path not found: <path>`,例如 `commands path not found`。清單中的元件路徑(例如 `commands`、`skills`、`agents` 或 `hooks`)指向不存在的內容。修復路徑或建立目錄,然後在工作階段中執行 `/reload-plugins`。請參閱[`commands path not found`](/docs/zh-TW/plugins/troubleshooting#commands-path-not-found)。
305 263
306<h3 id="plugin-dir-at-a-marketplace-root-doesn’t-load-the-plugins-under-plugins/">264### `--plugin-dir` 在市集根目錄不載入 `plugins/` 下的外掛程式
307 `--plugin-dir` 在市集根目錄不載入 `plugins/` 下的外掛程式
308</h3>
309 265
310`--plugin-dir` 採用外掛程式的根目錄,即包含 `.claude-plugin/plugin.json` 和元件目錄(例如 `skills/`)的目錄。如果您改為指向市集根目錄,Claude Code 不會讀取 `marketplace.json`,因此 `plugins/` 下的外掛程式不會載入,您看不到錯誤。將旗標指向一個外掛程式的資料夾,或添加市集。請參閱[疑難排解條目](/docs/zh-TW/plugins/troubleshooting#plugin-dir-loads-a-plugin-with-no-components)。266`--plugin-dir` 採用外掛程式的根目錄,即包含 `.claude-plugin/plugin.json` 和元件目錄(例如 `skills/`)的目錄。如果您改為指向市集根目錄,Claude Code 不會讀取 `marketplace.json`,因此 `plugins/` 下的外掛程式不會載入,您看不到錯誤。將旗標指向一個外掛程式的資料夾,或添加市集。請參閱[疑難排解條目](/docs/zh-TW/plugins/troubleshooting#plugin-dir-loads-a-plugin-with-no-components)。
311 267
312<h3 id="the-plugin-loads-but-its-skills-are-missing">268### 外掛程式載入但其技能遺失
313 外掛程式載入但其技能遺失
314</h3>
315 269
316`skills/` 目錄在 `.claude-plugin/` 內,或清單中的 `skills` 條目指向一個檔案。將 `skills/` 移到外掛程式根目錄,將每個 `skills` 條目指向包含 `SKILL.md` 的目錄,並在工作階段中執行 `/reload-plugins`。請參閱[外掛程式載入但其技能遺失](/docs/zh-TW/plugins/troubleshooting#plugin-loads-but-its-skills-are-missing)。270`skills/` 目錄在 `.claude-plugin/` 內,或清單中的 `skills` 條目指向一個檔案。將 `skills/` 移到外掛程式根目錄,將每個 `skills` 條目指向包含 `SKILL.md` 的目錄,並在工作階段中執行 `/reload-plugins`。請參閱[外掛程式載入但其技能遺失](/docs/zh-TW/plugins/troubleshooting#plugin-loads-but-its-skills-are-missing)。
317 271
318<h3 id="the-userconfig-dialog-never-appears">272### `userConfig` 對話框從不出現
319 `userConfig` 對話框從不出現
320</h3>
321 273
322您外掛程式的 [`userConfig`](/docs/zh-TW/plugins/components#user-configuration) 選項的對話框是在工作階段中透過 `/plugin` 安裝的一部分。使用 `--plugin-dir` 載入不會顯示它,`claude plugin install` 在 shell 中也不會。載入外掛程式後,在工作階段中執行 `/plugin configure <plugin-name>` 以開啟它。請參閱[`userConfig` 對話框從不出現](/docs/zh-TW/plugins/troubleshooting#the-userconfig-dialog-never-appears)。274您外掛程式的 [`userConfig`](/docs/zh-TW/plugins/components#user-configuration) 選項的對話框是在工作階段中透過 `/plugin` 安裝的一部分。使用 `--plugin-dir` 載入不會顯示它,`claude plugin install` 在 shell 中也不會。載入外掛程式後,在工作階段中執行 `/plugin configure <plugin-name>` 以開啟它。請參閱[`userConfig` 對話框從不出現](/docs/zh-TW/plugins/troubleshooting#the-userconfig-dialog-never-appears)。
323 275
324<h3 id="check-that-the-plugin-changes-claude’s-behavior">276### 檢查外掛程式是否改變 Claude 的行為
325 檢查外掛程式是否改變 Claude 的行為
326</h3>
327 277
328無錯誤載入的外掛程式仍然可能無法按您的意圖引導 Claude。`claude plugin eval`(您在 shell 中執行)使用和不使用外掛程式執行您的測試案例並評分差異。請參閱[使用 evals 測試外掛程式](/docs/zh-TW/plugin-evals),從[建立您的第一個 eval 套件](/docs/zh-TW/plugin-evals#create-your-first-eval-suite)開始。278無錯誤載入的外掛程式仍然可能無法按您的意圖引導 Claude。`claude plugin eval`(您在 shell 中執行)使用和不使用外掛程式執行您的測試案例並評分差異。請參閱[使用 evals 測試外掛程式](/docs/zh-TW/plugin-evals),從[建立您的第一個 eval 套件](/docs/zh-TW/plugin-evals#create-your-first-eval-suite)開始。
329 279
330<h2 id="convert-an-existing-claude-setup">280## 轉換現有的 `.claude/` 設定
331 轉換現有的 `.claude/` 設定
332</h2>
333 281
334如果您已在專案的 `.claude/` 目錄下有技能、代理或 hooks,您可以將它們移到外掛程式中而無需重寫它們。282如果您已在專案的 `.claude/` 目錄下有技能、代理或 hooks,您可以將它們移到外掛程式中而無需重寫它們。
335 283
336從專案根目錄(包含 `.claude/` 的目錄)執行這些步驟中的命令,因為 `cp` 路徑相對於它。284從專案根目錄(包含 `.claude/` 的目錄)執行這些步驟中的命令,因為 `cp` 路徑相對於它。
337 285
338<Steps>286**1. 建立外掛程式結構**
339 <Step title="建立外掛程式結構">
340 在 `.claude/` 旁邊建立外掛程式目錄及其 `.claude-plugin/` 資料夾。您之後可以將外掛程式移到任何地方。
341 287
342 ```bash theme={null}288在 `.claude/` 旁邊建立外掛程式目錄及其 `.claude-plugin/` 資料夾。您之後可以將外掛程式移到任何地方。
343 mkdir -p my-plugin/.claude-plugin
344 ```
345 289
346 建立 `my-plugin/.claude-plugin/plugin.json`:290```bash theme={null}
291mkdir -p my-plugin/.claude-plugin
292```
347 293
348 ```json my-plugin/.claude-plugin/plugin.json theme={null}294建立 `my-plugin/.claude-plugin/plugin.json`:
349 {295
296```json my-plugin/.claude-plugin/plugin.json theme={null}
297{
350 "name": "my-plugin",298 "name": "my-plugin",
351 "description": "Migrated from standalone configuration",299 "description": "Migrated from standalone configuration",
352 "version": "1.0.0"300 "version": "1.0.0"
353 }301}
354 ```302```
355 </Step>
356 303
357 <Step title="複製您現有的檔案">304**2. 複製您現有的檔案**
358 將您擁有的每個設定目錄複製到外掛程式根目錄,並跳過您沒有的任何目錄的命令。
359 305
360 ```bash theme={null}306將您擁有的每個設定目錄複製到外掛程式根目錄,並跳過您沒有的任何目錄的命令。
361 cp -r .claude/commands my-plugin/307
362 ```308```bash theme={null}
309cp -r .claude/commands my-plugin/
310```
311
312```bash theme={null}
313cp -r .claude/agents my-plugin/
314```
363 315
364 ```bash theme={null}316```bash theme={null}
365 cp -r .claude/agents my-plugin/317cp -r .claude/skills my-plugin/
366 ```318```
367 319
368 ```bash theme={null}320執行 `ls -a my-plugin` 以確認您複製的每個目錄都出現在 `.claude-plugin` 旁邊。
369 cp -r .claude/skills my-plugin/
370 ```
371 321
372 執行 `ls -a my-plugin` 以確認您複製的每個目錄都出現在 `.claude-plugin` 旁邊。322**3. 移動您的 hooks**
373 </Step>
374 323
375 <Step title="移動您的 hooks">324如果您在 `.claude/settings.json` 或 `.claude/settings.local.json` 中有 hooks,請建立一個 hooks 目錄:
376 如果您在 `.claude/settings.json` 或 `.claude/settings.local.json` 中有 hooks,請建立一個 hooks 目錄:
377 325
378 ```bash theme={null}326```bash theme={null}
379 mkdir -p my-plugin/hooks327mkdir -p my-plugin/hooks
380 ```328```
381 329
382 建立 `my-plugin/hooks/hooks.json` 並將 `hooks` 物件從您的設定檔案複製到其中。格式相同。330建立 `my-plugin/hooks/hooks.json` 並將 `hooks` 物件從您的設定檔案複製到其中。格式相同。
383 331
384 此範例顯示帶有一個 hook 的形狀,該 hook 在 Claude 寫入或編輯每個檔案時執行 linter。用您自己的 `hooks` 物件替換範例。332此範例顯示帶有一個 hook 的形狀,該 hook 在 Claude 寫入或編輯每個檔案時執行 linter。用您自己的 `hooks` 物件替換範例。
385 333
386 ```json my-plugin/hooks/hooks.json theme={null}334```json my-plugin/hooks/hooks.json theme={null}
387 {335{
388 "hooks": {336 "hooks": {
389 "PostToolUse": [337 "PostToolUse": [
390 {338 {
393 }341 }
394 ]342 ]
395 }343 }
396 }344}
397 ```345```
398 </Step>346
347**4. 測試遷移的外掛程式**
399 348
400 <Step title="測試遷移的外掛程式">349為一個工作階段載入外掛程式:
401 為一個工作階段載入外掛程式:
402 350
403 ```bash theme={null}351```bash theme={null}
404 claude --plugin-dir ./my-plugin352claude --plugin-dir ./my-plugin
405 ```353```
406 354
407 在其新名稱下檢查每個元件:355在其新名稱下檢查每個元件:
408 356
409 * **技能**:為曾經是 `/deploy` 的技能執行 `/my-plugin:deploy`。357* **技能**:為曾經是 `/deploy` 的技能執行 `/my-plugin:deploy`。
410 * **子代理**:要求 Claude 為曾經是 `reviewer` 的代理使用 `my-plugin:reviewer` 代理。358* **子代理**:要求 Claude 為曾經是 `reviewer` 的代理使用 `my-plugin:reviewer` 代理。
411 * **Hooks**:觸發每個 hook 匹配的事件。359* **Hooks**:觸發每個 hook 匹配的事件。
412 360
413 如果遺失了什麼,請執行[測試和偵錯](#test-and-debug)。361如果遺失了什麼,請執行[測試和偵錯](#test-and-debug)。
414 </Step>
415</Steps>
416 362
417當原始檔案仍在 `.claude/` 下時,它們會與外掛程式的副本一起保持載入:363當原始檔案仍在 `.claude/` 下時,它們會與外掛程式的副本一起保持載入:
418 364
421 367
422在您確認外掛程式有效後,從 `.claude/` 刪除原始檔案並從您的設定檔案中移除 `hooks` 物件。368在您確認外掛程式有效後,從 `.claude/` 刪除原始檔案並從您的設定檔案中移除 `hooks` 物件。
423 369
424<h2 id="next-steps">370## 後續步驟
425 後續步驟
426</h2>
427 371
428* [外掛程式元件](/docs/zh-TW/plugins/components):將代理、hooks、MCP 伺服器、LSP 伺服器和使用者設定添加到您的外掛程式372* [外掛程式元件](/docs/zh-TW/plugins/components):將代理、hooks、MCP 伺服器、LSP 伺服器和使用者設定添加到您的外掛程式
429* [使用 evals 測試外掛程式](/docs/zh-TW/plugin-evals):編寫 eval 案例並使用 `claude plugin eval` 執行它們以檢查外掛程式引導 Claude 行為的可靠性373* [使用 evals 測試外掛程式](/docs/zh-TW/plugin-evals):編寫 eval 案例並使用 `claude plugin eval` 執行它們以檢查外掛程式引導 Claude 行為的可靠性