.claude-plugin/ 目錄中的 plugin.json 檔案。它包含 plugin 的中繼資料和 Claude Code 提示使用者輸入的 userConfig 值。它也宣告任何您內聯定義或保留在其預設位置之外的元件。
本參考適用於 plugin 建立者,以及將元件欄位放在 marketplace 項目中的 marketplace 擁有者。
從符合您要查詢內容的部分開始:
- 一個欄位:欄位表提供每個欄位的類型、是否必需、其預設值和接受的內容。路徑規則涵蓋
./前綴和每個元件路徑的包含 - 一個
userConfig選項或一個channels項目:使用者設定和頻道架構 ${CLAUDE_PLUGIN_ROOT}或 plugin 可以參考的另一個變數:環境變數- 每個元件的檔案位置:標準配置
- 來自
claude plugin validate的訊息:疑難排解頁面列出每條訊息及其修正,並連結到本頁的相關部分
Manifest 檔案
manifest 是選用的。沒有它,Claude Code 會載入它在標準配置中找到的元件。然後 plugin 名稱來自 marketplace 項目,或在您使用--plugin-dir 載入 plugin 時來自目錄名稱。
當您想要中繼資料、預設目錄外的元件、userConfig 或內聯元件定義時,請寫入 manifest。
將 manifest 儲存在 plugin 根目錄下的 .claude-plugin/plugin.json。將所有其他 plugin 檔案放在 plugin 根目錄,而不是 .claude-plugin/ 內。這包括 skills/、commands/ 和 hooks/。
以下範例設定欄位表中的大多數鍵。它在包含每個參考路徑的 plugin 目錄中通過驗證。
無法識別的欄位
無法識別的頂層鍵會被移除,而userConfig 選項、channels 項目、lspServers 設定或 monitors 項目內無法識別的鍵會被拒絕:
- 頂層欄位:欄位被移除,plugin 載入。
claude plugin validate將每個無法識別的頂層欄位報告為警告 - 嚴格物件:
userConfig選項、channels項目、lspServers設定和monitors項目是嚴格的。其中的未知鍵是錯誤,plugin 不會載入
驗證 manifest
claude plugin validate 是 manifest 的權威檢查。從您的 shell 針對 plugin 目錄執行它:
Validation passed:manifest 載入Validation passed with warnings:manifest 載入,但驗證器發現需要修正的內容,例如 Claude Code 移除的未知頂層欄位、不是 kebab-case 的name,或缺少version、description或author。傳遞--strict以在 CI 中將警告轉換為失敗Validation failed:manifest 有類型不匹配、缺少或逃逸 plugin 根目錄的路徑,或userConfig選項、channels項目、lspServers設定或monitors項目內的未知鍵。Claude Code 在載入 plugin 時報告相同的問題
.mcp.json 中宣告的每個 MCP 伺服器項目、在 mcpServers 命名的 .json 檔案中,或在 plugin.json 中內聯。這些 MCP 檢查需要 Claude Code v2.1.281 或更新版本,並包括:
- 錯誤:Claude Code 在載入 plugin 時會捨棄的項目、對 manifest 未宣告的選項的
${user_config.KEY}參考,以及不是有效絕對 URL 的遠端url - 警告:對非迴圈主機的
http://或ws://URL,以及看起來像字面認證的標頭值
欄位
表格列出plugin.json 中的頂層鍵。name 是唯一必需的鍵。其中欄位名稱是連結的地方,連結的部分有其完整規則。
對於元件鍵(例如 commands 和 hooks),元件路徑形式顯示每個接受的形式及範例,每個路徑都遵循 ./ 前綴、副檔名和包含的路徑規則。
在「類型」欄中,路徑是相對於 plugin 根目錄的字串,例如
"./custom/commands"。
name
Plugin 識別碼。它必須非空,沒有空格、@、:、路徑分隔符、控制字元或雙向格式化字元;使用 kebab-case。
Claude Code 在其下命名空間每個元件,因此 plugin deploy-tools 中的 agent reviewer 顯示為 deploy-tools:reviewer。
claude plugin validate 也會檢查名稱是否通過 Anthropic 自己的 plugin 之一。檢查會忽略大小寫,並將任何分隔符的執行視為一個:
錯誤讀作
Plugin name "<name>" is reserved: it passes as one of Anthropic's own,警告讀作 Plugin name "<name>" reads as one of Anthropic's own。claude plugin init 和 claude plugin tag 會拒絕引發該錯誤的名稱。Claude Code 仍會安裝並載入名稱遭它們拒絕的 plugin。
displayName
在 UI 中顯示的名稱,代替 name。它可能包含空格和任何大小寫,它不用於命名空間或查詢。
對於 marketplace 安裝的 plugin,marketplace 項目上的 displayName 優先於此值。
version
版本字串,不根據 semver 檢查。設定它會將 plugin 固定到該版本,直到您變更它;請參閱版本和更新。具有command 來源的 plugin、來自託管在 claude.ai 上的 marketplace 的 plugin,以及就地載入的 plugin(來自從本機路徑新增的 marketplace)不受此欄位固定。
metadata
您自己資料的自由形式物件,例如目錄或權利欄位。Claude Code 不讀取它。需要 Claude Code v2.1.222 或更新版本。
目錄列表欄位
當您提交 plugin 時,Anthropic 的目錄會從plugin.json 讀取 icon、documentationUrl、supportUrl、privacyPolicyUrl 和 termsOfServiceUrl 欄位,用於您 plugin 的列表。Claude Code 在載入時忽略它們。僅在 plugin.json 中設定它們。在 marketplace 項目中,claude plugin validate 會將每個欄位報告為未知欄位。
將 icon 設定為 plugin 內圖片檔案的路徑,例如 ./logo.png,並將四個 URL 欄位各自設定為 https:// URL。
在 Claude Code v2.1.281 或更新版本上,claude plugin validate 接受這些欄位而不發出警告。較早版本會為每個欄位印出 Unknown field 警告,因此 --strict 執行在這些版本上會失敗。
defaultEnabled
當使用者未在 enabledPlugins 中設定時,plugin 是否在啟用時啟動。預設為 true。啟用的 plugin 所依賴的 plugin 無論如何都會啟用。marketplace 項目中的相同欄位覆蓋此欄位。
一旦寫入使用者的 enabledPlugins 項目,它會在 plugin 更新中持續存在,因此在稍後版本中變更 defaultEnabled 不會變更現有使用者的設定。
dependencies
此 plugin 運作所必須啟用的其他 plugin。每個項目是 "name"、"name@marketplace" 或 { "name": "...", "marketplace": "...", "version": "..." }。裸名稱針對此 plugin 自己的 marketplace 解析。請參閱依賴性約束。
settings
Claude Code 在 plugin 啟用時應用的設定。只有 agent 和 subagentStatusLine 生效;其他鍵在載入時被丟棄。plugin 根目錄的 settings.json 優先於此鍵。請參閱預設設定。
元件路徑形式
每個元件鍵接受相對於 plugin 根目錄的路徑。hooks、mcpServers、lspServers 和 experimental.monitors 也接受內聯設定,commands 也接受物件對應,mcpServers 也接受 MCP 套件路徑和 URL。以下範例各顯示一次每個接受的形式。有關每個元件在執行時的作用,請參閱 Plugin 元件。
僅路徑欄位
agents、skills、outputStyles、workflows 和 experimental.themes 採用一個路徑或路徑陣列。agents 項目必須是 .md 檔案,skills 項目必須是目錄。其他三個接受目錄或檔案。
commands
commands 採用路徑、路徑陣列或物件對應。路徑命名平面 .md 命令檔案或目錄。在物件對應中,每個鍵在 plugin 前綴後成為命令名稱。例如,plugin deploy-tools 中的 "about" 執行為 /deploy-tools:about。
每個值恰好設定 source 或 content 之一,設定兩者或都不設定的項目無法驗證。此表中的其他欄位是選用的:
此對應宣告一個來自檔案的命令和一個來自內聯內容的命令:
hooks
hooks 採用 .json 檔案路徑、與 settings.json 中的 hooks 相同形式的內聯 hooks 物件,或混合兩者的陣列。有關 hook 事件和處理程式欄位,請參閱 hooks 參考。
hooks 檔案會將事件對應包裝在頂層 "hooks" 鍵中,也就是 hooks/hooks.json 所使用的形式。僅包含事件對應而沒有該包裝的檔案將無法載入。內聯物件本身就是事件對應,不需要包裝。
Claude Code 在該檔案存在時將您宣告的內容與 hooks/hooks.json 合併。此陣列載入一個 hooks 檔案,並宣告一個內聯 PostToolUse hook:
"hooks" 包裝其自身的事件對應:
config/extra-hooks.json
mcpServers
mcpServers 採用 .json 檔案路徑、MCP 套件路徑或 URL、內聯對應,或混合它們的陣列。有關伺服器設定欄位,請參閱 plugin 提供的 MCP 伺服器。
Claude Code 首先載入 plugin 根目錄的 .mcp.json,然後按順序載入每個宣告的形式。稍後宣告的伺服器名稱取代較早的名稱。
mcpServers 值採用以下形式之一:
套件路徑或 URL 必須以
.mcpb 或 .dxt 結尾。任何其他副檔名無法驗證。
lspServers
lspServers 採用 .json 檔案路徑、伺服器名稱到設定的內聯對應,或兩者的陣列。
Claude Code 首先載入 plugin 根目錄的 .lsp.json,然後按順序載入每個宣告的設定。稍後宣告的伺服器名稱取代較早的名稱。
每個伺服器設定是具有這些欄位的嚴格物件。未知鍵無法驗證。
此內聯設定為
.go 檔案執行 gopls:
monitors
experimental.monitors 採用 .json 檔案路徑或內聯陣列。當您省略鍵時,Claude Code 會載入 monitors/monitors.json(如果存在)。
每個項目是具有這些欄位的嚴格物件。
此內聯陣列宣告一個 monitor,在
deploy skill 首次執行時啟動:
command 無法參考 ${user_config.*}。請參閱通過 shell 執行的欄位。
路徑規則
manifest 中的每個元件路徑相對於 plugin 根目錄,必須以./ 開頭。路徑(例如 commands/foo.md)無法驗證。skills 和 mcpServers 各接受該規則外的一種形式:
skills:也接受"."。"."和"./"都表示 plugin 根目錄。在 v2.1.221 之前,"."無法通過 manifest 驗證,因此當 plugin 必須在較早版本上載入時使用"./"mcpServers:也接受https://套件 URL
experimental.evals 不是元件路徑,因此本節的規則不涵蓋它,而是由 claude plugin eval 在執行時檢查該值。它指定外掛根目錄下的一個目錄,例如 "quality/evals",可帶或不帶 ./ 前綴。若為陣列,則僅使用第一個項目。關於該值接受的內容以及無法使用的值會發生什麼情況,請參閱使用不同的 eval 目錄。
包含和存在
每個元件路徑必須解析到 plugin 根目錄內並且必須存在。claude plugin validate 檢查每個元件鍵下的路徑:
- 包含:解析到 plugin 根目錄外的路徑不會載入,
/pluginErrors 標籤顯示<component> path escapes plugin directory: <path>。包含..的路徑是常見情況,claude plugin validate將其報告為Path contains ".." which could be a path traversal attempt - 存在:不存在的路徑不會載入,
/pluginErrors 標籤顯示<component> path not found: <path>。claude plugin validate將其報告為Path not found
outputStyles、lspServers、monitors 和 themes 路徑,claude plugin validate 檢查需要 Claude Code v2.1.283 或更新版本。
每個鍵如何與其預設位置結合
每個元件鍵要麼取代其預設位置,要麼新增到它,要麼與它合併:- 取代預設:
commands、agents、outputStyles、workflows、experimental.themes、experimental.monitors。當您設定commands時,預設commands/目錄不會被掃描。要保留預設並新增更多,明確列出它:"commands": ["./commands/", "./extras/"] - 新增到預設:
skills。skills/目錄仍會被掃描,列出的目錄與它一起載入 - 合併:
hooks、mcpServers、lspServers。預設檔案首先載入,manifest 宣告的內容合併到它中,如元件路徑形式下所述
commands/)並且也設定了取代它的 manifest 鍵,Claude Code 會載入 manifest 路徑而不是資料夾。claude plugin list 和 /plugin 介面然後顯示警告 Default <folder>/ folder is ignored because the manifest sets "<key>"。
要避免警告,將鍵設定為該資料夾內的路徑:"commands": ["./commands/deploy.md"] 命名預設資料夾中的檔案,不會產生警告。
使用者設定
userConfig 宣告當外掛程式啟用時 Claude Code 提示使用者輸入的值,讓使用者不需要自行編輯 settings.json。
鍵是由字母、數字和底線組成的識別碼,且不能以數字開頭。
每個值都是一個嚴格的物件,包含以下欄位。未知的鍵會導致驗證失敗。
每個已啟用外掛程式的每個選項也會在
/config 面板中顯示為一列,除了 sensitive 選項和 multiple 清單。/config 列需要 Claude Code v2.1.269 或更新版本。
此 userConfig 宣告一個端點和一個遮蔽的權杖:
將欄位限制為固定選項
在userConfig 欄位上設定 options,讓使用者從固定清單中選擇其值。
若要將 tone 欄位限制為三個選項,請在 options 中列出它們,並將 default 設定為其中之一:
options,使用 Claude Code v2.1.271 之前版本的使用者將無法載入外掛程式。
options 適用於不是 multiple 或 sensitive 的 string 欄位。將 default 設定為列出的值之一,或設定 required: true 讓使用者必須選擇一個。每個選項是 1 到 64 個字元的純標籤,您在殼層中執行的 claude plugin validate 會報告它拒絕的任何其他內容。選項違反這些規則的外掛程式將無法載入。
值的儲存位置
非敏感值會儲存在使用者settings.json 中的 pluginConfigs 下。敏感值則改為儲存在平台的安全認證存放區中。設定頁面列出了讀取 pluginConfigs 的設定檔。
參考已儲存的值
在外掛程式需要的地方參考已儲存的值,有以下兩種形式:${user_config.KEY}:在 MCP 伺服器設定、LSP 伺服器設定、exec 形式 hookargs和技能與代理程式內容中替換。在技能和代理程式內容中,只有非敏感值會被替換,敏感值會變成預留位置CLAUDE_PLUGIN_OPTION_<KEY>:匯出到每個選項的 hook 程序,其中<KEY>為大寫。shell 形式的 hook 會讀取$CLAUDE_PLUGIN_OPTION_API_TOKEN以取得api_token
通過殼層執行的欄位
Shell 形式的 hook 命令、監視命令和 MCPheadersHelper 拒絕 ${user_config.*}。在這些欄位之一中參考它的元件會因錯誤而失敗,而不是執行,因為欄位的值會傳遞到會重新解析替換值的殼層。
下表顯示該值如何可以到達這些欄位。
頻道
channels 宣告 plugin 提供的訊息頻道,例如到聊天應用程式的橋接。當您宣告一個時,Claude Code 可以在 plugin 啟用時提示頻道的設定。有關伺服器如何注入訊息,請參閱頻道參考。
每個項目是繫結到 plugin 的 MCP 伺服器之一的嚴格物件,具有這些欄位:
此 manifest 將頻道繫結到 plugin 的
telegram MCP 伺服器,並提示替換到伺服器 env 中的機器人令牌:
環境變數
Claude Code 為 plugin 元件提供三個路徑變數。在每個變數解析的位置下列出的欄位中將它們參考為${NAME},並在接收它們的程序中將它們讀取為環境變數。
${CLAUDE_PLUGIN_ROOT} 在 plugin 更新時變更,因此不要在那裡寫入狀態。有關根目錄移動的位置和舊目錄何時被清理,請參閱載入頁面。
當您從最後安裝 plugin 的地方卸載它時,Claude Code 預設會刪除 ${CLAUDE_PLUGIN_DATA} 目錄。有關 --keep-data 和其他保留它的情況,請參閱 plugin 卸載。
每個變數解析的位置
在每個 plugin 元件中,${...} 參考在特定欄位中內聯解析,某些元件也在其程序環境中接收變數:
變數不存在於 Claude 通過 Bash 工具在主工作階段或子代理中執行的命令環境中。在 skill、command 和 agent 內容中,在 Markdown 主體中寫入
${...} 參考,Claude Code 在載入內容時內聯替換路徑。
引用和路徑分隔符
保持每個替換的路徑為單一引數:- Hook 命令:使用exec 形式與
args以便每個路徑是一個沒有引用的引數 - Shell 形式 hooks 和 monitor 命令:用雙引號包裝變數,以便帶有空格的路徑保持為一個字
claude plugin validate 會發出警告,除非 hook 將 shell 設定為 "powershell"。
此 shell 形式 hook 執行與 plugin 捆綁的指令碼:
標準配置
每個元件類型在 plugin 根目錄下有預設位置,當 manifest 不指向其他位置時使用。
使用每個預設位置的 plugin,加上其 hooks 呼叫的
scripts/ 資料夾,配置如下:
CLAUDE.md 不作為上下文載入,claude plugin validate 在找到一個時發出警告。要包含載入到 Claude 上下文中的指示,請將它們放在 skill 中。
Marketplace 項目和 manifest
市集項目接受其自己的欄位(包括strict),以及此頁面上除了目錄列表欄位以外的每個欄位。
strict 欄位決定項目是否可以將元件新增到具有自己 plugin.json 的 plugin。它預設為 true。
項目欄位如何與 plugin.json 結合
項目要麼作為 manifest,要麼將元件新增到它,要麼與它衝突:
- 沒有
plugin.json:項目是 manifest,無論strict如何。項目hooks僅以內聯物件形式載入。對於檔案路徑或陣列,/pluginErrors 標籤顯示not yet supported in a marketplace entry錯誤 plugin.json存在,strict未設定或true:Claude Code 載入 manifest 並將項目的commands、agents、skills、outputStyles和themes附加到它。對於hooks,項目的事件匹配器取代 manifest 對該相同事件的匹配器,只有 manifest 宣告的事件保留其plugin.json存在,strict: false:宣告commands、agents、skills、hooks、outputStyles或themes的項目是衝突,plugin 無法載入,出現Plugin <name> has conflicting manifests
source 是 marketplace 根目錄的 marketplace 項目列出特定 skills 子目錄時,只有這些子目錄載入,plugin 的預設 skills/ 目錄不會被掃描。manifest 中的 skills 鍵改為新增到預設。
中繼資料優先順序
某些中繼資料欄位有固定的優先順序,無論strict 如何:
defaultEnabled和顯示欄位:項目的defaultEnabled和其顯示欄位(例如displayName)覆蓋 manifest 的version:manifest 的version覆蓋項目的name:當項目在與 manifest 不同的name下列出 plugin 時,enabledPlugins使用項目名稱,元件在 manifest 名稱下命名空間
後續步驟
- 將元件新增到 plugin:每個元件在執行時的作用,以及驗證的範例
- Marketplace 參考:marketplace 可以為您的 plugin 設定的項目欄位
- Plugin 命令參考:
claude plugin validate旗標和輸出 - 疑難排解 plugin:每條驗證訊息及其修正