Skip to main content
プラグインをインストールしたいですか?プラグインの検出とインストールを参照してください。プラグインの作成については、プラグインを参照してください。プラグインの配布については、プラグインマーケットプレイスを参照してください。
このリファレンスは、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 はシンプルなマークダウンファイルです。 Skill 構造:
統合動作:
  • Skills と commands はプラグインがインストールされると自動的に検出されます
  • Claude はタスクコンテキストに基づいて自動的にそれらを呼び出すことができます
  • Skills は SKILL.md の横にサポートファイルを含めることができます
プラグインに skills/ ディレクトリがなく、skills manifest フィールドがない場合、プラグインルートの SKILL.md は単一の skill として読み込まれます。frontmatter の name フィールドを設定して、skill の呼び出し名を制御します。これがない場合、Claude Code はインストールディレクトリ名にフォールバックします。マーケットプレイスからインストールされたプラグインの場合、これは更新のたびに変わるバージョン文字列です。複数の skill を配布するプラグインの場合は、上記の skills/ ディレクトリレイアウトを使用してください。 詳細については、Skillsを参照してください。

Agents

プラグインは、特定のタスク用の特化した subagents を提供できます。Claude は必要に応じて自動的にそれらを呼び出すことができます。 場所: プラグインルートの agents/ ディレクトリ ファイル形式: エージェント機能を説明するマークダウンファイル Agent 構造:
プラグインエージェントは namedescriptionmodeleffortmaxTurnstoolsdisallowedToolsskillsmemorybackgroundisolation frontmatter フィールドをサポートしています。唯一の有効な isolation 値は "worktree" です。セキュリティ上の理由から、hooksmcpServerspermissionMode はプラグイン提供のエージェントではサポートされていません。 統合ポイント:
  • Agents は @-mention typeahead に、my-plugin:code-reviewer などのスコープ付き名の下に表示されます。プラグインが有効になると
  • Claude はタスクコンテキストに基づいて自動的にエージェントを呼び出すことができます
  • Agents はユーザーが手動で呼び出すことができます
  • プラグインエージェントは組み込みの Claude エージェントと一緒に動作します
詳細については、Subagentsを参照してください。

Hooks

プラグインは Claude Code イベントに自動的に応答するイベントハンドラーを提供できます。 場所: プラグインルートの hooks/hooks.json、または plugin.json 内のインライン 形式: イベントマッチャーとアクションを含む JSON 設定 Hook 設定:
プラグイン hooks はユーザー定義 hooksと同じライフサイクルイベントに応答します: Hook タイプ:
  • command: シェルコマンドまたはスクリプトを実行
  • http: イベント JSON を URL への POST リクエストとして送信
  • mcp_tool: 設定されたMCP server上のツールを呼び出す
  • prompt: LLM でプロンプトを評価(コンテキストの $ARGUMENTS プレースホルダーを使用)
  • agent: 複雑な検証タスク用のツール付き agentic verifier を実行
プラグイン自体のバンドルされた MCP serverをターゲットとする Hooks は、スコープ付き名を使用する必要があります。ツールマッチャーと if フィールドはスコープ付きツール名 mcp__plugin_<plugin-name>_<server-name>__<tool> を取り、mcp_tool hook の server フィールドは plugin:<plugin-name>:<server-name> を取ります。ベアサーバーキーに対して記述されたマッチャーは発火しません。MCP ツールをマッチおよびプラグイン提供 MCP serversを参照してください。

MCP servers

プラグインは Model Context Protocol(MCP)servers をバンドルして、Claude Code を外部ツールおよびサービスに接続できます。 場所: プラグインルートの .mcp.json、または plugin.json 内のインライン 形式: 標準 MCP サーバー設定 MCP サーバー設定:
統合動作:
  • プラグイン MCP servers はプラグインが有効になると自動的に開始されます
  • Servers は Claude のツールキットに標準 MCP ツールとして表示されます
  • サーバー機能は Claude の既存ツールとシームレスに統合されます
  • プラグインサーバーはユーザー MCP servers とは独立して設定できます

LSP servers

LSP プラグインを使用したいですか?公式マーケットプレイスからインストールしてください。/plugin Discover タブで「lsp」を検索してください。このセクションでは、公式マーケットプレイスでカバーされていない言語用の LSP プラグインを作成する方法を説明しています。
プラグインは Language Server Protocol(LSP)servers を提供して、Claude がコードベースで作業する際にリアルタイムコード インテリジェンスを得ることができます。 LSP 統合は以下を提供します:
  • 即座の診断: Claude は各編集後すぐにエラーと警告を確認できます
  • コードナビゲーション: 定義へのジャンプ、参照の検索、ホバー情報
  • 言語認識: コードシンボルの型情報とドキュメント
