options.plugins を使用して、ローカルプラグインディレクトリを現在のセッションに読み込みます。SDK は各ローカルプラグインを --plugin-dir <path> 起動パラメータに変換します。プラグインに含まれる commands、agents、skills、MCP servers はすべて今回のセッションの機能発見の対象になります。
ローカルプラグインの読み込み
--plugin-dir が出力されます。
💡 Python ではquery()は単発のメッセージストリームで、ハンドシェイク後に init レスポンスを照会できません。プラグインが提供するコマンド / agent / skill を読むには、QoderSDKClientを使ってconnect()後にget_server_info()を呼ぶか、メッセージストリームでSystemMessage(subtype='init')を捕捉してmessage.dataを自分で読んでください。完全な plugin inventory はclient.list_plugins()で取得します。
プラグインディレクトリレイアウト
ローカルプラグインは通常以下を含むことができます:
.qoder-plugin/plugin.json はプラグイン名、バージョン、説明を宣言するために使用します。その他のディレクトリはファイルタイプに応じて CLI が自動的にスキャンします。
SDK はパスが存在するか / 妥当かを検証しません。
- 存在しない
--plugin-dirパスは SDK モードではサイレントに無視され、セッションは正常に初期化されます。 - 破損したフロントマター /
.mcp.jsonは init をブロックしません。破損したコマンドは init レスポンスに表示されません。 - plugin のロード失敗を明示的に診断したい場合、現時点では リロード後の error_count が唯一のフォールバックです。
プラグインが提供する slash commands
プラグイン内の commands/*.md は初期化結果に現れ、名前は <plugin>:<cmd> の修飾形式になります:
プラグインが提供する agents
プラグイン内の agents/*.md は初期化結果に現れます。SDK はこのリストを直接取得する簡便メソッドを提供します:
プラグインが提供する skills
プラグイン内の skills/<name>/SKILL.md はプラグイン修飾名(plugin:skill)で登録されます。options.skills でメインセッションでのコンテキスト可視性と呼び出しポリシーを制御できます:修飾名を渡して特定 skill を有効化、'all' で発見済みすべてを有効化、省略で CLI デフォルトポリシー。Skills ドキュメント を参照してください。
プラグインが提供する MCP servers
プラグイン内の .mcp.json は CLI が起動し、MCP 状態に組み込まれます:
インストール済み同名プラグインの一時的な上書き
options.plugins で読み込まれたローカルプラグインはセッションスコープです。現在のセッション内で既にインストールされているプラグインと同名の場合、ローカルプラグインが今回のセッションの機能発見で優先されます。この機能はプラグインの開発、デバッグ、段階的検証に適しています。
実行中の Plugins リロード
plugin ディレクトリが変わった場合、同じセッション内で reloadPlugins() / reload_plugins() を呼ぶと、CLI が plugin リソースを再スキャンします。
- プラグイン開発時に
commands/*.mdを追加・削除した後のリフレッシュ。 - ローカルプラグインのインストールまたは更新後、ホストアプリケーションを再起動せずに反映。
- ホスト UI でリロード後の commands、agents、plugins、MCP 状態を表示する必要がある場合。
注意:Python ではreload_plugins()はQoderSDKClient(streaming)モードでのみ意味を持ちます。単発のquery()ストリームにはランタイム制御チャンネルがありません。
Options クイックリファレンス
| フィールド(TypeScript / Python) | 説明 |
|---|---|
plugins / plugins | ローカル plugin ディレクトリをロード。{ type: 'local', path } が一般的 |
settings / settings | CLI に透過する settings。enabledPlugins、pluginConfigs などを含められる |
settingSources / setting_sources | CLI が読む settings ソースを制御 |
settings.enabledPlugins でプラグインの有効状態を制御し、settings.pluginConfigs で MCP server 置換などのプラグイン設定を提供します。
戻り値リファレンス
初期化結果
initializationResult()(TypeScript)/ client.get_server_info()(Python)は、セッションで発見された commands、agents、skills などの初期化リソースを返します。安定した plugin inventory フィールドは含まれません。完全な戻り値型は SDK References を参照してください。
プラグインの一覧
plugins フィールドではなくこのメソッドを使ってください。
各項目は PluginDetails で、id、name、source、path、version、scope、enabled、canDisable と、skills、agents、mcpServers、commands、hooks に分類された resources の概要を含みます。
プラグインのリロード
reloadPlugins() / reload_plugins() の戻り値:
ベストプラクティス
- 初期化リソースと plugin 一覧を区別する:発見済みの commands、agents、skills は初期化結果で表示し、plugin inventory は
listPlugins()/list_plugins()で表示します。初期化結果の skills は発見リストであり、メインセッションの呼び出し可能セットではありません。 - プラグイン開発時は
options.pluginsを使用:現在のセッションにのみ影響し、ユーザーのグローバルインストール状態を変更する必要がありません。 - リロード前にユーザーへの通知を用意する:リロードは CLI にディスク再スキャンをさせ、利用可能リソースのリストが一時的に変わる可能性があります。UI も同期して更新するのが望ましいです。
- エラー診断には
error_countを確認:リロード後にerror_count > 0の場合はプラグインリソースの読み込みに失敗があることを示しており、そのソースをユーザーに表示すべきです。
現在の制限事項
- 一部の qodercli バージョンでは、ローカル plugin の commands、agents、MCP は初期化結果に正常に現れる一方、plugin skills が発見リストに現れないことがあります。これは CLI 側の発見チェーンの問題です。
- 現在の qodercli 実装では、存在しない
--plugin-dirパスは SDK モードで黙って無視されます。plugin ロード失敗を明示的に診断するには、現時点ではリロード後のerror_countが唯一の手段です。 - リロードは SDK が公開するランタイム制御 API です。現在の CLI バージョンが
this._plugins関連の内部エラーを返す場合は、修正済みの qodercli にアップグレードしてください。