Claude Media
Claude Codeのmarketplace skills配列がweb版で無視される報告

Claude Codeのmarketplace skills配列がweb版で無視される報告

marketplace.jsonのskills配列はCLIでは効くのに、claude.ai webとデスクトップでは全プラグインにリポジトリ全体のskillsが配られるという報告。作者側の確認手順を紹介します。

マーケットプレイスのskills配列でプラグインごとにスキルを絞っても、claude.ai webとデスクトップアプリではその絞り込みが効かず、全プラグインがリポジトリのスキル全体を配るという報告が、GitHubのissue #96319に上がっています。CLIでは意図どおりに絞られるため、ターミナルだけで動作確認した作者は気づけません。

このissueは起票時点でopenで、メンテナーからの返信はありません。本記事は報告内容と公式仕様を突き合わせ、自分のマーケットプレイスが影響を受けるかを確かめる手順をまとめます。

何が報告されているのか

報告者の構成は、プライベートのGitHubリポジトリに18個のプラグインを置いたマーケットプレイスです。全プラグインが"source": "./"でリポジトリのルートを指し、"strict": falseで、plugin.jsonは置かず、各エントリーのskills配列に1〜5個のサブディレクトリを書いています。リポジトリには36個のSKILL.mdフォルダーがあります。

この構成でCLIは配列どおりに絞り、claude.ai webとデスクトップアプリ(macOS)は絞りません。起票時のバージョンはCLI 2.1.280、デスクトップアプリ2.7032.0です。

くらべる

同じマーケットプレイスの見え方

絞られる

ターミナルのCLI

プラグインAに1つ宣言すれば、見えるスキルは1つです。

絞られない

claude.ai webとデスクトップ

プラグインAだけをインストールしても、リポジトリ内の全スキルが読み込まれます。

公式仕様ではどう動くはずか

マーケットプレイスのエントリーがplugin.jsonを持たない場合、エントリー自体がマニフェストになります。strictの値は関係しません。ルートをsourceに取るエントリーが特定のskillsサブディレクトリを列挙すると、列挙したものだけが読み込まれ、既定のskills/は走査されません。プラグインのリファレンスにこの挙動が書かれています。

報告者の期待もこの仕様と同じで、プラグインAはskills配列のスキルだけをplugin-a:<skill>の名前空間で出し、バンドルしたmcpServersもそのスキルにだけ効く、というものです。仕様の記述はCLIの挙動を前提にしており、webとデスクトップのローダーが同じ規則に従うことまでは書かれていません。

報告されている4つの症状

issueが挙げる症状は4つです。

  1. 全スキルが各プラグインの下に載る: 1つ宣言したプラグインを入れても、リポジトリの全スキルがそのプラグインの名前空間に載ります。6プラグインを入れると、各スキルの同一コピー(md5で確認)が6個できました。
  2. プラグイン画面が食い違う: インストール前の詳細ページは全スキルを並べ、インストール後は宣言した分だけを並べます。実際には全部が載っているので、利用者は漏れに気づけません。
  3. インストールごとに全体のスナップショットになる: プラグインAを入れた後にマージされたスキルは、Aには無く、その後に入れた他のプラグインには載ります。自分のプラグインにだけ無いスキルが無関係な3つの下にある、という見え方になります。
  4. スキルとMCPサーバーの組み合わせが崩れる: AtlassianとFigmaのように、プラグインごとに別のMCPサーバーを束ねていても、漏れたスキルはそのサーバーを宣言していないプラグインに載ります。

claude plugin validateはこの構成で通ります。エラーも出ません。

自分のマーケットプレイスで確かめる手順

影響を受けるのは、複数のプラグインが同じsourceを共有し、skills配列で出し分けている構成です。プラグインごとにディレクトリが分かれていて、skills/の中身がそのプラグイン専用なら、配列の絞り込みに頼っていないため症状は出にくい構成です。

まずmarketplace.jsonが次の形かを見ます。

{
  "name": "team-marketplace",
  "plugins": [
    { "name": "plugin-a", "source": "./", "strict": false,
      "skills": ["./skills/review"] },
    { "name": "plugin-b", "source": "./", "strict": false,
      "skills": ["./skills/deploy", "./skills/lint", "./skills/audit"] }
  ]
}

形が当てはまるなら、次の順で差を見ます。

手順

CLIとwebの差を見る手順

  1. 1

    CLIで基準を作る

    マーケットプレイスを追加し、プラグインAだけをインストールします。/pluginの詳細でスキルが宣言した数だけであることを控えます。

  2. 2

    claude.ai webで同じ操作をする

    同じマーケットプレイスを追加し、プラグインAだけをインストールします。

  3. 3

    チャットでスキルを数える

    新しいチャットでスキルの一覧を尋ねるか、/mnt/skillsの中身を見ます。webはサーバー側でスキルを/mnt/skillsにまとめて配る方式なので、ここにプラグインAの宣言外のスキルが並べば、報告と同じ現象です。名前空間はプラグイン名になります。

  4. 4

    デスクトップアプリでも繰り返す

    デスクトップは埋め込みのAgent SDKが読むローダーで、名前空間にSHAが付きます。webと結果が揃うとは限らないので、両方で確かめます。宣言外のスキルが載り、かつCLIでは載らないなら、報告と同じ現象と判定できます。