場所: プラグインルートの .lsp.json、または plugin.json 内のインライン 形式: 言語サーバー名をその設定にマップする JSON 設定 .lsp.json ファイル形式:
plugin.json 内のインライン:
必須フィールド: オプションフィールド: restartOnCrashshutdownTimeout には Claude Code v2.1.205 以降が必要です。v2.1.205 より前では、設定スキーマは両方のオプションを受け入れていましたが、どちらかを設定すると Claude Code は起動時にその LSP サーバーをスキップしていました。理由は claude --debug 出力でのみ表示されます。 同じ拡張子に対する複数のサーバー: 複数の有効な LSP サーバーが extensionToLanguage で同じファイル拡張子を宣言する場合、サーバーが 1 つのプラグインから来ているか異なるプラグインから来ているかに関わらず、最初に登録されたサーバーがその拡張子を持つファイルを処理し、他のサーバーは起動しません。/plugin インターフェイスは、アクティブなサーバーを持つプラグインに名前を付ける警告を表示します。 初期化に失敗するサーバー: Claude Code は、command または extensionToLanguage が欠落しているなど、設定が無効なサーバーをスキップし、他の設定されたサーバーは引き続き起動します。claude --debug を実行して、サーバーがスキップされた理由を確認してください。 スキップされたサーバーはそのファイル拡張子を要求しないため、同じ拡張子を宣言する別の有効なサーバーが、同じプラグインまたは異なるプラグインから来ていても、引き続きそれらのファイルを処理します。v2.1.205 より前では、初期化に失敗したサーバーは引き続きその拡張子を要求し、同じ拡張子に対する別の有効なサーバーをブロックしていました。
言語サーバーバイナリを別途インストールする必要があります。 LSP プラグインは Claude Code が言語サーバーに接続する方法を設定しますが、サーバー自体は含まれていません。/plugin Errors タブに Executable not found in $PATH が表示される場合は、言語に必要なバイナリをインストールしてください。
利用可能な LSP プラグイン: 言語サーバーをまずインストールしてから、マーケットプレイスからプラグインをインストールしてください。

Monitors

プラグインは、プラグインがアクティブな場合に Claude Code が自動的に開始するバックグラウンド monitors を宣言できます。各 monitor はセッションの期間中シェルコマンドを実行し、すべての stdout 行を Claude に通知として配信するため、Claude は自分自身に開始するよう求められることなく、ログエントリ、ステータス変更、またはポーリングされたイベントに反応できます。 プラグイン monitors はMonitor toolと同じメカニズムを使用し、その可用性制約を共有します。これらはインタラクティブ CLI セッションでのみ実行され、hooksと同じ信頼レベルでサンドボックス化されずに実行され、Monitor tool が利用できないホストではスキップされます。 場所: プラグインルートの monitors/monitors.json、または plugin.json 内のインライン 形式: monitor エントリの JSON 配列 次の monitors/monitors.json はデプロイメントステータスエンドポイントとローカルエラーログを監視します:
monitors をインラインで宣言するには、plugin.jsonexperimental.monitors を同じ配列に設定します。デフォルト以外のパスから読み込むには、experimental.monitors"./config/monitors.json" などの相対パス文字列に設定します。Monitors は実験的コンポーネントです。 必須フィールド: オプションフィールド: command 値はパス置換 ${CLAUDE_PLUGIN_ROOT}${CLAUDE_PLUGIN_DATA}${CLAUDE_PROJECT_DIR}、および環境からの任意の ${ENV_VAR} をサポートします。スクリプトがプラグイン自体のディレクトリから実行される必要がある場合は、コマンドの前に cd "${CLAUDE_PLUGIN_ROOT}" && を付けます。 monitor command${user_config.*}値を参照することはできません。コマンドはシェルを通じて実行されるため、Claude Code は値を置換する代わりにエラーでプラグインを拒否します。Monitor プロセスは CLAUDE_PLUGIN_OPTION_<KEY> 環境変数を受け取らないため、monitor スクリプトが所有する設定ファイルから値を読み取るようにしてください。v2.1.207 より前では、monitor コマンドは ${user_config.*} 値を置換していました。 セッション中にプラグインを無効にしても、既に実行中の monitors は停止しません。セッションが終了するときに停止します。

