.claude-plugin/plugin.json 中的選用資訊清單鍵(用於取代或新增至該資料夾),以及使用者看到的名稱。如需每個鍵的完整欄位表,請參閱資訊清單參考。
使用此頁面將元件新增至已載入的外掛程式。
新增元件後,在執行中的工作階段中執行 /reload-plugins,或啟動新的工作階段,以便 Claude Code 載入該元件。若要在載入前檢查元件的檔案,請從外掛程式目錄在您的殼層中執行 claude plugin validate .。
這些情況涵蓋在其他頁面上:
- 建立您的第一個外掛程式:從建立外掛程式開始
- 安裝他人的外掛程式:請參閱安裝外掛程式
- 您的外掛程式使用者在 claude.ai 或 Cowork 上:那裡會載入不同的元件集合。請參閱claude.ai 和 Cowork 上的外掛程式
探索外掛程式目錄
探索工具顯示一個範例外掛程式my-plugin,其在預設位置具有每種元件:
- 一個審查 skill 和一個
about命令 - 一個安全審查子代理
- 一個在 Claude 編輯檔案後格式化檔案的 hook,以及它呼叫的
scripts/資料夾 - 一個日誌監視器
- 一個輸出樣式和一個色彩主題
- 一個路由審計工作流程
- 一個
hello-plugin可執行檔 - 預設設定
- 一個本機 MCP 伺服器和一個 Go 語言伺服器
新增每種元件
下面的每個章節涵蓋一種元件:其檔案在外掛程式中的位置、驗證的範例、外掛程式載入後使用者看到的內容,以及改變預設位置的 manifest 鍵。新增您的外掛程式需要的;沒有任何是必需的。Skills
skill 是一個SKILL.md 檔案,當其描述與任務相符時 Claude 可以載入。使用者也可以將其作為命令執行。將每個 skill 儲存在 skills/ 下的自己的目錄中:
SKILL.md 一個 description,以便 Claude 知道何時使用它:
skills/review/SKILL.md
/my-plugin:review 執行 skill。命令名稱和誰可以叫用它遵循這些規則:
- 命令名稱:
/<plugin>:<directory>,所以my-plugin中的skills/review/SKILL.md是/my-plugin:review。如果您在 frontmatter 中設定name,它會取代最後一個區段,外掛程式前綴保持不變。請參閱 skill 如何獲得其命令名稱 - 誰叫用它:Claude、使用者或兩者,由 frontmatter 控制。請參閱 控制誰叫用 skill
skills/ 目錄之外:
- 其他目錄:在
skillsmanifest 鍵中列出它們。它們新增至預設skills/掃描,而不是取代它,不像commands和agents - 外掛程式根目錄的單一 skill:沒有
skills/目錄且沒有skillsmanifest 鍵,外掛程式根目錄的SKILL.md載入為一個 skill。在其 frontmatter 中設定name,因為否則市場安裝會在其 快取目錄 之後命名 skill,而不是您的外掛程式
CLAUDE.md,claude plugin validate 會警告 CLAUDE.md at the plugin root is not loaded as project context。
如需 frontmatter 欄位和支援檔案,請參閱 Skills。
命令
命令是使用者按名稱執行的單一 Markdown 檔案,例如/my-plugin:about。
命令是較舊的格式,skills 對新工作已取代它們。skill 按名稱執行的方式相同,它也可以在其目錄中攜帶支援檔案。為您從
.claude/commands/ 移動的檔案保留 commands/。commands/<file>.md,它變成 /<plugin>:<file>。子目錄新增一個區段,所以 commands/db/migrate.md 是 /my-plugin:db:migrate。
命令檔案採用與 skills 相同的 frontmatter。
在 manifest 中定義命令
只有當您想將命令檔案保留在commands/ 以外的地方,或在 plugin.json 中定義短命令而不需要單獨的 Markdown 檔案時,您才需要這個。設定 commands manifest 鍵,Claude Code 會讀取它而不是掃描 commands/。鍵採用路徑、路徑陣列或將每個命令名稱對應到 source 檔案或內嵌 content 的物件。
此 manifest 內嵌定義 /my-plugin:about,沒有 Markdown 檔案:
.claude-plugin/plugin.json
/my-plugin:about 以確認它已載入。
如需完整的鍵語法,請參閱 commands。
Agents
子代理 是一個單獨的助手,具有自己的指示和內容視窗,Claude 可以將任務委派給它。agents/ 下的每個 Markdown 檔案定義一個:
agents/security-reviewer.md
my-plugin:security-reviewer,使用者可以使用 @agent-my-plugin:security-reviewer 明確叫用它。名稱形式是 <plugin>:<name>,其中 <name> 來自 frontmatter,或沒有時來自檔案名稱。
agents manifest 鍵取代 agents/ 掃描。
在子資料夾中組織 agents
您可以將外掛程式 agent 檔案放在agents/ 的子資料夾中。Claude Code 遞迴載入它們,並使用冒號連接外掛程式名稱、每個子資料夾名稱和檔案名稱以形成 agent 的範圍名稱。例如,my-plugin 中的 agents/review/security.md 載入為 my-plugin:review:security。兩個設定改變該名稱:
- Frontmatter
name:它只取代檔案名稱,所以agents/review/security.md中的name: audit載入為my-plugin:review:audit - Manifest
agents欄位:您在那裡列出的檔案載入時沒有子資料夾名稱,所以"agents": "./custom/review/security.md"載入為my-plugin:security
外掛程式 agents 中的 Frontmatter 欄位
外掛程式 agent 的 frontmatter 遵循這些規則:- 支援的欄位:
name、description、model、effort、maxTurns、tools、disallowedTools、skills、memory、background、omitClaudeMd、isolation、color和experimental的cacheTtl鍵。唯一有效的isolation值是"worktree"。請參閱 支援的 frontmatter 欄位 以了解每個欄位的作用 - 忽略的欄位:
permissionMode、hooks、mcpServers和initialPrompt。agent 檔案無法自行新增 hooks 或 MCP 伺服器,因此改為將這些新增為外掛程式 hooks 和 MCP 伺服器 - 無法解析的 Frontmatter:agent 仍然載入,每個欄位都被忽略。它以檔案命名,其描述讀取
Agent from my-plugin plugin。在您的 shell 中執行claude plugin validate以找到這些檔案
Hooks
hook 在 Claude Code 生命週期中的某個點自動執行某些操作,例如在每次檔案編輯後:shell 命令、HTTP 請求、MCP 工具呼叫、對模型的提示或子代理。將外掛程式的 hooks 儲存在外掛程式根目錄的hooks/hooks.json 中,在頂層 "hooks" 鍵下,形狀與 settings.json 中的 hooks 物件相同。這讓您可以複製現有的設定 hook 而不變更。
此 hook 在每個 Write 或 Edit 後執行捆綁的指令碼:
hooks/hooks.json
scripts/format.sh 並使其可執行。
載入外掛程式並要求 Claude 編輯檔案。退出 0 的 PostToolUse hook 在文字記錄中不顯示任何內容,因此使用 偵錯日誌 或指令碼本身所做的更改來確認它執行。
hooks/hooks.json 和 hooks manifest 鍵中的 Hooks 都會載入。如需每個事件及其承載,請參閱 Hook 事件。
外掛程式 hooks 何時觸發
外掛程式的 hooks 不會等待使用外掛程式的 skills 或命令之一。Claude Code 在工作階段載入外掛程式時註冊它們,從那時起它們在其事件上觸發。若要限制 hook 執行的時間,縮小其matcher。
如果 hook 從不觸發,請參閱 不觸發的 hooks。
環境、引號和匹配 MCP 工具
hook 的環境、${CLAUDE_PLUGIN_ROOT} 的引號和外掛程式自己的 MCP 工具的匹配器工作如下:
- 環境:每個 hook 程序在其環境中接收
CLAUDE_PLUGIN_ROOT和CLAUDE_PLUGIN_DATA,加上每個 使用者設定 值的CLAUDE_PLUGIN_OPTION_<KEY>,因此您的指令碼可以從那裡讀取它們 - 引號:當
command沒有args時,它通過 shell 執行,因此將${CLAUDE_PLUGIN_ROOT}路徑包裝在雙引號中,如 Hooks 下的hooks/hooks.json範例所做,以保持展開的路徑為一個 shell 單詞。當您改為傳遞args時,每個元素作為一個引數傳遞,沒有 shell,不需要引號。請參閱 exec 形式和 shell 形式 - 匹配外掛程式自己的 MCP 工具:來自此外掛程式宣告的 MCP 伺服器 的工具命名為
mcp__plugin_<plugin>_<server>__<tool>,因此在匹配器中寫入該完整名稱。僅在伺服器名稱上的匹配器從不觸發。請參閱 匹配 MCP 工具
MCP 伺服器
MCP 伺服器從外部系統為 Claude 提供工具。在外掛程式根目錄的.mcp.json 中宣告它,形狀與 專案 .mcp.json 相同。此 .mcp.json 宣告一個命名為 db 的伺服器:
.mcp.json
mcpServers 包裝器,將 db 放在檔案的頂層。
載入外掛程式並執行 /mcp 以確認伺服器顯示為 plugin:my-plugin:db。
claude plugin validate 檢查 .mcp.json 並報告 Claude Code 在載入時會丟棄的伺服器項目作為錯誤。需要 Claude Code v2.1.281 或更新版本。
如需壞項目在載入時顯示的位置,請參閱 不啟動的 MCP 伺服器。
mcpServers manifest 鍵採用內嵌伺服器對應、JSON 檔案的路徑或這些的陣列。當 manifest 伺服器與 .mcp.json 中的伺服器同名時,manifest 伺服器取代它。
到達 claude.ai 和 Cowork 上的使用者
本機 stdio 伺服器(例如 MCP 伺服器 下的db 伺服器)在 Claude Code 和在 Claude Desktop 應用程式中在您的機器上執行的 Cowork 工作階段中執行,但不在 claude.ai 上。若要到達那裡的使用者,請透過其 https:// URL 參考遠端伺服器,claude.ai 和 Cowork 將其作為連接器提供給使用者。
伺服器名稱、工具名稱和重新載入
伺服器的名稱、變數替換和重新載入行為遵循這些規則:- 伺服器名稱:
plugin:<plugin>:<server>,所以my-plugin中的db伺服器在/mcp中是plugin:my-plugin:db。使用相同的形式在mcp_toolhook 中命名伺服器 - 工具名稱:
mcp__plugin_<plugin>_<server>__<tool>,所以該db伺服器上的query工具是mcp__plugin_my-plugin_db__query。這是在 權限規則 和 hook 匹配器 中使用的名稱 - 替換:
${CLAUDE_PLUGIN_ROOT}和其他 路徑變數 在command、args和env中被替換。args中不需要引號,因為每個元素作為一個引數傳遞 - 重新載入:當使用者執行
/reload-plugins且 重新載入適用 時,配置未變更的伺服器保持其連接。配置已變更的伺服器重新連接,您移除的伺服器斷開連接
包含打包的 MCPB 伺服器
mcpServers 鍵也接受打包的伺服器作為 MCPB 檔案,其副檔名為 .mcpb 或較舊的 .dxt。將鍵指向檔案,作為外掛程式內的路徑或 https:// URL:
.claude-plugin/plugin.json
name 獲取其名稱。
如需傳輸和驗證,請參閱 MCP。
LSP 伺服器
LSP 伺服器為 Claude 提供語言的診斷和程式碼導航。如果 官方程式碼智慧外掛程式 已涵蓋您的語言,請安裝該外掛程式而不是寫一個。否則在外掛程式根目錄的.lsp.json 中宣告伺服器:
.lsp.json
command 是二進位檔的名稱,其引數在 args 中。extensionToLanguage 需要至少一個副檔名,每個以 . 開頭。
claude plugin validate 不讀取此檔案。當任何項目無效時,整個檔案在載入時被跳過,Invalid LSP server config for ".lsp.json" 出現在 /plugin Errors 標籤中。
您的外掛程式配置連接但不安裝伺服器二進位檔,每個檔案副檔名獲得一個伺服器:
- 缺少二進位檔:Claude Code 從使用者的
PATH按名稱啟動command。當二進位檔不存在時,伺服器無法啟動,claude --debug記錄LSP server <name> failed to start - 副檔名衝突:當兩個啟用的伺服器聲稱相同的副檔名時,首先註冊的處理這些檔案,另一個不用於它們,無論伺服器來自一個外掛程式還是兩個。
/pluginErrors 標籤顯示警告LSP server "<name>" is not used for <ext> files
lspServers manifest 鍵採用相同的對應內嵌、JSON 檔案的路徑或這些的陣列,其伺服器新增至 .lsp.json 中的伺服器。當 manifest 伺服器與 .lsp.json 中的伺服器同名時,manifest 伺服器取代它。
如需 transport、逾時、重新啟動和其他欄位,請參閱 lspServers。
將日誌輸出傳送至 stderr,而不是 stdout。Claude Code 僅將伺服器的 stdout 讀取為協議訊息,並接受最多 64 KiB 的訊息標頭和最多 32 MiB 的訊息正文。
Claude Code 斷開超過任一限制或將非協議輸出寫入 stdout 的伺服器,並將斷開連接計為 restartOnCrash 和 maxRestarts 的當機。當您使用 --debug 執行時,Claude Code 將命名原因的錯誤寫入偵錯日誌。
可執行檔
外掛程式根目錄的bin/ 中的檔案在啟用外掛程式時位於 Bash 工具的 shell 的 PATH 上,因此 Claude 可以將它們作為裸命令執行。新增可執行指令碼:
bin/hello-plugin
chmod +x bin/hello-plugin 使其可執行並載入外掛程式。當您要求 Claude 執行 hello-plugin 時,Bash 工具結果顯示指令碼的輸出。
外掛程式 bin/ 目錄位於使用者自己的 PATH 項目之後,因此外掛程式無法遮蔽 git、ls 或其他系統命令。
claude.ai 和 Cowork 不安裝具有頂層 bin/ 目錄的外掛程式,包括您 透過 claude.ai 組織設定分發 的外掛程式。
預設設定
若要設定在啟用外掛程式時適用的預設值,在外掛程式根目錄新增settings.json,或將相同的物件內嵌放在 settings manifest 鍵中。兩個鍵生效,agent 和 subagentStatusLine,所有其他鍵都被丟棄。
設定 agent 以執行外掛程式自己的一個 agents 作為主執行緒:
settings.json
security-reviewer agent 的系統提示和模型在主對話中回答。
如需鍵控制的所有內容,請參閱 agent 設定。
當相同的鍵在多個位置設定時,這些規則決定哪個值適用:
- 檔案優於 manifest:當兩者都存在且
settings.json設定至少一個支援的鍵時,settings.json適用,manifest 的settings被忽略 - 使用者設定優於外掛程式預設值:在設定來源中,外掛程式預設值是最低層,因此使用者自己在
~/.claude/settings.json中的agent覆蓋您的 - 兩個外掛程式設定相同的鍵:來自最後載入的外掛程式的值適用,
claude --debug記錄overrides setting
subagentStatusLine 形狀,請參閱 子代理狀態行。
主題和輸出樣式
外掛程式可以包含色彩主題和輸出樣式。兩者都出現在與使用者自己相同的選擇器中。對於任一個,設定 manifest 鍵取代資料夾掃描。
外掛程式主題是唯讀的,因此當使用者在
/theme 中編輯一個時,編輯會儲存為其自己的主題目錄中的副本。
此主題在深色預設上重新著色提示符號重點和錯誤文字:
themes/dracula.json
頻道
頻道 讓外部系統(例如聊天應用程式)將訊息傳送到工作階段。在外掛程式中,頻道是 MCP 伺服器之一加上channels 項目,該項目綁定到它並可以提示其自己的配置。此 manifest 將頻道綁定到 telegram 伺服器並要求機器人令牌:
.claude-plugin/plugin.json
server 必須符合 mcpServers 中的鍵。每個頻道的 userConfig 採用與 頂層 userConfig 鍵 相同的形狀。
如需伺服器必須實現的內容以及使用者如何啟用頻道外掛程式,請參閱頻道參考中的 打包為外掛程式。如需欄位表,請參閱 channels。
監視器
監視器是在整個工作階段的背景中執行的 shell 命令。它列印的內容作為通知到達 Claude,因此 Claude 可以對日誌或狀態變更做出反應,而無需被要求監視它。將項目儲存在monitors/monitors.json 中:
monitors/monitors.json
- 僅互動式工作階段:外掛程式監視器在互動式工作階段中啟動,從不在使用
-p旗標的非互動式模式中。它們也只在 Monitor 工具 可用的地方啟動 - 無使用者設定:
command從環境中獲取 路徑變數 和${ENV_VAR},但從不獲取${user_config.*}。參考一個的監視器不啟動,監視器程序也不接收CLAUDE_PLUGIN_OPTION_<KEY> - 中途停用:如果您在工作階段中途停用外掛程式,Claude Code 不會停止已執行的監視器。它們在工作階段結束時停止
experimental.monitors manifest 鍵採用相同的陣列內嵌或 JSON 檔案的路徑,並代替 monitors/monitors.json 讀取。
如需 when 觸發器和其他欄位,請參閱 monitors。
要求使用者提供設定值
在userConfig manifest 鍵中宣告您的外掛程式需要的使用者值,以便使用者不會自行編輯 settings.json。每個選項在對話方塊中顯示,其 title 作為標籤,其 description 在下方。
為令牌或密碼設定 "sensitive": true。對話方塊然後遮蔽輸入,值儲存在安全儲存中,而不是 settings.json。
此 manifest 要求端點和令牌:
.claude-plugin/plugin.json
設定對話方塊何時出現
對話方塊僅在互動式/plugin 介面中出現。當使用者執行以下任何操作時,它會為任何尚未設定的選項開啟:
- 在
/plugin中安裝外掛程式 - 在工作階段內執行
/plugin install <plugin>@<marketplace> - 從
/plugin中的 Installed 標籤啟用外掛程式
/plugin configure <plugin>@<marketplace>。
claude plugin install shell 命令從不提示 userConfig 值。若要從 shell 設定值,將每個值作為 --config KEY=VALUE 傳遞。當選項保持未設定時,命令列印 userConfig options not yet set 行,命名兩種設定方式。userConfig 對話方塊從不出現 引用該行。
如需選項欄位、每個值儲存的位置、元件如何參考已儲存的值以及哪些欄位拒絕 ${user_config.*},請參閱 使用者設定。
參考外掛程式路徑和儲存資料
您不知道您的外掛程式將安裝在哪裡,因此透過這些變數而不是固定路徑參考其檔案和資料。它們在 skill、命令和 agent 內容、hook 和監視器命令以及 MCP 和 LSP 伺服器配置中被替換。它們也被匯出到 hook、MCP 和 LSP 程序:${CLAUDE_PLUGIN_ROOT}:外掛程式的安裝目錄。每個版本都有自己的 快取目錄,因此當外掛程式更新時路徑會變更。不要在那裡寫入狀態${CLAUDE_PLUGIN_DATA}:一個在更新中倖存的目錄,用於node_modules、虛擬環境和快取。它解析為~/.claude/plugins/data/<id>/,並在首次參考時建立${CLAUDE_PROJECT_DIR}:專案根目錄,hooks 接收的相同值
<id> 是外掛程式識別碼,每個字元除了字母、數字、_ 和 - 外都被 - 取代,因此 my-plugin@my-marketplace 變成 my-plugin-my-marketplace。
在 Windows 上,替換的路徑使用正斜杠,因此 shell 不會將反斜杠讀取為逸出。
將相依性安裝到資料目錄
對於市場安裝的外掛程式,Claude Code 在快取外掛程式時自動安裝符合條件的 Node.js 套件相依性,因此您可能不需要自行安裝它們。當您執行時,此SessionStart hook 在首次執行時將 node_modules 安裝到 ${CLAUDE_PLUGIN_DATA} 中,並在更新變更 package.json 後再次安裝:
hooks/hooks.json
~/.claude/plugins/data/<id>/node_modules 存在。MCP 伺服器然後可以在其 env 中設定 NODE_PATH 為 ${CLAUDE_PLUGIN_DATA}/node_modules。如需哪些欄位替換哪個變數,請參閱 環境變數。
後續步驟
- 外掛程式 manifest 參考:
plugin.json欄位、路徑規則和標準配置 - 使用 evals 測試外掛程式:檢查您新增的元件以您的意圖改變 Claude 的行為
- 發佈和分發外掛程式:版本化外掛程式並將其放在市場中
- 疑難排解外掛程式:當元件無法載入或 hook 無法觸發時該怎麼辦