CLI側の宣言が正しく効いているかは、次のコマンドでも見られます。

claude plugin validate .
claude plugin details plugin-a

validateは通るので、これは「宣言が文法的に正しい」ことの確認にとどまります。webとデスクトップの挙動までは保証しません。

影響が出やすい場面

スキルの出し分けに意味がある構成ほど、漏れの害は大きくなります。

  • スキルとMCPを組にしているチーム: 漏れたスキルが、必要なサーバーを持たないプラグインの下で動こうとします。
  • 社内配布で役割別にプラグインを分けている場合: 経理向けのスキルが開発者向けのプラグインにも載ります。権限の分離をskills配列に頼っていると、見える範囲がずれます。
  • スキル数が多いリポジトリ: 同一コピーがプラグインの数だけ増えるため、一覧が膨らみます。

配布を許可制にしたい場合は、スキルの出し分けではなくソースの制限が別の仕組みです。管理側の設定はstrictPluginOnlyCustomizationの記事にあります。

作者側でできること

報告者は、マーケットプレイス作者の側で取れる回避策は無いと書いています。根拠として挙げているのは#15439と#53948の2件です。どちらも、作者が逃げ道にしそうな手段の行き止まりを示しています。

  • ソースの分割(#15439): プラグインのソースにサブディレクトリ(path)とrefを指定したいという機能要望です。リポジトリ全体が丸ごと取り込まれるため、プラグイン専用の置き場に分けにくい、という不満が書かれています。起票は2025-12-26で、2026-08-17にcompletedで閉じています。web版とデスクトップで分割が効くかは、このissueからは分かりません。
  • シンボリックリンクで絞る(#53948): #13344の回避策として、共有のskills/から必要なスキルだけをリンクで集める運用がありました。v2.1.117以降、plugin installがリンク先のスキルをキャッシュにコピーしなくなったという報告で、2026-04-27に起票され、2026-05-29にnot plannedで閉じています。
  • plugin.jsonを足す: 報告者はplugin.jsonを置いていません。置けば絞れるという検証は、issueにありません。

そのうえで、設計面で影響を小さくする方向は考えられます。

  • プラグインごとにディレクトリを分け、各sourceをそのディレクトリに向ける。1つのリポジトリに全スキルを置く構成より、漏れる範囲が小さくなります。ただしこの分割がweb版で効くという検証報告はissueにありません。
  • 権限の分離や機密性が絡むスキルは、skills配列の絞り込みだけに頼らず、別のマーケットプレイスや別のリポジトリに置く。
  • webとデスクトップに配るかどうかを決める。マーケットプレイスを追加するときの宣言先の選択はclaude plugin marketplace addの記事で扱っています。

claude.ai webとデスクトップアプリでこのマーケットプレイスを追加していなければ、報告された症状は出ません。issueの再現条件は、この2つの面でマーケットプレイスを追加してプラグインをインストールすることだからです。

過去の報告との関係

このissueは新規の問題ではなく、過去の報告の再起票です。

issue対象状態
#13344対象CLIでプラグインの有効・無効が無視され全スキルが読み込まれる状態2026-08-19にcompletedで閉じた
#76448対象デスクトップアプリのローダーがskills配列を無視状態2026-09-07にnot plannedで閉じた(staleによる自動クローズ)
#96319対象claude.ai webとデスクトップの両方状態open(2026-09-23起票)

#13344のCLI側はバージョン2.1.206前後で直ったとissueは書いています。ただし、バージョン2.1.206の更新履歴にこの修正の項目は見当たりません。

#76448は2026-09-07にstaleで自動クローズされ、メンテナーの返信は付きませんでした。そのため、報告者は同じ内容をwebも含めて出し直しました。デスクトップはSHA付きの名前空間、webはプラグイン名の名前空間という違いがあり、報告者は単一のローダーの不具合ではなく、2つの非CLIローダーが同じフィールドを無視していると見ています。

別のユーザーが9月23日に付けたコメントによれば、このissueも自動クローズに向かっています。staleを避けるには、14日の間隔が切れる前に10件以上の親指か、コメントが必要とのことです。

この自動クローズの方針自体が、issue #87647(2026-08-18起票、open)で問題にされています。起票者によると、スイープのワークフローは14日でstale扱いにし、さらに14日でクローズします。10件以上の親指が付いたissueだけがstale判定から外れます。has reproラベルの付いた6,000件超が、2026年3月以降にこの形で閉じられたと書かれています。再現手順を持つissueは放置で閉じないというメンテナーの説明とずれる、という指摘です。

つまり、#96319が残るかは再現した人の書き込み次第です。再現できた人が環境と手順を書き足すことが、事実上の優先度付けになっています。

この記事を共有:XはてブLinkedIn