Themes

プラグインは、/theme に組み込みプリセットおよびユーザーのローカルテーマと一緒に表示される色テーマを配布できます。テーマは themes/ 内の JSON ファイルで、base プリセットと色トークンのスパース overrides マップを持ちます。Themes は実験的コンポーネントです。
プラグインテーマを選択すると、custom:<plugin-name>:<slug> がユーザーの設定に保持されます。プラグインテーマは読み取り専用です。/themeCtrl+E を押すと、それが ~/.claude/themes/ にコピーされるため、ユーザーはコピーを編集できます。

プラグインインストールスコープ

プラグインをインストールするときは、プラグインが利用可能な場所と他のユーザーが使用できるかどうかを決定するスコープを選択します。 プラグインは他の Claude Code 設定と同じスコープシステムを使用します。インストール手順とスコープフラグについては、プラグインのインストールを参照してください。スコープの完全な説明については、設定スコープを参照してください。

Skills ディレクトリプラグイン

.claude-plugin/plugin.json マニフェストを含む skills ディレクトリの下のフォルダは、次のセッションで <name>@skills-dir という名前のプラグインとして読み込まれます。マーケットプレイスもインストール手順もありません。plugin initでスキャフォルドしてください。マーケットプレイスインストールとは異なり、プラグインはプラグインキャッシュにコピーされるのではなく、所定の場所で検出されます。 skills ディレクトリツリーは 3 つの異なるものをサポートします:

プラグインが読み込まれる場所を選択

プロジェクトスコープ プラグインはリポジトリにチェックインされ、クローンしたすべての共同作業者に到達します。そのコンテンツはあなたではなくリポジトリから来るため、.claude/settings.json を管理するのと同じ信頼ゲートの後にのみ読み込まれます。コードを実行するコンポーネントはさらに制限されます: 個人スコープ プラグインにはこれらの制限はありません。
プロジェクトスコープ @skills-dir プラグインは、Claude Code を開始したディレクトリの .claude/skills/ からのみ読み込まれます。plain skills と commands が行うようにリポジトリルートまでウォークアップしません。そのため、サブディレクトリから起動するとリポジトリルートに存在するプラグインが見つかりません。リポジトリルートから起動するか、ディレクトリを変更した後に /reload-plugins を実行してください。

Skills ディレクトリプラグインを編集、再読み込み、無効化

skill の SKILL.md に加えた変更は現在のセッションで即座に有効になります。プラグインの他のコンポーネント(hooks/.mcp.jsonagents/output-styles/ など)への変更は有効になりません。/reload-plugins を実行するか Claude Code を再起動してそれらを取得してください。ライブ変更検出を参照してください。 skills ディレクトリプラグインの読み込みを停止するには、そのフォルダを削除するか、名前で無効にしてください。マーケットプレイスから何もインストールされなかったため、uninstall ステップはありません。

プラグインマニフェストスキーマ

.claude-plugin/plugin.json ファイルはプラグインのメタデータと設定を定義します。このセクションでは、サポートされているすべてのフィールドとオプションを説明しています。 マニフェストはオプションです。省略された場合、Claude Code はデフォルト場所のコンポーネントを自動検出し、ディレクトリ名からプラグイン名を導出します。メタデータを提供するか、カスタムコンポーネントパスが必要な場合はマニフェストを使用してください。

完全なスキーマ

必須フィールド

マニフェストを含める場合、name は唯一の必須フィールドです。 この名前はコンポーネントの名前空間に使用されます。たとえば、UI では、名前が plugin-dev のプラグインのエージェント agent-creatorplugin-dev:agent-creator として表示されます。

認識されないフィールド

Claude Code は認識しないトップレベルフィールドを無視します。別のエコシステムからのメタデータを plugin.json に保持でき、プラグインは引き続き読み込まれます。これにより、VS Code または Cursor 拡張マニフェスト、npm package.json、または MCPB/DXT バンドルマニフェストとしても機能する 1 つのマニフェストを保持することが実用的になります。 claude plugin validate は認識されないフィールドを警告として報告し、エラーではありません。フィールドが認識されたフィールドから 1 文字または 2 文字異なる場合、警告は意図された可能性のある名前を提案します。認識されないフィールド警告のみを持つプラグインは検証に合格し、実行時に読み込まれます。 型が間違っているフィールドは引き続き失敗します。たとえば、keywords 値が配列ではなく文字列である場合は読み込みエラーであり、claude plugin validate はそれをエラーとして報告します。 --strict を渡して警告をエラーとして扱います。CI で使用して、公開前に別のツールのマニフェストから残されたスペルミスのあるフィールド名またはフィールドをキャッチします。ただし、プラグインは実行時に読み込まれます。

