メインコンテンツへスキップ
Plugin SDK は、Plugin とコアの間の型付きコントラクトです。このページは、何をインポートするか、および何を登録できるかのリファレンスです。
このページは、OpenClaw 内で openclaw/plugin-sdk/* を使う Plugin 作者向けです。Gateway 経由でエージェントを実行したい外部アプリ、スクリプト、ダッシュボード、CI ジョブ、IDE 拡張機能には、代わりに 外部アプリ向け Gateway 連携 を使用してください。
代わりにハウツーガイドを探していますか?Plugin の構築 から始めてください。チャネルには Channel plugins、モデルプロバイダーには Provider plugins、local AI CLI バックエンドには CLI backend plugins、ネイティブエージェント実行基盤には Agent harness plugins、ツールまたはライフサイクルフックには Plugin hooks を使用してください。

インポート規約

常に特定のサブパスからインポートしてください。
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
各サブパスは、小さく自己完結したモジュールです。これにより起動が高速に保たれ、循環依存の問題を防げます。チャネル固有のエントリ/ビルドヘルパーには openclaw/plugin-sdk/channel-core を優先してください。より広い包括的なサーフェスと、buildChannelConfigSchema などの共有ヘルパーには openclaw/plugin-sdk/core を使用してください。 チャネル設定では、チャネル所有の JSON Schema を openclaw.plugin.json#channelConfigs で公開します。plugin-sdk/channel-config-schema サブパスは、共有スキーマプリミティブと汎用ビルダー用です。OpenClaw の同梱 Plugin は、保持されている同梱チャネルスキーマに plugin-sdk/bundled-channel-config-schema を使用します。非推奨の互換性エクスポートは plugin-sdk/channel-config-schema-legacy に残っています。同梱スキーマのどちらのサブパスも、新しい Plugin のパターンではありません。
プロバイダーまたはチャネルのブランド付き便利シーム(例: openclaw/plugin-sdk/slack.../discord.../signal.../whatsapp)をインポートしないでください。同梱 Plugin は、自身の api.ts / runtime-api.ts バレル内で汎用 SDK サブパスを組み合わせます。コアの利用側は、それらの Plugin ローカルなバレルを使うか、必要性が本当にクロスチャネルである場合に狭い汎用 SDK コントラクトを追加してください。所有者による利用が追跡されている場合、少数の同梱 Plugin ヘルパーシームが生成されたエクスポートマップにまだ表示されます。これらは同梱 Plugin のメンテナンス専用であり、新しいサードパーティ Plugin の推奨インポートパスではありません。openclaw/plugin-sdk/discordopenclaw/plugin-sdk/telegram-account も、追跡されている所有者利用向けの非推奨互換性ファサードとして保持されています。これらのインポートパスを新しい Plugin にコピーしないでください。代わりに、注入されたランタイムヘルパーと汎用チャネル SDK サブパスを使用してください。

サブパスリファレンス

Plugin SDK は、領域別(Plugin エントリ、チャネル、プロバイダー、認証、ランタイム、ケイパビリティ、メモリ、予約済み同梱 Plugin ヘルパー)にグループ化された狭いサブパス群として公開されています。グループ化されリンクされた完全なカタログについては、Plugin SDK サブパス を参照してください。 コンパイラーエントリポイントのインベントリは scripts/lib/plugin-sdk-entrypoints.json にあります。パッケージエクスポートは、scripts/lib/plugin-sdk-private-local-only-subpaths.json に列挙されたリポジトリローカルのテスト/内部サブパスを差し引いた後の公開サブセットから生成されます。公開エクスポート数を監査するには pnpm plugin-sdk:surface を実行してください。同梱拡張のプロダクションコードで使われなくなって十分に古い非推奨の公開サブパスは scripts/lib/plugin-sdk-deprecated-public-subpaths.json で追跡され、広範な非推奨再エクスポートバレルは scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json で追跡されます。

登録 API

register(api) コールバックは、以下のメソッドを持つ OpenClawPluginApi オブジェクトを受け取ります。

ケイパビリティ登録

メソッド登録するもの
api.registerProvider(...)テキスト推論 (LLM)
api.registerModelCatalogProvider(...)テキストおよびメディア生成向けのモデルカタログ行
api.registerAgentHarness(...)実験的 ネイティブエージェント実行基盤 (Codex, Copilot)
api.registerCliBackend(...)ローカル CLI 推論バックエンド
api.registerChannel(...)メッセージングチャネル
api.registerEmbeddingProvider(...)再利用可能なベクトル埋め込みプロバイダー
api.registerSpeechProvider(...)テキスト読み上げ / STT 合成
api.registerRealtimeTranscriptionProvider(...)ストリーミングリアルタイム文字起こし
api.registerRealtimeVoiceProvider(...)双方向リアルタイム音声セッション
api.registerMediaUnderstandingProvider(...)画像/音声/動画解析
api.registerTranscriptSourceProvider(...)ライブまたはインポートされた会議トランスクリプトソース
api.registerImageGenerationProvider(...)画像生成
api.registerMusicGenerationProvider(...)音楽生成
api.registerVideoGenerationProvider(...)動画生成
api.registerWebFetchProvider(...)Web fetch / スクレイピングプロバイダー
api.registerWebSearchProvider(...)Web 検索
api.registerCompactionProvider(...)差し替え可能なトランスクリプト Compaction バックエンド
api.registerEmbeddingProvider(...) で登録された埋め込みプロバイダーは、Plugin マニフェストの contracts.embeddingProviders にも列挙する必要があります。これは、再利用可能なベクトル生成向けの汎用埋め込みサーフェスです。メモリ検索は、この汎用プロバイダーサーフェスを利用できます。古い api.registerMemoryEmbeddingProvider(...)contracts.memoryEmbeddingProviders シームは、既存のメモリ固有プロバイダーが移行している間の非推奨互換性です。 まだランタイム batchEmbed(...) を公開しているメモリ固有プロバイダーは、そのランタイムが明示的に sourceWideBatchEmbed: true を設定しない限り、既存のファイル単位バッチ処理コントラクトに留まります。このオプトインにより、メモリホストは、複数のダーティなメモリファイルと有効なソースからのチャンクを、ホストのバッチ上限まで 1 回の batchEmbed(...) 呼び出しで送信できます。JSONL リクエストファイルをアップロードするバッチアダプターは、リクエスト数上限だけでなくアップロードサイズ上限の前にもプロバイダージョブを分割する必要があります。プロバイダーは、batch.chunks と同じ順序で、入力チャンクごとに 1 つの埋め込みを返す必要があります。プロバイダーがファイルローカルなバッチを想定している場合、またはより大きなソース横断ジョブで入力順序を保持できない場合は、このフラグを省略してください。

ツールとコマンド

固定ツール名を持つ単純なツール専用 Plugin には defineToolPlugin を使用してください。混合 Plugin または完全に動的なツール登録には、api.registerTool(...) を直接使用してください。
メソッド登録するもの
api.registerTool(tool, opts?)エージェントツール(必須または { optional: true }
api.registerCommand(def)カスタムコマンド(LLM を迂回)
Plugin コマンドは、エージェントに短いコマンド所有のルーティングヒントが必要な場合に agentPromptGuidance を設定できます。そのテキストはコマンド自体についての内容に留めてください。プロバイダー固有または Plugin 固有のポリシーをコアプロンプトビルダーに追加しないでください。 ガイダンスエントリは、すべてのプロンプトサーフェスに適用されるレガシー文字列、または構造化エントリにできます。
agentPromptGuidance: [
  "Global command hint.",
  { text: "Only show this in the main OpenClaw prompt.", surfaces: ["openclaw_main"] },
];
構造化された surfaces には、openclaw_maincodex_app_servercli_backendacp_backend、または subagent を含めることができます。pi_mainopenclaw_main の非推奨エイリアスとして残っています。意図的に全サーフェス向けのガイダンスにする場合は、surfaces を省略してください。空の surfaces 配列を渡さないでください。誤ったスコープ喪失がグローバルなプロンプトテキストにならないよう、拒否されます。 ネイティブ Codex アプリサーバーの開発者向け指示は、他のプロンプトサーフェスより厳密です。codex_app_server に明示的にスコープされたガイダンスだけが、その高優先度レーンに昇格されます。レガシー文字列ガイダンスとスコープなしの構造化ガイダンスは、互換性のため Codex 以外のプロンプトサーフェスで引き続き利用できます。

インフラストラクチャ

メソッド登録するもの
api.registerHook(events, handler, opts?)イベントフック
api.registerHttpRoute(params)Gateway HTTP エンドポイント
api.registerGatewayMethod(name, handler)Gateway RPC メソッド
api.registerGatewayDiscoveryService(service)ローカル Gateway 検出アドバタイザー
api.registerCli(registrar, opts?)CLI サブコマンド
api.registerNodeCliFeature(registrar, opts?)openclaw nodes 配下の Node 機能 CLI
api.registerService(service)バックグラウンドサービス
api.registerInteractiveHandler(registration)インタラクティブハンドラー
api.registerAgentToolResultMiddleware(...)ランタイムツール結果ミドルウェア
api.registerMemoryPromptSupplement(builder)追加型のメモリ隣接プロンプトセクション
api.registerMemoryCorpusSupplement(adapter)追加型のメモリ検索/読み取りコーパス
api.registerHostedMediaResolver(resolver)ブラウザー形式のホスト済みメディア URL 向けリゾルバー
api.registerTextTransforms(transforms)Plugin 所有のプロンプト/メッセージ互換性テキスト書き換え
api.registerConfigMigration(migrate)Plugin ランタイム読み込み前に実行される軽量設定マイグレーション
api.registerMigrationProvider(provider)openclaw migrate 向けインポーター
api.registerAutoEnableProbe(probe)この Plugin を自動有効化できる設定プローブ
api.registerReload(registration)リロード処理向けの restart/hot/noop 設定プレフィックスポリシー
api.registerNodeHostCommand(command)ペアリングされたノードに公開されるコマンドハンドラー
api.registerNodeInvokePolicy(policy)ノード起動コマンド向けの許可リスト/承認ポリシー
api.registerSecurityAuditCollector(collector)openclaw security audit 向けの検出事項コレクター
Telegram のインタラクティブハンドラーは、ハンドラーが成功した後に Telegram の通常の受信エージェントパスへテキストを送るために { submitText } を返せます。OpenClaw は、受信ポリシーがテキストをスキップした場合や処理に失敗した場合もコールバックボタンを保持するため、ユーザーはブロック条件が変わった後に再試行できます。この結果フィールドは Telegram 固有です。他のチャネルは、それぞれ独自のインタラクティブ結果コントラクトを保持します。

ワークフロー Plugin 向けホストフック

ホストフックは、プロバイダー、チャネル、またはツールを追加するだけでなく、ホストのライフサイクルに参加する必要がある Plugin 向けの SDK 接点です。これらは汎用コントラクトです。Plan Mode で利用できますが、承認ワークフロー、ワークスペースポリシーゲート、バックグラウンドモニター、セットアップウィザード、UI コンパニオン Plugin でも利用できます。
メソッド所有するコントラクト
api.session.state.registerSessionExtension(...)Plugin が所有する、Gateway セッション経由で投影される JSON 互換セッション状態
api.session.workflow.enqueueNextTurnInjection(...)1 つのセッションの次のエージェントターンに注入される、耐久性のある exactly-once コンテキスト
api.registerTrustedToolPolicy(...)ツールパラメーターをブロックまたは書き換えできる、マニフェストで制御された信頼済みプリ Plugin ツールポリシー
api.registerToolMetadata(...)ツール実装を変更しないツールカタログ表示メタデータ
api.registerCommand(...)スコープ付き Plugin コマンド。コマンド結果は continueAgent: true または suppressReply: true を設定できます。Discord ネイティブコマンドは descriptionLocalizations をサポートします
api.session.controls.registerControlUiDescriptor(...)セッション、ツール、実行、設定、またはタブサーフェス向けの Control UI コントリビューション記述子
api.lifecycle.registerRuntimeLifecycle(...)リセット、削除、再読み込みパスでの Plugin 所有ランタイムリソースのクリーンアップコールバック
api.agent.events.registerAgentEventSubscription(...)ワークフロー状態とモニター向けのサニタイズ済みイベント購読
api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...)ターミナル実行ライフサイクルでクリアされる、実行単位の Plugin スクラッチ状態
api.session.workflow.registerSessionSchedulerJob(...)Plugin 所有スケジューラージョブのクリーンアップメタデータ。作業のスケジュールやタスクレコードの作成は行いません
api.session.workflow.sendSessionAttachment(...)アクティブな直接送信セッションルートへの、バンドル専用のホスト仲介ファイル添付配信
api.session.workflow.scheduleSessionTurn(...) / unscheduleSessionTurnsByTag(...)バンドル専用の Cron 裏付けのスケジュール済みセッションターンと、タグベースのクリーンアップ
api.session.controls.registerSessionAction(...)クライアントが Gateway 経由でディスパッチできる型付きセッションアクション
surface: "tab" 記述子は、Control UI にサイドバータブを追加します。有効な Plugin のタブ記述子は、gateway hello(controlUiTabs)でダッシュボードクライアントへ通知されるため、そのタブは Plugin が有効な間だけ表示されます。バンドル Plugin は、そのタブ向けのファーストクラスのダッシュボードビューを同梱できます。他の Plugin は path を Plugin HTTP ルート(api.registerHttpRoute(...) を参照)に設定でき、ダッシュボードはそれをサンドボックス化されたフレームでレンダリングします。icon はダッシュボードアイコン名のヒント、group はサイドバーセクション(control または agent)を選択し、order は Plugin タブ間の並び順を決め、requiredScopes はそれらのオペレータースコープを持たない接続からタブを隠します。
api.session.controls.registerControlUiDescriptor({
  surface: "tab",
  id: "logbook",
  label: "Logbook",
  description: "Your day as a timeline, built from screen snapshots.",
  icon: "sun",
  group: "control",
  requiredScopes: ["operator.write"],
});
新しい Plugin コードでは、グループ化された名前空間を使用してください。
  • api.session.state.registerSessionExtension(...)
  • api.session.workflow.enqueueNextTurnInjection(...)
  • api.session.workflow.registerSessionSchedulerJob(...)
  • api.session.workflow.sendSessionAttachment(...)
  • api.session.workflow.scheduleSessionTurn(...)
  • api.session.workflow.unscheduleSessionTurnsByTag(...)
  • api.session.controls.registerSessionAction(...)
  • api.session.controls.registerControlUiDescriptor(...)
  • api.agent.events.registerAgentEventSubscription(...)
  • api.agent.events.emitAgentEvent(...)
  • api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...)
  • api.lifecycle.registerRuntimeLifecycle(...)
同等のフラットメソッドは、既存 Plugin 向けの非推奨の互換エイリアスとして引き続き利用できます。api.registerSessionExtensionapi.enqueueNextTurnInjectionapi.registerControlUiDescriptorapi.registerRuntimeLifecycleapi.registerAgentEventSubscriptionapi.emitAgentEventapi.setRunContextapi.getRunContextapi.clearRunContextapi.registerSessionSchedulerJobapi.registerSessionActionapi.sendSessionAttachmentapi.scheduleSessionTurn、または api.unscheduleSessionTurnsByTag を直接呼び出す新しい Plugin コードを追加しないでください。 scheduleSessionTurn(...) は、Gateway Cron スケジューラーのセッションスコープの簡便機能です。Cron はタイミングを所有し、ターンが実行されるときにバックグラウンドタスクレコードを作成します。Plugin SDK は、対象セッション、Plugin 所有の命名、クリーンアップのみを制約します。作業自体に耐久性のある複数ステップの TaskFlow 状態が必要な場合は、スケジュール済みターン内で api.runtime.tasks.managedFlows を使用してください。 これらのコントラクトは、権限を意図的に分割しています。
  • 外部 Plugin は、セッション拡張、UI 記述子、コマンド、ツールメタデータ、次ターン注入、通常フックを所有できます。
  • 信頼済みツールポリシーは通常の before_tool_call フックより前に実行され、ホストに信頼されます。バンドルポリシーが最初に実行されます。インストール済み Plugin のポリシーには、明示的な有効化と contracts.trustedToolPolicies 内の local ids が必要で、Plugin 読み込み順で次に実行されます。ポリシー ID は登録元 Plugin にスコープされます。
  • 予約済みコマンドの所有権はバンドル専用です。外部 Plugin は独自のコマンド名またはエイリアスを使用してください。
  • allowPromptInjection=false は、agent_turn_preparebefore_prompt_buildheartbeat_prompt_contribution、レガシー before_agent_start のプロンプトフィールド、enqueueNextTurnInjection など、プロンプトを変更するフックを無効にします。
Plan 以外の利用例:
Plugin の典型例使用するフック
承認ワークフローセッション拡張、コマンド継続、次ターン注入、UI 記述子
予算/ワークスペースポリシーゲート信頼済みツールポリシー、ツールメタデータ、セッション投影
バックグラウンドライフサイクルモニターランタイムライフサイクルクリーンアップ、エージェントイベント購読、セッションスケジューラー所有/クリーンアップ、heartbeat プロンプトコントリビューション、UI 記述子
セットアップまたはオンボーディングウィザードセッション拡張、スコープ付きコマンド、Control UI 記述子
予約済みコア管理名前空間(config.*exec.approvals.*wizard.*update.*)は、Plugin がより狭い gateway メソッドスコープを割り当てようとしても、常に operator.admin のままです。Plugin 所有メソッドには、Plugin 固有のプレフィックスを優先してください。
バンドル Plugin と、一致するマニフェストコントラクトを持ち明示的に有効化されたインストール済み Plugin は、ツール実行後かつランタイムがその結果をモデルへ戻す前にツール結果を書き換える必要がある場合、api.registerAgentToolResultMiddleware(...) を使用できます。これは、tokenjuice などの非同期出力リデューサー向けの、信頼済みでランタイム中立の接点です。Plugin は対象ランタイムごとに contracts.agentToolResultMiddleware を宣言する必要があります。たとえば ["openclaw", "codex"] です。そのコントラクトがない、または明示的に有効化されていないインストール済み Plugin は、このミドルウェアを登録できません。モデル前のツール結果タイミングを必要としない作業には、通常の OpenClaw Plugin フックを使用してください。古い埋め込みランナー専用の拡張ファクトリ登録パスは削除されました。

Gateway 検出登録

api.registerGatewayDiscoveryService(...) を使用すると、Plugin は mDNS/Bonjour などのローカル検出トランスポート上でアクティブな Gateway を通知できます。OpenClaw は、ローカル検出が有効な場合に Gateway 起動中にそのサービスを呼び出し、現在の Gateway ポートとシークレットではない TXT ヒントデータを渡し、Gateway シャットダウン中に返された stop ハンドラーを呼び出します。
api.registerGatewayDiscoveryService({
  id: "my-discovery",
  async advertise(ctx) {
    const handle = await startMyAdvertiser({
      gatewayPort: ctx.gatewayPort,
      tls: ctx.gatewayTlsEnabled,
      displayName: ctx.machineDisplayName,
    });
    return { stop: () => handle.stop() };
  },
});
Gateway 検出 Plugin は、通知された TXT 値をシークレットや認証として扱ってはいけません。検出はルーティングのヒントです。Gateway 認証と TLS ピン留めが引き続き信頼を所有します。

CLI 登録メタデータ

api.registerCli(registrar, opts?) は、2 種類のコマンドメタデータを受け取ります。
  • commands: 登録元が所有する明示的なコマンド名
  • descriptors: CLI ヘルプ、ルーティング、遅延 Plugin CLI 登録に使用される解析時コマンド記述子
  • parentPath: ["nodes"] など、ネストされたコマンドグループ向けの任意の親コマンドパス
ペアノード機能では、api.registerNodeCliFeature(registrar, opts?) を優先してください。これは api.registerCli(..., { parentPath: ["nodes"] }) の小さなラッパーであり、openclaw nodes canvas などのコマンドを明示的な Plugin 所有ノード機能にします。 通常のルート CLI パスで Plugin コマンドを遅延読み込みのままにしたい場合は、その登録元が公開するすべてのトップレベルコマンドルートをカバーする descriptors を提供してください。
api.registerCli(
  async ({ program }) => {
    const { registerMatrixCli } = await import("./src/cli.js");
    registerMatrixCli({ program });
  },
  {
    descriptors: [
      {
        name: "matrix",
        description: "Manage Matrix accounts, verification, devices, and profile state",
        hasSubcommands: true,
      },
    ],
  },
);
ネストされたコマンドは、解決済みの親コマンドを program として受け取ります。
api.registerCli(
  async ({ program }) => {
    const { registerNodesCanvasCommands } = await import("./src/cli.js");
    registerNodesCanvasCommands(program);
  },
  {
    parentPath: ["nodes"],
    descriptors: [
      {
        name: "canvas",
        description: "Capture or render canvas content from a paired node",
        hasSubcommands: true,
      },
    ],
  },
);
遅延ルート CLI 登録が不要な場合にのみ、commands を単独で使用してください。 その即時互換パスは引き続きサポートされていますが、解析時の遅延読み込み向けに ディスクリプターに基づくプレースホルダーはインストールされません。

CLI バックエンド登録

api.registerCliBackend(...) により、プラグインは claude-climy-cli などのローカル AI CLI バックエンドのデフォルト設定を所有できます。
  • バックエンドの id は、my-cli/gpt-5 のようなモデル参照でプロバイダープレフィックスになります。
  • バックエンドの config は、agents.defaults.cliBackends.<id> と同じ形を使用します。
  • ユーザー設定が常に優先されます。OpenClaw は CLI を実行する前に、agents.defaults.cliBackends.<id> を プラグインのデフォルトの上にマージします。
  • バックエンドがマージ後に互換性のための書き換えを必要とする場合は、normalizeConfig を使用してください (たとえば古いフラグ形状の正規化)。
  • CLI 方言に属するリクエストスコープの argv 書き換えには、resolveExecutionArgs を使用してください。 たとえば、OpenClaw の思考レベルをネイティブの effort フラグにマッピングする場合です。このフックは ctx.executionMode を受け取ります。一時的な /btw 呼び出しに バックエンドネイティブの隔離フラグを追加するには、"side-question" を使用してください。それらのフラグが、 通常は常時有効な CLI のネイティブツールを確実に無効化する場合は、 sideQuestionToolMode: "disabled" も宣言してください。
エンドツーエンドの作成ガイドについては、 CLI バックエンドプラグインを参照してください。

排他的スロット

メソッド登録するもの
api.registerContextEngine(id, factory)コンテキストエンジン(一度に 1 つだけ有効)。ホストがモデル/プロバイダー/モード診断を提供できる場合、ライフサイクルコールバックは runtimeSettings を受け取ります。古い厳密なエンジンはそのキーなしで再試行されます。
api.registerMemoryCapability(capability)統合メモリ機能
api.registerMemoryPromptSection(builder)メモリプロンプトセクションビルダー
api.registerMemoryFlushPlan(resolver)メモリフラッシュ計画リゾルバー
api.registerMemoryRuntime(runtime)メモリランタイムアダプター

非推奨のメモリ埋め込みアダプター

メソッド登録するもの
api.registerMemoryEmbeddingProvider(adapter)有効なプラグイン用のメモリ埋め込みアダプター
  • registerMemoryCapability は、推奨される排他的メモリプラグイン API です。
  • registerMemoryCapabilitypublicArtifacts.listArtifacts(...) も公開できるため、 関連プラグインは特定のメモリプラグインのプライベートレイアウトに入り込む代わりに、 openclaw/plugin-sdk/memory-host-core を通じてエクスポート済みメモリアーティファクトを利用できます。
  • registerMemoryPromptSectionregisterMemoryFlushPlan、および registerMemoryRuntime は、レガシー互換の排他的メモリプラグイン API です。
  • MemoryFlushPlan.model は、有効なフォールバックチェーンを継承せずに、フラッシュターンを ollama/qwen3:8b などの正確な provider/model 参照に固定できます。
  • registerMemoryEmbeddingProvider は非推奨です。新しい埋め込みプロバイダーは api.registerEmbeddingProvider(...)contracts.embeddingProviders を使用してください。
  • 既存のメモリ固有プロバイダーは移行期間中も動作しますが、 プラグイン検査では、非バンドルプラグインに対する互換性負債として報告されます。

イベントとライフサイクル

メソッド実行すること
api.on(hookName, handler, opts?)型付きライフサイクルフック
api.onConversationBindingResolved(handler)会話バインディングコールバック
例、一般的なフック名、ガードセマンティクスについては、プラグインフックを参照してください。

フック決定セマンティクス

before_install はプラグインランタイムのライフサイクルフックであり、オペレーターのインストール ポリシーサーフェスではありません。許可/ブロックの決定が CLI と Gateway に基づくインストールまたは更新パスを 対象にする必要がある場合は、security.installPolicy を使用してください。
  • before_tool_call: { block: true } を返すと終端になります。いずれかのハンドラーが設定すると、優先度の低いハンドラーはスキップされます。
  • before_tool_call: { block: false } を返すと、決定なし(block の省略と同じ)として扱われ、上書きとしては扱われません。
  • before_install: { block: true } を返すと終端になります。いずれかのハンドラーが設定すると、優先度の低いハンドラーはスキップされます。
  • before_install: { block: false } を返すと、決定なし(block の省略と同じ)として扱われ、上書きとしては扱われません。
  • reply_dispatch: { handled: true, ... } を返すと終端になります。いずれかのハンドラーがディスパッチを主張すると、優先度の低いハンドラーとデフォルトのモデルディスパッチパスはスキップされます。
  • message_sending: { cancel: true } を返すと終端になります。いずれかのハンドラーが設定すると、優先度の低いハンドラーはスキップされます。
  • message_sending: { cancel: false } を返すと、決定なし(cancel の省略と同じ)として扱われ、上書きとしては扱われません。
  • message_received: 受信スレッド/トピックルーティングが必要な場合は、型付きの threadId フィールドを使用してください。チャネル固有の追加情報には metadata を残してください。
  • message_sending: チャネル固有の metadata にフォールバックする前に、型付きの replyToId / threadId ルーティングフィールドを使用してください。
  • gateway_start: 内部の gateway:startup フックに依存する代わりに、Gateway 所有の起動状態には ctx.configctx.workspaceDir、および ctx.getCron?.() を使用してください。
  • cron_changed: Gateway 所有の Cron ライフサイクル変更を監視します。外部ウェイクスケジューラーを同期する場合は、event.job?.state?.nextRunAtMsctx.getCron?.() を使用し、期限チェックと実行の信頼できる情報源は OpenClaw にしてください。

API オブジェクトフィールド

フィールド説明
api.idstringプラグイン ID
api.namestring表示名
api.versionstring?プラグインバージョン(任意)
api.descriptionstring?プラグイン説明(任意)
api.sourcestringプラグインソースパス
api.rootDirstring?プラグインルートディレクトリ(任意)
api.configOpenClawConfig現在の設定スナップショット(利用可能な場合は有効なインメモリランタイムスナップショット)
api.pluginConfigRecord<string, unknown>plugins.entries.<id>.config からのプラグイン固有設定
api.runtimePluginRuntimeランタイムヘルパー
api.loggerPluginLoggerスコープ付きロガー(debuginfowarnerror
api.registrationModePluginRegistrationMode現在の読み込みモード。"setup-runtime" は軽量なフルエントリ前の起動/セットアップ期間です
api.resolvePath(input)(string) => stringプラグインルートからの相対パスを解決

内部モジュール規約

プラグイン内では、内部インポートにローカルバレルファイルを使用してください。
my-plugin/
  api.ts            # Public exports for external consumers
  runtime-api.ts    # Internal-only runtime exports
  index.ts          # Plugin entry point
  setup-entry.ts    # Lightweight setup-only entry (optional)
本番コードから openclaw/plugin-sdk/<your-plugin> を通じて自分のプラグインをインポートしないでください。 内部インポートは ./api.ts または ./runtime-api.ts を通してください。SDK パスは外部契約専用です。
ファサード読み込みされるバンドルプラグインの公開サーフェス(api.tsruntime-api.tsindex.tssetup-entry.ts、および類似の公開エントリファイル)は、 OpenClaw がすでに実行中の場合、有効なランタイム設定スナップショットを優先します。ランタイム スナップショットがまだ存在しない場合は、ディスク上の解決済み設定ファイルにフォールバックします。 パッケージ化されたバンドルプラグインのファサードは、OpenClaw のプラグイン ファサードローダーを通じて読み込む必要があります。dist/extensions/... からの直接インポートは、 パッケージ化インストールがプラグイン所有コードに使用するマニフェストとランタイムサイドカーチェックをバイパスします。 プロバイダープラグインは、ヘルパーが意図的にプロバイダー固有であり、まだ汎用 SDK サブパスに属さない場合に、狭いプラグインローカル契約バレルを公開できます。バンドル例:
  • Anthropic: Claude のベータヘッダーと service_tier ストリームヘルパー向けの公開 api.ts / contract-api.ts 境界。
  • @openclaw/openai-provider: api.ts はプロバイダービルダー、 デフォルトモデルヘルパー、およびリアルタイムプロバイダービルダーをエクスポートします。
  • @openclaw/openrouter-provider: api.ts はプロバイダービルダー とオンボーディング/設定ヘルパーをエクスポートします。
拡張機能の本番コードも、openclaw/plugin-sdk/<other-plugin> インポートを避けるべきです。ヘルパーが本当に共有される場合は、2 つのプラグインを結合する代わりに、 openclaw/plugin-sdk/speech.../provider-model-shared、または別の 機能指向サーフェスなど、中立的な SDK サブパスに昇格させてください。

関連

エントリポイント

definePluginEntrydefineChannelPluginEntry のオプション。

ランタイムヘルパー

完全な api.runtime 名前空間リファレンス。

セットアップと設定

パッケージ化、マニフェスト、設定スキーマ。

テスト

テストユーティリティと lint ルール。

SDK 移行

非推奨のサーフェスからの移行。

Plugin 内部

詳細なアーキテクチャとケイパビリティモデル。