Mods 概述
使用 mod 為 Claude Code 新增窗格、命令和工具呼叫規則。了解 mod 的功能、如何建立或安裝 mod,以及 mod 的執行位置。
Mod 是一個外掛程式,可改變 Claude Code 的外觀和行為。它由 JavaScript 或 TypeScript 事件處理程式組成:Claude Code 在事件發生時呼叫一個,例如工具呼叫、已提交的提示或介面的一部分被繪製,處理程式可以監視事件、變更事件或接管事件。使用 mod 為 Claude Code 新增您自己的功能,例如在每個請求後繪製您的內容有多滿的窗格。如需 mod 中的檔案和完整範例,請參閱Mod 的運作方式。
Claude Code 現有的 hooks 也在事件上執行,作為 shell 命令、HTTP 請求或您在設定檔中設定的提示。Mod 的處理程式是在 Claude Code 內執行的函式。Claude Code 呼叫兩種 hooks:在這些頁面上,「hook」表示 mod 的處理程式,而設定檔類型是「設定 hook」。
Mod 可以做什麼
設定 hooks、skills、狀態行和 MCP 伺服器從 Claude Code 外部運作:每一個都執行指令碼,或為 Claude 提供文字或工具。Mod 在 Claude Code 內執行,因此它可以做他們無法做的事情:
- 繪製您可以使用的介面:文字記錄旁邊的窗格或提示上方的帶狀區域,具有標籤、按鈕和文字欄位。請參閱在介面中繪製。
- 重新繪製 Claude Code 自己的介面:取代或重新設定 Claude Code 自己繪製的部分,例如工具呼叫的列、微調器或 Claude 提出問題的對話框。請參閱變更 Claude Code 已繪製的內容。
- 進入工具呼叫或請求:例如,在您詢問使用者問題時保留工具呼叫、在不執行工具的情況下回答,或將一個請求傳送到不同的模型。請參閱保護或變更工具呼叫和跟隨一個回合。
- 在命令上執行您自己的程式碼:一個
/command,立即執行您的函式,沒有 Claude 回合,即使 Claude 正在工作。請參閱新增命令或工具。 - 在 hooks 之間共享資料:mod 的 hooks 共享其檔案中的變數,因此一個 hook 記錄的內容,另一個可以顯示。例如,一個 hook 可以計算工具呼叫,而另一個在微調器旁邊顯示計數,或一個可以讀取每個請求的權杖使用量,而另一個在窗格中繪製它。請參閱對事件做出反應。
Mods 在 Claude Code CLI 和 Claude Desktop 應用程式的 Code 標籤中運作。請參閱Mods 執行的位置以了解它們在其他地方的行為,例如在 VS Code 擴充功能、claude -p 和雲端工作階段中。如果設定 hook、skill 或 MCP 伺服器已經做了您需要的事情,在您編寫 mod 之前比較它們。若要為組織管理 mods,請參閱為您的組織管理 mods。
取得 mod
您可以透過以下三種方式之一開始使用 mod:
- 使用您已經擁有的:Claude Code 的某些功能是 mods,例如
/diff。請參閱內建於 Claude Code 的 Mods。 - 建立一個:在 Claude Code 工作階段中描述您想要的內容,Claude 會編寫 mod。請參閱向 Claude 要求 mod。若要了解 mod 程式碼的運作方式,自己編寫一個。
- 安裝一個:請參閱安裝或更新 mod
安裝或更新 mod
Mod 是使用您的權限執行的程式碼。它可以讀取和寫入您的檔案、啟動程序和發出網路請求。僅從您信任的作者和市場安裝 mods。請參閱決定是否信任 mod。
Mod 作為外掛程式從市場安裝。提供外掛程式的名稱、@ 和市場的名稱。這些範例從名為 your-org 的市場安裝名為 token-chart 的外掛程式:
- 在 Claude Code 工作階段中,執行
/plugin install token-chart@your-org。 - 在您的 shell 中,執行
claude plugin install token-chart@your-org。
安裝外掛程式涵蓋市場、範圍、VS Code 擴充功能和 Desktop 應用程式,以及保持外掛程式更新,所有這些都適用於包含 mod 的外掛程式,無需變更。
如果您在工作階段開啟時從 shell 安裝或更新 mod,請在該工作階段中執行 /reload-plugins 以載入它。否則,它會在您下次啟動 Claude Code 時載入。
決定是否信任 mod
Mod 是使用您的權限在 Claude Code 內執行的程式碼。僅從您信任的作者和市場安裝 mods。
Mod 可以存取什麼
Mod 使用您的權限執行,因此在您安裝一個之前,請了解它可以存取什麼。載入後,mod 可以:
- 在您的機器上以您的身份行動:讀取和寫入您的使用者帳戶可以存取的任何地方的檔案、啟動程式和發出網路請求
- 讀取您的機密:環境變數和設定檔,包括您保留在任一個中的 API 金鑰
- 查看您的工作階段:您傳送的每個提示和 Claude 進行的每個工具呼叫
- 變更您的工作階段:重寫提示或工具呼叫、提交提示,就像您輸入的一樣,或傳送訊息到您的另一個工作階段
- 在不詢問您的情況下行動:在詢問您之前核准工具呼叫
- 花費您的使用量:在您的計畫或 API 金鑰上呼叫模型
核准工具呼叫的 mod 可以核准 ask 規則會提示的呼叫,或您自己的 PreToolUse hooks 阻止的呼叫。使用 hooks 擴展權限列出此類 mod 可以核准的內容,包括何時可以核准 deny 規則拒絕的呼叫。
Mod 可以重新設定 Claude Code 介面的大部分,但不能重新設定權限提示。它無法變更提示顯示給您的內容。
在安裝 mod 之前列出它的功能
在您安裝 mod 之前,您可以列出它掛接的事件以及它要求 Claude Code 執行的操作,例如讀取檔案或發出網路請求,而無需執行它。首先取得外掛程式的檔案,例如透過複製其儲存庫。然後,在您的 shell 中,在外掛程式的目錄上執行 claude plugin validate:
claude plugin validate ./some-mod
輸出中的 hooks: 和 calls: 行列出 mod 處理的事件以及它要求 Claude Code 執行的操作。檢查 mod 可以做什麼顯示輸出以及要查找的呼叫。
開啟或關閉 mods
Mods 需要 Claude Code v2.1.287 或更新版本,預設情況下它們是開啟的。在您的 shell 中,執行 claude --version 以檢查,如果您的版本較舊,請更新 Claude Code。
若要關閉 mods,請選擇要停止多少個,以及停止多長時間。若要將它們重新開啟,請撤銷相同的變更:
- 一個 mod:從
/plugin中的已安裝標籤停用或解除安裝其外掛程式 - 每個已安裝的 mod,一個工作階段:使用
--safe-mode啟動 Claude Code,這也會排除您的其他自訂 - 您安裝的每個 mod,在每個工作階段中:在
~/.claude/settings.json中設定"disableAllHooks": true。您的設定 hooks 和自訂狀態行也會停止。您的組織管理的內容會繼續執行。
如果您透過組織使用 Claude Code,管理員也可以限制哪些 mods 載入。管理員從停止使用者安裝的 mods 載入開始。
若要了解 mods 是否可以為您載入,請參閱檢查 mods 是否可以載入。
如果您在早期存取期間設定了 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS,請移除它。Claude Code v2.1.287 及更新版本會忽略它,因此將其設定為 0 不會保持 mods 關閉。
查看工作階段載入了哪些 mods
若要查看終端機工作階段載入了哪些 mods,請在 Claude Code 提示處執行 /plugin。標籤下的暗行提供計數和名稱,例如 1 mod active · first-mod。如果您安裝的 mod 未在那裡命名,請參閱找出為什麼 mod 不執行任何操作。
Mod 的運作方式
Mod 是一個外掛程式,其程式碼註冊事件處理程式,稱為 hooks。Claude Code 在其事件發生時執行 hook,例如當 Claude 呼叫工具或繪製微調器時。一個小 mod 有三個檔案:
first-mod/
├── .claude-plugin/
│ └── plugin.json
└── hooks/
├── hooks.json
└── register.js
plugin.json:外掛程式的清單hooks.json:指向您的程式碼檔案register.js:您的程式碼,稱為 hooks 模組。它告訴 Claude Code 在哪些事件上執行您的函式。
這是一個完整的 register.js。它計算 Claude 進行的工具呼叫,並在 Claude 工作時在微調器旁邊顯示計數,如 Thinking · tool calls: 3…。
// The count, shared by the two hooks below
let calls = 0
// Claude Code calls this once when the mod loads
export function register(on) {
// Runs each time Claude is about to use a tool
on('tool.call', async ($, e, next) => {
calls += 1
// Ask Claude Code to draw the interface again, so the new count shows
$.ui.invalidate('ui.render')
// Let the tool run as usual
return next(e)
})
// Runs each time Claude Code draws the spinner
on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
// Keep Claude Code's spinner, with the count added after its word
return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })
})
}
該檔案註冊了兩個 hooks,兩者都使用頂部的 calls 變數:
tool.callhook 在 Claude 即將使用工具時執行。它將一個加到calls,要求 Claude Code 再次繪製介面,並讓工具照常執行。ui.renderhook 在 Claude Code 繪製微調器時執行。它保留 Claude Code 自己的微調器,並在單詞後面新增計數。
此記錄顯示 mod 的運作。觀看提示框上方的微調器行:當 Claude 列出目錄並讀取兩個檔案時,它讀取 Thinking · tool calls: 1…,然後 2…,然後 3…。
Hook 可以對事件做什麼
Claude Code 在對事件採取行動之前執行您的 hook,因此 hook 決定接下來會發生什麼。它有三個選擇:
- 觀察:注意正在發生的事情並讓它繼續不變,如範例中的
tool.callhook 所做的 - 重寫:在事件繼續之前變更事件,如
ui.renderhook 在將計數新增到微調器時所做的 - 回答:自己處理事件,因此通常的行為不會執行,例如拒絕命令
若要在其自己的程式碼之外執行任何操作,例如繪製、新增命令、呼叫模型、讀取檔案、啟動程序或發出網路請求,hook 會呼叫 mods API。Hook 沒有其他方式來執行這些操作,這就是為什麼 Claude Code 可以在您安裝之前列出 mod 的功能。
如需每個選擇背後的程式碼,請參閱對事件做出反應。如需 hook 可以呼叫的內容,請參閱使用 mods API。
Mods 執行的位置
Mod 的 hooks 在載入外掛程式的每種工作階段中執行。繪製更窄:只有終端機和 Desktop 應用程式顯示 mod 的窗格、帶狀區域和取代的列。此表列出您可能執行 Claude Code 的每個位置:
| 您執行 Claude Code 的位置 | Hooks 執行 | Mod 繪製的內容出現 |
|---|---|---|
終端機中的 claude,包括編輯器的整合終端機和 JetBrains 外掛程式 |
是 | 是 |
| Desktop 應用程式的 Code 標籤,除了 WSL 工作階段外 | 是 | 是,除了元素表標記為僅限終端機的元素 |
| Desktop 應用程式中的 WSL 工作階段 | 否,因為外掛程式在 WSL 工作階段中不可用 | 否 |
| VS Code 擴充功能的聊天面板 | 是 | 否 |
claude -p 和 Agent SDK |
是 | 否 |
| 從 claude.ai 或行動應用程式的遠端控制 | 是,在您機器上的工作階段中 | 在您機器上的終端機中 |
| 雲端工作階段 | 是,對於到達雲端工作階段的外掛程式 | 否 |
繪製的 mod 可以檢查它執行的應用程式,並在文字記錄中的行或命令的文字回覆中回退,其中沒有任何內容繪製。
為您的組織控制 mods
管理員透過受管設定決定 mods 是否執行以及哪些執行。為您的組織管理 mods涵蓋預設情況、如何檢查 mod 以及如何使用您自己的 mod 強制執行原則。
比較 mods、設定 hooks、skills 和 MCP 伺服器
Mods、設定 hooks、skills 和 MCP 伺服器重疊。此表顯示每一個是什麼以及何時選擇它。
| Mod | 設定 hook | Skill | MCP 伺服器 | |
|---|---|---|---|---|
| 它是什麼 | Claude Code 在其自己的程序中呼叫的外掛程式中的函式 | Claude Code 在生命週期事件上執行的 shell 命令、HTTP 請求或提示 | Claude 讀取的 SKILL.md 檔案指令 |
提供 Claude 工具的外部程序或服務 |
| 它可以變更什麼 | 工具呼叫、提示、命令、回合以及介面繪製的內容 | 工具呼叫或提示是否繼續進行、工具呼叫的引數和結果,以及為 Claude 新增的內容 | Claude 知道和執行的內容 | Claude 擁有的工具 |
| 它可以在介面中繪製嗎 | 是 | 否 | 否 | 否 |
| 您編寫什麼 | JavaScript 或 TypeScript | 指令碼和 settings.json 項目 |
Markdown | 任何語言的伺服器 |
| 在以下情況下選擇它 | 您想要窗格、提示上方的帶狀區域、自訂命令或重寫事件 | 您想要使用您已經擁有的指令碼來阻止、允許或記錄事件 | 您不斷將相同的指令貼到聊天中 | Claude 需要到達外部系統 |
其他每一個都有自己的頁面:Hooks、Skills 和 MCP。外掛程式可以保留所有四個,因此 mod 可以與 skill 和 MCP 伺服器一起在同一外掛程式中發送。
內建於 Claude Code 的 Mods
Claude Code 的某些功能是 mods。若要查看您的工作階段擁有的功能,請在 Claude Code 提示處執行 /plugin 並前往已安裝標籤,該標籤在內建下列出它們。您無法更新或解除安裝內建 mod,表格的最後一列說明如何關閉每一個。mods active 行排除內建 mods。
此表按 /plugin 顯示的名稱列出每個項目:
/plugin 中的名稱 |
它的功能 | 它在哪裡開啟 | 如何關閉它 |
|---|---|---|---|
cc-plugin-agents-md |
將 AGENTS.md 載入為專案指令 |
每個工作階段,除了無法讀取 AGENTS.md 的工作階段 |
在 /plugin 中停用它,或選擇哪些指令檔案載入 |
cc-plugin-diff |
接管 /diff 並繪製其窗格 |
互動式終端機工作階段 | 在 /plugin 中停用它。/diff 保留,Claude Code 的內建版本的命令回答它。 |
cc-plugin-plugin-authoring |
為 Claude 提供plugin-authoring skill以編寫 mods。它保留 skill 且沒有 mod 程式碼。 |
除非 Anthropic 已遠端關閉已安裝的 mods | 在 /plugin 中停用它 |
cc-plugin-sec-default |
保護您的組織管理的內容免受使用者安裝的 mods | 保護載入的位置 | 您無法。管理員在受管設定中設定順序 |
cc-plugin-telemetry |
傳送 Claude Code 及其內建 mods 記錄的分析記錄 | 無論 Claude Code 自己的分析在哪裡開啟 | 在 /plugin 中停用它,或關閉分析,例如使用 DISABLE_TELEMETRY |
cc-plugin-you-should-know |
執行一個側邊代理,在 Claude 處理較長的任務時監視您的背景。當它發現值得了解的東西而您可能會錯過時,它會在提示上方顯示一個備註。 | 預設停用。如果可供您的組織使用,列在 /plugin -> 已安裝 -> 顯示已停用。使用 /plugin enable cc-plugin-you-should-know@builtin 啟用。 |
在 /plugin 中停用它 |
停止已安裝 mods 的設定和旗標,例如 disableAllHooks、--bare 和 --safe-mode,不會停止內建 mods。
讀取內建 mods 的來源
這些 mods 中的四個的來源在 Claude Code 儲存庫的 mods 目錄中是公開的。每一個都是一個完整的外掛程式,具有其 hooks 模組和測試:
diff:/diff窗格,具有綁定到鍵盤動作的按鈕和 mod 自己處理的捲動agents-md:將AGENTS.md載入為專案指令,具有userConfig選項sec-default:了解預設情況下會發生什麼中描述的保護,強制執行原則的 mod 的模型telemetry:新增其他 mods 可以呼叫的方法,並發送其類型
後續步驟
- 建立 mod:建立一個計算工具呼叫、在微調器旁邊顯示計數並新增命令的 mod,並了解編輯和重新載入迴圈
- 在介面中繪製:窗格、提示上方的帶狀區域、按鈕、文字欄位和狀態
- 對事件做出反應:工具呼叫、提示、回合以及 mods 執行的順序
- 使用 mods API:命令、工具、模型呼叫、計時器和檔案
- 測試 mod:在沒有工作階段的情況下執行的自動化測試
- 對 mod 進行故障排除:mod 不執行任何操作的原因以及偵錯記錄
- 為您的組織管理 mods:預設值、受管設定、檢查 mod 和原則 mods
- Mods 參考:每個事件、方法、元素和限制