メタデータフィールド

デフォルト有効化

plugin.jsondefaultEnabled: false を設定して、無効な状態でインストールされるプラグインを配布します。ユーザーは claude plugin enable <plugin> または /plugin インターフェイスでそれをオンにします。外部サービスに接続するプラグインなど、ユーザーがオプトインすべきコストまたはスコープを追加するプラグインに使用します。これには Claude Code v2.1.154 以降が必要です。以前のバージョンはフィールドを無視し、インストール時にプラグインを有効にします。 defaultEnabled は、他に何もプラグインの状態を決定していない場合のフォールバックです。2 つのことがそれより優先されます:
  • ユーザーの設定: 任意の設定スコープの enabledPlugins のプラグインのエントリ。書き込まれると、プラグイン更新と再インストール全体で保持されるため、後のリリースで defaultEnabled を変更しても既存ユーザーをフリップしません。
  • 依存関係要件: プラグインがアクティブな別のプラグインによって必要とされる場合、Claude Code はインストール時または有効化時にそれに対して true を書き込みます。これにより明示的な設定が与えられるため、独自のデフォルトはもはや適用されません。依存関係を持つプラグインを有効または無効にするを参照してください。
同じフィールドはプラグインのマーケットプレイスエントリに表示でき、plugin.json の値より優先されます。オプションプラグインフィールドを参照してください。

コンポーネントパスフィールド

実験的コンポーネント

experimental キーの下のコンポーネント、themesmonitors は、安定化する間にリリース間でマニフェストスキーマが変更される可能性があります。それらを宣言する場所は別の移行です。トップレベルはまだ機能し、claude plugin validate は警告を表示し、将来のリリースでは experimental.* が必要になります。

ユーザー設定

userConfig フィールドは、プラグインが有効になったときに Claude Code がユーザーにプロンプトする値を宣言します。ユーザーに settings.json を手動で編集させる代わりにこれを使用してください。
キーは有効な識別子である必要があります。各オプションはこれらのフィールドをサポートします: 各値は MCP および LSP サーバー設定と hook コマンドで ${user_config.KEY} として置換可能です。機密でない値は skill とエージェントコンテンツでも置換できます。すべての値はプラグインサブプロセスに CLAUDE_PLUGIN_OPTION_<KEY> 環境変数としてエクスポートされます。ここで <KEY> はオプションキーを大文字にしたものです。 シェルで実行されるフィールドは ${user_config.*} を拒否します: 設定された値をシェルコマンドに置換すると、シェルはその値が含むものを実行できるため、コンポーネントはエラーで失敗します。拒否された各フィールドには、値を渡す別の方法があります: v2.1.207 より前は、これらのフィールドは ${user_config.KEY} 値を置換していました。これに依存していたプラグインを更新してください。 機密でない値は settings.jsonpluginConfigs キーの下に pluginConfigs[<plugin-id>].options として保存されます。Claude Code はキーをユーザー設定に書き込み、ユーザー設定、--settings フラグ、および管理設定からそれを読み取ります。プロジェクトの .claude/settings.json または .claude/settings.local.json のエントリは無視されます。v2.1.207 より前は、Claude Code はプロジェクトおよびローカル設定も読み取っていました。 機密値は macOS Keychain、またはサポートされているキーチェーンが利用できないプラットフォームでは ~/.claude/.credentials.json に移動します。キーチェーンストレージは OAuth トークンと共有され、約 2 KB の合計制限があるため、機密値は小さく保ってください。

チャネル

channels フィールドを使用すると、プラグインは 1 つ以上のメッセージチャネルを宣言して、会話にコンテンツを注入できます。各チャネルはプラグインが提供する MCP サーバーにバインドされます。
server フィールドは必須で、プラグインの mcpServers のキーと一致する必要があります。オプションのチャネルごとの userConfig はトップレベルフィールドと同じスキーマを使用し、プラグインがプラグイン有効化時にボットトークンまたはオーナー ID をプロンプトできるようにします。

パス動作ルール

