Skip to main content
Plugin のパッケージ化(package.json メタデータ)、マニフェスト(openclaw.plugin.json)、セットアップエントリ、設定スキーマのリファレンス。
手順を追った解説をお探しですか? ハウツーガイドでは、具体的な文脈に沿ってパッケージ化を説明しています:チャンネル Pluginプロバイダー Plugin

パッケージメタデータ

package.json には、その Plugin が提供する内容を Plugin システムに伝える openclaw フィールドが必要です:
ClawHub で外部公開するには、compatbuild が必要です。標準の公開用スニペットは 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
インストールのヒント:npmSpeclocalPathdefaultChoiceminHostVersionexpectedIntegrityallowInvalidConfigRecoveryrequiredPlatformPackages
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> --helpopenclaw channels add --channel <channel-id> --help は Plugin を読み込まずに、選択されたチャンネルのオプションだけを検出できます。
サポートされるフィールド種別は、stringbooleanintegerstring-listchoice です。認証情報には sensitive: true を使用してください。各フィールドキーは、長形式 CLI フラグの属性名をキャメルケースにしたものと一致する必要があります。否定形も含まれ、たとえば --api-token に対しては apiToken となります。真偽値フィールドでは、肯定形と --no-* 形式の両方が必要な場合、cli.negatedFlags を追加できます。channelaccount、アカウント表示用の 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 が設定されている場合、インストールと非バンドルのマニフェストレジストリ読み込みの両方で適用されます。古いホストは外部 Plugin をスキップし、無効なバージョン文字列は拒否されます。バンドルされたソース Plugin は、ホストのチェックアウトと同じバージョンであると見なされます。
固定された npm インストールでは、正確なバージョンを npmSpec に保持し、期待されるアーティファクトの整合性を追加します。
allowInvalidConfigRecovery は、壊れた設定を一般的に迂回するためのものではありません。これはバンドル Plugin の限定的な復旧専用であり、バンドル Plugin のパスが欠落している場合や、同じ Plugin に対する古い channels.<id> エントリなど、既知のアップグレード残存物を再インストール/セットアップによって修復できるようにします。無関係な理由で設定が壊れている場合、インストールは引き続きフェイルクローズし、オペレーターに openclaw doctor --fix を実行するよう通知します。

完全読み込みの遅延

チャネル Plugin は、次の設定により遅延読み込みを選択できます。
有効にすると、OpenClaw は設定済みのチャネルであっても、リッスン開始前の起動フェーズでは setupEntry のみを読み込みます。完全なエントリは、Gateway がリッスンを開始した後に読み込まれます。
setupEntry が、Gateway のリッスン開始前に必要なすべての要素(チャネル登録、HTTP ルート、Gateway メソッド)を登録する場合にのみ、遅延読み込みを有効にしてください。完全なエントリが必須の起動機能を所有している場合は、デフォルトの動作を維持してください。
セットアップ/完全エントリが Gateway RPC メソッドを登録する場合は、Plugin 固有のプレフィックスを使用してください。予約済みのコア管理名前空間(config.*exec.approvals.*wizard.*update.*)は引き続きコアが所有し、常に operator.admin に正規化されます。

Plugin マニフェスト

すべてのネイティブ Plugin は、パッケージルートに openclaw.plugin.json を含める必要があります。OpenClaw はこれを使用して、Plugin コードを実行せずに設定を検証します。
チャネル Plugin では channels を追加します(プロバイダー Plugin では providers を追加します)。
設定のない Plugin でもスキーマを含める必要があります。空のスキーマも有効です。
完全なスキーマリファレンスについては、Plugin マニフェストを参照してください。

ClawHub への公開

Skills と Plugin パッケージでは、ClawHub への公開コマンドが異なります。Plugin パッケージには、パッケージ固有のコマンドを使用してください。
clawhub skill publish <path> は、Plugin パッケージではなく Skills フォルダーを公開するための別のコマンドです。ClawHub への公開を参照してください。

セットアップエントリ

