コンテンツにスキップ

plugin にまとめて配る

tier 2(効いてくる)確認 1 か月前(2026年8月23日)

どこまで来たら使えたと言えるか

面: 操作が異なる — ターミナルとデスクトップで操作が違うので、条件を分けています

段達成したと言える状態
1. 触るターミナルclaude --plugin-dir ./my-plugin でインストールせずに読み込み、/plugin-name:skill-name が呼べることを確認した

デスクトップ**+** ボタン → **Plugins** で、導入済みの plugin とその skill を一覧した

2. 入れるターミナル複数プロジェクトで使い回している skill / agent / hook を 1 つの plugin にまとめ、/reload-plugins で反映を確認した

デスクトップ**Add plugin** から marketplace を開いて 1 つ入れ、user / project / local のどのスコープに置くかを選んだ

3. 効かせるターミナルstandalone と plugin の使い分けを説明でき、移行時に元ファイルとの衝突が起きる箇所を挙げられる

デスクトップcloud セッションには Desktop から入れた plugin が届かないことを踏まえ、必要なら enabledPlugins か claude.ai アカウント側で有効にしている

何のためのものか

skill / agent / hook / MCP サーバーなどをまとめて配布できる仕組み。

単発の個人用カスタマイズは .claude/ の standalone 構成で足りる。 plugin が要るのは、チームで共有する・バージョンを付けて配る・プロジェクトをまたいで再利用する場合。

触る

インストールせずに動かせる。

  1. plugin ルートに .claude-plugin/plugin.json(name と description)を置く
  2. claude --plugin-dir ./my-plugin で起動する。.zip も指定できる
  3. skill は /plugin-name:skill-name で呼ぶ。plugin の skill は常に名前空間付きで、接頭辞は plugin.json の name から来る

skill 1 つだけの plugin なら、skills/ を作らず plugin root に直接 SKILL.md を置ける(この場合 frontmatter の name が呼び出し名になる)。

claude plugin init my-tool を使うと ~/.claude/skills/my-tool/ に雛形ができ、次のセッションから my-tool@skills-dir として読み込まれる。marketplace もインストール手順も要らない。

入れる

置き場所は決まっている。plugin root からの相対で並べる。

ディレクトリ中身
skills/<name>/SKILL.md 形式の skill
agents/カスタム agent 定義
hooks/hooks.json のイベントハンドラ
.mcp.jsonMCP サーバー設定
bin/plugin が有効な間 Bash ツールの PATH に入る実行ファイル
  • 変更を反映するには /reload-plugins。 skill 本文の編集と違い、plugin の構成要素は自動では読み直されない
  • 確認の仕方はコンポーネントごとに違う。 skill は /plugin-name:skill-name、agent は /context の Custom Agents かスコープ付き名の @-mention、hook は対応イベントを起こして debug log を見る
  • version は任意だが、設定した場合はこの値を上げたときにだけユーザーへ更新が届く

効かせる

  • standalone からの移行は形式がほぼ同じ。 .claude/settings.json の hooks オブジェクトはそのまま hooks/hooks.json へコピーできる
  • 移行後は元ファイルを消す。 project / user の .claude/agents/ の定義は同名の plugin agent を上書きするので、消すまで plugin 版が有効にならない。plugin skill は名前空間付きなので両方残る
  • 配るなら marketplace。 公開前に claude plugin validate ./your-plugin をローカルで実行する(--strict を付けると警告もエラー扱いになる)
  • 常時動かす監視が要るなら monitors/monitors.json。command の stdout の各行が notification として Claude に届く

落とし穴

  • --plugin-dir はローカルコピーを優先するが、managed settings が force-enable / force-disable している plugin は上書きできない
  • --plugin-url の取得に失敗しても起動は続く。 plugin 抜きで立ち上がり、エラーは /plugin マネージャの Errors タブに記録される
  • plugin の settings.json でサポートされるキーは agent と subagentStatusLine だけ。 未知のキーは黙って無視される
  • LSP サーバーはユーザー側の環境にバイナリが要る。 起動失敗は /plugin の Errors タブに出て、設定が不正なエントリはスキップされる(理由は claude --debug)
  • 新規 plugin で skill を置くなら commands/ ではなく skills/

根拠と前後

このページが書ける範囲は、根拠にした facts に書かれていることだけです。 仕様そのものはそちらを読んでください。