カスタムパスがプラグインのデフォルトディレクトリを置き換えるか拡張するかは、フィールドによって異なります:
  • デフォルトを置き換える: commandsagentsoutputStylesexperimental.themesexperimental.monitors。たとえば、マニフェストが commands を指定する場合、デフォルト commands/ ディレクトリはスキャンされません。デフォルトを保持してさらに追加するには、明示的にリストします: "commands": ["./commands/", "./extras/"]
  • デフォルトに追加: skills。デフォルト skills/ ディレクトリは常にスキャンされ、skills にリストされているディレクトリはそれと一緒に読み込まれます。例外: マーケットプレイスエントリの source がマーケットプレイスルートに解決される場合、特定のサブディレクトリを宣言するとスキャンが置き換えられます
  • 独自のマージルール: hooksMCP serversLSP servers。各セクションで複数のソースがどのように結合されるかを参照してください
プラグインがデフォルトフォルダと一致するマニフェストキーの両方を持つ場合、Claude Code v2.1.140 以降は無視されたフォルダを claude plugin list および /plugin 詳細ビューで警告します。プラグインはマニフェストパスを使用して読み込まれます。マニフェストキーがデフォルトフォルダを指す場合(例: "commands": ["./commands/deploy.md"])は警告は表示されません。その場合、フォルダは明示的にアドレス指定されているためです。 すべてのパスフィールドについて:
  • すべてのパスはプラグインルートに相対的で、./ で始まる必要があります
  • カスタムパスからのコンポーネントは同じ命名と名前空間ルールを使用します
  • 複数のパスを配列として指定できます
  • skill パスが SKILL.md を直接含むディレクトリを指す場合(例: "skills": ["./"] がプラグインルートを指す)、SKILL.md の frontmatter name フィールドが skill の呼び出し名を決定します。これはインストールディレクトリに関係なく安定した名前を提供します。frontmatter に name が設定されていない場合、ディレクトリ basename がフォールバックとして使用されます。
ルートに SKILL.md があり、skills/ サブディレクトリがなく、skills マニフェストフィールドがないプラグインは、Claude Code v2.1.142 以降で単一 skill プラグインとして自動的に読み込まれます。このレイアウトの場合、plugin.json"skills": ["./"] を設定する必要はありません。skill の呼び出し名は上記と同じルールに従います: frontmatter name フィールド、またはフォールバックとしてのディレクトリ basename。 パスの例:

環境変数

Claude Code は、プラグインパスを参照するための 3 つの変数を提供します: 3 つすべてが hook プロセスおよび MCP と LSP サーバーサブプロセスに環境変数としてエクスポートされます。どのフィールドがそれらをインラインで置換するかは、プラグインコンポーネントによって異なります: hook コマンドでは、exec formargs で使用して、各パスが 1 つの引数として引用符なしで渡されるようにしてください。shell-form hooks と monitor コマンドでは、"${CLAUDE_PROJECT_DIR}/scripts/server.sh" のようにダブルクォートで囲みます。この shell-form hook はプラグインにバンドルされたスクリプトを実行します:
${CLAUDE_PLUGIN_ROOT} はプラグインが更新されると変更されます。前のバージョンのディレクトリは更新後約 7 日間ディスク上に残りますが、これを一時的なものとして扱い、ここに状態を書き込まないでください。 プラグインがセッション中に更新されると、hook コマンド、monitors、MCP サーバー、LSP サーバーは前のバージョンのパスを使用し続けます。/reload-plugins を実行して、hook、MCP サーバー、LSP サーバーを新しいパスに切り替えます。monitors はセッション再起動が必要です。 MCP サーバーは roots/list リクエストを呼び出すこともでき、セッションの作業ディレクトリを実行時に読み取ることができます。roots/list が返すもの、および Claude Code がサーバーに変更を通知するタイミングを参照してください。

永続データディレクトリ

${CLAUDE_PLUGIN_DATA} ディレクトリは ~/.claude/plugins/data/{id}/ に解決されます。ここで {id} はプラグイン識別子で、a-zA-Z0-9_- 以外の文字が - に置き換えられます。formatter@my-marketplace としてインストールされたプラグインの場合、ディレクトリは ~/.claude/plugins/data/formatter-my-marketplace/ です。 一般的な使用法は、言語依存関係を 1 回インストールしてセッションとプラグイン更新全体で再利用することです。データディレクトリは単一のプラグインバージョンより長く存在するため、ディレクトリ存在チェックだけでは、更新がプラグインの依存関係マニフェストを変更したときを検出できません。推奨パターンはバンドルされたマニフェストをデータディレクトリのコピーと比較し、異なる場合は再インストールします。 この SessionStart hook は最初の実行時に node_modules をインストールし、プラグイン更新に変更された package.json が含まれるたびに再度インストールします:
diff は保存されたコピーが不足しているか、バンドルされたコピーと異なる場合にゼロ以外で終了し、最初の実行と依存関係変更更新の両方をカバーします。npm install が失敗した場合、末尾の rm はコピーされたマニフェストを削除して、次のセッションが再試行します。 ${CLAUDE_PLUGIN_ROOT} にバンドルされたスクリプトは、永続化された node_modules に対して実行できます:
データディレクトリは、インストールされている最後のスコープからプラグインをアンインストールするときに自動的に削除されます。/plugin インターフェイスはディレクトリサイズを表示し、削除前にプロンプトします。CLI はデフォルトで削除します。--keep-dataを渡して保持します。