setup-entry.tsindex.ts の軽量な代替であり、OpenClaw がセットアップ用サーフェス(オンボーディング、設定修復、無効化されたチャネルの検査)のみを必要とする場合に読み込みます。
これにより、セットアップフロー中に重いランタイムコード(暗号化ライブラリ、CLI 登録、バックグラウンドサービス)を読み込まずに済みます。 セットアップに安全なエクスポートをサイドカーモジュールに保持するバンドル済みワークスペースチャネルでは、defineSetupPluginEntry(...) の代わりに openclaw/plugin-sdk/channel-entry-contractdefineBundledChannelSetupEntry(...) を使用できます。このバンドル契約では、オプションの runtime エクスポートもサポートされるため、セットアップ時のランタイム配線を軽量かつ明示的に保てます。
  • チャネルが無効化されているものの、セットアップ/オンボーディング用サーフェスが必要な場合。
  • チャネルが有効化されているものの、未設定の場合。
  • 遅延読み込みが有効な場合(deferConfiguredChannelFullLoadUntilAfterListen)。
  • チャネル Plugin オブジェクト(defineSetupPluginEntry 経由)。
  • Gateway のリッスン開始前に必要なすべての HTTP ルート。
  • 起動中に必要なすべての Gateway メソッド。
これらの起動用 Gateway メソッドでも、config.*update.* などの予約済みコア管理名前空間は避ける必要があります。
  • CLI 登録。
  • バックグラウンドサービス。
  • 重いランタイムインポート(暗号化、SDK)。
  • 起動後にのみ必要な Gateway メソッド。

限定的なセットアップヘルパーのインポート

頻繁に実行されるセットアップ専用パスでは、セットアップサーフェスの一部のみが必要な場合、広範な plugin-sdk/setup アンブレラよりも限定的なセットアップヘルパーの境界を優先してください。 moveSingleAccountChannelSectionToDefaultAccount(...) などの設定パッチヘルパーを含む、共有セットアップツールボックス全体が必要な場合は、より広範な plugin-sdk/setup の境界を使用してください。 固定されたセットアップウィザードの文言には createSetupTranslator(...) を使用してください。これは OPENCLAW_LOCALELC_ALLLC_MESSAGESLANG の順に、空白ではない最初の値を使用し、その後英語にフォールバックします。明示的な英語の上書きには OPENCLAW_LOCALE=en を設定してください。Plugin 固有のセットアップテキストは Plugin 所有のコードに保持し、共有カタログキーは共通のセットアップラベル、ステータステキスト、および公式のバンドル Plugin のセットアップ文言にのみ使用してください。 セットアップパッチアダプターは、インポート時にもホットパスで安全なままです。バンドルされた単一アカウント昇格の契約サーフェス検索は遅延実行されるため、plugin-sdk/setup-runtime をインポートしても、アダプターが実際に使用される前にバンドル契約サーフェスの検出が先行して読み込まれることはありません。

チャネル所有のセットアップ入力フィールド

ChannelSetupInput は、セットアップ呼び出し元とチャネル Plugin が共有する汎用エンベロープです。恒久的に型付けされるフィールドは nametokentokenFileuseEnvallowFromdefaultTo です。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 つすでに存在する場合、または defaultAccountOps のような既存の非正規キーを指している場合、昇格では新しい accounts.default エントリを作成せず、そのアカウントを維持します。

設定スキーマ

プラグイン設定は、マニフェスト内の JSON Schema に対して検証されます。ユーザーは次のようにプラグインを設定します。
登録時、プラグインはこの設定を api.pluginConfig として受け取ります。 チャンネル固有の設定には、代わりにチャンネル設定セクションを使用します。

チャンネル設定スキーマの構築

buildChannelConfigSchema を使用して、Zod スキーマをプラグイン所有の設定成果物で使用される ChannelConfigSchema ラッパーに変換します。
コントラクトをすでに JSON Schema または TypeBox で記述している場合は、直接ヘルパーを使用すると、OpenClaw はメタデータパスで Zod から JSON Schema への変換を省略できます。
サードパーティ製プラグインでも、コールドパスのコントラクトは引き続きプラグインマニフェストです。生成された JSON Schema を openclaw.plugin.json#channelConfigs に反映し、設定スキーマ、セットアップ、UI サーフェスがランタイムコードを読み込まずに channels.<id> を検査できるようにしてください。

