10 10
11## 找出 mod 為什麼沒有作用11## 找出 mod 為什麼沒有作用
12 12
13當 mod 沒有作用時,請檢查 Claude Code 從 mod 的檔案讀取的內容,以及它在跳過某些內容時寫入的那一行。對於第一項,在您的 shell 中執行 [`claude plugin validate`](/docs/zh-TW/plugins/mods/create#check-what-claude-code-reads-from-your-mod),並使用 mod 的目錄,例如 `claude plugin validate ./first-mod`。它會捕捉拼寫錯誤的事件、不良的資訊清單和 Claude Code 無法讀取的模組,而無需啟動工作階段。13當 mod 沒有作用時,請檢查 Claude Code 從 mod 的檔案讀取的內容,以及它在跳過某些內容時寫入的那一行。對於第一項,在您的 shell 中執行 [`claude plugin validate`](https://code.claude.com/docs/zh-TW/plugins/mods/create#check-what-claude-code-reads-from-your-mod),並使用 mod 的目錄,例如 `claude plugin validate ./first-mod`。它會捕捉拼寫錯誤的事件、不良的資訊清單和 Claude Code 無法讀取的模組,而無需啟動工作階段。
14 14
15當模組未載入、hook 被跳過或另一個 mod 拒絕您的 mod 時,Claude Code 會寫入一行,其中命名您的 mod。您讀取該行的位置取決於工作階段:15當模組未載入、hook 被跳過或另一個 mod 拒絕您的 mod 時,Claude Code 會寫入一行,其中命名您的 mod。您讀取該行的位置取決於工作階段:
16 16
17* **熱重新載入 plugin 目錄的工作階段**:文字記錄中的暗淡行。這是您使用 `--plugin-dir` 啟動的互動式工作階段,或您[為 Claude 編寫的 mod 啟用熱重新載入](/docs/zh-TW/plugins/mods/create.md#ask-claude-for-a-mod)的工作階段。17* **熱重新載入 plugin 目錄的工作階段**:文字記錄中的暗淡行。這是您使用 `--plugin-dir` 啟動的互動式工作階段,或您[為 Claude 編寫的 mod 啟用熱重新載入](https://code.claude.com/docs/zh-TW/plugins/mods/create.md#ask-claude-for-a-mod)的工作階段。
18* **任何其他互動式工作階段,例如執行您從市場安裝的 mod 的工作階段**:[偵錯日誌](#read-the-debug-log)只有。若要取得一個,請使用 `claude --debug` 啟動工作階段。18* **任何其他互動式工作階段,例如執行您從市場安裝的 mod 的工作階段**:[偵錯日誌](#read-the-debug-log)只有。若要取得一個,請使用 `claude --debug` 啟動工作階段。
19* **`claude -p` 執行 `--plugin-dir`**:stderr,採用預設文字輸出格式。另一個 mod 的拒絕只會進入偵錯日誌。19* **`claude -p` 執行 `--plugin-dir`**:stderr,採用預設文字輸出格式。另一個 mod 的拒絕只會進入偵錯日誌。
20 20
29| `hooks modules are turned off in this process: the rollout switch served off` | Anthropic 已遠端關閉已安裝的 mod。 |29| `hooks modules are turned off in this process: the rollout switch served off` | Anthropic 已遠端關閉已安裝的 mod。 |
30| `hooks modules are turned off in this process: the rollout switch was saved off by an earlier session` | 該命令使用了先前工作階段儲存的值,該值可能已過時。請啟動 `claude` 一次以重新整理它,然後再次執行該命令。 |30| `hooks modules are turned off in this process: the rollout switch was saved off by an earlier session` | 該命令使用了先前工作階段儲存的值,該值可能已過時。請啟動 `claude` 一次以重新整理它,然後再次執行該命令。 |
31 31
32組織也可以設定 `allowManagedModsOnly` 以僅允許其自己的 mod,此命令不會報告。在這種情況下,Claude Code 會拒絕您安裝的 mod,並且[訊息會說明原因](/docs/zh-TW/plugins/mods/troubleshoot.md#messages-from-the-built-in-guard)。32組織也可以設定 `allowManagedModsOnly` 以僅允許其自己的 mod,此命令不會報告。在這種情況下,Claude Code 會拒絕您安裝的 mod,並且[訊息會說明原因](https://code.claude.com/docs/zh-TW/plugins/mods/troubleshoot.md#messages-from-the-built-in-guard)。
33 33
34## mod 不載入34## mod 不載入
35 35
37 37
38### 您的版本太舊38### 您的版本太舊
39 39
40請參閱[應使用哪個版本以及如何檢查您的版本](/docs/zh-TW/plugins/mods/overview.md#turn-mods-on-or-off)。40請參閱[應使用哪個版本以及如何檢查您的版本](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md#turn-mods-on-or-off)。
41 41
42### `mods active` 行不命名 mod42### `mods active` 行不命名 mod
43 43
44mod 新增的任何內容都不會出現,並且 `/plugin` 中的 [`mods active` 行](/docs/zh-TW/plugins/mods/overview#see-which-mods-a-session-loaded)不命名它。hooks 模組未載入。當 Claude Code 拒絕它時,偵錯日誌有一行以 `hooks module`、mod 的名稱和 `not loaded:` 開頭,例如 `hooks module first-mod@inline not loaded: disableAllHooks in managed settings`,用於使用 `--plugin-dir` 載入的 mod。44mod 新增的任何內容都不會出現,並且 `/plugin` 中的 [`mods active` 行](https://code.claude.com/docs/zh-TW/plugins/mods/overview#see-which-mods-a-session-loaded)不命名它。hooks 模組未載入。當 Claude Code 拒絕它時,偵錯日誌有一行以 `hooks module`、mod 的名稱和 `not loaded:` 開頭,例如 `hooks module first-mod@inline not loaded: disableAllHooks in managed settings`,用於使用 `--plugin-dir` 載入的 mod。
45 45
46讀取冒號後的原因。[拒絕訊息](#refusal-messages)部分列出每一個。如果日誌沒有這樣的行,請逐一檢查此群組中的其他項目。46讀取冒號後的原因。[拒絕訊息](#refusal-messages)部分列出每一個。如果日誌沒有這樣的行,請逐一檢查此群組中的其他項目。
47 47
48部分設定會停用 mod,但讓其外掛的其餘部分繼續運作。[開啟或關閉 mod](/docs/zh-TW/plugins/mods/overview.md#turn-mods-on-or-off) 列出了這些設定。48部分設定會停用 mod,但讓其外掛的其餘部分繼續運作。[開啟或關閉 mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md#turn-mods-on-or-off) 列出了這些設定。
49 49
50### `claude -p` 執行列印 `hooks module not loaded`50### `claude -p` 執行列印 `hooks module not loaded`
51 51
64| `disableAllHooks in managed settings` | 您的組織關閉了已安裝 plugin 的 hooks |64| `disableAllHooks in managed settings` | 您的組織關閉了已安裝 plugin 的 hooks |
65| `only managed plugins and built-in plugins run` | 設定了 `allowManagedHooksOnly`,或在受管設定以外的設定檔中設定了 `disableAllHooks` |65| `only managed plugins and built-in plugins run` | 設定了 `allowManagedHooksOnly`,或在受管設定以外的設定檔中設定了 `disableAllHooks` |
66| `installed plugins that are not managed load no hooks module in this mode (--bare)` | 您使用 `--bare` 啟動了 Claude Code |66| `installed plugins that are not managed load no hooks module in this mode (--bare)` | 您使用 `--bare` 啟動了 Claude Code |
67| `another plugin of that name loads first` | 另一個已啟用的外掛與您的 mod 同名,並[佔有該名稱](/docs/zh-TW/plugins/loading.md#hooks-when-two-enabled-plugins-share-a-name),因此您的 hook 模組不會載入 |67| `another plugin of that name loads first` | 另一個已啟用的外掛與您的 mod 同名,並[佔有該名稱](https://code.claude.com/docs/zh-TW/plugins/loading.md#hooks-when-two-enabled-plugins-share-a-name),因此您的 hook 模組不會載入 |
68 68
69### 來自內建防護的訊息69### 來自內建防護的訊息
70 70
71在具有受管設定的機器上,或在憑證為 Team 或 Enterprise `/login` 的工作階段中,[內建防護](/docs/zh-TW/plugins/mods/admin.md#know-what-happens-by-default)可以拒絕 mod 或其中一個答案。每條訊息都命名您的組織管理員設定以變更規則的選項。71在具有受管設定的機器上,或在憑證為 Team 或 Enterprise `/login` 的工作階段中,[內建防護](https://code.claude.com/docs/zh-TW/plugins/mods/admin.md#know-what-happens-by-default)可以拒絕 mod 或其中一個答案。每條訊息都命名您的組織管理員設定以變更規則的選項。
72 72
73| 訊息包含 | 這表示什麼 | 它出現在哪裡 |73| 訊息包含 | 這表示什麼 | 它出現在哪裡 |
74| :- | :- | :- |74| :- | :- | :- |
75| `mods are limited to your organization's by policy (allowManagedModsOnly)` | 您的組織僅允許[其自己的 mod](/docs/zh-TW/plugins/mods/admin.md#install-your-organizations-mods),因此您的 mod 被拒絕 | 偵錯日誌,以及[熱重新載入外掛目錄的工作階段](#find-out-why-a-mod-does-nothing)中的逐字稿 |75| `mods are limited to your organization's by policy (allowManagedModsOnly)` | 您的組織僅允許[其自己的 mod](https://code.claude.com/docs/zh-TW/plugins/mods/admin.md#install-your-organizations-mods),因此您的 mod 被拒絕 | 偵錯日誌,以及[熱重新載入外掛目錄的工作階段](#find-out-why-a-mod-does-nothing)中的逐字稿 |
76| `tried to lift a deny rule in your settings` | 您的 mod 的 [`tool.check`](/docs/zh-TW/plugins/mods/reference#tools) hook 批准了 `deny` 規則拒絕的呼叫。呼叫保持被拒絕。 | 文字記錄和偵錯日誌,每個工作階段中的每個 mod 一次。在 `claude -p` 執行中,僅偵錯日誌。 |76| `tried to lift a deny rule in your settings` | 您的 mod 的 [`tool.check`](https://code.claude.com/docs/zh-TW/plugins/mods/reference#tools) hook 批准了 `deny` 規則拒絕的呼叫。呼叫保持被拒絕。 | 文字記錄和偵錯日誌,每個工作階段中的每個 mod 一次。在 `claude -p` 執行中,僅偵錯日誌。 |
77| `the deny rules in your settings could not be checked for this call, so it is refused` | 防護在檢查 mod 批准的呼叫時失敗,因此它拒絕了呼叫 | Claude 為被拒絕的呼叫讀取的原因 |77| `the deny rules in your settings could not be checked for this call, so it is refused` | 防護在檢查 mod 批准的呼叫時失敗,因此它拒絕了呼叫 | Claude 為被拒絕的呼叫讀取的原因 |
78 78
79### `validate` 通過且不列出 `hooks` 行79### `validate` 通過且不列出 `hooks` 行
88 88
89修復原因命名的錯誤。89修復原因命名的錯誤。
90 90
91如果原因以 `; the version loaded before is unloaded` 結尾,表示目前沒有任何版本的 mod 正在執行。修復錯誤後,請在工作階段中執行 [`/reload-plugins`](/docs/zh-TW/plugins/cli-reference#reload-plugins) 以再次載入 mod。如果該 mod 是您安裝而非您撰寫的,請要求其作者修復錯誤。91如果原因以 `; the version loaded before is unloaded` 結尾,表示目前沒有任何版本的 mod 正在執行。修復錯誤後,請在工作階段中執行 [`/reload-plugins`](https://code.claude.com/docs/zh-TW/plugins/cli-reference#reload-plugins) 以再次載入 mod。如果該 mod 是您安裝而非您撰寫的,請要求其作者修復錯誤。
92 92
93### `options do not fit plugin.json userConfig`93### `options do not fit plugin.json userConfig`
94 94
95該行以 mod 的名稱開頭,然後是 `hooks module did not load: options do not fit plugin.json userConfig:` 和一個原因。選項未通過其 [`userConfig`](/docs/zh-TW/plugins/components#user-configuration) 欄位的驗證,例如高於欄位 `max` 的數字,或必填欄位沒有值。95該行以 mod 的名稱開頭,然後是 `hooks module did not load: options do not fit plugin.json userConfig:` 和一個原因。選項未通過其 [`userConfig`](https://code.claude.com/docs/zh-TW/plugins/components#user-configuration) 欄位的驗證,例如高於欄位 `max` 的數字,或必填欄位沒有值。
96 96
97設定或變更值。該行的末尾命名其在 `settings.json` 中的 `pluginConfigs` 項目。97設定或變更值。該行的末尾命名其在 `settings.json` 中的 `pluginConfigs` 項目。
98 98
99### `code nested too deep to scan: more than 2000 scopes`99### `code nested too deep to scan: more than 2000 scopes`
100 100
101該行以 mod 的名稱開頭,然後是 `hooks module did not load:`、檔案,以及 `code nested too deep to scan: more than 2000 scopes`。hook 模組中的檔案不能將作用域(例如函式、區塊和迴圈)巢狀超過 [2,000 層](/docs/zh-TW/plugins/mods/reference.md#limits)。[`claude plugin validate`](/docs/zh-TW/plugins/mods/create#check-what-claude-code-reads-from-your-mod) 會回報相同的原因。101該行以 mod 的名稱開頭,然後是 `hooks module did not load:`、檔案,以及 `code nested too deep to scan: more than 2000 scopes`。hook 模組中的檔案不能將作用域(例如函式、區塊和迴圈)巢狀超過 [2,000 層](https://code.claude.com/docs/zh-TW/plugins/mods/reference.md#limits)。[`claude plugin validate`](https://code.claude.com/docs/zh-TW/plugins/mods/create#check-what-claude-code-reads-from-your-mod) 會回報相同的原因。
102 102
103重寫程式碼,以減少其作用域的巢狀深度。103重寫程式碼,以減少其作用域的巢狀深度。
104 104
105### `the engine ran out of stack linking the file and its imports`
106
107hook 模組中的程式碼巢狀過深,或其匯入鏈過長,導致 Claude Code 無法載入。該行以 mod 的名稱和 `hooks module did not load:` 開頭,然後給出某個檔案的名稱以及此原因。
108
109請檢查該檔案以及透過其匯入所連結到的檔案,找出巢狀最深的部分並重寫以減少巢狀,或縮短匯入鏈。如果該 mod 是您安裝而非您撰寫的,請要求其作者進行修改。
110
105### `the parser stopped` 或 `the engine ran out of stack loading the file`111### `the parser stopped` 或 `the engine ran out of stack loading the file`
106 112
107hook 模組中某個檔案的程式碼巢狀過深,導致 Claude Code 在讀取時耗盡堆疊。該行以 mod 的名稱和 `hooks module did not load:` 開頭,然後給出該檔案的名稱以及下列其中一個原因:113hook 模組中某個檔案的程式碼巢狀過深,導致 Claude Code 在讀取時耗盡堆疊。該行以 mod 的名稱和 `hooks module did not load:` 開頭,然後給出該檔案的名稱以及下列其中一個原因:
125 131
126### Claude Code 不再詢問是否啟用熱重新載入132### Claude Code 不再詢問是否啟用熱重新載入
127 133
128Claude 在互動式工作階段中撰寫 mod,但沒有任何內容載入,而且 Claude Code 不再詢問[是否啟用熱重新載入](/docs/zh-TW/plugins/mods/create.md#ask-claude-for-a-mod)。如果該問題有三次在未選擇答案的情況下結束,熱重新載入會保持關閉。例如,當您設定了 [`askUserQuestionTimeout`](/docs/zh-TW/settings-reference#askuserquestiontimeout),且在您回答之前時間已到,問題就會以這種方式結束。該設定在此適用,是因為 Claude Code 是在[與 `AskUserQuestion` 相同的問題對話框](/docs/zh-TW/tools-reference#question-auto-continue-timeout)中詢問。您自行關閉的問題不計入這三次。134Claude 在互動式工作階段中撰寫 mod,但沒有任何內容載入,而且 Claude Code 不再詢問[是否啟用熱重新載入](https://code.claude.com/docs/zh-TW/plugins/mods/create.md#ask-claude-for-a-mod)。如果該問題有三次在未選擇答案的情況下結束,熱重新載入會保持關閉。例如,當您設定了 [`askUserQuestionTimeout`](https://code.claude.com/docs/zh-TW/settings-reference#askuserquestiontimeout),且在您回答之前時間已到,問題就會以這種方式結束。該設定在此適用,是因為 Claude Code 是在[與 `AskUserQuestion` 相同的問題對話框](https://code.claude.com/docs/zh-TW/tools-reference#question-auto-continue-timeout)中詢問。您自行關閉的問題不計入這三次。
129 135
130若要執行該 mod,請[將其目錄從 mods 資料夾複製出來](/docs/zh-TW/plugins/mods/create.md#use-the-mod-in-other-sessions),然後在 shell 中使用 `--plugin-dir` 啟動新的工作階段,例如 `claude --plugin-dir ~/mods/git-branch`。136若要執行該 mod,請[將其目錄從 mods 資料夾複製出來](https://code.claude.com/docs/zh-TW/plugins/mods/create.md#use-the-mod-in-other-sessions),然後在 shell 中使用 `--plugin-dir` 啟動新的工作階段,例如 `claude --plugin-dir ~/mods/git-branch`。
131 137
132## hook 被跳過或 mod 被卸載138## hook 被跳過或 mod 被卸載
133 139
135 141
136### `hook skipped`142### `hook skipped`
137 143
138該行命名 mod 和事件,然後說 `hook skipped:` 和一個原因,例如 `first-mod: tool.call hook skipped: threw Error: boom`。hook 拋出、執行超過其[時間限制](/docs/zh-TW/plugins/mods/reference.md#limits),或返回了錯誤形狀的結果。該行針對每個事件和失敗類型出現一次,直到 mod 重新載入。144該行命名 mod 和事件,然後說 `hook skipped:` 和一個原因,例如 `first-mod: tool.call hook skipped: threw Error: boom`。hook 拋出、執行超過其[時間限制](https://code.claude.com/docs/zh-TW/plugins/mods/reference.md#limits),或返回了錯誤形狀的結果。該行針對每個事件和失敗類型出現一次,直到 mod 重新載入。
139 145
140修復錯誤。偵錯日誌對每次發生都有一行。146修復錯誤。偵錯日誌對每次發生都有一行。
141 147
143 149
144您執行 mod 新增的命令,回覆命名 mod 和命令,例如 `first-mod registered /tally but no command.run hook answered it`,然後告訴您新增 hook。Claude Code 在命令到達鏈的末端且沒有答案時列印該回覆,這在兩種情況下發生:150您執行 mod 新增的命令,回覆命名 mod 和命令,例如 `first-mod registered /tally but no command.run hook answered it`,然後告訴您新增 hook。Claude Code 在命令到達鏈的末端且沒有答案時列印該回覆,這在兩種情況下發生:
145 151
146* **沒有 hook 回答命令**:模組沒有 `command.run` hook、hook 的[篩選器](/docs/zh-TW/plugins/mods/events.md#filter-which-events-a-hook-handles)命名不同的命令,或 hook 返回 `next(e)`152* **沒有 hook 回答命令**:模組沒有 `command.run` hook、hook 的[篩選器](https://code.claude.com/docs/zh-TW/plugins/mods/events.md#filter-which-events-a-hook-handles)命名不同的命令,或 hook 返回 `next(e)`
147* **Claude Code 跳過了 hook**:[`hook skipped`](#hook-skipped) 列出了原因。將 `focus: false` 傳遞給 [`$.ui.open`](/docs/zh-TW/plugins/mods/interface#open-a-pane-at-the-right-time) 是到達那裡的一種方式。153* **Claude Code 跳過了 hook**:[`hook skipped`](#hook-skipped) 列出了原因。將 `focus: false` 傳遞給 [`$.ui.open`](https://code.claude.com/docs/zh-TW/plugins/mods/interface#open-a-pane-at-the-right-time) 是到達那裡的一種方式。
148 154
149如果模組已經有回覆描述的 hook,請尋找命名 `command.run` 的 `hook skipped` 行,它會給出原因。執行命令的[測試](/docs/zh-TW/plugins/mods/test.md)會因相同原因失敗。155如果模組已經有回覆描述的 hook,請尋找命名 `command.run` 的 `hook skipped` 行,它會給出原因。執行命令的[測試](https://code.claude.com/docs/zh-TW/plugins/mods/test.md)會因相同原因失敗。
150 156
151### `it crashed the hooks worker`157### `it crashed the hooks worker`
152 158
156 162
157### `its session.start ran again in a fresh copy`163### `its session.start ran again in a fresh copy`
158 164
159該行以 mod 的名稱開頭,並命名一個 `$.prompt.submit`、`$.command.run` 或 `$.agent.spawn` 呼叫,例如 `first-mod: its session.start ran again in a fresh copy; the $.prompt.submit call it had already made was not made again`。Claude Code 再次載入了 mod 的模組,例如在 hook 工作執行緒崩潰並被取代之後,而新副本的 [`session.start`](/docs/zh-TW/plugins/mods/reference#session) hook 執行了。該行命名的呼叫以其第一次執行的結果解析,而不是再次執行,因此您的 mod 不會重複提交提示詞、執行命令或啟動 subagent。hook 的其餘部分照常執行。165該行以 mod 的名稱開頭,並命名一個 `$.prompt.submit`、`$.command.run` 或 `$.agent.spawn` 呼叫,例如 `first-mod: its session.start ran again in a fresh copy; the $.prompt.submit call it had already made was not made again`。Claude Code 再次載入了 mod 的模組,例如在 hook 工作執行緒崩潰並被取代之後,而新副本的 [`session.start`](https://code.claude.com/docs/zh-TW/plugins/mods/reference#session) hook 執行了。該行命名的呼叫以其第一次執行的結果解析,而不是再次執行,因此您的 mod 不會重複提交提示詞、執行命令或啟動 subagent。hook 的其餘部分照常執行。
160 166
161無需修復任何內容。167無需修復任何內容。
162 168
166 172
167該行以您的 mod 名稱開頭,例如 `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`,且該 agent 不會被註冊。您的 mod 在此呼叫之前已被重新載入或卸載。重新載入會載入 hook 模組的新副本,而此呼叫來自仍在舊副本中執行的程式碼,例如尚未返回的 hook。173該行以您的 mod 名稱開頭,例如 `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`,且該 agent 不會被註冊。您的 mod 在此呼叫之前已被重新載入或卸載。重新載入會載入 hook 模組的新副本,而此呼叫來自仍在舊副本中執行的程式碼,例如尚未返回的 hook。
168 174
169如果該 hook 未捕捉此拒絕,它會失敗,Claude Code 會[跳過它](#hook-skipped)。若要讓保持載入的副本註冊該 agent,請在您的 [`session.start`](/docs/zh-TW/plugins/mods/reference#session) hook 中進行呼叫,該 hook 會在重新載入後於每個新副本中再次執行。175如果該 hook 未捕捉此拒絕,它會失敗,Claude Code 會[跳過它](#hook-skipped)。若要讓保持載入的副本註冊該 agent,請在您的 [`session.start`](https://code.claude.com/docs/zh-TW/plugins/mods/reference#session) hook 中進行呼叫,該 hook 會在重新載入後於每個新副本中再次執行。
170 176
171### `mods that run in the hooks worker are off for this session`177### `mods that run in the hooks worker are off for this session`
172 178
180 186
181### `a hook changed this call's input after the model wrote it`187### `a hook changed this call's input after the model wrote it`
182 188
183在自動模式中,被拒絕的工具呼叫會給出此原因。hook 在[伺服器端分類器](/docs/zh-TW/permission-modes.md#server-side-classifier-review)檢查後變更了工具呼叫的輸入,因此該檢查不涵蓋將執行的內容。hook 可以是 mod 的 [`tool.call`](/docs/zh-TW/plugins/mods/reference#tools) 或 [`turn.step`](/docs/zh-TW/plugins/mods/reference#turns) hook,或 [`PreToolUse`](/docs/zh-TW/hooks#pretooluse) 設定 hook。訊息不會說明是哪一個。189在自動模式中,被拒絕的工具呼叫會給出此原因。hook 在[伺服器端分類器](https://code.claude.com/docs/zh-TW/permission-modes.md#server-side-classifier-review)檢查後變更了工具呼叫的輸入,因此該檢查不涵蓋將執行的內容。hook 可以是 mod 的 [`tool.call`](https://code.claude.com/docs/zh-TW/plugins/mods/reference#tools) 或 [`turn.step`](https://code.claude.com/docs/zh-TW/plugins/mods/reference#turns) hook,或 [`PreToolUse`](https://code.claude.com/docs/zh-TW/hooks#pretooluse) 設定 hook。訊息不會說明是哪一個。
184 190
185訊息告訴 Claude 再次發出記錄的呼叫。如果也被拒絕,hook 每次都會變更輸入,因此關閉 mod 或 hook,或離開自動模式並自己批准呼叫。191訊息告訴 Claude 再次發出記錄的呼叫。如果也被拒絕,hook 每次都會變更輸入,因此關閉 mod 或 hook,或離開自動模式並自己批准呼叫。
186 192
194 200
195### `Stopped: type a message to continue; a mod cannot resume work after Stop`201### `Stopped: type a message to continue; a mod cannot resume work after Stop`
196 202
197此提示訊息表示在您停止回合之後(例如按下 Esc),某個 mod 嘗試自行開始工作,而 Claude Code 未允許它這麼做。無需修正任何問題。在您傳送下一則訊息後,mod 即可再次開始工作,而[部分工作會自行恢復](/docs/zh-TW/plugins/mods/api.md#work-your-mod-started-before-the-interruption)。如果您預期該 mod 產生的結果沒有恢復,請再次提出要求,或再次執行該 mod 的命令。203此提示訊息表示在您停止回合之後(例如按下 Esc),某個 mod 嘗試自行開始工作,而 Claude Code 未允許它這麼做。無需修正任何問題。在您傳送下一則訊息後,mod 即可再次開始工作,而[部分工作會自行恢復](https://code.claude.com/docs/zh-TW/plugins/mods/api.md#work-your-mod-started-before-the-interruption)。如果您預期該 mod 產生的結果沒有恢復,請再次提出要求,或再次執行該 mod 的命令。
198 204
199如果您是該 mod 的作者,請參閱[使用者中斷回合後的呼叫與背景工作](/docs/zh-TW/plugins/mods/api.md#calls-and-background-work-after-the-user-interrupts-a-turn)。205如果您是該 mod 的作者,請參閱[使用者中斷回合後的呼叫與背景工作](https://code.claude.com/docs/zh-TW/plugins/mods/api.md#calls-and-background-work-after-the-user-interrupts-a-turn)。
200 206
201## 繪圖不出現或不回應207## 繪圖不出現或不回應
202 208
204 210
205### 顯示的是另一個 mod 的帶狀,而不是您的211### 顯示的是另一個 mod 的帶狀,而不是您的
206 212
207提示詞上方只有一個帶狀,所有 mod 共用。在[您的 mod 之前](/docs/zh-TW/plugins/mods/events.md#the-order-mods-run-in)執行的 mod,若返回的樹中不包含 `next(e)` 的結果,就會取代您的帶狀。若要同時顯示兩個帶狀,請修改該 mod 的 hook,或請其作者修改:213提示詞上方只有一個帶狀,所有 mod 共用。在[您的 mod 之前](https://code.claude.com/docs/zh-TW/plugins/mods/events.md#the-order-mods-run-in)執行的 mod,若返回的樹中不包含 `next(e)` 的結果,就會取代您的帶狀。若要同時顯示兩個帶狀,請修改該 mod 的 hook,或請其作者修改:
208 214
209* **保留其後的帶狀**:將 `await next(e)` 的結果放在其樹中某個 `Box` 的子元素之間,如[選擇繪製位置](/docs/zh-TW/plugins/mods/interface.md#pick-where-to-draw)中「提示詞上方的帶狀」分頁所示215* **保留其後的帶狀**:將 `await next(e)` 的結果放在其樹中某個 `Box` 的子元素之間,如[選擇繪製位置](https://code.claude.com/docs/zh-TW/plugins/mods/interface.md#pick-where-to-draw)中「提示詞上方的帶狀」分頁所示
210* **保持樹有效**:不要為該 `Box` 或其外圍的任何 `Box` 指定 `width`、`height`、`minWidth`、`minHeight`、`position`、`top`、`left`、`right`、`bottom`、`display` 或 `overflow` prop216* **保持樹有效**:不要為該 `Box` 或其外圍的任何 `Box` 指定 `width`、`height`、`minWidth`、`minHeight`、`position`、`top`、`left`、`right`、`bottom`、`display` 或 `overflow` prop
211 217
212若要找出該 mod,請[寫入偵錯日誌](#read-the-debug-log),並在其中搜尋 `answered ui.render without next()`。像 `other-mod (user) answered ui.render without next()` 這樣的行會指出某個未呼叫 `next(e)` 就返回其樹的 mod。該行不會指出[轉譯位置](/docs/zh-TW/plugins/mods/reference.md#render-sites),因此僅使用窗格的 mod 也可能出現。呼叫了 `next(e)` 但捨棄其結果的 mod 不會產生任何行,因此也請檢查在您之前的 hook。218若要找出該 mod,請[寫入偵錯日誌](#read-the-debug-log),並在其中搜尋 `answered ui.render without next()`。像 `other-mod (user) answered ui.render without next()` 這樣的行會指出某個未呼叫 `next(e)` 就返回其樹的 mod。該行不會指出[轉譯位置](https://code.claude.com/docs/zh-TW/plugins/mods/reference.md#render-sites),因此僅使用窗格的 mod 也可能出現。呼叫了 `next(e)` 但捨棄其結果的 mod 不會產生任何行,因此也請檢查在您之前的 hook。
213 219
214變更之後,若任何 mod 返回未通過驗證的樹,帶狀中將不會顯示任何內容。若要讀取原因,請在 `--plugin-dir` 工作階段的逐字稿中尋找 `ui.render (AbovePrompt) refused:` 行,或在偵錯日誌中搜尋 `does not validate`。當帶狀中有多個 mod 時,這兩行都不會指出是哪個 mod,因此請檢查每個 mod 的樹。220變更之後,若任何 mod 返回未通過驗證的樹,帶狀中將不會顯示任何內容。若要讀取原因,請在 `--plugin-dir` 工作階段的逐字稿中尋找 `ui.render (AbovePrompt) refused:` 行,或在偵錯日誌中搜尋 `does not validate`。當帶狀中有多個 mod 時,這兩行都不會指出是哪個 mod,因此請檢查每個 mod 的樹。
215 221
216### 窗格或帶狀為空或顯示 Claude Code 的常見內容222### 窗格或帶狀為空或顯示 Claude Code 的常見內容
217 223
218您的 hook 返回的[樹](/docs/zh-TW/plugins/mods/interface.md#build-a-tree-from-elements)未通過驗證。使用 `--plugin-dir` 時,逐字稿會顯示 `ui.render (Pane) refused:` 並附上原因,例如 `first-mod: ui.render (Pane) refused: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse; the engine drew its own`。偵錯日誌中會有 `a hook returned a tree that does not validate` 並附上相同的原因。224您的 hook 返回的[樹](https://code.claude.com/docs/zh-TW/plugins/mods/interface.md#build-a-tree-from-elements)未通過驗證。使用 `--plugin-dir` 時,逐字稿會顯示 `ui.render (Pane) refused:` 並附上原因,例如 `first-mod: ui.render (Pane) refused: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse; the engine drew its own`。偵錯日誌中會有 `a hook returned a tree that does not validate` 並附上相同的原因。
219 225
220讀取該行上的原因。常見原因是元素不接受的 prop 和應用程式沒有的元素。226讀取該行上的原因。常見原因是元素不接受的 prop 和應用程式沒有的元素。
221 227
222### `ui.render` 行顯示 `threw while drawn`228### `ui.render` 行顯示 `threw while drawn`
223 229
224該行會指出[轉譯位置](/docs/zh-TW/plugins/mods/reference.md#render-sites),接著顯示 `threw while drawn:` 與錯誤,例如 `first-mod: ui.render (ToolUse) threw while drawn: <error>; the engine drew its own`。Claude Code 在繪製您的 [`ui.render`](/docs/zh-TW/plugins/mods/reference#interface) hook 返回的樹時,或在根據[您的 hook 傳給 `next` 的 `props`](/docs/zh-TW/plugins/mods/interface#change-what-claude-code-already-draws) 繪製該位置時,遇到了該錯誤。結尾的 `the engine drew its own` 表示該位置顯示 Claude Code 的常見內容。230該行會指出[轉譯位置](https://code.claude.com/docs/zh-TW/plugins/mods/reference.md#render-sites),接著顯示 `threw while drawn:` 與錯誤,例如 `first-mod: ui.render (ToolUse) threw while drawn: <error>; the engine drew its own`。Claude Code 在繪製您的 [`ui.render`](https://code.claude.com/docs/zh-TW/plugins/mods/reference#interface) hook 返回的樹時,或在根據[您的 hook 傳給 `next` 的 `props`](https://code.claude.com/docs/zh-TW/plugins/mods/interface#change-what-claude-code-already-draws) 繪製該位置時,遇到了該錯誤。結尾的 `the engine drew its own` 表示該位置顯示 Claude Code 的常見內容。
225 231
226讀取該錯誤,並修正您的 hook 中導致錯誤的值。232讀取該錯誤,並修正您的 hook 中導致錯誤的值。
227 233
228在 v2.1.289 之前,逐字稿列中的此錯誤會以 [`Claude Code exited after an unrecoverable interface error`](/docs/zh-TW/errors#exited-after-an-unrecoverable-interface-error) 結束工作階段。234在 v2.1.289 之前,逐字稿列中的此錯誤會以 [`Claude Code exited after an unrecoverable interface error`](https://code.claude.com/docs/zh-TW/errors#exited-after-an-unrecoverable-interface-error) 結束工作階段。
229 235
230### `the module failed without a message`236### `the module failed without a message`
231 237
232某個 [`Client`](/docs/zh-TW/plugins/mods/interface#when-a-client-fails) 因沒有訊息的錯誤而失敗,例如 `throw new Error()`。在其位置顯示的那一行類似 `my-mod: Client client/spinner.js: the module failed without a message`。238某個 [`Client`](https://code.claude.com/docs/zh-TW/plugins/mods/interface#when-a-client-fails) 因沒有訊息的錯誤而失敗,例如 `throw new Error()`。在其位置顯示的那一行類似 `my-mod: Client client/spinner.js: the module failed without a message`。
233 239
234在您的 `Client` 程式碼中找到該 throw,並為錯誤加上訊息。該行隨後便會顯示該訊息。240在您的 `Client` 程式碼中找到該 throw,並為錯誤加上訊息。該行隨後便會顯示該訊息。
235 241
237 243
238### `$.ui.open` 執行且沒有窗格出現244### `$.ui.open` 執行且沒有窗格出現
239 245
240呼叫不是來自使用者所做的操作,並且終端機的寬度小於[該窗格所需的寬度](/docs/zh-TW/plugins/mods/interface.md#when-a-pane-waits-for-a-wider-terminal)。246呼叫不是來自使用者所做的操作,並且終端機的寬度小於[該窗格所需的寬度](https://code.claude.com/docs/zh-TW/plugins/mods/interface.md#when-a-pane-waits-for-a-wider-terminal)。
241 247
242從命令或按鈕開啟窗格,或檢查呼叫的 `isPlaced` 結果。請參閱[在正確的時間開啟窗格](/docs/zh-TW/plugins/mods/interface.md#open-a-pane-at-the-right-time)。248從命令或按鈕開啟窗格,或檢查呼叫的 `isPlaced` 結果。請參閱[在正確的時間開啟窗格](https://code.claude.com/docs/zh-TW/plugins/mods/interface.md#open-a-pane-at-the-right-time)。
243 249
244### toast 未出現250### toast 未出現
245 251
246您的 mod 在互動式終端機工作階段中呼叫 [`$.ui.toast`](/docs/zh-TW/plugins/mods/api#show-something-without-starting-a-turn),但您沒有看到 toast。若要確認該呼叫已執行,請在[偵錯日誌](#read-the-debug-log)中尋找包含您的 mod 名稱與 toast 文字的行,例如 `$.ui.toast (first-mod): build finished`。接著檢查以下可能原因:252您的 mod 在互動式終端機工作階段中呼叫 [`$.ui.toast`](https://code.claude.com/docs/zh-TW/plugins/mods/api#show-something-without-starting-a-turn),但您沒有看到 toast。若要確認該呼叫已執行,請在[偵錯日誌](#read-the-debug-log)中尋找包含您的 mod 名稱與 toast 文字的行,例如 `$.ui.toast (first-mod): build finished`。接著檢查以下可能原因:
247 253
248* **缺少該呼叫的行**:尋找說明 Claude Code 拒絕該呼叫原因的行,例如 `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`。254* **缺少該呼叫的行**:尋找說明 Claude Code 拒絕該呼叫原因的行,例如 `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`。
249* **有窗格正在保留 toast**:您的 mod 或其他 mod 在開啟目前顯示的窗格時傳入了 [`holdToasts`](/docs/zh-TW/plugins/mods/interface#hold-toasts-behind-a-dialog)。關閉該窗格即可結束保留。如果該窗格是您的,且應保持開啟,請從其 `$.ui.open` 呼叫中移除 `holdToasts`,然後重新開啟窗格。255* **有窗格正在保留 toast**:您的 mod 或其他 mod 在開啟目前顯示的窗格時傳入了 [`holdToasts`](https://code.claude.com/docs/zh-TW/plugins/mods/interface#hold-toasts-behind-a-dialog)。關閉該窗格即可結束保留。如果該窗格是您的,且應保持開啟,請從其 `$.ui.open` 呼叫中移除 `holdToasts`,然後重新開啟窗格。
250* **toast 位於提示詞下方**:在[傳統轉譯器](/docs/zh-TW/fullscreen.md#enable-fullscreen-rendering)中,請查看提示詞下方的右側。該處的 toast 是以 mod 名稱開頭的一行文字,而不是右上角的方框。256* **toast 位於提示詞下方**:在[傳統轉譯器](https://code.claude.com/docs/zh-TW/fullscreen.md#enable-fullscreen-rendering)中,請查看提示詞下方的右側。該處的 toast 是以 mod 名稱開頭的一行文字,而不是右上角的方框。
251* **您的 mod 發出了較新的 toast**:在傳統轉譯器中,您的 mod 發出的較新 toast 可能會取代正在顯示或等待顯示的 toast。偵錯日誌中會有較舊 toast 的另一行,若該 toast 正在顯示,結尾為 `gave way, cut short`;若從未出現,結尾為 `gave way, unseen`。若要同時顯示兩則訊息,請將它們放在同一個 toast 中。257* **您的 mod 發出了較新的 toast**:在傳統轉譯器中,您的 mod 發出的較新 toast 可能會取代正在顯示或等待顯示的 toast。偵錯日誌中會有較舊 toast 的另一行,若該 toast 正在顯示,結尾為 `gave way, cut short`;若從未出現,結尾為 `gave way, unseen`。若要同時顯示兩則訊息,請將它們放在同一個 toast 中。
252* **toast 在繪製前逾時**:在全螢幕轉譯中,Claude Code 一次最多繪製三個 toast,因此 toast 可能在繪製前就已逾時。偵錯日誌中會有該 toast 的另一行,結尾為 `left the stack, never drawn`。當您的 mod 同時發出多個 toast 時,請將訊息放在同一個 toast 中。258* **toast 在繪製前逾時**:在全螢幕轉譯中,Claude Code 一次最多繪製三個 toast,因此 toast 可能在繪製前就已逾時。偵錯日誌中會有該 toast 的另一行,結尾為 `left the stack, never drawn`。當您的 mod 同時發出多個 toast 時,請將訊息放在同一個 toast 中。
253 259
254在 v2.1.290 之前,Claude Code 會捨棄在其為您的 mod 顯示上一個 toast 後兩秒內發出的 toast,且被捨棄 toast 的偵錯日誌行會顯示 `within 2000ms of the last; dropped`。260在 v2.1.290 之前,Claude Code 會捨棄在其為您的 mod 顯示上一個 toast 後兩秒內發出的 toast,且被捨棄 toast 的偵錯日誌行會顯示 `within 2000ms of the last; dropped`。
255 261
262### 帶狀顯示 `plugin panel hidden`
263
264帶狀已[收合](https://code.claude.com/docs/zh-TW/plugins/mods/interface.md#when-the-user-collapses-the-band)。當您按下 Ctrl+X 然後 Ctrl+A,或您綁定以取代它們的按鍵時,帶狀會收合;在[全螢幕轉譯](https://code.claude.com/docs/zh-TW/fullscreen.md)中,按一下其第一列的 `[-]` 時也會收合。帶狀會保持收合,直到您將其展開或重新啟動 Claude Code,在此期間,任何快捷鍵或 `action` 綁定都不會按下其中的按鈕。
265
266若要展開帶狀,請按該列所指出的按鍵(預設為 Ctrl+X 然後 Ctrl+A),或在全螢幕轉譯中按一下該列。
267
256### 快捷鍵沒有作用268### 快捷鍵沒有作用
257 269
258您的窗格沒有鍵盤焦點,或繪圖位於 VS Code 擴充功能中,而該處的按鈕沒有快捷鍵。請執行相符的操作:270您的窗格或帶狀沒有鍵盤焦點、您的按鈕位於已收合的帶狀中,或繪圖位於 VS Code 擴充功能中,而該處的按鈕沒有快捷鍵。請執行相符的操作:
259 271
260* **沒有鍵盤焦點**:按 Ctrl+X 然後 Tab,或按一下窗格。若要讓窗格在開啟時取得焦點,請從命令以 `focus: true` 開啟它。272* **沒有鍵盤焦點**:按 Ctrl+X 然後 Tab,或在[全螢幕轉譯](https://code.claude.com/docs/zh-TW/fullscreen.md)中按一下窗格或帶狀。若要讓窗格在開啟時取得焦點,請從命令以 `focus: true` 開啟它。
273* **按鈕位於已收合的帶狀中**:帶狀會顯示一列以 `▸ plugin panel hidden` 開頭的暗色列。按該列所指出的按鍵(預設為 Ctrl+X 然後 Ctrl+A)即可[將其展開](#plugin-panel-hidden)。
261* **在 VS Code 擴充功能中**:按一下按鈕,或在按鈕取得焦點後按 Enter274* **在 VS Code 擴充功能中**:按一下按鈕,或在按鈕取得焦點後按 Enter
262 275
263### 繪圖在終端機中有效,但在 Desktop 應用程式或 VS Code 中無效276### 繪圖在終端機中有效,但在 Desktop 應用程式或 VS Code 中無效
264 277
265可能是該應用程式不繪製該位置或元素,或是該工作階段屬於 VS Code 擴充功能不會為 mod 繪製任何內容的情況。mod 的其他 hook 仍會執行。請檢查以下原因:278可能是該應用程式不繪製該位置或元素,或是該工作階段屬於 VS Code 擴充功能不會為 mod 繪製任何內容的情況。mod 的其他 hook 仍會執行。請檢查以下原因:
266 279
267* **該位置或元素未在該應用程式中繪製**:在[轉譯位置](/docs/zh-TW/plugins/mods/reference.md#render-sites)表中查詢您的位置,並在[元素](/docs/zh-TW/plugins/mods/reference.md#elements)表中查詢您的元素。對於該應用程式缺少的元素,請在 hook 中檢查 `e.surface`,並返回該應用程式可繪製的樹。280* **該位置或元素未在該應用程式中繪製**:在[轉譯位置](https://code.claude.com/docs/zh-TW/plugins/mods/reference.md#render-sites)表中查詢您的位置,並在[元素](https://code.claude.com/docs/zh-TW/plugins/mods/reference.md#elements)表中查詢您的元素。對於該應用程式缺少的元素,請在 hook 中檢查 `e.surface`,並返回該應用程式可繪製的樹。
268* **VS Code 擴充功能版本早於 2.1.299**:聊天面板從[擴充功能版本](/docs/zh-TW/vs-code.md#install-the-extension) 2.1.299 起會為 mod 繪製內容。請在 VS Code 的 Extensions 檢視中檢查版本,並在該處更新擴充功能。281* **VS Code 擴充功能版本早於 2.1.299**:聊天面板從[擴充功能版本](https://code.claude.com/docs/zh-TW/vs-code.md#install-the-extension) 2.1.299 起會為 mod 繪製內容。請在 VS Code 的 Extensions 檢視中檢查版本,並在該處更新擴充功能。
269* **擴充功能版本早於 2.1.304 且工作階段不擷取功能旗標**:請更新擴充功能,或改為在 VS Code 的整合式終端機中執行 `claude`。在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上的工作階段會略過此擷取。對於其他會略過擷取的工作階段,例如 [Claude apps 閘道](/docs/zh-TW/claude-apps-gateway)工作階段,請參閱[需要擷取功能旗標的功能](/docs/zh-TW/env-vars.md#features-that-need-feature-flag-fetching)。282* **擴充功能版本早於 2.1.304 且工作階段不擷取功能旗標**:請更新擴充功能,或改為在 VS Code 的整合式終端機中執行 `claude`。在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上的工作階段會略過此擷取。對於其他會略過擷取的工作階段,例如 [Claude apps 閘道](https://code.claude.com/docs/zh-TW/claude-apps-gateway)工作階段,請參閱[需要擷取功能旗標的功能](https://code.claude.com/docs/zh-TW/env-vars.md#features-that-need-feature-flag-fetching)。
270 283
271## 編輯或值遺失284## 編輯或值遺失
272 285
282 295
283模組級變數在每次重新載入時重新初始化。296模組級變數在每次重新載入時重新初始化。
284 297
285[將值保留在 `$.state` 或 `$.store`](/docs/zh-TW/plugins/mods/interface#keep-state)。298[將值保留在 `$.state` 或 `$.store`](https://code.claude.com/docs/zh-TW/plugins/mods/interface#keep-state)。
286 299
287### `/clear`、`/resume` 或 `/branch` 後值重設300### `/clear`、`/resume` 或 `/branch` 後值重設
288 301
289值重設,或儲存的值被其預設值取代。這些命令中的每一個都將 `$.state` 重設為其預設值,並且 `session.start` 不會再次觸發。302值重設,或儲存的值被其預設值取代。這些命令中的每一個都將 `$.state` 重設為其預設值,並且 `session.start` 不會再次觸發。
290 303
291[在 `classic.SessionStart` hook 中再次載入儲存的值](/docs/zh-TW/plugins/mods/interface#load-a-saved-value-again-after-clear)。304[在 `classic.SessionStart` hook 中再次載入儲存的值](https://code.claude.com/docs/zh-TW/plugins/mods/interface#load-a-saved-value-again-after-clear)。
292 305
293## 讀取偵錯日誌306## 讀取偵錯日誌
294 307
310hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render323hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render
311```324```
312 325
313未驗證的繪圖計為被拒絕的結果,也會得到一行。若要在日誌中寫入您自己的行,請呼叫 [`$.ui.log`](/docs/zh-TW/plugins/mods/api#show-something-without-starting-a-turn),並帶有第二個引數,例如 `$.ui.log('message', { to: 'debug' })`。沒有第二個引數,`$.ui.log` 會在逐字稿中新增暗淡行。326未驗證的繪圖計為被拒絕的結果,也會得到一行。若要在日誌中寫入您自己的行,請呼叫 [`$.ui.log`](https://code.claude.com/docs/zh-TW/plugins/mods/api#show-something-without-starting-a-turn),並帶有第二個引數,例如 `$.ui.log('message', { to: 'debug' })`。沒有第二個引數,`$.ui.log` 會在逐字稿中新增暗淡行。
314 327
315當您編輯使用 `--plugin-dir` 載入的 mod 時,逐字稿會為每次重新載入顯示一行,其命名 mod 並列出其 hook。如果儲存破壞了模組,該行說 `reload failed, the previous version stays loaded:` 並帶有原因,最後一個可運作的版本會保持執行,直到 Claude Code 下次重新載入外掛為止,例如當您執行 `/reload-plugins` 時。328當您編輯使用 `--plugin-dir` 載入的 mod 時,逐字稿會為每次重新載入顯示一行,其命名 mod 並列出其 hook。如果儲存破壞了模組,該行說 `reload failed, the previous version stays loaded:` 並帶有原因,最後一個可運作的版本會保持執行,直到 Claude Code 下次重新載入外掛為止,例如當您執行 `/reload-plugins` 時。
316 329
317## 後續步驟330## 後續步驟
318 331
319* [測試 mod](/docs/zh-TW/plugins/mods/test.md):在問題到達工作階段之前捕捉它們332* [測試 mod](https://code.claude.com/docs/zh-TW/plugins/mods/test.md):在問題到達工作階段之前捕捉它們
320* [排除 plugin 的故障](/docs/zh-TW/plugins/troubleshooting.md):安裝和載入 plugin 的問題,不特定於 mod333* [排除 plugin 的故障](https://code.claude.com/docs/zh-TW/plugins/troubleshooting.md):安裝和載入 plugin 的問題,不特定於 mod