プラグイン (Plugin) は Qoder CLI で、コマンド、子 Agent、Skill、Hook、MCP server などの拡張機能を 1 つのディレクトリにまとめ、インストール・有効化・共有しやすくする仕組みです。プラグインのディレクトリには 1 つ以上の拡張リソースを含めることができ、インストール後に CLI が自動で発見・読み込みます。
以下では Skill を 1 つだけ含む最小プラグインを作成し、ローカルディレクトリとしてインストールします。
すべてのプラグインで
各慣例ディレクトリの役割:
プラグインは 3 種類のスコープにインストールできます:
プラグイン関連のコマンドは
ローカルディレクトリパスからインストール:
インストール後は CLI を再起動するか TUI で
エイリアス:
有効化 / 無効化は対応するスコープの
ローカルプラグインディレクトリが慣例に沿っているか検証します。開発時に便利:
検証では発見されたコマンド、Skill、Hook などのコンポーネントが一覧表示され、慣例サブディレクトリが何も無い場合は通知が出ます。ただし
有効化 / 無効化の状態は
プラグインは
Hook の書き方の詳細はフックを参照。
マーケットプレイスはプラグインの集中配布ソースです。マーケットプレイスを追加することで、ローカルディレクトリを手動管理せずにプラグインを検索・インストールできます。
複数のソース形式に対応しています:
ソースからプラグインカタログを再取得します:
削除すると、そのマーケットプレイスからインストールされたプラグインも一緒にアンインストールされます。
マーケットプレイスを追加した後、プラグイン名でインストールできます:
CLI は設定済みのマーケットプレイスから自動的にプラグインを探してインストールします。インストール後のプラグイン ID は
設定済みマーケットプレイスからまだインストールされていないプラグインの一覧を返します。
クイックスタート
以下では Skill を 1 つだけ含む最小プラグインを作成し、ローカルディレクトリとしてインストールします。
1. プラグインディレクトリを作成
2. manifest を作成
すべてのプラグインで plugin.json を宣言することを推奨します。安定したメタ情報を持たせるため、最低限 name を含めてください (詳細は後述の manifest フィールド):
~/my-plugin/.qoder-plugin/plugin.json:
3. Skill を追加
~/my-plugin/skills/hello/SKILL.md:
4. インストール
Plugin "my-plugin@local" installed successfully. Run /plugins reload to apply. が表示されたら、CLI を再起動するか TUI で /plugins reload を実行すると、プラグインが提供する Skill を使えるようになります。
プラグインのディレクトリ構成
.qoder-plugin/plugin.json は Qoder が推奨する manifest 配置です。宣言が無い場合も CLI は慣例に従って読み込み、ディレクトリ名をプラグイン名として扱います。慣例ディレクトリは存在すれば自動発見、無ければ無視されます。
| ディレクトリ / ファイル | 用途 |
|---|---|
commands/ | カスタムスラッシュコマンドを登録。~/.qoder/commands/ と同じ構造 |
agents/ | カスタム子 Agent を登録 |
skills/ | Skill を登録。~/.qoder/skills/ と同じ構造 |
hooks/hooks.json | Hook 設定。{ "hooks": ... } ラップ形式で、内側の hooks の値が settings.json の hooks フィールドと同じ構造 |
output-styles/ | カスタム出力スタイル |
bin/ | プラグインの実行ファイル |
.mcp.json | プラグイン同梱の MCP server 宣言 |
agents/ で配布する Subagent も isolation: worktree を宣言できます。隔離されたコピーで実行したい実装系 Subagent に向いています。
manifest フィールド
plugin.json は name のみ必須で、他のフィールドはすべて省略可能です。
| フィールド | 必須 | 説明 |
|---|---|---|
name | はい | プラグインの一意な識別子。空白不可、kebab-case 推奨 (例: my-plugin) |
version | いいえ | セマンティックバージョン (例: 1.0.0) |
description | いいえ | 短い説明 |
author | いいえ | 著者情報 |
homepage | いいえ | ドキュメントやホームページの URL |
repository | いいえ | ソースリポジトリの URL |
license | いいえ | SPDX ライセンス識別子 (例: MIT) |
keywords | いいえ | 検索・分類用のタグ配列 |
上級: manifest ではcommands/agents/skills/hooks/outputStylesを明示的に宣言して、デフォルトのディレクトリ慣例の上書きやインラインコンテンツの利用も可能です (manifest のフィールド名は camelCaseoutputStyles、対応する慣例ディレクトリ名はoutput-styles/の点に注意)。明示しない場合、CLI は上記の慣例に従って自動発見します。
インストールスコープ
プラグインは 3 種類のスコープにインストールできます:
| スコープ | 説明 | 用途 |
|---|---|---|
user | グローバル。現在のユーザーのすべてのプロジェクトに適用 (デフォルト) | 個人がよく使うプラグイン |
project | 現在のプロジェクトのみ。プロジェクトレベル settings.json に書き込み、git にコミットしてチーム共有可 | チーム共有のプロジェクト固有プラグイン |
local | 現在のプロジェクトのみ。プロジェクトローカル settings.local.json に書き込み、.gitignore への追加を推奨 | ローカル実験用プラグイン |
コマンド
プラグイン関連のコマンドは qoder plugins サブコマンドにまとまっており、エイリアスは plugin です。
インストール: plugins install
ローカルディレクトリパスからインストール:
| 引数 / オプション | 説明 |
|---|---|
<plugin> | ローカルプラグインディレクトリのパス (絶対、相対、~/... いずれも可) |
-s, --scope <scope> | インストールスコープ: user (デフォルト)、project、local |
/plugins reload を実行すると変更が反映されます。
アンインストール: plugins uninstall
remove / rm。
| 引数 / オプション | 説明 |
|---|---|
<plugin> | インストール済みプラグイン名 |
-s, --scope <scope> | 対象スコープ: user (デフォルト)、project、local |
--keep-data | プラグインのデータディレクトリを保持 |
有効化 / 無効化: plugins enable / plugins disable
| 引数 / オプション | 説明 |
|---|---|
<plugin> | インストール済みプラグイン名 |
-s, --scope <scope> | 書き込み先スコープ。省略時は自動判定 |
-a, --all | (disable のみ) スコープ内で有効化されているすべてのプラグインを一括無効化 |
settings.json の enabledPlugins フィールドを更新することで行われます。無効化されたプラグインは新しいセッションで読み込まれません。
一覧: plugins list
| オプション | 説明 |
|---|---|
--json | JSON 出力 |
-o, --output-format <format> | text または json (--json と等価) |
--plugin-dir <dirs...> | 指定したディレクトリのプラグインを追加でスキャンしてリストにマージ (自動インストールはしません) |
検証: plugins validate
ローカルプラグインディレクトリが慣例に沿っているか検証します。開発時に便利:
validate 自体はそれで失敗しません。plugins install でローカルプラグインをインストールするときは、認識可能なコンポーネントまたはリソースが少なくとも 1 つ必要です (慣例ディレクトリでも、manifest で明示的に宣言されたリソースでも構いません)。
推奨:.qoder-plugin/plugin.jsonでname、version等のメタ情報を必ず宣言してください。Qoder が推奨するプラグインの組織方法です——宣言が無い場合、plugins listやenabledPlugins設定などの場所でディレクトリ名がそのまま識別子として使われ、環境間での識別や共有がしにくくなります。
enabledPlugins 設定
有効化 / 無効化の状態は settings.json の enabledPlugins フィールドに保存されます:
true: プラグインを有効化false: プラグインを明示的に無効化
設定キーはインストール済みのプラグイン ID と完全一致する必要があります (ローカルインストールしたプラグインの ID はこのフィールドを直接編集するより、name@local形式)。plugins listで各プラグインの識別子を確認できます。
plugins enable / plugins disable の利用を推奨します。スコープ選択や依存関係などをコマンドが処理してくれます。
プラグイン Hook の書き方
プラグインは hooks/hooks.json で独自の Hook を宣言できます。ファイルはラップ形式です: トップレベルがオブジェクトで、その中の hooks フィールドの値が settings.json の hooks フィールドと同じ構造になります:
プラグイン由来の Hook 実行時には次の 2 つの環境変数が追加されます:settings.jsonとの違い:settings.jsonには直接hooksフィールドを書きますが、プラグインのhooks/hooks.jsonは外側に{ "hooks": ... }のラップが必要です。
| 環境変数 | 説明 |
|---|---|
QODER_PLUGIN_ROOT | 現在のプラグインのインストールルートディレクトリ |
QODER_PLUGIN_DATA | 現在のプラグインのデータディレクトリ (インストールディレクトリとは別。アップグレードを跨いで状態を保持しやすい) |
マーケットプレイス(Marketplace)
マーケットプレイスはプラグインの集中配布ソースです。マーケットプレイスを追加することで、ローカルディレクトリを手動管理せずにプラグインを検索・インストールできます。
マーケットプレイスの追加
複数のソース形式に対応しています:
設定済みマーケットプレイスの一覧
マーケットプレイスの更新
ソースからプラグインカタログを再取得します:
マーケットプレイスの削除
マーケットプレイスからプラグインをインストール
マーケットプレイスを追加した後、プラグイン名でインストールできます:
name@marketplace-name の形式になります。