Claude Code plugin の userConfig はユーザー設定の単一値(project 設定での上書きは v2.1.207 で廃止)
Claude Code の plugin が宣言する userConfig(有効化時に値を尋ねる仕組み)は、標準フロー(plugin install の config オプションや対話的な configure)では常にユーザー設定ファイル(ホーム配下の settings.json)の pluginConfigs に単一値として保存される。install 時に scope を local や project にしても、有効化フラグ(enabledPlugins)だけがそのスコープに書かれ、userConfig の値はユーザー設定に行く。別プロジェクトで同じ plugin に別の値を設定すると、前の値は黙って上書きされる。
誤解しやすい条件
- 「install の scope を分ければ設定値もプロジェクト毎になる」は誤り。値は全プロジェクト共通の1つだけになる。
- プロジェクトを行き来しながら configure し直す運用は、もう一方のプロジェクトの値を静かに壊す。
廃止された回避策: project 設定への手書き(〜v2.1.206)
かつて pluginConfigs は設定スコープのマージに乗り、プロジェクトの settings ファイル(.claude/settings.local.json など)に手書きしたエントリ(キーは plugin名@marketplace名、その下の options に値)がユーザー設定より優先された(2026-07 時点の実測)。この挙動は CLI v2.1.207 で廃止され、changelog に「Plugin option values (pluginConfigs) are no longer read from project-level settings; only user, --settings, and managed settings are honored」と明記された。user_config プレースホルダーのシェルインジェクション対策と同じリリースで入ったセキュリティ強化(リポジトリ常駐設定が plugin の実行パラメータを注入できる経路の遮断)であり、復活は見込めない。プロジェクト設定に残した pluginConfigs はエラーにならず黙って無視されるため、CLI 更新で壊れたことに気づきにくい。
プロジェクト毎に別値にする現行の方法
- 目的が plugin 同梱 MCP サーバーの URL パラメータなら、plugin の userConfig に頼らず、プロジェクトの mcp 設定ファイル(.mcp.json)に同じサーバーを展開済みの値で直接定義する。plugin 側の接続(パラメータなし)と並存するが実害は小さい。
- それ以外の値は、起動時に settings 指定フラグでプロジェクト用設定ファイルを渡す運用でのみプロジェクト毎にできる。
- plugin 配布側は、利用者向け案内を「プロジェクト毎に変える場合は mcp 設定ファイルへの直接定義」へ更新する必要がある。
検証方法
user_config のプレースホルダーを含む観測点(スキル本文への埋め込み、MCP 一覧の URL 展開結果、または接続先サーバーが返すエラーメッセージ)を用意し、プロジェクト設定に値を書いた状態で新規セッションを起動して反映を見る。ヘッドレス実行(print モード)で該当ツールを1回呼ぶだけでも判定でき、resume か新規セッションかは無関係(設定は起動時に再読込される)。挙動が変わった疑いがあるときは、公式リポジトリの changelog を pluginConfigs で検索すると変更点とバージョンを特定できる。