プラグインキャッシングとファイル解決

プラグインは 2 つの方法で指定されます:
  • claude --plugin-dir または claude --plugin-url を通じて、セッションの期間。
  • マーケットプレイスを通じて、将来のセッション用にインストール。
セキュリティと検証の目的で、Claude Code は_マーケットプレイス_プラグインをユーザーのローカルプラグインキャッシュ~/.claude/plugins/cache)にコピーします。これらを所定の場所で使用するのではなく。この動作を理解することは、外部ファイルを参照するプラグインを開発する際に重要です。 各インストール済みバージョンはキャッシュ内の別のディレクトリです。プラグインを更新またはアンインストールすると、前のバージョンディレクトリは孤立したものとしてマークされ、7 日後に自動的に削除されます。猶予期間により、既に古いバージョンを読み込んだ同時実行 Claude Code セッションがエラーなく実行を続けることができます。 Claude の Glob および Grep ツールは検索中に孤立したバージョンディレクトリをスキップするため、ファイル結果には古いプラグインコードが含まれません。

パストラバーサル制限

インストールされたプラグインはディレクトリの外側のファイルを参照できません。プラグインルートの外側をトラバースするパス(../shared-utils など)は、これらの外部ファイルがキャッシュにコピーされないため、インストール後は機能しません。 プラグインが同じマーケットプレイスの他の部分とファイルを共有する必要がある場合、プラグインディレクトリ内にシンボリックリンクを作成できます。プラグインがキャッシュにコピーされるときにシンボリックリンクがどのように処理されるかは、そのターゲットがどこに解決されるかによって異なります:
  • プラグイン自体のディレクトリ内: シンボリックリンクはキャッシュ内の相対シンボリックリンクとして保持されるため、実行時にコピーされたターゲットへの解決を続けます。
  • 同じマーケットプレイス内の他の場所: シンボリックリンクは逆参照されます。ターゲットのコンテンツはキャッシュにコピーされます。これにより、メタプラグインの skills/ ディレクトリがマーケットプレイス内の他のプラグインで定義されたスキルにリンクできます。
  • マーケットプレイス外: シンボリックリンクはセキュリティのためにスキップされます。これにより、プラグインがシステムパスなどの任意のホストファイルをキャッシュに取り込むことを防ぎます。
--plugin-dir でインストールされたプラグイン、またはローカルパスからのプラグインの場合、プラグイン自体のディレクトリ内で解決されるシンボリックリンクのみが保持されます。その他はすべてスキップされます。 次のコマンドは、マーケットプレイスプラグイン内から兄弟プラグインで定義された共有スキルへのリンクを作成します。Windows では、昇格されたコマンドプロンプトから mklink /D を使用するか、開発者モードを有効にします:
これはキャッシングシステムのセキュリティ上の利点を維持しながら柔軟性を提供します。

プラグインディレクトリ構造

標準プラグインレイアウト

完全なプラグインは次の構造に従います:
.claude-plugin/ ディレクトリは plugin.json ファイルを含みます。他のすべてのディレクトリ(commands/、agents/、skills/、output-styles/、themes/、monitors/、hooks/)は .claude-plugin/ 内ではなく、プラグインルートにある必要があります。
プラグインルートの CLAUDE.md ファイルはプロジェクトコンテキストとして読み込まれません。プラグインは CLAUDE.md ではなく、skills、agents、hooks を通じてコンテキストを提供します。Claude のコンテキストに読み込まれる命令を配布するには、skill に配置してください。

ファイル場所リファレンス


CLI コマンドリファレンス

Claude Code は非対話的なプラグイン管理用の CLI コマンドを提供します。スクリプトと自動化に役立ちます。

plugin init

