メインコンテンツへスキップ

プラグインのエントリーポイント

すべてのプラグインはデフォルトのエントリーオブジェクトを export します。SDK は、 それらを作成するための 3 つのヘルパーを提供します。
手順ガイドを探していますか? Channel Plugins または Provider Plugins のステップごとのガイドを参照してください。

definePluginEntry

Import: openclaw/plugin-sdk/plugin-entry provider plugin、tool plugin、hook plugin、およびメッセージングチャンネルではない ものに使用します。
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";

export default definePluginEntry({
  id: "my-plugin",
  name: "My Plugin",
  description: "Short summary",
  register(api) {
    api.registerProvider({
      /* ... */
    });
    api.registerTool({
      /* ... */
    });
  },
});
FieldTypeRequiredDefault
idstringYes
namestringYes
descriptionstringYes
kindstringNo
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchemaNoEmpty object schema
register(api: OpenClawPluginApi) => voidYes
  • idopenclaw.plugin.json マニフェストと一致している必要があります。
  • kind は排他的スロット用です: "memory" または "context-engine"
  • configSchema は遅延評価のために関数にできます。
  • OpenClaw はそのスキーマを初回アクセス時に解決してメモ化するため、高コストなスキーマ ビルダーは 1 回しか実行されません。

defineChannelPluginEntry

Import: openclaw/plugin-sdk/channel-core チャンネル固有の配線で definePluginEntry をラップします。自動的に api.registerChannel({ plugin }) を呼び出し、任意のルートヘルプ CLI metadata シームを公開し、 登録モードに応じて registerFull を制御します。
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";

export default defineChannelPluginEntry({
  id: "my-channel",
  name: "My Channel",
  description: "Short summary",
  plugin: myChannelPlugin,
  setRuntime: setMyRuntime,
  registerCliMetadata(api) {
    api.registerCli(/* ... */);
  },
  registerFull(api) {
    api.registerGatewayMethod(/* ... */);
  },
});
FieldTypeRequiredDefault
idstringYes
namestringYes
descriptionstringYes
pluginChannelPluginYes
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchemaNoEmpty object schema
setRuntime(runtime: PluginRuntime) => voidNo
registerCliMetadata(api: OpenClawPluginApi) => voidNo
registerFull(api: OpenClawPluginApi) => voidNo
  • setRuntime は登録中に呼び出されるため、ランタイム参照を保存できます (通常は createPluginRuntimeStore を使います)。CLI metadata の 取得中はスキップされます。
  • registerCliMetadataapi.registrationMode === "cli-metadata"api.registrationMode === "full" の両方で実行されます。 ルートヘルプを非アクティブのまま保ちつつ、通常の CLI コマンド登録を full plugin load と互換に保つため、 チャンネル所有の CLI descriptor の正規の置き場所としてこれを使ってください。
  • registerFullapi.registrationMode === "full" のときだけ実行されます。setup-only の読み込み中はスキップされます。
  • definePluginEntry と同様に、configSchema は遅延ファクトリーにでき、 OpenClaw は解決済みスキーマを初回アクセス時にメモ化します。
  • プラグイン所有のルート CLI コマンドでは、コマンドを ルート CLI parse tree から消さずに lazy-load のままにしたい場合、 api.registerCli(..., { descriptors: [...] }) を優先してください。channel plugin では、 それらの descriptor は registerCliMetadata(...) から登録し、registerFull(...) はランタイム専用の処理に集中させてください。
  • registerFull(...) が gateway RPC method も登録する場合は、それらを plugin 固有の prefix に保ってください。予約済みの core admin namespace(config.*exec.approvals.*wizard.*update.*)は常に operator.admin に強制されます。

defineSetupPluginEntry

Import: openclaw/plugin-sdk/channel-core 軽量な setup-entry.ts ファイル用です。ランタイムや CLI の配線を持たず、 単に { plugin } を返します。
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";

export default defineSetupPluginEntry(myChannelPlugin);
OpenClaw は、チャンネルが無効、未設定、または遅延読み込みが有効な場合、 full entry の代わりにこれを読み込みます。これが重要になる場面については Setup and Config を参照してください。 実際には、defineSetupPluginEntry(...) は次の狭い setup helper ファミリーと組み合わせて使ってください。
  • openclaw/plugin-sdk/setup-runtime は、import-safe な setup patch adapter、 lookup-note 出力、 promptResolvedAllowFromsplitSetupEntries、委譲 setup proxy などの ランタイムセーフな setup helper 用
  • openclaw/plugin-sdk/channel-setup は任意インストールの setup surface 用
  • openclaw/plugin-sdk/setup-tools は setup / install CLI / archive / docs helper 用
重い SDK、CLI 登録、長寿命ランタイム service は full entry に置いてください。

登録モード

api.registrationMode は、プラグインがどのように読み込まれたかを示します。
ModeWhen何を登録するか
"full"通常の gateway 起動時すべて
"setup-only"無効または未設定のチャンネルチャンネル登録のみ
"setup-runtime"ランタイム利用可能な setup フローチャンネル登録に加え、full entry が読み込まれる前に必要な軽量ランタイムのみ
"cli-metadata"ルートヘルプ / CLI metadata 取得CLI descriptor のみ
defineChannelPluginEntry は、この分岐を自動的に処理します。チャンネルに definePluginEntry を直接使う場合は、自分でモードを確認してください。
register(api) {
  if (api.registrationMode === "cli-metadata" || api.registrationMode === "full") {
    api.registerCli(/* ... */);
    if (api.registrationMode === "cli-metadata") return;
  }

  api.registerChannel({ plugin: myPlugin });
  if (api.registrationMode !== "full") return;

  // 重いランタイム専用の登録
  api.registerService(/* ... */);
}
"setup-runtime" は、setup-only の起動サーフェスが full の bundled channel runtime に再突入せずに存在しなければならない期間として扱ってください。 適しているのは、チャンネル登録、setup-safe な HTTP route、setup-safe な gateway method、 および委譲 setup helper です。重い background service、CLI registrar、 provider / client SDK の bootstrap は、引き続き "full" に属します。 特に CLI registrar について:
  • registrar が 1 つ以上のルートコマンドを所有し、 最初の呼び出し時に OpenClaw に実際の CLI module を lazy-load させたい場合は descriptors を使ってください
  • それらの descriptor が、その registrar によって公開されるすべてのトップレベルコマンド root をカバーしていることを確認してください
  • commands 単独は eager な互換パスにのみ使ってください

プラグイン形状

OpenClaw は、読み込まれたプラグインをその登録動作によって分類します。
Shape説明
plain-capability1 種類の capability のみ(例: provider のみ)
hybrid-capability複数種類の capability(例: provider + speech)
hook-onlyhook のみで、capability はなし
non-capabilitytools / commands / services はあるが capability はなし
プラグインの形状を確認するには openclaw plugins inspect <id> を使ってください。

関連