プラグインリファレンス
Claude Code プラグインシステムの完全な技術リファレンス。スキーマ、CLI コマンド、コンポーネント仕様を含みます。
プラグインをインストールしたいですか?「プラグインの検出とインストール」を参照してください。プラグインの作成については、「プラグイン」を参照してください。プラグインの配布については、「プラグインマーケットプレイス」を参照してください。
プラグインは、Claude Code をカスタム機能で拡張する自己完結型のコンポーネントディレクトリです。プラグインコンポーネントには、skills、agents、hooks、MCP servers、LSP servers、および monitors が含まれます。
プラグインコンポーネントリファレンス
Skills
プラグインは Claude Code に skills を追加し、/name ショートカットを作成します。これらは、ユーザーまたは Claude が呼び出すことができます。
場所: プラグインルートの skills/ または commands/ ディレクトリ、またはプラグインルートの単一の SKILL.md ファイル
ファイル形式: Skills はディレクトリで SKILL.md を含みます。commands はシンプルな markdown ファイルです
Skill の構造:
skills/
├── pdf-processor/
│ ├── SKILL.md
│ ├── reference.md (optional)
│ └── scripts/ (optional)
└── code-reviewer/
└── SKILL.md
Skills と commands は、プラグインがインストールされると自動的に検出されます。
プラグインに skills/ ディレクトリがなく、skills マニフェストフィールドもない場合、プラグインルートの SKILL.md は単一の skill として読み込まれます。frontmatter の name フィールドを設定して、skill の呼び出し名を制御します。これがない場合、Claude Code はインストールディレクトリ名にフォールバックします。キャッシュにコピーされたプラグインの場合、その名前は更新のたびに変わるバージョン文字列です。複数の skill を含むプラグインの場合は、上記の skills/ ディレクトリレイアウトを使用します。
プラグイン skills と commands では、disable-model-invocation などのブール値 frontmatter フィールドが、true と false に加えて、任意の大文字小文字で yes、no、on、off、1、0 を受け入れます。v2.1.218 より前では、Claude Code は true と false のみを認識していました。
詳細については、Skills を参照してください。
Agents
プラグインは、Claude が必要に応じて自動的に呼び出すことができる特定のタスク用の特化したサブエージェントを提供できます。
場所: プラグインルートの agents/ ディレクトリ
ファイル形式: エージェント機能を説明する markdown ファイル
エージェント構造:
---
name: agent-name
description: このエージェントが専門とする内容と Claude がそれを呼び出すべき時期
model: sonnet
effort: medium
maxTurns: 20
disallowedTools: Write, Edit
---
エージェントの役割、専門知識、および動作を説明する詳細なシステムプロンプト。
プラグインエージェント frontmatter
プラグインエージェントファイルは、サブエージェントファイルと同じ frontmatter フィールドを使用しますが、Claude Code はプラグインから来たエージェントの場合、そのうちのいくつかのみを尊重します。
- サポート対象:
name、description、model、effort、maxTurns、tools、disallowedTools、skills、memory、background、omitClaudeMd、isolation、color、およびexperimental。唯一の有効なisolation値は"worktree"です。 - セキュリティ上の理由からサポート対象外:
hooks、mcpServers、およびpermissionMode。Claude Code はプラグインからエージェントを読み込む場合、これらを無視します。これらを使用するには、エージェントファイルを.claude/agents/または~/.claude/agents/にコピーします。 - サポート対象外:
initialPrompt。
プラグインエージェントファイルを agents/ のサブフォルダーに配置できます。Claude Code は それらを再帰的に読み込み、プラグイン名、各サブフォルダー名、およびファイル名をコロンで結合して、エージェントのスコープ付き名を形成します。たとえば、my-plugin という名前のプラグイン内の agents/review/security.md は my-plugin:review:security として読み込まれます。2 つの設定がその名前を変更します。
- Frontmatter
name: ファイル名のみを置き換えるため、agents/review/security.mdのname: auditはmy-plugin:review:auditとして読み込まれます - マニフェスト
agentsフィールド: そこにリストされているファイルはサブフォルダー名なしで読み込まれるため、"agents": "./custom/review/security.md"はmy-plugin:securityとして読み込まれます
Claude Code は、frontmatter に name がない場合またはパースに失敗した場合でも、プラグインエージェントを読み込みます。
nameがない場合: Claude Code はファイル名に基づいてエージェントに名前を付けるため、my-pluginという名前のプラグイン内のagents/reviewer.mdはmy-plugin:reviewerとして読み込まれます- Frontmatter がパースに失敗した場合: Claude Code はファイル名に基づいてエージェントに名前を付け、説明として
Agent from my-plugin pluginを使用し、ファイル内のすべてのフィールドを無視します
対照的に、Claude Code は、frontmatter に name がない場合またはパースに失敗した場合、プロジェクト、ユーザー、または管理エージェントファイルをスキップします。
プラグインのデフォルト agents/ ディレクトリ内で frontmatter がパースに失敗したファイルを見つけるには、claude plugin validate を実行します。渡すパスは、プラグインがマニフェストを持つかどうかによって異なり、両方の例では ./my-plugin をプラグインディレクトリとして使用します。
- マニフェスト付きプラグイン:
claude plugin validate ./my-plugin - マニフェストなしプラグイン:
claude plugin validate ./my-plugin/agents。Claude Code v2.1.233 以降が必要です。
エージェントは、プラグインが有効になると、@-mention typeahead に my-plugin:code-reviewer などのスコープ付き名で表示されます。
詳細については、Subagents を参照してください。
Hooks
プラグインは、Claude Code イベントに自動的に応答するイベントハンドラーを提供できます。
場所: プラグインルートの hooks/hooks.json、または plugin.json 内のインライン
形式: イベントマッチャーとアクションを含む JSON 設定
hooks/hooks.json は、エディターのオートコンプリートと検証用に JSON Schema URL を指定する最上位の $schema キーを含むことができます。Claude Code は読み込み時にこのキーを無視します。
Hook 設定:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"
}
]
}
]
}
}
プラグイン hooks は、ユーザー定義 hooks と同じライフサイクルイベントに応答します。
| イベント | 発火するタイミング |
|---|---|
SessionStart |
セッションが開始または再開されたとき |
Setup |
--init-only で Claude Code を起動するとき、または -p モードで --init または --maintenance を使用するとき。CI またはスクリプトでの 1 回限りの準備用 |
UserPromptSubmit |
プロンプトを送信するとき、Claude が処理する前 |
UserPromptExpansion |
ユーザーが入力したコマンドがプロンプトに展開されるとき、Claude に到達する前。展開をブロックできます |
PreToolUse |
ツール呼び出しが実行される前。ブロックできます |
PermissionRequest |
ツール呼び出しが権限決定を必要とするとき |
PermissionDenied |
オートモードがツール呼び出しを拒否するとき、分類器の判定がない拒否を含みます。JSON hookSpecificOutput.retry: true を使用して、モデルが拒否されたツール呼び出しを再試行できることを伝えます。Claude Code は分類器が判定を出さなかった場合、retry を無視します |
PostToolUse |
ツール呼び出しが成功した後 |
PostToolUseFailure |
ツール呼び出しが失敗した後 |
PostToolBatch |
並列ツール呼び出しの完全なバッチが解決した後、次のモデル呼び出しの前 |
Notification |
Claude Code が通知を送信するとき |
MessageDisplay |
アシスタントメッセージテキストが表示されている間 |
SubagentStart |
サブエージェントがスポーンされるとき |
SubagentStop |
サブエージェントが終了するとき |
TaskCreated |
TaskCreate 経由でタスクが作成されるとき |
TaskCompleted |
タスクが完了としてマークされるとき |
Stop |
Claude が応答を終了するとき |
StopFailure |
API エラーが原因でターンが終了するとき |
TeammateIdle |
エージェントチーム のチームメイトがアイドル状態になろうとするとき |
InstructionsLoaded |
CLAUDE.md または .claude/rules/*.md ファイルがコンテキストに読み込まれるとき。セッション開始時およびセッション中にファイルが遅延読み込みされるときに発火します |
ConfigChange |
セッション中に設定ファイルが変更されるとき |
CwdChanged |
作業ディレクトリが変更されるとき、例えば Claude が cd コマンドを実行するとき。direnv などのツールを使用したリアクティブな環境管理に便利です |
DirectoryAdded |
/add-dir または SDK register_repo_root コントロールリクエスト経由でセッション中盤に作業ディレクトリが追加されるとき |
FileChanged |
監視対象ファイルがディスク上で変更されるとき。matcher フィールドは監視するファイル名を指定します |
WorktreeCreate |
--worktree、isolation: "worktree"、またはバックグラウンドセッション経由で worktree が作成されるとき。デフォルトの git 動作を置き換えます |
WorktreeRemove |
セッション終了時、サブエージェント終了時、またはバックグラウンドセッションを削除するときに worktree が削除されるとき |
PreCompact |
コンテキスト圧縮の前 |
PostCompact |
コンテキスト圧縮が完了した後 |
PreModelSwitch |
Claude Code があなたまたはクライアントがリクエストしたモデルスイッチを適用する前。スイッチをブロックできます |
PostModelSwitch |
セッションのモデルが変更された後、Claude Code が独自に行う変更(セッションを再開するときのモデル復元など)を含みます |
Elicitation |
MCP サーバーがツール呼び出し中にユーザー入力をリクエストするとき |
ElicitationResult |
ユーザーが MCP エリシテーションに応答した後、レスポンスがサーバーに送り返される前 |
SessionEnd |
セッションが終了するとき |
Hook タイプ:
command: シェルコマンドまたはスクリプトを実行http: イベント JSON を URL への POST リクエストとして送信mcp_tool: 設定された MCP サーバー 上のツールを呼び出すprompt: LLM でプロンプトを評価(コンテキスト用に$ARGUMENTSプレースホルダーを使用)agent: 複雑な検証タスク用にツール付きの agentic verifier を実行
プラグイン自身の バンドルされた MCP サーバー をターゲットとする hooks は、スコープ付き名を使用する必要があります。ツールマッチャーと if フィールドはスコープ付きツール名 mcp__plugin_<plugin-name>_<server-name>__<tool> を取り、mcp_tool hook の server フィールドは plugin:<plugin-name>:<server-name> を取ります。ベアサーバーキーに対して記述されたマッチャーは発火しません。MCP ツールをマッチ および プラグイン提供 MCP サーバー を参照してください。
MCP servers
プラグインは Model Context Protocol(MCP)サーバーをバンドルして、Claude Code を外部ツールおよびサービスに接続できます。
場所: プラグインルートの .mcp.json、または plugin.json 内のインライン
形式: 標準 MCP サーバー設定
MCP サーバー設定:
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
},
"plugin-api-client": {
"command": "npx",
"args": ["@company/mcp-server", "--plugin-mode"]
}
}
}
統合動作:
- プラグイン MCP サーバーはプラグインが有効になると自動的に起動します
- サーバーは Claude のツールキット内の標準 MCP ツールとして表示されます
- プラグインサーバーはユーザー MCP サーバーとは独立して設定できます
- セッション中に
/reload-pluginsを実行する場合、Claude Code は設定が変わらないサーバーのライブ接続を保持します
LSP servers
LSP プラグインを使用したいですか?公式マーケットプレイスからインストールしてください。/plugin Discover タブで「lsp」を検索してください。このセクションでは、公式マーケットプレイスでカバーされていない言語用の LSP プラグインを作成する方法を説明しています。
プラグインは Language Server Protocol(LSP)サーバーを提供して、コードベースで作業する際に Claude に リアルタイムコード インテリジェンス を提供できます。
場所: プラグインルートの .lsp.json、または plugin.json 内のインライン
形式: 言語サーバー名をその設定にマップする JSON 設定
.lsp.json ファイル形式:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
plugin.json 内のインライン:
{
"name": "my-plugin",
"lspServers": {
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
}
必須フィールド:
| フィールド | 説明 |
|---|---|
command |
実行する LSP バイナリ(PATH に含まれている必要があります) |
extensionToLanguage |
ファイル拡張子を言語識別子にマップします |
オプションフィールド:
| フィールド | 説明 |
|---|---|
args |
LSP サーバーのコマンドライン引数 |
transport |
通信トランスポート: stdio(デフォルト)または socket。Claude Code は socket を受け入れますが、すべてのサーバーを stdio 経由で実行するため、stdout プロトコルルールがすべてのサーバーに適用されます |
env |
サーバー起動時に設定する環境変数 |
initializationOptions |
初期化中にサーバーに渡されるオプション |
settings |
workspace/didChangeConfiguration 経由で渡される設定 |
workspaceFolder |
サーバーのワークスペースフォルダーパス |
startupTimeout |
サーバー起動を待つ最大時間(ミリ秒) |
shutdownTimeout |
グレースフルシャットダウンを待つ最大時間(ミリ秒)。タイムアウトが経過すると、Claude Code はサーバープロセスを終了します。設定されていない場合、タイムアウトは適用されません |
restartOnCrash |
クラッシュ後にサーバーを再起動するかどうか。デフォルトは true。クラッシュしたサーバーを再起動する代わりに停止したままにするには false に設定します |
maxRestarts |
諦める前の最大再起動試行回数 |
diagnostics |
編集後に診断を Claude のコンテキストにプッシュするかどうか(デフォルト true)。コード ナビゲーションは保持しながら自動診断注入を抑制するには false に設定します |
restartOnCrash と shutdownTimeout には Claude Code v2.1.205 以降が必要です。v2.1.205 より前では、設定スキーマは両方のオプションを受け入れていましたが、どちらかを設定すると Claude Code はその LSP サーバーを起動時に完全にスキップしていました。理由は claude --debug 出力でのみ表示されます。
同じ拡張子の複数サーバー: 複数の有効な LSP サーバーが extensionToLanguage で同じファイル拡張子を宣言する場合、サーバーが 1 つのプラグインから来ているか異なるプラグインから来ているかに関わらず、最初に登録されたサーバーがその拡張子のファイルを処理し、他のサーバーは起動しません。/plugin インターフェイスは、アクティブなサーバーを持つプラグインに名前を付ける警告を表示します。
初期化に失敗したサーバー: Claude Code は、command または extensionToLanguage が見つからないなど、設定が無効なサーバーをスキップし、他の設定されたサーバーは起動します。claude --debug を実行して、サーバーがスキップされた理由を確認します。
スキップされたサーバーはそのファイル拡張子を要求しないため、同じ拡張子を宣言する別の有効なサーバー(同じプラグインまたは異なるプラグインから)がそれらのファイルを処理します。
ログ出力を stdout ではなく stderr に送信: Claude Code はサーバーの stdout をプロトコルメッセージとしてのみ読み取り、メッセージヘッダーは最大 64 KiB、メッセージボディは最大 32 MiB を受け入れます。Claude Code は、どちらかの制限を超えるか、非プロトコル出力を stdout に書き込むサーバーを切断し、その切断を restartOnCrash と maxRestarts のクラッシュとしてカウントします。--debug で実行する場合、Claude Code は原因に名前を付けるエラーをデバッグログに書き込みます。
言語サーバーバイナリを別途インストールする必要があります。 LSP プラグインは Claude Code が言語サーバーに接続する方法を設定しますが、サーバー自体は含まれていません。/plugin Errors タブに Executable not found in $PATH が表示される場合は、言語に必要なバイナリをインストールしてください。
利用可能な LSP プラグイン:
| プラグイン | 言語サーバー | インストールコマンド |
|---|---|---|
pyright-lsp |
Pyright(Python) | pip install pyright または npm install -g pyright |
typescript-lsp |
TypeScript Language Server | npm install -g typescript-language-server typescript |
rust-analyzer-lsp |
rust-analyzer | rust-analyzer インストール参照 |
言語サーバーをインストールしてから、マーケットプレイスからプラグインをインストールします。
Monitors
プラグインは、プラグインがアクティブな場合に Claude Code が自動的に起動するバックグラウンドモニターを宣言できます。各モニターはセッションの期間中シェルコマンドを実行し、すべての stdout 行を Claude に通知として配信するため、Claude は自分自身でウォッチを開始するよう求められることなく、ログエントリ、ステータス変更、またはポーリングイベントに反応できます。
プラグインモニターは Monitor ツール と同じメカニズムを使用し、その可用性制約を共有します。これらはインタラクティブ CLI セッションでのみ実行され、hooks と同じ信頼レベルでサンドボックス化されずに実行され、Monitor ツールが利用できないホストではスキップされます。
場所: プラグインルートの monitors/monitors.json、または plugin.json 内のインライン
形式: モニターエントリの JSON 配列
次の monitors/monitors.json はデプロイメントステータスエンドポイントとローカルエラーログを監視します。
[
{
"name": "deploy-status",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh",
"description": "Deployment status changes"
},
{
"name": "error-log",
"command": "tail -F ./logs/error.log",
"description": "Application error log",
"when": "on-skill-invoke:debug"
}
]
モニターをインラインで宣言するには、plugin.json の experimental.monitors を同じ配列に設定します。デフォルト以外のパスから読み込むには、experimental.monitors を "./config/monitors.json" などの相対パス文字列に設定します。モニターは 実験的コンポーネント です。
必須フィールド:
| フィールド | 説明 |
|---|---|
name |
プラグイン内で一意の識別子。プラグインが再読み込みされるか skill が再度呼び出されるときに重複プロセスを防ぎます |
command |
セッション作業ディレクトリで永続的なバックグラウンドプロセスとして実行されるシェルコマンド |
description |
監視対象の簡潔な説明。タスクパネルと通知サマリーに表示されます |
オプションフィールド:
| フィールド | 説明 |
|---|---|
when |
モニターが開始するタイミングを制御します。"always" はセッション開始時とプラグイン再読み込み時に開始し、デフォルトです。"on-skill-invoke:<skill-name>" はこのプラグイン内の名前付き skill が最初にディスパッチされるときに開始します |
command 値は パス置換 ${CLAUDE_PLUGIN_ROOT}、${CLAUDE_PLUGIN_DATA}、および ${CLAUDE_PROJECT_DIR} をサポートしており、環境からの任意の ${ENV_VAR} もサポートしています。スクリプトがプラグイン自身のディレクトリから実行される必要がある場合は、コマンドの前に cd "${CLAUDE_PLUGIN_ROOT}" && を付けます。
モニター command は ${user_config.*} 値を参照できません。コマンドはシェルを通じて実行されるため、Claude Code は値を置換する代わりに エラー でモニターを拒否します。モニタープロセスは CLAUDE_PLUGIN_OPTION_<KEY> 環境変数を受け取らないため、モニタースクリプトが所有する設定ファイルから値を読み取ります。
セッション中にプラグインを無効にする場合、Claude Code は既に実行中のモニターを停止しません。セッションが終了するときに停止します。
Themes
プラグインは、/theme に組み込みプリセットおよびユーザーのローカルテーマと一緒に表示されるカラーテーマを配布できます。テーマは themes/ 内の JSON ファイルで、base プリセットとカラートークンのスパース overrides マップを持ちます。テーマは 実験的コンポーネント です。
{
"name": "Dracula",
"base": "dark",
"overrides": {
"claude": "#bd93f9",
"error": "#ff5555",
"success": "#50fa7b"
}
}
ユーザーがプラグインテーマを選択すると、Claude Code は custom:<plugin-name>:<slug> をその設定に保存します。プラグインテーマは読み取り専用です。ユーザーが /theme でそれに対して Ctrl+E を押すと、Claude Code はそれを ~/.claude/themes/ にコピーして、編集できるようにします。
プラグインのインストールスコープ
プラグインをインストールする際に、プラグインが利用可能な場所と他のユーザーが使用できるかどうかを決定するスコープを選択します。
| スコープ | 設定ファイル | ユースケース |
|---|---|---|
user |
~/.claude/settings.json |
すべてのプロジェクト全体で利用可能な個人用プラグイン(デフォルト) |
project |
.claude/settings.json |
バージョン管理を通じて共有されるチームプラグイン |
local |
.claude/settings.local.json |
プロジェクト固有のプラグイン。Claude Code が設定を保存する際に gitignore される |
managed |
Managed settings | 管理されたプラグイン(読み取り専用、更新のみ) |
プラグインは、他の Claude Code 設定と同じスコープシステムを使用します。インストール手順とスコープフラグについては、プラグインのインストールを参照してください。スコープの完全な説明については、設定スコープを参照してください。
スキルディレクトリプラグイン
スキルディレクトリの下にあるフォルダで .claude-plugin/plugin.json マニフェストを含むフォルダは、次のセッションで <name>@skills-dir という名前のプラグインとして読み込まれます。マーケットプレイスもインストール手順もありません。plugin init でスキャフォルドできます。コピーされたマーケットプレイスインストールとは異なり、プラグインはプラグインキャッシュにコピーされるのではなく、その場で検出されます。
スキルディレクトリツリーは 3 つの異なるものをサポートしています。
| 内容 | 説明 |
|---|---|
マニフェストなしの <skills-dir>/foo/SKILL.md |
foo という名前の通常の スキル |
<skills-dir>/foo/.claude-plugin/plugin.json |
プラグイン foo@skills-dir。独自のスキル、エージェント、hooks などをバンドルできます |
<plugin>/skills/bar/SKILL.md |
プラグイン内にパッケージされたスキル bar |
プラグインの読み込み元を選択する
| スキルディレクトリ | スコープ | 読み込み |
|---|---|---|
~/.claude/skills/ |
個人 | すべてのプロジェクトで読み込まれます。この場所はあなた自身のものだからです |
<cwd>/.claude/skills/ |
プロジェクト | そのフォルダのワークスペース 信頼ダイアログ を受け入れた後のみ |
プロジェクトスコープのプラグインはリポジトリにチェックインされ、それをクローンしたすべての協力者に到達します。そのコンテンツはあなたではなくリポジトリから来ているため、.claude/settings.json のプロジェクト許可ルールを管理するのと同じ信頼ゲートの後にのみ読み込まれます。親フォルダを信頼したり -p で実行したりするだけでは不十分で、コードを実行するコンポーネントはさらに制限されます。
- 宣言する MCP サーバーはプロジェクト
.mcp.jsonと同じ サーバーごとの承認 を通過します - LSP サーバーはワークスペースを信頼した後にのみ開始します
- バックグラウンドモニター は読み込まれません
個人スコープのプラグインにはこれらの制限はありません。
プロジェクトスコープの @skills-dir プラグインはセッションの プライマリワーキングディレクトリ の .claude/skills/ からのみ読み込まれます。通常のスキルとコマンドのように リポジトリルートまで遡りません。そのため、サブディレクトリから起動するとリポジトリルートにあるプラグインが見つかりません。リポジトリルートから起動するか、v2.1.246 以降で /cd でセッションをそこに移動 してください。
スキルディレクトリプラグインを編集、リロード、無効化する
スキルの SKILL.md に加えた変更は現在のセッションで即座に有効になります。プラグインの他のコンポーネント(hooks/、.mcp.json、agents/、output-styles/ など)への変更は有効になりません。/reload-plugins を実行するか Claude Code を再起動してそれらを反映させてください。ライブ変更検出 を参照してください。
スキルディレクトリプラグインの読み込みを停止するには、そのフォルダを削除するか、名前で無効化します。マーケットプレイスからインストールされていないため、uninstall ステップはありません。
claude plugin disable my-tool@skills-dir
claude.ai から同期されたプラグイン
Claude Code は claude.ai アカウント用に有効化されたプラグインを読み込みます。これには、組織がメンバー向けに有効化するプラグインと、マーケットプレイスからインストールするプラグインが含まれます。各プラグインを ~/.claude/plugins/synced/ にダウンロードし、<name>@synced として読み込みます。マーケットプレイスはなく、インストール記録もありません。同期されたプラグインは、インストールしたマーケットプレイスプラグインと同じ信頼レベルで実行されます。スキル、エージェント、フック、MCP サーバー、LSP サーバーはすべて読み込まれます。
Claude Code がこれらのプラグインを同期する場所はセッションによって異なります。
- Cowork とクラウドセッションでは、Claude Code はセッション開始時にセッション独自の環境にダウンロードします。v2.1.239 より前では、Claude Code はこれらのプラグインを
<name>@inlineとして読み込んでいました。これは--plugin-dirプラグインが使用する ID です。 - claude.ai アカウントでサインインするターミナルセッションでは、Claude Code は起動時にアカウントを 1 回チェックし、新しいプラグインと更新されたプラグインをダウンロードし、ユーザーまたは組織がオフにしたプラグインを削除します。すべてバックグラウンドで実行されます。ターミナルセッションでの同期には Claude Code v2.1.273 以降が必要です。
起動チェックはバックグラウンドで実行されるため、セッション開始後に完了することがあります。インタラクティブセッションで同期されたプラグインを追加、更新、または削除する場合、Claude Code は Plugins changed. Run /reload-plugins to activate. と表示します。/reload-plugins を実行してそのセッションで変更を読み込むか、次回 Claude Code を起動するまで待つことができます。セッション実行中に claude.ai でプラグインを有効化した場合、Claude Code は次回起動時にダウンロードします。
ターミナルセッションでのプラグイン同期は、claude.ai から同期されたスキルと同じサインイン条件下で実行されます。また、Claude Code がアカウントのプラグインにアクセスできるようにするサインインが必要です。
Claude Code の以前のバージョンからのサインインは、Claude Code がバックグラウンドでそのサインインを更新する次回(数時間以内)、または /login を再度実行した場合はすぐに、プラグインアクセスを取得します。その後、Claude Code を起動する次回にプラグイン同期が開始されます。
claude plugin list は同期されたプラグインを Synced from claude.ai という見出しの下に表示し、/plugin Installed タブはソースとして synced を使用してリストアップします。claude plugin list が出力する <name>@synced ID で同期されたプラグインを管理します。
- 1 つをオフにする:
claude plugin disable <name>@syncedを実行するか、/pluginInstalled タブから無効化します。Claude Code はこの選択をユーザーレベルのenabledPluginsに"<name>@synced": falseとして保存します。プラグインを再度オンにするには、claude plugin enable <name>@syncedを実行します。 - すべての場所から除外する: claude.ai アカウント用にプラグインをオフにします。すべての環境で 1 つのプロジェクトから除外するには、そのプロジェクトのコミットされた
.claude/settings.jsonのenabledPluginsの下に"<name>@synced": falseを設定します。 - claude.ai でプラグイン自体を管理する:
claude plugin install、update、uninstallは同期されたプラグインには適用されません。Claude Code はプラグインの更新を次の同期時にダウンロードします。削除するには、claude.ai アカウント用にプラグインをオフにし、Claude Code は次の同期時に削除します。 - マシンでの同期を停止する: ユーザー設定で
syncClaudeAiPluginsをfalseに設定します。Claude Code はダウンロードを停止し、次回起動時に既に同期したプラグインを~/.claude/plugins/.trash/に移動し、それ以上読み込みません。組織はマネージド設定で同じキーを設定するか、claude.ai でスキルをオフにすることができます。これはプラグインの同期も停止します。
組織が claude.ai で必須とマークしたプラグインをオフにすることはできません。Claude Code は以前無効化した場合でも読み込み、claude plugin disable は Plugin "<name>@synced" is required by your organization and can't be disabled here. Contact your admin to change it. で拒否します。claude plugin list では、これらのプラグインは required by your org とマークされています。
他のソースからの有効化されたプラグインが同期されたプラグインの名前と一致する場合、Claude Code はそのプラグインを読み込み、同期されたコピーが読み込まれていないと報告します。他のソースにはマーケットプレイスインストール、スキルディレクトリプラグイン、--plugin-dir プラグイン、Claude Code に組み込まれたプラグインが含まれます。claude.ai のコピーを代わりに使用するには、独自のコピーを無効化します。v2.1.239 より前では、Claude Code は同じ名前のマーケットプレイスインストールの代わりに同期されたコピーを読み込んでいました。
プラグインマニフェストスキーマ
.claude-plugin/plugin.json ファイルはプラグインのメタデータと設定を定義します。
マニフェストはオプションです。省略した場合、Claude Code はデフォルトの場所のコンポーネントを自動検出し、ディレクトリ名からプラグイン名を導出します。メタデータまたはカスタムコンポーネントパスを提供する必要がある場合は、マニフェストを使用してください。
完全なスキーマ
{
"name": "plugin-name",
"displayName": "Plugin Name",
"version": "1.2.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "author@example.com",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"metadata": { "catalogId": "cat-123", "tier": "pro" },
"skills": "./custom/skills/",
"commands": ["./custom/commands/special.md"],
"agents": ["./custom/agents/reviewer.md"],
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"outputStyles": "./styles/",
"lspServers": "./.lsp.json",
"experimental": {
"themes": "./themes/",
"monitors": "./monitors.json",
"evals": "quality/evals"
},
"dependencies": [
"helper-lib",
{ "name": "secrets-vault", "version": "~2.1.0" }
]
}
必須フィールド
マニフェストを含める場合、name は唯一の必須フィールドです。
| フィールド | 型 | 説明 | 例 |
|---|---|---|---|
name |
string | ケバブケースの一意の識別子。スペース、制御文字、双方向フォーマット文字を含みません。マーケットプレイスエントリがプラグインを別の名前でリストする場合、マーケットプレイスエントリ名が enabledPlugins キーと /plugin で使用されます |
"deployment-tools" |
この名前はコンポーネントの名前空間化に使用されます。たとえば、UI では、名前が plugin-dev のプラグインのエージェント agent-creator は plugin-dev:agent-creator として表示されます。
認識されないフィールド
Claude Code は認識しないトップレベルフィールドを無視します。別のエコシステムからのメタデータを plugin.json に保持でき、プラグインは引き続き読み込まれます。これにより、VS Code または Cursor 拡張マニフェスト、npm package.json、または MCPB/DXT バンドルマニフェストとして機能する 1 つのマニフェストを保守することが実用的になります。
claude plugin validate は認識されないフィールドを警告として報告し、エラーではありません。フィールドが認識されたフィールドから 1 文字または 2 文字異なる場合、警告は意図された名前を示唆します。認識されないフィールド警告のみを持つプラグインは検証に合格し、実行時に読み込まれます。
Claude Code が値の型が間違っている認識されたフィールドを処理する方法は、フィールドによって異なります。
- ほとんどのフィールド: プラグインは読み込みに失敗します。たとえば、文字列の代わりに配列である
keywords値は読み込みエラーであり、claude plugin validateはそれをエラーとして報告します。 experimentalとmetadata: Claude Code は非オブジェクト値を無視し、claude plugin validateは警告を報告します。
--strict を渡して、警告をエラーとして扱います。CI で使用して、公開前に別のツールのマニフェストから残された綴り間違いのフィールド名またはフィールドをキャッチします。プラグインは実行時に読み込まれますが。
claude plugin validate ./my-plugin --strict
メタデータフィールド
| フィールド | 型 | 説明 | 例 |
|---|---|---|---|
$schema |
string | エディタのオートコンプリートと検証用の JSON Schema URL。Claude Code は読み込み時にこのフィールドを無視します。 | "https://json.schemastore.org/claude-code-plugin-manifest.json" |
displayName |
string | /plugin ピッカーおよび他の UI サーフェスに表示される人間が読める名前。マーケットプレイスにインストールされたプラグインの場合、マーケットプレイスエントリの displayName はこの値より優先されます。どちらの場所にも表示名が設定されていない場合、ユーザーは name を見ます。name とは異なり、スペースと任意の大文字小文字を含むことができます。名前空間化またはルックアップには使用されません。 |
"Deployment Tools" |
version |
string | オプション。セマンティックバージョン。これを設定するとプラグインをそのバージョン文字列にピン留めするため、ユーザーはバージョンをバンプしたときにのみ更新を受け取ります。command ソースまたはプラグイン読み込み中を除きます。バージョン管理を参照してください。マーケットプレイスエントリにも設定されている場合、plugin.json が優先されます。省略した場合、バージョンはバージョン管理の次のソースから取得されます。 |
"2.1.0" |
description |
string | プラグインの目的の簡潔な説明 | "Deployment automation tools" |
author |
object | 著者情報 | {"name": "Dev Team", "email": "dev@company.com"} |
homepage |
string | ドキュメント URL | "https://docs.example.com" |
repository |
string | ソースコード URL | "https://github.com/user/plugin" |
license |
string | ライセンス識別子 | "MIT"、"Apache-2.0" |
keywords |
array | 検出タグ | ["deployment", "ci-cd"] |
metadata |
object | 権利付与またはカタログフィールドなど、独自のデータ用の自由形式オブジェクト。Claude Code はこれを読まないため、値はプラグインの動作に影響しません。Claude Code は非オブジェクト値を無視し、claude plugin validate は警告として報告します。v2.1.222 より前では、Claude Code はキーを認識されないフィールドとして扱いました。 |
{"catalogId": "cat-123"} |
defaultEnabled |
boolean | ユーザーが設定を設定していない場合、プラグインが有効な状態で開始するかどうか。デフォルトは true です。デフォルト有効化を参照してください。 |
false |
デフォルト有効化
plugin.json で defaultEnabled: false を設定して、無効な状態でインストールされるプラグインを配布します。ユーザーは claude plugin enable <plugin> または /plugin インターフェースでオンにします。外部サービスに接続するものなど、ユーザーがオプトインすべきコストまたはスコープを追加するプラグインに使用します。
defaultEnabled は、他に何もプラグインの状態を決定していない場合のフォールバックです。ユーザーの設定と依存関係の要件が優先されます。
- ユーザーの設定: 任意の設定スコープで
enabledPluginsのプラグインのエントリ。一度書き込まれると、プラグイン更新と再インストール全体で永続化されるため、後のリリースでdefaultEnabledを変更しても既存ユーザーは反転しません。 - 依存関係の要件: プラグインがアクティブな別のプラグインによって必要とされる場合、Claude Code はインストール時または有効化時に
trueを書き込みます。これにより明示的な設定が与えられるため、独自のデフォルトはもはや適用されません。依存関係を持つプラグインを有効または無効にするを参照してください。
同じフィールドはプラグインのマーケットプレイスエントリに表示でき、plugin.json の値より優先されます。オプションプラグインフィールドを参照してください。
コンポーネントパスフィールド
| フィールド | 型 | 説明 | 例 |
|---|---|---|---|
skills |
string|array | <name>/SKILL.md を含むカスタムスキルディレクトリ。デフォルト skills/ スキャンに追加します。マーケットプレイスルート例外についてはパス動作ルールを参照してください |
"./custom/skills/" |
commands |
string|array | カスタムフラット .md スキルファイルまたはディレクトリ(デフォルト commands/ を置き換え) |
"./custom/cmd.md" または ["./cmd1.md"] |
agents |
string|array | カスタムエージェントファイル(デフォルト agents/ を置き換え) |
"./custom/agents/reviewer.md" |
workflows |
string|array | カスタムワークフロースクリプトファイルまたはディレクトリ(デフォルト workflows/ を置き換え) |
"./custom/workflows/" |
hooks |
string|array|object | フック設定パスまたはインライン設定 | "./my-extra-hooks.json" |
mcpServers |
string|array|object | MCP 設定パスまたはインライン設定 | "./my-extra-mcp-config.json" |
outputStyles |
string|array | カスタム出力スタイルファイル/ディレクトリ(デフォルト output-styles/ を置き換え) |
"./styles/" |
lspServers |
string|array|object | コード知能(定義へのジャンプ、参照の検索など)用の言語サーバープロトコル設定 | "./.lsp.json" |
experimental.themes |
string|array | カラーテーマファイル/ディレクトリ(デフォルト themes/ を置き換え)。テーマを参照してください |
"./themes/" |
experimental.monitors |
string|array | プラグインがアクティブな場合に自動的に開始するバックグラウンドMonitor設定。モニターを参照してください | "./monitors.json" |
experimental.evals |
string|array | デフォルト evals/ ではない場合、プラグインのeval ケースを保持するプラグインルート下のディレクトリ。claude plugin eval --eval-dir はこれをオーバーライドします |
"quality/evals" |
userConfig |
object | ユーザーが有効化時にプロンプトされる設定可能な値。ユーザー設定を参照してください | |
channels |
array | メッセージ注入用のチャネル宣言(Telegram、Slack、Discord スタイル)。チャネルを参照してください | |
dependencies |
array | このプラグインが必要とする他のプラグイン。オプションで semver バージョン制約付き。プラグイン依存関係バージョンを制約するを参照してください | [{ "name": "secrets-vault", "version": "~2.1.0" }] |
実験的コンポーネント
experimental キー、themes および monitors の下のコンポーネントは、安定化中にリリース間でマニフェストスキーマが変更される可能性があります。それらを宣言する場所は別の移行です。トップレベルはまだ機能し、claude plugin validate は警告を出し、将来のリリースは experimental.* を必要とします。
ユーザー設定
userConfig フィールドは、プラグインが有効化されたときに Claude Code がユーザーにプロンプトする値を宣言します。ユーザーに settings.json を手動で編集させる代わりにこれを使用してください。
{
"userConfig": {
"api_endpoint": {
"type": "string",
"title": "API endpoint",
"description": "Your team's API endpoint"
},
"api_token": {
"type": "string",
"title": "API token",
"description": "API authentication token",
"sensitive": true
}
}
}
キーは有効な識別子である必要があります。各オプションはこれらのフィールドをサポートします。
| フィールド | 必須 | 説明 |
|---|---|---|
type |
はい | string、number、boolean、directory、または file のいずれか |
title |
はい | 設定ダイアログに表示されるラベル |
description |
はい | フィールドの下に表示されるヘルプテキスト |
sensitive |
いいえ | true の場合、入力をマスクし、値を settings.json の代わりにセキュアストレージに保存します |
required |
いいえ | true の場合、フィールドが空の場合は検証が失敗します |
default |
いいえ | ユーザーが何も提供しない場合に使用される値 |
options |
いいえ | string 型の場合、フィールドが受け入れる値。/config にピッカーとして表示されます。フィールドを固定オプションに制限するを参照してください。Claude Code v2.1.271 以降が必要です |
multiple |
いいえ | string 型の場合、文字列の配列を許可します |
min / max |
いいえ | number 型の境界 |
sensitive フィールドと multiple リストを除き、有効な各プラグインの各フィールドは /config パネルの行としても表示されます。行には Claude Code v2.1.269 以降が必要です。
各値は MCP および LSP サーバー設定とフックコマンドで ${user_config.KEY} として置換可能です。機密でない値はスキルおよびエージェントコンテンツでも置換できます。すべての値は、<KEY> がオプションキーを大文字にしたフックプロセスに CLAUDE_PLUGIN_OPTION_<KEY> 環境変数としてエクスポートされます。
シェルで実行されるフィールドは ${user_config.*} を拒否します。設定された値をシェルコマンドに置換すると、シェルはその値に含まれるものを実行できるため、コンポーネントはエラーで失敗します。拒否された各フィールドには、値を渡す別の方法があります。
| 拒否されたフィールド | 値を渡す方法 |
|---|---|
| シェル形式フックコマンド | exec 形式を args で使用するか、フックの環境から CLAUDE_PLUGIN_OPTION_<KEY> を読み取ります |
| Monitorコマンド | スクリプトの設定ファイルから値を読み取ります |
MCP headersHelper |
スクリプトの設定ファイルから値を読み取ります |
v2.1.207 より前では、これらのフィールドは ${user_config.KEY} 値を置換しました。これに依存していたプラグインを更新してください。
機密でない値は、ユーザー settings.json の pluginConfigs キーの下に pluginConfigs[<plugin-id>].options として保存されます。
macOS では、Claude Code は macOS キーチェーンに機密値を保存し、キーチェーンが書き込みを拒否した場合は ~/.claude/.credentials.json にフォールバックします。サポートされているキーチェーンのないプラットフォームでは、~/.claude/.credentials.json に保存されます。キーチェーンストレージは OAuth トークンと共有され、約 2 KB の合計制限があるため、機密値を小さく保ちます。
Claude Code は 3 つの設定ソースからのみすべての pluginConfigs 値を読み取ります。
- ユーザー設定:
~/.claude/settings.json。有効化時プロンプトが書き込むファイル --settings: CLI フラグまたは SDK インライン設定- 管理設定: 組織制御ポリシー
複数のソースが同じキーを設定する場合、管理設定が優先され、次に --settings、次にユーザー設定が優先されます。このリストから削除できる唯一のソースはユーザー設定です。--setting-sources を user なしで渡し、Claude Code はそれらをスキップします。管理設定と --settings は渡すものが何であれ保持されます。SDK の settingSourcesオプションは同じリストを設定します。
プロジェクトの .claude/settings.json または .claude/settings.local.json のエントリは無視されます。両方のファイルはワークスペースに存在するため、クローンされたリポジトリはそこに値を提供でき、それらの値はプラグインフックコマンド、MCP サーバー設定、LSP コマンド、およびモニターコマンドに流れます。v2.1.207 より前では、これらのエントリが読み取られました。制限は pluginConfigs に固有です。enabledPluginsはまだプロジェクトおよびローカル設定を尊重します。
フィールドを固定オプションに制限する
userConfig フィールドに options を設定して、ユーザーが固定リストからその値を選択するようにします。
tone フィールドを 3 つのオプションに制限するには、options にそれらをリストし、default をそのうちの 1 つに設定します。
{
"userConfig": {
"tone": {
"type": "string",
"title": "Tone",
"description": "Voice for generated replies",
"options": ["neutral", "warm", "formal"],
"default": "neutral"
}
}
}
任意のフィールドで options を宣言する場合、Claude Code v2.1.271 より前のバージョンのユーザーはプラグインを読み込むことができません。
フィールドに options を設定する場合、これらのルールに従います。
typeをstringに設定しますmultipleまたはsensitiveをtrueに設定しませんdefaultをオプションの 1 つに設定しますdefaultを設定しない場合は、requiredをtrueに設定します- 少なくとも 1 つのオプションをリストし、各 1 〜 64 文字の長さです
- オプションをスペースで開始または終了しません
- 制御文字、非表示文字、テキスト方向を変更する文字、またはオプション内の通常のスペース以外のスペースを使用しません
- 異なる大文字小文字でも同じオプションを 2 回リストしません
これらのルールのいずれかを破った場合、プラグインは読み込みに失敗します。claude plugin validate を実行して、どのフィールドがどのルールを破るかを確認してください。
チャネル
channels フィールドを使用すると、プラグインは会話にコンテンツを注入する 1 つ以上のメッセージチャネルを宣言できます。各チャネルはプラグインが提供する MCP サーバーにバインドされます。
{
"channels": [
{
"server": "telegram",
"userConfig": {
"bot_token": {
"type": "string",
"title": "Bot token",
"description": "Telegram bot token",
"sensitive": true
},
"owner_id": {
"type": "string",
"title": "Owner ID",
"description": "Your Telegram user ID"
}
}
}
]
}
server フィールドは必須で、プラグインの mcpServers のキーと一致する必要があります。オプションのチャネルごとの userConfig はトップレベルフィールドと同じスキーマを使用し、プラグインがプラグイン有効化時にボットトークンまたはオーナー ID をプロンプトできるようにします。
パス動作ルール
カスタムパスがプラグインのデフォルトディレクトリを置き換えるか拡張するかは、フィールドによって異なります。
- デフォルトを置き換え:
commands、agents、workflows、outputStyles、experimental.themes、experimental.monitors。たとえば、マニフェストがcommandsを指定する場合、デフォルトcommands/ディレクトリはスキャンされません。デフォルトを保持してさらに追加するには、明示的にリストします。"commands": ["./commands/", "./extras/"] - デフォルトに追加:
skills。デフォルトskills/ディレクトリは常にスキャンされ、skillsにリストされているディレクトリはそれと一緒に読み込まれます。例外: ソースがマーケットプレイスルートに解決されるマーケットプレイスエントリの場合、特定のサブディレクトリを宣言するとデフォルトskills/スキャンが置き換わります - 独自のマージルール: フック、MCP サーバー、および LSP サーバー。各セクションで複数のソースがどのように結合されるかを参照してください
プラグインにデフォルトフォルダと一致するマニフェストキーの両方がある場合、Claude Code は claude plugin list と /plugin 詳細ビューで無視されたフォルダについて警告します。プラグインはマニフェストパスを使用して引き続き読み込まれます。マニフェストキーがデフォルトフォルダを指す場合、Claude Code は警告しません。たとえば "commands": ["./commands/deploy.md"] は、そのパスがフォルダを明示的に名前付けするためです。
すべてのパスフィールドについて。
- すべてのパスはプラグインルートに相対的で
./で始まる必要があります。ただし、skillsフィールドは.も受け入れます"."と"./"の両方はプラグインルート自体を示します- v2.1.221 より前では、
"."はマニフェスト検証に失敗し、プラグインは読み込まれなかったため、"./"を使用して以前のバージョンをサポートします
- カスタムパスのコンポーネントは、エージェントファイルを除き、同じ命名および名前空間化ルールを使用します。エージェント名がどのように機能するかについてはエージェントを参照してください
- 複数のパスは配列として指定できます
- スキルパスは
SKILL.mdを直接含むディレクトリを指すことができます。たとえば、プラグインルートの場合は"skills": ["."]- Claude Code は
SKILL.mdのフロントマターnameフィールドからスキルの呼び出し名を取得するため、インストールディレクトリの名前が何であれ、名前は安定したままです - フロントマターで
nameが設定されていない場合、Claude Code はディレクトリベース名にフォールバックします
- Claude Code は
ルートに SKILL.md があり、skills/ サブディレクトリがなく、skills マニフェストフィールドがないプラグインは、単一スキルプラグインとして自動的に読み込まれます。このレイアウトの場合、plugin.json で "skills": ["./"] を設定する必要はありません。
パスの例:
{
"commands": [
"./specialized/deploy.md",
"./utilities/batch-process.md"
],
"agents": [
"./custom-agents/reviewer.md",
"./custom-agents/tester.md"
]
}
環境変数
Claude Code はパスを参照するための 3 つの変数を提供します。
| 変数 | 解決先 | 用途 |
|---|---|---|
${CLAUDE_PLUGIN_ROOT} |
プラグインのインストールディレクトリへの絶対パス | プラグインにバンドルされたスクリプト、バイナリ、および設定ファイル |
${CLAUDE_PLUGIN_DATA} |
プラグイン更新を超えて存続する永続ディレクトリ。最初の参照時に作成されます | node_modules または Python 仮想環境などのインストール済み依存関係、生成されたコード、およびキャッシュ |
${CLAUDE_PROJECT_DIR} |
プロジェクトルート | プロジェクトローカルスクリプトおよび設定ファイル |
3 つすべてが環境変数としてフックプロセスおよび MCP と LSP サーバーサブプロセスにエクスポートされます。これらはメインセッションまたはサブエージェントで Bash ツールを通じて Claude が実行するコマンドの環境には存在しません。プラグインコンテンツで、プレースホルダーを書き込み、Claude Code はコンテンツを読み込むときにパスをインラインで置換します。どのフィールドがそれらをインラインで置換するかは、プラグインコンポーネントによって異なります。
| プラグインコンポーネント | プレースホルダーが解決されるフィールド |
|---|---|
| スキルおよびエージェントコンテンツ | プレースホルダーが表示される任意の場所 |
| フックおよびモニターコマンド | プレースホルダーが表示される任意の場所 |
MCP stdio サーバー |
command、args、env |
MCP http、sse、ws サーバー |
url、headers、headersHelper |
| LSP サーバー | command、args、env、workspaceFolder |
フックコマンドで、exec 形式を args で使用して、各パスが引用符なしで 1 つの引数として渡されるようにします。シェル形式フックおよびモニターコマンドで、"${CLAUDE_PROJECT_DIR}/scripts/server.sh" のように変数をダブルクォートで囲みます。このシェル形式フックはプラグインにバンドルされたスクリプトを実行します。
{
"hooks": {
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"
}
]
}
]
}
}
コピーされたプラグインの場合、${CLAUDE_PLUGIN_ROOT} はプラグインが更新されるときに変更されます。前のバージョンのディレクトリは更新後の猶予期間ディスク上に残りますが、それを一時的なものとして扱い、そこに状態を書き込まないでください。ローカルディレクトリマーケットプレイスから読み込まれたプラグインの場合、変数は安定したソースディレクトリを指します。どのプラグインがコピーされるか、およびクリーンアップセマンティクスについては、プラグインキャッシングを参照してください。
コピーされたプラグインがセッション中に更新される場合、フックコマンド、モニター、MCP サーバー、および LSP サーバーは前のバージョンのパスを使用し続けます。/reload-plugins を実行して、フック、MCP サーバー、および LSP サーバーを新しいパスに切り替えます。モニターはセッション再開が必要です。インタラクティブターミナルのないセッションでは、リロードはプラグイン MCP サーバーを次のセッションまで古いパスに残します。
command ソースを持つプラグインの場合、Claude Code はプラグイン自体を再読み込みできます。
MCP サーバーは roots/list リクエストを呼び出して、実行時にセッションの作業ディレクトリを読み取ることもできます。roots/list が返すもの、および Claude Code がサーバーに変更を通知するときを参照してください。
永続データディレクトリ
${CLAUDE_PLUGIN_DATA} ディレクトリは ~/.claude/plugins/data/{id}/ に解決されます。ここで {id} はプラグイン識別子で、a-z、A-Z、0-9、_、および - の外の文字は - に置き換えられます。formatter@my-marketplace としてインストールされたプラグインの場合、ディレクトリは ~/.claude/plugins/data/formatter-my-marketplace/ です。
一般的な用途は、言語依存関係を 1 回インストールし、セッションとプラグイン更新全体で再利用することです。Python 依存関係、Yarn または pnpm でロックされた依存関係、およびライフサイクルスクリプトを実行する必要があるパッケージに使用します。マーケットプレイスにインストールされたプラグインの場合、それをまったく必要としない場合があります。Claude Code はキャッシュ時に適格なNode.js パッケージ依存関係を自動的にインストールします。
データディレクトリは単一のプラグインバージョンより長く存続するため、ディレクトリ存在チェックだけでは、更新がプラグインの依存関係マニフェストを変更したときを検出できません。推奨パターンはバンドルされたマニフェストをデータディレクトリのコピーと比較し、異なる場合は再インストールします。
この SessionStart フックは最初の実行時に node_modules をインストールし、プラグイン更新に変更された package.json が含まれるたびに再度インストールします。
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
}
]
}
]
}
}
diff は保存されたコピーが見つからないか、バンドルされたコピーと異なる場合にゼロ以外で終了し、最初の実行と依存関係変更更新の両方をカバーします。npm install が失敗した場合、末尾の rm はコピーされたマニフェストを削除して、次のセッションが再試行されるようにします。
${CLAUDE_PLUGIN_ROOT} にバンドルされたスクリプトは、永続化された node_modules に対して実行できます。
{
"mcpServers": {
"routines": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
"env": {
"NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"
}
}
}
}
データディレクトリは、最後のスコープからプラグインをアンインストールするときに自動的に削除されます。/plugin インターフェースはディレクトリサイズを表示し、削除前にプロンプトします。CLI はデフォルトで削除します。--keep-dataを渡して保持します。
プラグインのキャッシングとファイル解決
プラグインは以下の 3 つの方法のいずれかで指定されます。
claude --plugin-dirまたはclaude --plugin-urlを通じて、セッションの期間中。- マーケットプレイスを通じて、今後のセッション用にインストール。
- claude.ai アカウントを通じて、同期されて
~/.claude/plugins/synced/に。
セキュリティと検証の目的で、Claude Code はマーケットプレイス プラグインをユーザーのローカル プラグインキャッシュ (~/.claude/plugins/cache)にコピーします。ただし、プラグインがインプレイスでロードされる場合を除きます。リンクモードの command ソースはキャッシュエントリ内のリンクを通じてインプレイスでロードされます。ローカルディレクトリから追加されたマーケットプレイスの相対パスソースはマーケットプレイスフォルダからインプレイスでロードされます。
ローカルディレクトリマーケットプレイスからインプレイスでロードされたプラグインの場合、ソースディレクトリへの編集は次のセッション開始時または /reload-plugins で有効になります。バージョンバンプは不要です。プラグインのフックプロセスと MCP および LSP サーバーは、ソースディレクトリを指す CLAUDE_PLUGIN_ROOT を受け取ります。Claude Code はプラグインの Node.js パッケージ依存関係をソースディレクトリにインストールしません。それらを自分でインストールするか、永続データディレクトリへのフックからインストールしてください。
コピーされたプラグインの場合、インストールされた各バージョンはキャッシュ内の個別のディレクトリであり、マーケットプレイスとプラグインでグループ化され、解決されたバージョンに対して名前が付けられ、プラグインのファイルと Node.js パッケージ依存関係の独自のコピーを持ちます。リリースタグから解決された依存関係は、コミット SHA サフィックス付きのディレクトリ名を取得します。
プラグインを更新またはアンインストールすると、Claude Code は前のバージョンディレクトリを孤立したものとしてマークし、約 14 日後のバックグラウンドスイープで削除します。猶予期間により、既に古いバージョンをロードした同時実行中の Claude Code セッションがエラーなく実行を続けることができます。Claude Code はスイープを実行するのは、少なくとも 1 つのプラグインがインストールされている場合のみです。最後のプラグインをアンインストールした後、孤立したディレクトリはディスク上に残り、プラグインを再度インストールするまで保持されます。
Claude Code は、プラグインまたはマーケットプレイスフォルダをキャッシュから削除するのは、ディレクトリまたはシンボリックリンクが含まれなくなった場合のみです。開発チェックアウトをキャッシュにシンボリックリンクとしてプラグインのバージョンエントリにリンクする場合、Claude Code はリンクを孤立したものとしてマークすることはなく、削除することもなく、それを保持するフォルダも削除しません。Claude Code はリンクされたチェックアウト内にバージョン追跡ファイルを書き込むこともありません。
Claude の Glob および Grep ツールは検索中に孤立したバージョンディレクトリをスキップするため、ファイル結果には古いプラグインコードが含まれません。
Node.js パッケージ依存関係
Claude Code がプラグインをキャッシュにコピーするとき、プラグインの Node.js パッケージ依存関係もそこにインストールするため、プラグインのフックと MCP サーバーはそれらをロードできます。このセクションでは、プラグインが独自の package.json で宣言する npm および Bun パッケージについて説明します。他のプラグインに依存するプラグインについては、プラグイン依存関係バージョンを参照してください。
Claude Code は、コピーされたバージョンディレクトリを作成するたびに、その内部でインストールを実行します。プラグインをインストールするとき、Claude Code がプラグインを新しいバージョンに更新するとき、および有効なプラグインがまだキャッシュされていない場合のセッション開始時(新しいマシンなど)です。インストールは、プラグインのルートディレクトリに package.json とサポートされているロックファイルの両方が含まれている場合にのみ実行されます。
| ロックファイル | コマンド |
|---|---|
bun.lock または bun.lockb |
bun install --frozen-lockfile --ignore-scripts |
npm-shrinkwrap.json または package-lock.json |
npm ci --ignore-scripts |
プラグインにこれらのロックファイルが複数含まれている場合、Claude Code は最初のマッチを使用し、順序をチェックします。bun.lock、bun.lockb、npm-shrinkwrap.json、package-lock.json。
Claude Code は 2 つのケースでインストールをスキップします。それぞれ独自の修正があります。
- プラグインが
yarn.lockまたはpnpm-lock.yamlのみを配布している場合は、npm ロックファイルに置き換えてください。 bunfig.tomlが bun ロックファイルの横にある場合は、bunfig.tomlを削除するか、bun ロックファイルを npm ロックファイルに置き換えてください。
最も広いリーチのために npm ロックファイルを配布してください。Claude Code はマッチされたロックファイルのパッケージマネージャーをユーザーの PATH から実行し、ロックファイルが見つからない場合は他のロックファイルにフォールバックしません。npm ソースを通じて配布されるプラグインの場合は、npm-shrinkwrap.json を使用してください。npm は公開されたパッケージから package-lock.json を除外します。
Claude Code はこの依存関係インストールを制約して、プラグインまたはそのパッケージからのコードがインストール中に実行されず、実行時間が制限されます。
- 凍結された解決: Bun と npm はロックファイルがピンしたものを正確にインストールし、
package.jsonとロックファイルが一致しない場合は再解決するのではなく失敗します。 - ライフサイクルスクリプトなし:
--ignore-scriptsはpreinstall、install、およびpostinstallスクリプトが実行されないようにするため、これらのスクリプトでネイティブモジュールをビルドする依存関係はダウンロードされますが、このインストール中にはコンパイルされません。 - 60 秒のタイムアウト: Claude Code は実行時間が長いインストールを停止し、失敗として扱います。
Claude Code は npm ソースプラグインをこの依存関係インストールの前にフェッチし、このフェッチ中にパッケージ独自のインストールスクリプトは実行されません。npm パッケージを参照してください。
失敗またはスキップされたインストールはプラグインをブロックすることはありません。インストールが失敗した場合、または Claude Code が yarn または pnpm ロックファイルをスキップした場合、または bunfig.toml が横にある場合、理由は デバッグ出力の警告として記録されます。package.json とロックファイルがないプラグインはログエントリなしでスキップされます。タイムアウトしたインストールは、キャッシュされたコピーに部分的な node_modules ツリーを残すことができます。
自動インストールをオフにすることはできません。設定または環境変数はそれを無効にしません。制限されたネットワークでは、ネットワークアクセス要件を参照して、許可するホストを確認してください。
自動インストールが提供できない依存関係(ライフサイクルスクリプトをビルドする必要があるパッケージ、Python 依存関係、または Yarn または pnpm でロックされたプラグインなど)については、永続データディレクトリへのフックからインストールしてください。
パストラバーサルの制限
Claude Code はプラグインが独自のディレクトリ外のファイルを参照することを許可しません。プラグインルートの外に解決されるコンポーネントパスを拒否します。パスが plugin.json で宣言されているか、マーケットプレイスエントリで宣言されているかに関わらず。これは、../shared-utils などのように書かれたプラグインの外を指すパス、および 1 つのマーケットプレイス内のリンク以外のプラグインの外につながるシンボリックリンクをカバーします。
macOS と Linux では、Claude Code はコンポーネントパスにバックスラッシュが含まれている場合も拒否します。バックスラッシュパスで宣言されたコンポーネントは、Windows でのみロードされます。./commands/deploy.md などのようにフォワードスラッシュを使用してコンポーネントパスを記述してください。
Claude Code がパスを拒否すると、path escapes plugin directory エラーを報告し、そのコンポーネントなしでプラグインをロードします。
Claude Code はプラグインをインストールするときにプラグインディレクトリ外のファイルをキャッシュにコピーしないため、コピーされたプラグイン内のスクリプトがプラグインルート上のパスを読み取る場合、それらのファイルも見つかりません。
シンボリックリンクを使用してマーケットプレイス内でファイルを共有する
プラグインが同じマーケットプレイスの他の部分とファイルを共有する必要がある場合は、プラグインディレクトリ内にシンボリックリンクを作成できます。プラグインがキャッシュにコピーされるときにシンボリックリンクがどのように処理されるかは、そのターゲットがどこに解決されるかによって異なります。
- プラグイン独自のディレクトリ内: シンボリックリンクはキャッシュ内の相対シンボリックリンクとして保持されるため、実行時にコピーされたターゲットへの解決を続けます。
- 同じマーケットプレイス内の他の場所: シンボリックリンクは逆参照されます。ターゲットのコンテンツはキャッシュにコピーされます。これにより、メタプラグインの
skills/ディレクトリがマーケットプレイス内の他のプラグインで定義されたスキルにリンクできます。 - マーケットプレイス外: シンボリックリンクはセキュリティのためスキップされます。これにより、プラグインがシステムパスなどの任意のホストファイルをキャッシュに取り込むことを防ぎます。
--plugin-dir でインストールされたプラグイン、ローカルパスから、または コピーモードの command ソースから、プラグイン独自のディレクトリ内で解決されるシンボリックリンクのみが保持されます。その他はすべてスキップされます。
次のコマンドは、マーケットプレイスプラグイン内から、兄弟プラグインで定義された共有スキルへのリンクを作成します。Windows では、昇格されたコマンドプロンプトから mklink /D を使用するか、開発者モードを有効にしてください。
ln -s ../../shared-plugin/skills/foo ./skills/foo
プラグインディレクトリ構造
標準プラグインレイアウト
完全なプラグインは以下の構造に従います:
enterprise-plugin/
├── .claude-plugin/ # メタデータディレクトリ(オプション)
│ └── plugin.json # プラグインマニフェスト
├── skills/ # Skills
│ ├── code-reviewer/
│ │ └── SKILL.md
│ └── pdf-processor/
│ ├── SKILL.md
│ └── scripts/
├── commands/ # Skills をフラット .md ファイルとして
│ ├── status.md
│ └── logs.md
├── agents/ # Subagent 定義
│ ├── security-reviewer.md
│ ├── performance-tester.md
│ ├── compliance-checker.md
│ └── review/ # ここのエージェントは enterprise-plugin:review:<name> として読み込まれます
│ └── accessibility.md
├── workflows/ # ワークフロースクリプト
│ └── release-audit.js
├── output-styles/ # 出力スタイル定義
│ └── terse.md
├── themes/ # カラーテーマ定義
│ └── dracula.json
├── monitors/ # バックグラウンドモニター設定
│ └── monitors.json
├── hooks/ # Hook 設定
│ ├── hooks.json # メイン hook 設定
│ └── security-hooks.json # 追加 hooks
├── bin/ # プラグイン実行ファイルが PATH に追加される
│ └── my-tool # Bash tool で裸のコマンドとして呼び出し可能
├── settings.json # プラグインのデフォルト設定
├── .mcp.json # MCP サーバー定義
├── .lsp.json # LSP サーバー設定
├── scripts/ # Hook とユーティリティスクリプト
│ ├── security-scan.sh
│ ├── format-code.py
│ └── deploy.js
├── LICENSE # ライセンスファイル
└── CHANGELOG.md # バージョン履歴
.claude-plugin/ ディレクトリには plugin.json ファイルが含まれます。その他すべてのディレクトリ(commands/、agents/、skills/、workflows/、output-styles/、themes/、monitors/、hooks/)は .claude-plugin/ 内ではなく、プラグインルートに配置する必要があります。
プラグインルートの CLAUDE.md ファイルはプロジェクトコンテキストとして読み込まれません。プラグインは CLAUDE.md ではなく、skills、agents、hooks を通じてコンテキストを提供します。Claude のコンテキストに読み込まれる命令を配布するには、skill に配置してください。
ファイルロケーション参照
| コンポーネント | デフォルトロケーション | 目的 |
|---|---|---|
| マニフェスト | .claude-plugin/plugin.json |
プラグインメタデータと設定(オプション) |
| Skills | skills/ |
<name>/SKILL.md 構造の Skills |
| コマンド | commands/ |
フラット Markdown ファイルとしての Skills。新しいプラグインには skills/ を使用してください |
| Agents | agents/ |
Subagent Markdown ファイル。サブフォルダはエージェント名の一部です |
| ワークフロー | workflows/ |
ワークフロー スクリプトファイル |
| 出力スタイル | output-styles/ |
出力スタイル定義 |
| テーマ | themes/ |
カラーテーマ定義 |
| Hooks | hooks/hooks.json |
Hook 設定 |
| MCP サーバー | .mcp.json |
MCP サーバー定義 |
| LSP サーバー | .lsp.json |
言語サーバー設定 |
| モニター | monitors/monitors.json |
バックグラウンドモニター設定 |
| 実行ファイル | bin/ |
Bash tool の PATH に追加され、プラグインが有効な間は裸のコマンドとして呼び出し可能な実行ファイル。claude.ai 組織設定を通じて配布するプラグインにはこのディレクトリを含めることはできません |
| 設定 | settings.json |
プラグインが有効になったときに適用されるデフォルト設定。agent と subagentStatusLine キーのみがサポートされています |
CLI コマンドリファレンス
Claude Code は、非対話的なプラグイン管理用の CLI コマンドを提供します。スクリプトとオートメーションに便利です。
plugin init
~/.claude/skills/<name>/ に新しいプラグインをスキャフォルドします。次の Claude Code セッションで、<name>@skills-dir として自動的に読み込まれ、/plugin と claude plugin list に表示されます。インストール手順は不要です。
スキルディレクトリプラグインのスコープと信頼要件を参照してください。
claude plugin init <name> [options]
コマンドは以下の引数を取ります:
<name>: プラグイン名。スキル名前空間と~/.claude/skills/の下のディレクトリ名になるため、スペースやパス区切り文字を含めることはできません。
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
--description <text> |
マニフェストの説明 | |
--author <name> |
作成者名 | git config user.name |
--author-email <email> |
作成者メール | git config user.email |
--with <components...> |
コンポーネントフォルダもスキャフォルドします。有効な値: skills、agents、hooks、mcp、lsp、output-style、channel |
|
-f, --force |
ターゲットの既存 .claude-plugin/ を上書きします |
|
-h, --help |
コマンドのヘルプを表示 |
claude plugin new はこのコマンドのエイリアスです。
各 --with 値は、そのコンポーネント用のスターターファイルを追加し、編集可能な状態にします:
| コンポーネント | スキャフォルドされるもの |
|---|---|
skills |
デフォルトのスキルと並んで、追加の名前空間付き <name>:example スキル |
agents |
agents/ サブエージェント定義 |
hooks |
サンプルイベントハンドラを含む hooks/hooks.json |
mcp |
HTTP と stdio サーバーの例を含む .mcp.json |
lsp |
.lsp.json 言語サーバーの例 |
output-style |
プラグインが有効な間に自動的に適用される output-styles/<name>.md |
channel |
MCP ベースのチャネル: stdio サーバー(server.ts)、その .mcp.json、および package.json |
スキャフォルドされたプラグインは、マーケットプレイスではなく @skills-dir ソースを使用します。管理者は strictKnownMarketplaces でこのソースをブロックするか、管理設定の blockedMarketplaces に {"source": "skills-dir"} を追加することでブロックできます。ブロックされている場合、plugin init は書き込み前に失敗します。
これらの例は一般的な呼び出しを示しています:
# 最小限のプラグインをスキャフォルド
claude plugin init my-helper
# スキルとフックフォルダを含めてスキャフォルド
claude plugin init my-helper --with skills hooks
# 既存のスキャフォルドを上書き
claude plugin init my-helper --force
plugin install
利用可能なマーケットプレイスからプラグインをインストールします。
claude plugin install <plugin> [options]
コマンドは以下の引数を取ります:
<plugin>: プラグイン名、または特定のマーケットプレイス用のplugin-name@marketplace-name
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-s, --scope <scope> |
インストールスコープ: user、project、または local |
user |
--config <key=value> |
プラグインのマニフェストで宣言されたuserConfigオプションを設定します。複数のオプションを設定するにはフラグを繰り返します |
|
-y, --yes |
確認プロンプトなしで、プラグインのマーケットプレイスが宣言するコマンドを受け入れます: command ソースを持つプラグインを生成するコマンド、またはアーカイブダウンロードを認証するheadersHelper。headersHelper を受け入れるには Claude Code v2.1.238 以降が必要です。Claude Code はまずコマンドを出力します。stdin または stdout が TTY でない場合は必須です。Claude Code セッション内では効果がないため、独自のターミナルからコマンドを実行してください |
|
--accept-command <sha256> |
前の--json 実行が shownCommand で報告した sha256 を持つマーケットプレイス宣言コマンドを受け入れます。-y の代わりに使用します。受け入れは、正確にそのコマンド、プラグイン、およびマーケットプレイスカタログに対してカウントされます。コマンドが表示されてから変更された場合(実行自体のマーケットプレイス更新を含む)、Claude Code はダイジェストを受け入れず、コマンドを再度表示します。-y と組み合わせることはできません。Claude Code セッション内では効果がないため、独自のターミナルからコマンドを実行してください。Claude Code v2.1.271 以降が必須です |
|
--json |
結果を stdout の最後の行に 1 つの JSON オブジェクトとして出力します。スクリプトで使用するための人間が読める形式の代わりに。JSON 結果形式を参照してください。Claude Code v2.1.268 以降が必須です | |
-h, --help |
コマンドのヘルプを表示 |
スコープは、インストールされたプラグインが追加される設定ファイルを決定します。たとえば、--scope project は .claude/settings.json の enabledPlugins に書き込み、プロジェクトリポジトリをクローンした全員がプラグインを利用できるようにします。
--json を使用すると、stdout の最後の行は 1 つの JSON オブジェクトです。マーケットプレイスが宣言するコマンドが前に出力される可能性があるため、その行のみを解析してください。3 つのフィールドは常に存在します:
command: 実行されたサブコマンド(installなど)outcome:okまたはfailedmessage: 結果の人間が読める説明
pluginId、scope、failureCode などの他のフィールドは、適用される場合にのみ表示されます。plugin uninstall、plugin update、plugin enable、および plugin disable の --json オプションは、そのサブコマンド独自のフィールドを持つ同じオブジェクトを出力します。--scope が無効な場合などの使用エラーは、結果行を出力せず、終了コード 1 で理由を stderr に出力します。
実行がマーケットプレイス宣言コマンドを表示し、それを実行しない場合、failed 結果は、表示されたコマンド、それが属するプラグイン、およびコマンドの sha256 を含むフィールドを持つ shownCommand オブジェクトも含みます。正確にそのコマンドを受け入れるには、その sha256 を --accept-command として再実行します。Claude Code v2.1.271 以降が必須です。
shownCommand.acceptCommandMatched が false の場合、渡したダイジェストは現在表示されているコマンドと一致しません。そのコマンドを人に見せてから、その sha256 を渡してください。
これらの例は一般的な呼び出しを示しています:
# ユーザースコープにインストール(デフォルト)
claude plugin install formatter@my-marketplace
# プロジェクトスコープにインストール(チームと共有)
claude plugin install formatter@my-marketplace --scope project
# ローカルスコープにインストール(チームと共有しない)
claude plugin install formatter@my-marketplace --scope local
plugin uninstall
インストール済みプラグインを削除します。
claude plugin uninstall <plugin> [options]
コマンドは以下の引数を取ります:
<plugin>: プラグイン名、またはplugin-name@marketplace-name
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-s, --scope <scope> |
スコープからアンインストール: user、project、または local |
user |
--keep-data |
プラグインの永続データディレクトリを保持します | |
--prune |
他のプラグインが必要としない自動インストール依存関係も削除します。plugin prune を参照 | |
-y, --yes |
--prune 確認プロンプトをスキップします。stdin または stdout が TTY でない場合は必須 |
|
--json |
結果を stdout の最後の行に 1 つの JSON オブジェクトとして出力します。plugin install --jsonと同じ形式で。--prune と組み合わせることはできません。Claude Code v2.1.268 以降が必須です |
|
-h, --help |
コマンドのヘルプを表示 |
claude plugin remove と claude plugin rm はこのコマンドのエイリアスです。
デフォルトでは、最後に残ったスコープからアンインストールすると、プラグインの ${CLAUDE_PLUGIN_DATA} ディレクトリも削除されます。新しいバージョンをテストした後に再インストールする場合など、保持するには --keep-data を使用します。
異なるマーケットプレイスからインストールされたプラグインが同じ名前を共有する場合、plugin-name@marketplace-name 形式は指定されたマーケットプレイスからのプラグインのみをアンインストールします。v2.1.212 より前は、修飾形式は異なるマーケットプレイスから同じ名前のプラグインにマッチしてアンインストールする可能性がありました。
plugin prune
インストール済みプラグインによって不要になった自動インストール依存関係を削除します。Claude Code が別のプラグインのdependenciesフィールドを満たすために取得した依存関係は削除されます。直接インストールしたプラグインは決して削除されません。
claude plugin prune [options]
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-s, --scope <scope> |
スコープでプルーン: user、project、または local |
user |
--dry-run |
削除せずに削除されるものをリストします | |
-y, --yes |
確認プロンプトをスキップします。stdin または stdout が TTY でない場合は必須 | |
-h, --help |
コマンドのヘルプを表示 |
claude plugin autoremove はこのコマンドのエイリアスです。
コマンドは孤立した依存関係をリストし、削除前に確認を求めます。プラグインを削除し、その依存関係をワンステップでクリーンアップするには、claude plugin uninstall <plugin> --prune を実行します。
plugin enable
無効なプラグインを有効にします。ターゲットがマーケットプレイスからインストールされ、依存関係を宣言している場合、Claude Code は同じスコープで推移的にそれらを有効にします。コマンドは依存関係を持つプラグインを有効または無効にするがリストする条件下で失敗します。
claude plugin enable <plugin> [options]
コマンドは以下の引数を取ります:
<plugin>: プラグイン名、plugin-name@marketplace-name、またはclaude.ai から同期されたプラグイン用のplugin-name@synced
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-s, --scope <scope> |
有効にするスコープ: user、project、または local。省略した場合、Claude Code はプラグインがインストールされているスコープを検出します |
自動検出 |
--json |
結果を stdout の最後の行に 1 つの JSON オブジェクトとして出力します。plugin install --jsonと同じ形式で。Claude Code v2.1.268 以降が必須です |
|
-h, --help |
コマンドのヘルプを表示 |
plugin disable
プラグインをアンインストールせずに無効にします。
ターゲットがマーケットプレイスからインストールされている場合、別の有効なプラグインがそれに依存している場合、コマンドは失敗します。エラーメッセージには、最初にすべての依存プラグインを無効にするチェーンコマンドが含まれます。
組織が必須とする同期プラグインの場合、コマンドは失敗し、何も保存しません。
claude plugin disable [plugin] [options]
コマンドは以下の引数を取ります:
[plugin]: プラグイン名、plugin-name@marketplace-name、またはclaude.ai から同期されたプラグイン用のplugin-name@synced。--allを使用する場合はオプション
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-a, --all |
すべての有効なプラグインを無効にします。--scope と組み合わせることはできません |
|
-s, --scope <scope> |
無効にするスコープ: user、project、または local。省略した場合、Claude Code はプラグインがインストールされているスコープを検出します |
自動検出 |
--json |
結果を stdout の最後の行に 1 つの JSON オブジェクトとして出力します。plugin install --jsonと同じ形式で。Claude Code v2.1.268 以降が必須です |
|
-h, --help |
コマンドのヘルプを表示 |
plugin update
プラグインを最新バージョンに更新します。
claude plugin update <plugin> [options]
コマンドは以下の引数を取ります:
<plugin>: プラグイン名、またはplugin-name@marketplace-name
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-s, --scope <scope> |
更新するスコープ: user、project、local、または managed |
user |
-y, --yes |
確認プロンプトなしで、プラグインのマーケットプレイスが宣言するコマンドを受け入れます: command ソースを持つプラグインを生成するコマンド、またはアーカイブダウンロードを認証するheadersHelper。headersHelper を受け入れるには Claude Code v2.1.238 以降が必要です。Claude Code はまずコマンドを出力します。stdin または stdout が TTY でない場合は必須です。Claude Code セッション内では効果がないため、独自のターミナルからコマンドを実行してください |
|
--accept-command <sha256> |
前の--json 実行が shownCommand で報告した sha256 を持つマーケットプレイス宣言コマンドを受け入れます。-y の代わりに使用します。受け入れは、正確にそのコマンド、プラグイン、およびマーケットプレイスカタログに対してカウントされます。コマンドが表示されてから変更された場合(実行自体のマーケットプレイス更新を含む)、Claude Code はダイジェストを受け入れず、コマンドを再度表示します。-y と組み合わせることはできません。Claude Code セッション内では効果がないため、独自のターミナルからコマンドを実行してください。Claude Code v2.1.271 以降が必須です |
|
--json |
結果を stdout の最後の行に 1 つの JSON オブジェクトとして出力します。plugin install --jsonと同じ形式で。Claude Code v2.1.268 以降が必須です |
|
-h, --help |
コマンドのヘルプを表示 |
Claude Code は、インストール済みプラグインに対して修飾されていないプラグイン名を解決します。異なるマーケットプレイスからインストールされたプラグインが名前を共有する場合、Claude Code は更新を拒否し、代わりに実行する修飾 plugin-name@marketplace-name コマンドをリストします。v2.1.246 より前は、Claude Code は修飾形式のみを受け入れ、修飾されていない名前を見つからないものとして拒否していました。
plugin list
インストール済みプラグインをバージョン、ソースマーケットプレイス、および有効状態と共にリストします。
claude plugin list [options]
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
--json |
JSON として出力します。読み込み問題またはオーサリング警告を含むプラグイン行は errors または notes 文字列配列を含みます。Claude Code v2.1.268 以降では、並列 errorDetails および noteDetails 配列は各エントリの診断 type と、プラグイン、マーケットプレイス、サーバー、またはファイルなど、それが参照する名前を提供します |
|
--available |
マーケットプレイスから利用可能なプラグインを含めます。--json が必須 |
|
-h, --help |
コマンドのヘルプを表示 |
対話的セッション内では、/plugin list は同様のリストをインラインで出力しますが、マーケットプレイスからインストールされたプラグインのみをカバーします:
- スキルディレクトリから読み込まれたプラグインは
/pluginインターフェイスとclaude plugin listに表示されますが、インラインの/plugin list出力には表示されません。 - claude.ai から同期されたプラグインは Claude Code v2.1.239 以降で
claude plugin listに表示され、/pluginインターフェイスに表示されますが、インラインの/plugin list出力には表示されません。 --plugin-dirまたは--plugin-urlでセッション用に読み込まれたプラグインは/pluginインターフェイスに表示され、claude --plugin-dir <dir> plugin listのように同じフラグがサブコマンドの前にある場合にのみclaude plugin listに表示されます。フラグ名のみがそれらの場所を指定するため、修飾されていないclaude plugin listは同期されたプラグインとスキルディレクトリプラグインとは異なり、Claude Code がスキャンする固定ディレクトリを持たないため、それらを見つけることができません。
対話的形式は、--enabled または --disabled を受け入れてそのスタイルのプラグインのみを表示し、ls を list の短縮形として受け入れます。
plugin details
プラグインのコンポーネント在庫と予想トークンコストを表示します。出力は、プラグインが提供するすべてのコンポーネントをスキル、エージェント、フック、MCP サーバー、および LSP サーバーとしてグループ化し、各セッションに追加するトークン数の推定値を含めてリストします。スキルグループには skills/ と commands/ エントリの両方が含まれます。
claude plugin details <name>
コマンドは以下の引数を取ります:
<name>: プラグイン名、またはplugin-name@marketplace-name
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
-h, --help |
コマンドのヘルプを表示 |
出力は各コンポーネントの 2 つのコスト数値を表示します:
- 常時オン: スキル説明、エージェント説明、コマンド名など、プラグインのリストテキストによってすべてのセッションに追加されるトークン。コンポーネントが発火するかどうかに関係なく。
- 呼び出し時: コンポーネントが発火するときにコンポーネントがコストするトークン。プラグイン全体ではなくコンポーネントごとに表示されます。典型的なセッションはコンポーネントのサブセットのみを呼び出すため。
この例は、2 つのスキルを持つプラグインの出力がどのように見えるかを示しています:
dependency-guard 1.2.0
Dependency analysis for Claude Code sessions
Source: dependency-guard@example-marketplace
Component inventory
Skills (2) scan-dependencies, review-changes
Agents (0)
Hooks (1) SessionStart (harness-only — no model context cost)
MCP servers (0)
LSP servers (0)
Projected token cost
Always-on: ~180 tok added to every session
Per-component (rounded)
component always-on on-invoke
scan-dependencies ~100 ~2400
review-changes ~80 ~1800
On-invoke cost is paid each time a skill or agent fires.
Token counts are estimates and may differ from actual usage.
常時オンの合計は、アクティブなモデルの count_tokens API を介して計算されます。コンポーネントごとの数値はその合計から比例的にスケーリングされます。API に到達できない場合、コマンドは文字ベースの推定値にフォールバックします。
plugin validate
公開前にプラグインまたはマーケットプレイスの構文とスキーマエラーをチェックします。
検証が成功すると終了コード 0、失敗すると 1、検証実行自体が失敗した場合(渡したパスが読み取り不可能な場合など)は 2 で終了します。
claude plugin validate <path> [options]
コマンドは以下の引数を取ります:
<path>: プラグインディレクトリまたはマーケットプレイスディレクトリへのパス。プラグイン実行がカバーするファイルについては、マニフェストなしでプラグインまたはディレクトリを検証を参照してください。
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
--strict |
警告をエラーとして扱い、それらで終了コード 1 で終了します。CI で使用して、認識されないフィールドなど、ランタイムが許容する問題をキャッチします | |
--json |
検証レポートを同じ終了コードを持つ 1 つの JSON オブジェクトとして出力します。Claude Code v2.1.259 以降が必須 | |
-h, --help |
コマンドのヘルプを表示 |
--json を使用すると、Claude Code はレポートを stdout に 1 つの JSON オブジェクトとして書き込み、これらのトップレベルフィールドを持ちます:
success: 終了コードが与える同じ判定strict: 実行が警告をエラーとして扱ったかどうかtarget: Claude Code が検証した解決されたパスmanifest: マニフェスト自体の結果、またはマニフェストなしの実行の場合はnullcontents: ファイルごとの結果。各結果はfileを指定し、errors、warnings、およびnotes配列を含みます
終了コード 2 では、コマンドは stdout に何も書き込みません。エラーメッセージは stderr に送られます。
対話的セッション内では、/plugin validate <path> は同じチェックをインラインで実行します。
plugin eval
プラグインのeval ケースを実行し、スコア付き結果をレポートします。Claude Code v2.1.269 以降が必須です。各ケースはプロンプトとグレーダーです。Claude Code はターゲットプラグインのみが読み込まれた分離されたセッションで複数回実行し、デフォルトではプラグインなしでも実行するため、レポートは差を示します。ケース形式、グレーダー、結果、および CI 使用については、プラグインを eval でテストするを参照してください。
claude plugin eval [target] [options]
オプションの target は、プラグインディレクトリ、単一の prompt.md または case.yaml ファイル、name または name@marketplace としてインストールされたプラグイン、または name@skills-dir であり、デフォルトは現在のディレクトリです。--tag、--allow-tools、および --json の前に配置します。
このテーブルは、ほとんどの実行が使用するオプションをリストします。claude plugin eval --help を実行して、--case、--tag、--output-dir、--report、--allow-real-servers、--keep-temp、および --verbose を含む完全なセットを確認してください。
| オプション | 説明 | デフォルト |
|---|---|---|
--runs <n> |
アーム当たりケース当たりの実行 | 各ケースの runs、それ以外は 3 |
-j, --concurrency <n> |
一度に実行するエージェントセッション、1 から 8。レート制限を共有します | 1 |
--model <model> |
テスト対象のエージェント用モデル | 各ケースの model、それ以外は ANTHROPIC_MODEL が設定されている場合はそれ、それ以外は Claude Code のデフォルト |
--judge-model <model> |
llm および baseline グレーダー用モデル |
小さく高速なモデル |
--ablation <mode> |
none または with-without。プラグインなしベースラインと比較するを参照 |
プラグインが解決される場合は with-without、それ以外は none |
--threshold <0..1> |
いずれかのケースがこれ以下でスコアされた場合は終了コード 1 | 1.0 |
--max-cost-usd <usd> |
支出がこれに達したら次の実行前に停止し、終了コード 2 を返し、部分的な結果をレポート | 上限なし |
--allow-tools <tools...> |
Bash、Write、Edit、または "mcp__plugin_<plugin>_<server>__*" など、読み取り専用セット以外のツールを付与します。ツールを付与するを参照 |
|
--scaffold |
各ケースのscaffold_scriptを実行 |
オフ |
--trust-plugin |
最初の実行信頼プロンプトをスキップします。CI 用。実行がアクセスできるものを参照 | オフ |
--mocks <mode> |
record または off。MCP サーバーをモックを参照 |
record |
--eval-dir <dir> |
ケースを保持するプラグイン下のディレクトリ | マニフェストの experimental.evals、それ以外は evals |
--json [path] |
結果ドキュメントを stdout に出力するか、.json パスに書き込み |
|
--no-publish |
HTML レポートをローカルに保持 | |
-h, --help |
コマンドのヘルプを表示 |
コマンドは、すべてのケースがしきい値を満たす場合は終了コード 0、失敗したケース、読み込みエラー、または信頼されていないプラグインディレクトリの場合は 1、部分的な実行の場合は 2、中断された場合は 130、終了された場合は 143 で終了します。CI で eval を実行するを参照してください。
plugin eval init
現在のディレクトリのプラグイン用の eval スイートを作成します。Claude Code v2.1.269 以降が必須です。ターミナルでは、これはプラグインを読み取り、ケースとグレーダーを提案し、それらをパイロットし、ファイルを書き込むオーサリングインタビューを開始します。--bare を使用するか、ターミナルなしで、代わりに空白の単一ケーステンプレートを書き込みます。対話的な Claude Code セッション内から実行すると、そのセッションが従うべきインタビュー指示を出力します。最初の eval スイートを作成するを参照してください。
claude plugin eval init [name] [options]
オプションの name はケース名です: インタビューは 1 つを必要としませんが、--bare とターミナルなしテンプレートパスはそれを必要とします。これらのオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
--bare |
インタビューを実行する代わりに、<name> 用の空白の prompt.md と graders/criteria.md を書き込み |
|
-i, --interactive |
インタビューを必須にします。テンプレートを書き込む代わりにターミナルなしで失敗 | |
--eval-dir <dir> |
ケースを書き込む現在のディレクトリ下のディレクトリ | マニフェストの experimental.evals、それ以外は evals |
-h, --help |
コマンドのヘルプを表示 |
plugin tag
プラグインのリリース git タグを作成します。デフォルトではコマンドは現在のディレクトリのプラグインにタグを付けます。別の場所のプラグインにタグを付けるにはパスを渡します。プラグインリリースにタグを付けるを参照してください。
claude plugin tag [path] [options]
コマンドは以下の引数を取ります:
[path]: プラグインディレクトリへのパス。デフォルトは現在のディレクトリです。
コマンドは以下のオプションを受け入れます:
| オプション | 説明 | デフォルト |
|---|---|---|
--push |
タグを作成した後、リモートにプッシュします | |
--dry-run |
タグを作成せずにタグ付けされるものを出力します | |
-f, --force |
ワーキングツリーがダーティであるか、タグが既に存在する場合でもタグを作成します | |
-m, --message <msg> |
タグアノテーションメッセージ。バージョンのプレースホルダーとして %s を使用します |
|
--remote <name> |
--push でプッシュするリモート |
origin |
-h, --help |
コマンドのヘルプを表示 |
デバッグと開発ツール
デバッグコマンド
claude --debug を使用してプラグインの読み込み詳細を確認します:
これにより以下が表示されます:
- どのプラグインが読み込まれているか
- プラグインマニフェストのエラー
- Skill、agent、hook の登録
- MCP サーバーの初期化
よくある問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| プラグインが読み込まれない | 無効な plugin.json |
claude plugin validate ./my-plugin または /plugin validate ./my-plugin を実行します。ここで ./my-plugin はプラグインディレクトリです。plugin.json、hooks/hooks.json、およびプラグインのデフォルトディレクトリ内の skill、agent、command のフロントマターの構文とスキーマエラーをチェックします。実行内容については プラグインまたはマニフェストなしのディレクトリを検証する を参照してください |
| Skill が表示されない | ディレクトリ構造が間違っている | skills/ または commands/ がプラグインルートにあることを確認します。.claude-plugin/ 内にはありません |
| Hook が発火しない | スクリプトが実行可能でない | chmod +x script.sh を実行します |
| MCP サーバーが失敗する | ${CLAUDE_PLUGIN_ROOT} が見つからない |
すべてのプラグインパスに変数を使用します |
| パスエラー | 絶対パスが使用されている | パスを相対パスにします。./ で始まります。パス動作ルール を参照してください。これは skills フィールドの "." 例外をカバーしています |
LSP Executable not found in $PATH |
言語サーバーがインストールされていない | バイナリをインストールします(例:npm install -g typescript-language-server typescript) |
エラーメッセージの例
マニフェスト検証エラー:
Invalid JSON syntax: Unexpected token } in JSON at position 142:コンマの欠落、余分なコンマ、またはクォートされていない文字列がないか確認してくださいPlugin <name> has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Invalid input: expected string, received undefined:必須フィールドが見つかりませんPlugin <name> has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...:JSON 構文エラー。v2.1.246 より前では、Claude Code は UTF-8 で保存され、バイト順マーク(BOM)が先頭にあるplugin.jsonに対してもこのエラーを生成していました。JSON が有効な場合でも同様です。
プラグイン読み込みエラー:
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.:コマンドパスは存在しますが、有効なコマンドファイルが含まれていませんPlugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.:marketplace.json のsourceパスが存在しないディレクトリを指していますPlugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.:重複するコンポーネント定義を削除するか、marketplace エントリからstrict: falseを削除します
Hook のトラブルシューティング
Hook スクリプトが実行されない:
- スクリプトが実行可能であることを確認します:
chmod +x ./scripts/your-script.sh - shebang 行を確認します:最初の行は
#!/bin/bashまたは#!/usr/bin/env bashである必要があります - パスが
${CLAUDE_PLUGIN_ROOT}を使用していることを確認します:"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh" - スクリプトを手動でテストします:
./scripts/your-script.sh
Hook が予期されたイベントでトリガーされない:
- イベント名が正しいことを確認します(大文字と小文字を区別):
postToolUseではなくPostToolUse - マッチャーパターンがツールと一致することを確認します:ファイル操作の場合は
"matcher": "Write|Edit" - hook タイプが有効であることを確認します:
command、http、mcp_tool、prompt、またはagent
MCP サーバーのトラブルシューティング
サーバーが起動しない:
- コマンドが存在し、実行可能であることを確認します
- すべてのパスが
${CLAUDE_PLUGIN_ROOT}変数を使用していることを確認します - MCP サーバーログを確認します:
claude --debugは初期化エラーを表示します - Claude Code の外部でサーバーを手動でテストします
サーバーツールが表示されない:
- サーバーが
.mcp.jsonまたはplugin.jsonで正しく設定されていることを確認します - サーバーが MCP プロトコルを正しく実装していることを確認します
- デバッグ出力で接続タイムアウトを確認します
ディレクトリ構造の間違い
症状:プラグインは読み込まれますが、コンポーネント(skill、agent、hook)が見つかりません。
正しい構造:コンポーネントはプラグインルートにある必要があります。.claude-plugin/ 内にはありません。plugin.json のみが .claude-plugin/ に属します。
デバッグチェックリスト:
claude --debugを実行し、「loading plugin」メッセージを探します- 各コンポーネントディレクトリがデバッグ出力に表示されていることを確認します
- ファイルのアクセス許可がプラグインファイルの読み取りを許可していることを確認します
配布とバージョン管理リファレンス
バージョン管理
Claude Code はプラグインのバージョンをキャッシュキーとして使用し、アップデートが利用可能かどうかを判断します。/plugin update を実行するか自動アップデートが実行されると、Claude Code は現在のバージョンを計算し、既にインストールされているものと一致する場合はアップデートをスキップします。ローカルディレクトリマーケットプレイスから所定の場所に読み込まれたプラグインは、バージョン文字列が何を示していても、セッション開始時に現在のソースファイルを読み込みます。
command 以外のすべてのソースタイプについて、Claude Code は以下の最初に設定されたものからバージョンを解決します。
- プラグインの
plugin.jsonのversionフィールド marketplace.jsonのプラグインのマーケットプレイスエントリのversionフィールド- git ホストマーケットプレイス内の
github、url、git-subdir、および相対パスソースのプラグインの git コミット SHA archiveソースの SHA-256 ダイジェスト。マーケットプレイスエントリのsha256ピン、またはピンを設定しない場合はダウンロードされたファイルのダイジェスト。Claude Code はこれを最初の 12 文字に短縮しますnpmソースまたは git リポジトリ内にないローカルディレクトリの場合はunknown。Claude Code は、~/.claudeのような git 管理されたインストールパスを囲むリポジトリからバージョンを取得しません
command ソースの場合、Claude Code は常にコマンドが生成したものからバージョンを導出します。単独の 12 文字のコンテンツハッシュ、または 1 つが設定されている場合は plugin.json バージョンに <version>-<hash> として追加されます。Claude Code はコマンドソースのマーケットプレイスエントリの version フィールドを無視します。ハッシュされた出力が変更されるコマンドは、作成されたバージョン文字列が同じままでも、新しいバージョンを生成します。リンクモードでは、ハッシュはファイルコンテンツではなく、印刷されたディレクトリの実際のパスとそのトップレベルエントリをカバーします。
これらのソースタイプについて、プラグインをバージョン管理する 3 つの方法があります。
| アプローチ | 方法 | アップデート動作 | 最適な用途 |
|---|---|---|---|
| 明示的なバージョン | plugin.json で "version": "2.1.0" を設定 |
ユーザーはこのフィールドをバンプした場合のみアップデートを取得します。バンプせずに新しいコミットをプッシュしても効果がなく、/plugin update は「既に最新バージョンです」と報告します。所定の場所に読み込まれたプラグインの場合、新しいコンテンツは読み込まれます。 |
安定したリリースサイクルを持つ公開プラグイン |
| コミット SHA バージョン | plugin.json とマーケットプレイスエントリの両方から version を省略 |
ユーザーはソースの解決されたコミットが変更されるたびにアップデートを取得します | アクティブに開発中の内部またはチームプラグイン |
| ダイジェストバージョン | archive ソースを使用し、plugin.json とマーケットプレイスエントリの両方から version を省略 |
sha256 ピンを使用する場合、ユーザーはピンを変更するとアップデートを取得します。ピンがない場合、ユーザーはホストされている zip ファイルのバイトが変更されるたびにアップデートを取得します |
静的サーバーまたはアーティファクトリポジトリに zip ファイルとして公開されるプラグイン |
明示的なバージョンを使用する場合は、セマンティックバージョニング(MAJOR.MINOR.PATCH)に従ってください。破壊的な変更の場合は MAJOR をバンプし、新機能の場合は MINOR をバンプし、バグ修正の場合は PATCH をバンプします。CHANGELOG.md で変更を文書化します。