~/.claude/skills/<name>/ に新しいプラグインをスキャフォルドします。次の Claude Code セッションで、<name>@skills-dir として自動的に読み込まれ、インストール手順なしで /pluginclaude plugin list に表示されます。 Skills ディレクトリプラグインのスコープと信頼要件を参照してください。
引数:
  • <name>: プラグイン名。skill 名前空間と ~/.claude/skills/ の下のディレクトリ名になるため、スペースやパス区切り文字を含むことはできません。
オプション: エイリアス: new --with 値は、そのコンポーネントのスターターファイルを追加し、編集準備ができています: スキャフォルドされたプラグインはマーケットプレイスではなく @skills-dir ソースを使用します。管理者は strictKnownMarketplaces でこのソースをブロックするか、管理設定blockedMarketplaces{"source": "skills-dir"} を追加することでブロックできます。ブロックされると、plugin init は書き込み前に失敗します。 例:

plugin install

利用可能なマーケットプレイスからプラグインをインストールします。
引数:
  • <plugin>: プラグイン名または特定のマーケットプレイス用の plugin-name@marketplace-name
オプション: スコープはインストールされたプラグインが追加される設定ファイルを決定します。たとえば、--scope project.claude/settings.jsonenabledPlugins に書き込み、プロジェクトリポジトリをクローンした全員がプラグインを利用できるようにします。 例:

plugin uninstall

インストール済みプラグインを削除します。
引数:
  • <plugin>: プラグイン名または plugin-name@marketplace-name
オプション: エイリアス: removerm デフォルトでは、最後に残っているスコープからアンインストールすると、プラグインの ${CLAUDE_PLUGIN_DATA} ディレクトリも削除されます。たとえば、新しいバージョンをテストした後に再インストールする場合は、--keep-data を使用して保持します。

plugin prune

インストール済みプラグインによって不要になった自動インストール プラグイン依存関係を削除します。Claude Code が別のプラグインの dependencies フィールドを満たすために取得した依存関係は削除されます。直接インストールしたプラグインは決して削除されません。
オプション: エイリアス: autoremove このコマンドは孤立した依存関係をリストアップし、削除する前に確認を求めます。プラグインを削除し、その依存関係をクリーンアップする場合は、1 ステップで claude plugin uninstall <plugin> --prune を実行します。
claude plugin prune には Claude Code v2.1.121 以降が必要です。

plugin enable

無効なプラグインを有効にします。プラグインが dependencies を宣言している場合、Claude Code はそれらを同じスコープで推移的に有効にし、依存関係がインストールされていない場合はコマンドが失敗します。
引数:
  • <plugin>: プラグイン名または plugin-name@marketplace-name
オプション:

plugin disable

プラグインをアンインストールせずに無効にします。別の有効なプラグインが ターゲットに依存している 場合は失敗します。エラーメッセージには、最初にすべての依存プラグインを無効にするチェーンコマンドが含まれます。
引数:
  • <plugin>: プラグイン名または plugin-name@marketplace-name
オプション:

plugin update

プラグインを最新バージョンに更新します。
引数:
  • <plugin>: プラグイン名または plugin-name@marketplace-name
オプション:

plugin list

インストール済みプラグインをバージョン、ソースマーケットプレイス、有効状態とともにリストします。
オプション: 対話型セッション内では、/plugin list は同じリストをインラインで出力します。対話型フォームは --enabled または --disabled を受け入れて、その状態のプラグインのみを表示し、lslist の短縮形として使用できます。

plugin details

プラグインのコンポーネントインベントリと予想トークンコストを表示します。出力には、プラグインが提供するすべてのコンポーネントがリストアップされ、Skills、Agents、Hooks、MCP サーバー、LSP サーバーとしてグループ化され、各セッションに追加されるトークン数の推定値が表示されます。Skills グループには skills/commands/ エントリの両方が含まれます。
引数:
  • <name>: プラグイン名または plugin-name@marketplace-name
オプション: 出力には、各コンポーネントの 2 つのコスト数値が表示されます:
  • Always-on: スキルの説明、エージェントの説明、コマンド名など、プラグインのリスティングテキストによってすべてのセッションに追加されるトークン。コンポーネントが実行されるかどうかに関係なく追加されます。
  • On-invoke: コンポーネントが実行されるときのコンポーネントのコスト。プラグイン全体ではなくコンポーネントごとに表示されます。これは、典型的なセッションではコンポーネントのサブセットのみを呼び出すためです。
