何のためのものか
skill / agent / hook / MCP サーバーなどをまとめて配布できる仕組み。
単発の個人用カスタマイズは .claude/ の standalone 構成で足りる。 plugin が要るのは、チームで共有する・バージョンを付けて配る・プロジェクトをまたいで再利用する場合。
触る
インストールせずに動かせる。
- plugin ルートに
.claude-plugin/plugin.json(nameとdescription)を置く claude --plugin-dir ./my-pluginで起動する。.zipも指定できる- 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.json | MCP サーバー設定 |
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/