defineToolPlugin、definePluginEntry、
defineChannelPluginEntry、defineSetupPluginEntry。
パッケージエントリ
インストール済み Plugin は、package.json の openclaw フィールドでソースと
ビルド済みエントリの両方を指します:
extensionsとsetupEntryはソースエントリで、ワークスペースおよび git checkout 開発に使われます。runtimeExtensionsとruntimeSetupEntryはインストール済み パッケージで優先されます。これにより npm パッケージは実行時の TypeScript コンパイルをスキップできます。runtimeExtensionsが存在する場合は、配列の長さがextensionsと一致している必要があります (エントリは位置でペアになります)。runtimeSetupEntryにはsetupEntryが必要です。runtimeExtensions/runtimeSetupEntryアーティファクトが宣言されているのに 存在しない場合、インストール/検出はパッケージングエラーで失敗します。OpenClaw は 暗黙にソースへフォールバックしません。ソースフォールバック (下記) は、ランタイムエントリがまったく宣言されていない場合にのみ適用されます。- インストール済みパッケージが TypeScript ソースエントリのみを宣言している場合、OpenClaw は
対応するビルド済み
dist/*.js(または.mjs/.cjs) ピアを探して使用します。 見つからない場合は TypeScript ソースへフォールバックします。 - すべてのエントリパスは Plugin パッケージディレクトリ内にとどまる必要があります。ランタイム
エントリや推論されたビルド済み JS ピアによって、外へ抜ける
extensionsまたはsetupEntryソースパスが有効になることはありません。
defineToolPlugin
インポート: openclaw/plugin-sdk/tool-plugin
エージェントツールだけを追加する Plugin 向けです。ソースを小さく保ち、TypeBox スキーマから config
およびツールパラメータの型を推論し、プレーンな戻り値を
OpenClaw のツール結果形式でラップし、openclaw plugins build が Plugin マニフェスト (contracts.tools、
configSchema) に書き込む静的メタデータを公開します。
configSchemaは任意です。省略すると厳密な空オブジェクトスキーマが使われます (生成されたマニフェストには引き続きconfigSchemaが含まれます)。executeはプレーン文字列または JSON シリアライズ可能な値を返します。ヘルパーは それをテキストツール結果としてラップし、detailsには元の (文字列化されていない) 戻り値を設定します。- カスタムツール結果には、
openclaw/plugin-sdk/tool-resultsがtextResultとjsonResultをエクスポートしています。 - ツール名は静的なので、
openclaw plugins buildは手動で名前を重複させることなく、 宣言されたツールからcontracts.toolsを導出します。 - ランタイム読み込みは厳密なままです。インストール済み Plugin には引き続き
openclaw.plugin.jsonとpackage.jsonのopenclaw.extensionsが必要です。OpenClaw は 不足しているマニフェストデータを推論するために Plugin コードを実行することはありません。
definePluginEntry
インポート: openclaw/plugin-sdk/plugin-entry
Provider Plugin、高度なツール Plugin、フック Plugin、およびメッセージングチャネルではないもの向けです。
| フィールド | 型 | 必須 | デフォルト |
|---|---|---|---|
id | string | はい | - |
name | string | はい | - |
description | string | はい | - |
kind | string (非推奨、下記参照) | いいえ | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | いいえ | 空オブジェクトスキーマ |
reload | OpenClawPluginReloadRegistration | いいえ | - |
nodeHostCommands | OpenClawPluginNodeHostCommand[] | いいえ | - |
securityAuditCollectors | OpenClawPluginSecurityAuditCollector[] | いいえ | - |
register | (api: OpenClawPluginApi) => void | はい | - |
idはopenclaw.plugin.jsonマニフェストと一致している必要があります。kindは非推奨です。代わりにopenclaw.plugin.jsonマニフェストのkindフィールドで 排他的スロット ("memory"または"context-engine") を宣言してください。 ランタイムエントリのkindは、古い Plugin との互換性フォールバックとしてのみ残っています。configSchemaは遅延評価のための関数にできます。OpenClaw は初回アクセス時にスキーマを解決して メモ化するため、コストの高いスキーマビルダーは一度だけ実行されます。
defineChannelPluginEntry
インポート: openclaw/plugin-sdk/channel-core
definePluginEntry をチャネル固有の配線でラップします。自動的に
api.registerChannel({ plugin }) を呼び出し、任意のルートヘルプ CLI
メタデータの継ぎ目を公開し、登録モードに応じて registerFull をゲートします。
| フィールド | 型 | 必須 | デフォルト |
|---|---|---|---|
id | string | はい | - |
name | string | はい | - |
description | string | はい | - |
plugin | ChannelPlugin | はい | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | いいえ | 空オブジェクトスキーマ |
setRuntime | (runtime: PluginRuntime) => void | いいえ | - |
registerCliMetadata | (api: OpenClawPluginApi) => void | いいえ | - |
registerFull | (api: OpenClawPluginApi) => void | いいえ | - |
setRuntimeは"cli-metadata"と"tool-discovery"を除くすべてのモードで実行されます。通常はcreatePluginRuntimeStoreを使って、ここでランタイム参照を保存します。registerCliMetadataは"cli-metadata"、"discovery"、および"full"で実行されます。チャネル所有の CLI ディスクリプタの正規の場所として使用してください。 そうすることで、ルートヘルプは非アクティブ化のまま保たれ、検出スナップショットには静的な コマンドメタデータが含まれ、通常の CLI 登録は完全な Plugin 読み込みと互換性を保ちます。registerFullは"full"と"tool-discovery"でのみ実行されます。"tool-discovery"では、チャネル登録の_代わりに_実行されます。OpenClaw はregisterChannel/setRuntimeを完全にスキップし、registerFullのみを呼び出すため、 スタンドアロンのツール検出または実行にチャネルが必要とする Provider/ツール登録は、 通常のチャネルセットアップの背後ではなく、そこに置く必要があります。- 検出登録は非アクティブ化ですが、インポート不要ではありません。OpenClaw は
スナップショットを構築するために、信頼済み Plugin エントリとチャネル Plugin モジュールを評価することがあります。
トップレベルのインポートに副作用がないようにし、ソケット、
クライアント、ワーカー、サービスは
"full"専用パスの背後に置いてください。 definePluginEntryと同様に、configSchemaは遅延ファクトリにできます。OpenClaw は 初回アクセス時に解決済みスキーマをメモ化します。
- ルート CLI の解析木から消えないように遅延読み込みしたい、Plugin 所有のルート
CLI コマンドには
api.registerCli(..., { descriptors: [...] })を使います。 ディスクリプタ名は文字、数字、ハイフン、アンダースコアに一致し、文字または数字で始まる必要があります。OpenClaw は他の 形状を拒否し、ヘルプ表示前に説明から端末制御シーケンスを取り除きます。 登録側が公開するすべてのトップレベルコマンドルートをカバーしてください。commandsだけの場合は eager な互換パスのままです。 - ペアノード機能コマンドには
api.registerNodeCliFeature(...)を使い、 それらがopenclaw nodesの下に配置されるようにします (registerCli(registrar, { parentPath: ["nodes"], ... })と同等です)。 - その他のネストされた Plugin コマンドには
parentPathを追加し、登録側に渡されたprogramオブジェクト上でコマンドを登録してください。OpenClaw は Plugin を呼び出す前に、 それを親コマンドへ解決します。 - チャネル Plugin では、
registerCliMetadataから CLI ディスクリプタを登録し、registerFullはランタイム専用の作業に集中させてください。 registerFullが Gateway RPC メソッドも登録する場合は、Plugin 固有のプレフィックスに置いてください。 予約済みのコア管理名前空間 (config.*、exec.approvals.*、wizard.*、update.*) は常にoperator.adminに強制されます。
defineSetupPluginEntry
インポート: openclaw/plugin-sdk/channel-core
軽量な setup-entry.ts ファイル向けです。ランタイムや CLI の配線なしで
{ plugin } だけを返します。
defineSetupPluginEntry(...) は、限定されたセットアップヘルパーファミリーと組み合わせてください:
| Import | 用途 |
|---|---|
openclaw/plugin-sdk/setup-runtime | ランタイムセーフなセットアップヘルパー: createSetupTranslator、インポートセーフなセットアップパッチアダプター、lookup-note 出力、promptResolvedAllowFrom、splitSetupEntries、委譲セットアッププロキシ |
openclaw/plugin-sdk/channel-setup | 任意インストール用セットアップサーフェス |
openclaw/plugin-sdk/setup-tools | セットアップ/インストール CLI、アーカイブ、ドキュメントヘルパー |
openclaw/plugin-sdk/channel-entry-contract の
defineBundledChannelSetupEntry(...) を使用できます。これにより、セットアップ
エントリはセットアップセーフな plugin/secrets エクスポートを維持しながら、ランタイム
セッターも公開できます。
registerSetupRuntime は "setup-runtime" 読み込みでのみ実行されます。
遅延された完全アクティベーションの前に存在する必要がある、設定のみのルートまたはメソッドに
限定してください。
登録モード
api.registrationMode は、Plugin がどのように読み込まれたかを示します。
| モード | タイミング | 登録するもの |
|---|---|---|
"full" | 通常の gateway 起動 | すべて |
"discovery" | 読み取り専用の capability discovery | チャネル登録と静的 CLI 記述子。エントリコードは読み込まれる場合がありますが、ソケット、ワーカー、クライアント、サービスはスキップします |
"tool-discovery" | 特定 Plugin のツールを一覧表示または実行するスコープ付き読み込み | capability/tool 登録のみ。チャネルアクティベーションなし |
"setup-only" | 無効化済み/未設定のチャネル | チャネル登録のみ |
"setup-runtime" | ランタイムが利用可能なセットアップフロー | チャネル登録に加え、完全エントリの読み込み前に必要な軽量ランタイムのみ |
"cli-metadata" | ルートヘルプ / CLI メタデータ取得 | CLI 記述子のみ |
defineChannelPluginEntry はこの分割を自動的に処理します。チャネルに
definePluginEntry を直接使用する場合は、自分でモードを確認し、
"tool-discovery" がチャネル登録をスキップすることを覚えておいてください。
"setup-runtime" は、完全な同梱チャネルランタイムに再入することなく、
セットアップ専用の起動サーフェスが存在している必要がある期間として扱ってください。
適しているのは、チャネル登録、セットアップセーフな HTTP ルート、セットアップセーフな
gateway メソッド、委譲セットアップヘルパーです。重いバックグラウンドサービス、CLI レジストラー、
provider/client SDK ブートストラップは、引き続き "full" に属します。
Plugin の形状
OpenClaw は、読み込まれた Plugin をその登録動作によって分類します。| 形状 | 説明 |
|---|---|
| plain-capability | 1 種類の capability type(例: provider のみ) |
| hybrid-capability | 複数の capability type(例: provider + speech) |
| hook-only | フックのみ、capability なし |
| non-capability | ツール/コマンド/サービスはあるが capability なし |
openclaw plugins inspect <id> を使用してください。
関連
- SDK の概要 - 登録 API とサブパスリファレンス
- ランタイムヘルパー -
api.runtimeとcreatePluginRuntimeStore - セットアップと設定 - マニフェスト、セットアップエントリ、遅延読み込み
- チャネル Plugins -
ChannelPluginオブジェクトの構築 - Provider Plugins - provider 登録とフック