この例は、2 つのスキルを持つプラグインの出力がどのように見えるかを示しています:
Always-on の合計は、アクティブなモデルの count_tokens API を使用して計算されます。コンポーネントごとの数値は、その合計から比例的にスケーリングされます。API に到達できない場合、コマンドは文字ベースの推定値にフォールバックします。

plugin tag

現在のディレクトリ内のプラグインのリリース git タグを作成します。プラグインのフォルダ内から実行してください。プラグインリリースにタグを付けるを参照してください。
オプション:

デバッグと開発ツール

デバッグコマンド

claude --debug を使用してプラグイン読み込みの詳細を確認します: これは以下を表示します:
  • どのプラグインが読み込まれているか
  • プラグインマニフェストのエラー
  • Skill、agent、hook 登録
  • MCP サーバー初期化

一般的な問題

エラーメッセージの例

マニフェスト検証エラー:
  • Invalid JSON syntax: Unexpected token } in JSON at position 142: コンマの欠落、余分なコンマ、またはクォートされていない文字列を確認
  • Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: 必須フィールドが不足
  • Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: 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 スクリプトが実行されない:
  1. スクリプトが実行可能であることを確認: chmod +x ./scripts/your-script.sh
  2. shebang 行を確認: 最初の行は #!/bin/bash または #!/usr/bin/env bash である必要があります
  3. パスが ${CLAUDE_PLUGIN_ROOT} を使用していることを確認: "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"
  4. スクリプトを手動でテスト: ./scripts/your-script.sh
Hook が予期されたイベントでトリガーされない:
  1. イベント名が正しいことを確認(大文字小文字を区別): PostToolUsepostToolUse ではない
  2. マッチャーパターンがツールと一致することを確認: ファイル操作の場合 "matcher": "Write|Edit"
  3. hook タイプが有効であることを確認: commandhttpmcp_toolprompt、または agent

MCP サーバートラブルシューティング

サーバーが起動しない:
  1. コマンドが存在し、実行可能であることを確認
  2. すべてのパスが ${CLAUDE_PLUGIN_ROOT} 変数を使用していることを確認
  3. MCP サーバーログを確認: claude --debug は初期化エラーを表示
  4. Claude Code の外部でサーバーを手動でテスト
サーバーツールが表示されない:
  1. サーバーが .mcp.json または plugin.json で正しく設定されていることを確認
  2. サーバーが MCP プロトコルを正しく実装していることを確認
  3. デバッグ出力で接続タイムアウトを確認

ディレクトリ構造の間違い

症状: プラグインは読み込まれるがコンポーネント(skills、agents、hooks)が不足している。 正しい構造: コンポーネントはプラグインルートにある必要があり、.claude-plugin/ 内ではありません。.claude-plugin/ には plugin.json のみが属します。
コンポーネントが .claude-plugin/ 内にある場合は、プラグインルートに移動してください。 デバッグチェックリスト:
  1. claude --debug を実行し、「loading plugin」メッセージを探す
  2. 各コンポーネントディレクトリがデバッグ出力にリストされていることを確認
  3. プラグインファイルを読み取ることができるファイルパーミッションを確認

配布とバージョン管理リファレンス

バージョン管理

Claude Code はプラグインのバージョンをキャッシュキーとして使用し、更新が利用可能かどうかを判断します。/plugin update を実行するか自動更新が実行されると、Claude Code は現在のバージョンを計算し、既にインストールされているものと一致する場合は更新をスキップします。 バージョンは、設定されている最初のものから解決されます:
  1. プラグインの plugin.jsonversion フィールド
  2. marketplace.json のプラグインのマーケットプレイスエントリの version フィールド
  3. git でホストされているマーケットプレイスの githuburlgit-subdir、および相対パスソースのプラグインソースの git コミット SHA
  4. npm ソースまたは git リポジトリ内にないローカルディレクトリの場合は unknown
これにより、プラグインをバージョン管理する 2 つの方法が提供されます:
plugin.jsonversion を設定する場合、ユーザーが変更を受け取るたびにバンプする必要があります。新しいコミットをプッシュするだけでは不十分です。Claude Code は同じバージョン文字列を認識し、キャッシュされたコピーを保持するためです。迅速に反復している場合は、version を設定しないままにして、代わりに git コミット SHA が使用されるようにしてください。
明示的なバージョンを使用する場合は、semantic versioningMAJOR.MINOR.PATCH)に従ってください:破壊的変更の場合は MAJOR をバンプし、新機能の場合は MINOR をバンプし、バグ修正の場合は PATCH をバンプしてください。CHANGELOG.md で変更を文書化してください。

関連項目