package.json メタデータ)、マニフェスト(openclaw.plugin.json)、セットアップエントリ、設定スキーマのリファレンス。
パッケージメタデータ
package.json には、その Plugin が提供する内容を Plugin システムに伝える openclaw フィールドが必要です:
- チャンネル Plugin
- プロバイダー Plugin / ClawHub ベースライン
ClawHub で外部公開するには、
compat と build が必要です。標準の公開用スニペットは docs/snippets/plugin-publish/ にあります。openclaw フィールド
string[]
エントリポイントファイル(パッケージルートからの相対パス)。ワークスペースおよび git チェックアウトでの開発に使用できる有効なソースエントリです。
string[]
extensions に対応するビルド済み JavaScript ファイルです。OpenClaw がインストール済み npm パッケージを読み込む場合に優先されます。ソースとビルド済みファイルの解決順序については、SDK エントリポイントを参照してください。string
セットアップ専用の軽量エントリ(任意)。
string
setupEntry に対応するビルド済み JavaScript ファイルです。setupEntry も設定する必要があります。object
{ id, label } のフォールバック用 Plugin 識別情報です。ID やラベルを導出できるチャンネル/プロバイダーメタデータが Plugin にない場合に使用されます。object
セットアップ、選択画面、クイックスタート、ステータス画面用のチャンネルカタログメタデータ。
object
インストールのヒント:
npmSpec、localPath、defaultChoice、minHostVersion、expectedIntegrity、allowInvalidConfigRecovery、requiredPlatformPackages。object
起動時の動作フラグ。
object
この Plugin がサポートする
pluginApi バージョン範囲。ClawHub への外部公開には必須です。プロバイダー ID(
providers: string[])はマニフェストメタデータであり、パッケージメタデータではありません。ここではなく openclaw.plugin.json で宣言してください。詳しくは Plugin マニフェストを参照してください。openclaw.channel
openclaw.channel は、ランタイムを読み込む前にチャンネルを検出し、セットアップ画面に表示するための軽量なパッケージメタデータです。
チャンネル所有のセットアップフィールド
チャンネル Plugin では、defineChannelSetupContract(...) を使用してランタイムコード内にセットアップフィールドを一度だけ定義し、それに対応するシリアライズ可能な投影を openclaw.channel.setup.fields で公開する必要があります。ランタイム定義は Plugin ローカルの入力型を推論し、ガイド付きと非対話型の両方の値を解析し、チャンネル固有のキーがコア型に混入しないようにします。パッケージメタデータにより、openclaw channels add <channel-id> --help と openclaw channels add --channel <channel-id> --help は Plugin を読み込まずに、選択されたチャンネルのオプションだけを検出できます。
string、boolean、integer、string-list、choice です。認証情報には sensitive: true を使用してください。各フィールドキーは、長形式 CLI フラグの属性名をキャメルケースにしたものと一致する必要があります。否定形も含まれ、たとえば --api-token に対しては apiToken となります。真偽値フィールドでは、肯定形と --no-* 形式の両方が必要な場合、cli.negatedFlags を追加できます。channel、account、アカウント表示用の name は、引き続き共有制御エンベロープです。
リリース済みの setup/ChannelSetupInput アダプターは、既存の外部 Plugin で引き続き使用できます。新しい Plugin では setupContract を公開してください。両方が存在する場合、OpenClaw は常にこちらを優先します。
例:
exposure は以下をサポートします:
configured:設定済み/ステータス形式の一覧画面にチャンネルを含めるsetup:対話型のセットアップ/設定選択画面にチャンネルを含めるdocs:ドキュメント/ナビゲーション画面でチャンネルを一般公開として示す
openclaw.install
openclaw.install はパッケージメタデータであり、マニフェストメタデータではありません。
オンボーディングの動作
オンボーディングの動作
対話型オンボーディングでは、オンデマンドインストールのサーフェスに
openclaw.install を使用します。Plugin がランタイムの読み込み前にプロバイダー認証の選択肢またはチャネルのセットアップ/カタログメタデータを公開している場合、オンボーディングは ClawHub、npm、またはローカルインストールを提示し、Plugin をインストールまたは有効化してから、選択されたフローを続行できます。ClawHub の選択肢は clawhubSpec を使用し、存在する場合は優先されます。npm の選択肢には、レジストリの npmSpec を含む信頼済みカタログメタデータが必要です(正確なバージョンと expectedIntegrity は任意の固定値であり、設定されている場合はインストール/更新時に適用されます)。「何を表示するか」は openclaw.plugin.json に、「どのようにインストールするか」は package.json に保持してください。minHostVersion の適用
minHostVersion の適用
minHostVersion が設定されている場合、インストールと非バンドルのマニフェストレジストリ読み込みの両方で適用されます。古いホストは外部 Plugin をスキップし、無効なバージョン文字列は拒否されます。バンドルされたソース Plugin は、ホストのチェックアウトと同じバージョンであると見なされます。固定された npm インストール
固定された npm インストール
固定された npm インストールでは、正確なバージョンを
npmSpec に保持し、期待されるアーティファクトの整合性を追加します。allowInvalidConfigRecovery の適用範囲
allowInvalidConfigRecovery の適用範囲
allowInvalidConfigRecovery は、壊れた設定を一般的に迂回するためのものではありません。これはバンドル Plugin の限定的な復旧専用であり、バンドル Plugin のパスが欠落している場合や、同じ Plugin に対する古い channels.<id> エントリなど、既知のアップグレード残存物を再インストール/セットアップによって修復できるようにします。無関係な理由で設定が壊れている場合、インストールは引き続きフェイルクローズし、オペレーターに openclaw doctor --fix を実行するよう通知します。完全読み込みの遅延
チャネル Plugin は、次の設定により遅延読み込みを選択できます。setupEntry のみを読み込みます。完全なエントリは、Gateway がリッスンを開始した後に読み込まれます。
セットアップ/完全エントリが Gateway RPC メソッドを登録する場合は、Plugin 固有のプレフィックスを使用してください。予約済みのコア管理名前空間(config.*、exec.approvals.*、wizard.*、update.*)は引き続きコアが所有し、常に operator.admin に正規化されます。
Plugin マニフェスト
すべてのネイティブ Plugin は、パッケージルートにopenclaw.plugin.json を含める必要があります。OpenClaw はこれを使用して、Plugin コードを実行せずに設定を検証します。
channels を追加します(プロバイダー Plugin では providers を追加します)。
ClawHub への公開
Skills と Plugin パッケージでは、ClawHub への公開コマンドが異なります。Plugin パッケージには、パッケージ固有のコマンドを使用してください。clawhub skill publish <path> は、Plugin パッケージではなく Skills フォルダーを公開するための別のコマンドです。ClawHub への公開を参照してください。セットアップエントリ
setup-entry.ts は index.ts の軽量な代替であり、OpenClaw がセットアップ用サーフェス(オンボーディング、設定修復、無効化されたチャネルの検査)のみを必要とする場合に読み込みます。
defineSetupPluginEntry(...) の代わりに openclaw/plugin-sdk/channel-entry-contract の defineBundledChannelSetupEntry(...) を使用できます。このバンドル契約では、オプションの runtime エクスポートもサポートされるため、セットアップ時のランタイム配線を軽量かつ明示的に保てます。
OpenClaw が完全なエントリの代わりに setupEntry を使用する場合
OpenClaw が完全なエントリの代わりに setupEntry を使用する場合
- チャネルが無効化されているものの、セットアップ/オンボーディング用サーフェスが必要な場合。
- チャネルが有効化されているものの、未設定の場合。
- 遅延読み込みが有効な場合(
deferConfiguredChannelFullLoadUntilAfterListen)。
setupEntry が登録する必要があるもの
setupEntry が登録する必要があるもの
- チャネル Plugin オブジェクト(
defineSetupPluginEntry経由)。 - Gateway のリッスン開始前に必要なすべての HTTP ルート。
- 起動中に必要なすべての Gateway メソッド。
config.* や update.* などの予約済みコア管理名前空間は避ける必要があります。setupEntry に含めるべきでないもの
setupEntry に含めるべきでないもの
- CLI 登録。
- バックグラウンドサービス。
- 重いランタイムインポート(暗号化、SDK)。
- 起動後にのみ必要な Gateway メソッド。
限定的なセットアップヘルパーのインポート
頻繁に実行されるセットアップ専用パスでは、セットアップサーフェスの一部のみが必要な場合、広範なplugin-sdk/setup アンブレラよりも限定的なセットアップヘルパーの境界を優先してください。
moveSingleAccountChannelSectionToDefaultAccount(...) などの設定パッチヘルパーを含む、共有セットアップツールボックス全体が必要な場合は、より広範な plugin-sdk/setup の境界を使用してください。
固定されたセットアップウィザードの文言には createSetupTranslator(...) を使用してください。これは OPENCLAW_LOCALE、LC_ALL、LC_MESSAGES、LANG の順に、空白ではない最初の値を使用し、その後英語にフォールバックします。明示的な英語の上書きには OPENCLAW_LOCALE=en を設定してください。Plugin 固有のセットアップテキストは Plugin 所有のコードに保持し、共有カタログキーは共通のセットアップラベル、ステータステキスト、および公式のバンドル Plugin のセットアップ文言にのみ使用してください。
セットアップパッチアダプターは、インポート時にもホットパスで安全なままです。バンドルされた単一アカウント昇格の契約サーフェス検索は遅延実行されるため、plugin-sdk/setup-runtime をインポートしても、アダプターが実際に使用される前にバンドル契約サーフェスの検出が先行して読み込まれることはありません。
チャネル所有のセットアップ入力フィールド
ChannelSetupInput は、セットアップ呼び出し元とチャネル
Plugin が共有する汎用エンベロープです。恒久的に型付けされるフィールドは name、token、tokenFile、
useEnv、allowFrom、defaultTo です。Plugin 所有の追加キーも
ランタイム入力オブジェクトに含めることができますが、共有型では
インデックスシグネチャを宣言しません。各 Plugin は、独自のセットアップフィールドを宣言して絞り込むか、
アダプター境界で Plugin 所有のスキーマを使用して検証する必要があります。
ChannelSetupInput に直接宣言されていましたが、外部ソースとの互換性のため、一時的に型定義が維持されています。
これらは非推奨です。2026-07-22 に公開済みのツリー外
チャンネルプラグイン 426 件をレジストリで調査した結果、読み取り元のない 21 個のフィールドを削除し、既知の
読み取り元がある 22 個を維持しました。維持された各フィールドは、公開済みプラグインから読み取られなくなり次第削除されます。
バージョン境界は必要ありません。新規および同梱プラグインは、この
階層に依存してはなりません。所有するフィールドをローカルで宣言してください。
チャンネル所有の単一アカウント昇格
チャンネルが単一アカウント用のトップレベル設定からchannels.<id>.accounts.* にアップグレードされると、デフォルトの共有動作により、昇格対象のアカウントスコープ値が accounts.default に移動します。
各チャンネルプラグインは、そのセットアップアダプターを通じて、この昇格を拡張または限定できます。
singleAccountKeysToMove: 昇格対象のアカウントに移動する追加のトップレベルキーnamedAccountPromotionKeys: 名前付きアカウントがすでに存在する場合、これらのキーのみを昇格対象のアカウントに移動します。共有ポリシー/配信キーはチャンネルルートに残りますresolveSingleAccountPromotionTarget(...): 昇格対象の値を受け取る既存アカウントを選択します
singleAccountKeysToMove が存在すると、昇格コントラクトが完全であることを示します。従来のキー昇格を無効にする場合でも、空の配列としてこのフィールドを宣言してください。このフィールドを省略したアダプターでは、すでに公開されているプラグイン向けに、読み取り元に裏付けられた宣言前昇格階層が維持されます。2026-07-22 のレジストリ調査では、公開済みの依存先がない 23 個のキーを削除し、6 個の共通キーとセットアップ専用の rooms キーを維持しました。維持された各キーは、公開済みの読み取り元が宣言へ移行し次第削除されます。バージョン境界は必要ありません。
doctor が軽量の同梱セットアップ成果物からこれらの宣言を読み込む必要がある場合は、プラグインパッケージのマニフェストで openclaw.setupFeatures.configPromotion: true を宣言してください。セットアップ専用のプラグインサーフェスと完全なチャンネルプラグインは、同じ宣言を公開する必要があります。
解決済みのプラグインを指定して moveSingleAccountChannelSectionToDefaultAccount(...) を呼び出す場合は、そのセットアップアダプターを setupSurface として渡してください。呼び出し元から渡されたセットアップサーフェスは、読み込み済みおよび同梱の検索結果より優先されるため、スコープ付きまたはセットアップ専用のプラグインをグローバル登録から独立させられます。
Matrix は現在の同梱例です。名前付き Matrix アカウントがちょうど 1 つすでに存在する場合、または
defaultAccount が Ops のような既存の非正規キーを指している場合、昇格では新しい accounts.default エントリを作成せず、そのアカウントを維持します。設定スキーマ
プラグイン設定は、マニフェスト内の JSON Schema に対して検証されます。ユーザーは次のようにプラグインを設定します。api.pluginConfig として受け取ります。
チャンネル固有の設定には、代わりにチャンネル設定セクションを使用します。
チャンネル設定スキーマの構築
buildChannelConfigSchema を使用して、Zod スキーマをプラグイン所有の設定成果物で使用される ChannelConfigSchema ラッパーに変換します。
openclaw.plugin.json#channelConfigs に反映し、設定スキーマ、セットアップ、UI サーフェスがランタイムコードを読み込まずに channels.<id> を検査できるようにしてください。
セットアップウィザード
チャンネルプラグインは、openclaw onboard 用の対話型セットアップウィザードを提供できます。ウィザードは ChannelPlugin 上の ChannelSetupWizard オブジェクトです。
ChannelSetupWizard は、textInputs、dmPolicy、allowFrom、groupAccess、prepare、finalize などもサポートします。完全な同梱例については、Discord プラグインの src/setup-core.ts を参照してください。
共有 allowFrom プロンプト
共有 allowFrom プロンプト
標準の
note -> prompt -> parse -> merge -> patch フローだけを必要とする DM 許可リストプロンプトには、openclaw/plugin-sdk/setup の共有セットアップヘルパーである createPromptParsedAllowFromForAccount(...) と createTopLevelChannelParsedAllowFromPrompt(...) を優先して使用してください。標準のチャンネルセットアップ状態
標準のチャンネルセットアップ状態
ラベル、スコア、任意の追加行だけが異なるチャンネルセットアップ状態ブロックには、各プラグインで同じ
status オブジェクトを独自実装する代わりに、openclaw/plugin-sdk/setup の createStandardChannelSetupStatus(...) を優先して使用してください。任意のチャンネルセットアップサーフェス
任意のチャンネルセットアップサーフェス
特定のコンテキストでのみ表示する任意のセットアップサーフェスには、任意インストールサーフェスの片方だけが必要な場合、
openclaw/plugin-sdk/channel-setup の createOptionalChannelSetupSurface を使用します。plugin-sdk/channel-setup は低レベルの createOptionalChannelSetupAdapter(...) および createOptionalChannelSetupWizard(...) ビルダーも公開しています。生成された任意アダプター/ウィザードは、実際の設定書き込みに対してフェイルクローズします。validateInput、applyAccountConfig、finalize で同じインストール必須メッセージを再利用し、docsPath が設定されている場合はドキュメントへのリンクを追加します。バイナリベースのセットアップヘルパー
バイナリベースのセットアップヘルパー
バイナリベースのセットアップ UI では、同じバイナリ/状態連携を各チャンネルにコピーする代わりに、共有委譲ヘルパーを優先して使用してください。
createDetectedBinaryStatus(...): ラベル、ヒント、スコア、バイナリ検出だけが異なる状態ブロック向けcreateCliPathTextInput(...): パスベースのテキスト入力向けcreateDelegatedSetupWizardProxy(...):setupEntryが状態、準備、または完了処理を、より重い完全版ウィザードへ遅延委譲する必要がある場合createDelegatedTextInputShouldPrompt(...):setupEntryがtextInputs[*].shouldPromptの判断だけを委譲する必要がある場合
公開とインストール
外部プラグイン: ClawHub に公開してから、次のようにインストールします。- npm
- ClawHub のみ
- npm パッケージ指定
clawhub:、npm:、git:、または npm-pack: を使用してください。詳細はプラグインの管理を参照してください。npm ソースのインストールでは、
openclaw plugins install が ~/.openclaw/npm/projects 配下のプラグインごとのプロジェクトにパッケージをインストールし、ライフサイクルスクリプトを無効化します(--ignore-scripts)。プラグインの依存関係ツリーは純粋な JS/TS に保ち、postinstall ビルドを必要とするパッケージは避けてください。Gateway の起動時にプラグインの依存関係はインストールされません。npm/git/ClawHub のインストールフローが依存関係の収束を担います。ローカルプラグインでは、依存関係がすでにインストールされている必要があります。
関連項目
- プラグインの構築 — ステップごとの「はじめに」ガイド
- プラグインマニフェスト — 完全なマニフェストスキーマのリファレンス
- SDK エントリーポイント —
definePluginEntryとdefineChannelPluginEntry