セットアップウィザード

チャンネルプラグインは、openclaw onboard 用の対話型セットアップウィザードを提供できます。ウィザードは ChannelPlugin 上の ChannelSetupWizard オブジェクトです。
ChannelSetupWizard は、textInputsdmPolicyallowFromgroupAccesspreparefinalize などもサポートします。完全な同梱例については、Discord プラグインの src/setup-core.ts を参照してください。
標準の note -> prompt -> parse -> merge -> patch フローだけを必要とする DM 許可リストプロンプトには、openclaw/plugin-sdk/setup の共有セットアップヘルパーである createPromptParsedAllowFromForAccount(...)createTopLevelChannelParsedAllowFromPrompt(...) を優先して使用してください。
ラベル、スコア、任意の追加行だけが異なるチャンネルセットアップ状態ブロックには、各プラグインで同じ status オブジェクトを独自実装する代わりに、openclaw/plugin-sdk/setupcreateStandardChannelSetupStatus(...) を優先して使用してください。
特定のコンテキストでのみ表示する任意のセットアップサーフェスには、openclaw/plugin-sdk/channel-setupcreateOptionalChannelSetupSurface を使用します。
任意インストールサーフェスの片方だけが必要な場合、plugin-sdk/channel-setup は低レベルの createOptionalChannelSetupAdapter(...) および createOptionalChannelSetupWizard(...) ビルダーも公開しています。生成された任意アダプター/ウィザードは、実際の設定書き込みに対してフェイルクローズします。validateInputapplyAccountConfigfinalize で同じインストール必須メッセージを再利用し、docsPath が設定されている場合はドキュメントへのリンクを追加します。
バイナリベースのセットアップ UI では、同じバイナリ/状態連携を各チャンネルにコピーする代わりに、共有委譲ヘルパーを優先して使用してください。
  • createDetectedBinaryStatus(...): ラベル、ヒント、スコア、バイナリ検出だけが異なる状態ブロック向け
  • createCliPathTextInput(...): パスベースのテキスト入力向け
  • createDelegatedSetupWizardProxy(...): setupEntry が状態、準備、または完了処理を、より重い完全版ウィザードへ遅延委譲する必要がある場合
  • createDelegatedTextInputShouldPrompt(...): setupEntrytextInputs[*].shouldPrompt の判断だけを委譲する必要がある場合

公開とインストール

外部プラグイン: ClawHub に公開してから、次のようにインストールします。
ベアパッケージ指定は、起動移行中に npm からインストールされます。ただし、名前が同梱または公式のプラグイン ID と一致する場合、OpenClaw は代わりにそのローカル/公式コピーを使用します。決定的なソース選択には clawhub:npm:git:、または npm-pack: を使用してください。詳細はプラグインの管理を参照してください。
リポジトリ内プラグイン: 同梱プラグインのワークスペースツリー配下に配置します。ビルド時に自動的に検出されます。
npm ソースのインストールでは、openclaw plugins install~/.openclaw/npm/projects 配下のプラグインごとのプロジェクトにパッケージをインストールし、ライフサイクルスクリプトを無効化します(--ignore-scripts)。プラグインの依存関係ツリーは純粋な JS/TS に保ち、postinstall ビルドを必要とするパッケージは避けてください。
Gateway の起動時にプラグインの依存関係はインストールされません。npm/git/ClawHub のインストールフローが依存関係の収束を担います。ローカルプラグインでは、依存関係がすでにインストールされている必要があります。
同梱パッケージのメタデータは明示的であり、Gateway の起動時にビルド済み JavaScript から推論されるものではありません。ランタイム依存関係は、それを所有するプラグインパッケージに属します。パッケージ化された OpenClaw の起動処理が、プラグインの依存関係を修復またはミラーリングすることはありません。

関連項目