Plugin は、チャネル、モデルプロバイダー、音声、リアルタイム文字起こし、リアルタイム音声、メディア理解、画像生成、動画生成、web fetch、web search、エージェントツール、またはそれらの任意の組み合わせといった新しい機能で OpenClaw を拡張します。 Plugin を OpenClaw リポジトリに追加する必要はありません。ClawHub に公開すると、ユーザーはDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw plugins install clawhub:<package-name> でインストールできます。ベアパッケージ指定は、ローンチ移行期間中は引き続き npm からインストールされます。
前提条件
- Node >= 22 とパッケージマネージャー(npm または pnpm)
- TypeScript(ESM)に慣れていること
- リポジトリ内 Plugin の場合: リポジトリをクローンし、
pnpm installを完了していること。ソースチェックアウトでの Plugin 開発は pnpm のみです。OpenClaw はextensions/*ワークスペースパッケージからバンドル済み Plugin を読み込むためです。
どの種類の Plugin ですか?
チャネル Plugin
OpenClaw をメッセージングプラットフォーム(Discord、IRC など)に接続します
プロバイダー Plugin
モデルプロバイダー(LLM、プロキシ、またはカスタムエンドポイント)を追加します
CLI バックエンド Plugin
ローカル AI CLI を OpenClaw のテキストフォールバックランナーに対応付けます
ツール / フック Plugin
エージェントツール、イベントフック、またはサービスを登録します - 以下に進んでください
openclaw/plugin-sdk/channel-setup の createOptionalChannelSetupSurface(...) を使用してください。これは、インストール要件を通知し、Plugin がインストールされるまで実際の設定書き込みでフェイルクローズする、セットアップアダプターとウィザードのペアを生成します。
クイックスタート: ツール Plugin
このウォークスルーでは、エージェントツールを登録する最小限の Plugin を作成します。チャネルおよびプロバイダー Plugin には、上記にリンクされた専用ガイドがあります。パッケージとマニフェストを作成する
contracts.tools に列挙する必要があります。これにより、OpenClaw はすべての Plugin ランタイムを読み込まずに、所有する Plugin を検出できます。Plugin は activation.onStartup も意図的に宣言する必要があります。この例では true に設定しています。完全なスキーマについては マニフェスト を参照してください。正規の ClawHub 公開スニペットは docs/snippets/plugin-publish/ にあります。エントリーポイントを書く
definePluginEntry は非チャネル Plugin 用です。チャネルでは defineChannelPluginEntry を使用してください - チャネル Plugin を参照してください。エントリーポイントのすべてのオプションについては、エントリーポイント を参照してください。Plugin 機能
単一の Plugin は、api オブジェクトを介して任意の数の機能を登録できます。
| 機能 | 登録メソッド | 詳細ガイド |
|---|---|---|
| テキスト推論(LLM) | api.registerProvider(...) | プロバイダー Plugin |
| CLI 推論バックエンド | api.registerCliBackend(...) | CLI バックエンド Plugin |
| チャネル / メッセージング | api.registerChannel(...) | チャネル Plugin |
| 音声(TTS/STT) | api.registerSpeechProvider(...) | プロバイダー Plugin |
| リアルタイム文字起こし | api.registerRealtimeTranscriptionProvider(...) | プロバイダー Plugin |
| リアルタイム音声 | api.registerRealtimeVoiceProvider(...) | プロバイダー Plugin |
| メディア理解 | api.registerMediaUnderstandingProvider(...) | プロバイダー Plugin |
| 画像生成 | api.registerImageGenerationProvider(...) | プロバイダー Plugin |
| 音楽生成 | api.registerMusicGenerationProvider(...) | プロバイダー Plugin |
| 動画生成 | api.registerVideoGenerationProvider(...) | プロバイダー Plugin |
| Web fetch | api.registerWebFetchProvider(...) | プロバイダー Plugin |
| Web search | api.registerWebSearchProvider(...) | プロバイダー Plugin |
| ツール結果ミドルウェア | api.registerAgentToolResultMiddleware(...) | SDK 概要 |
| エージェントツール | api.registerTool(...) | 以下 |
| カスタムコマンド | api.registerCommand(...) | エントリーポイント |
| Plugin フック | api.on(...) | Plugin フック |
| 内部イベントフック | api.registerHook(...) | エントリーポイント |
| HTTP ルート | api.registerHttpRoute(...) | 内部構造 |
| CLI サブコマンド | api.registerCli(...) | エントリーポイント |
api.registerAgentToolResultMiddleware(...) を使用できます。対象ランタイムを contracts.agentToolResultMiddleware に宣言してください。たとえば ["pi", "codex"] です。これは信頼済みバンドル Plugin の接点です。外部 Plugin は、OpenClaw がこの機能の明示的な信頼ポリシーを拡張するまでは、通常の OpenClaw Plugin フックを優先してください。
Plugin がカスタム Gateway RPC メソッドを登録する場合は、Plugin 固有のプレフィックス上に保ってください。コア管理名前空間(config.*、exec.approvals.*、wizard.*、update.*)は予約されたままで、Plugin がより狭いスコープを要求しても常に operator.admin に解決されます。
覚えておくべきフックガードのセマンティクス:
before_tool_call:{ block: true }は終端であり、優先度の低いハンドラーを停止します。before_tool_call:{ block: false }は判断なしとして扱われます。before_tool_call:{ requireApproval: true }はエージェントの実行を一時停止し、exec 承認オーバーレイ、Telegram ボタン、Discord インタラクション、または任意のチャネルの/approveコマンドを介してユーザーに承認を求めます。before_install:{ block: true }は終端であり、優先度の低いハンドラーを停止します。before_install:{ block: false }は判断なしとして扱われます。message_sending:{ cancel: true }は終端であり、優先度の低いハンドラーを停止します。message_sending:{ cancel: false }は判断なしとして扱われます。message_received: 受信スレッド/トピックのルーティングが必要な場合は、型付きのthreadIdフィールドを優先してください。metadataはチャネル固有の追加情報用に保ってください。message_sending: チャネル固有のメタデータキーよりも、型付きのreplyToId/threadIdルーティングフィールドを優先してください。
/approve コマンドは、有界フォールバックにより exec 承認と Plugin 承認の両方を処理します。exec 承認 ID が見つからない場合、OpenClaw は同じ ID で Plugin 承認を再試行します。Plugin 承認の転送は、設定内の approvals.plugin で独立して構成できます。
カスタム承認の配管で同じ有界フォールバックケースを検出する必要がある場合は、承認期限切れ文字列を手動で照合する代わりに、openclaw/plugin-sdk/error-runtime の isApprovalNotFoundError を優先してください。
例とフックリファレンスについては、Plugin フック を参照してください。
エージェントツールの登録
ツールは、LLM が呼び出せる型付き関数です。必須(常に利用可能)または任意(ユーザーのオプトイン)にできます。ctx.activeModel を使用してください。このオブジェクトには provider、modelId、modelRef を含められます。これは情報提供用のランタイムメタデータとして扱い、ローカルオペレーター、インストール済みの Plugin コード、または変更された OpenClaw ランタイムに対するセキュリティ境界として扱わないでください。機密性の高いローカルツールでは、明示的な Plugin またはオペレーターのオプトインを維持し、アクティブモデルメタデータがない場合や適切でない場合はフェイルクローズしてください。
api.registerTool(...) で登録されるすべてのツールは、Plugin マニフェストでも宣言する必要があります。
description やスキーマデータを重複させません。マニフェストコントラクトは所有権と検出だけを宣言します。実行時には引き続き、ライブ登録されたツール実装が呼び出されます。
api.registerTool(..., { optional: true }) で登録されたツールには toolMetadata.<tool>.optional: true を設定してください。これにより OpenClaw は、そのツールが明示的に許可リストに追加されるまで、その Plugin ランタイムのロードを回避できます。
ユーザーは設定で任意ツールを有効にします。
- ツール名はコアツールと衝突してはいけません(衝突したものはスキップされます)
parametersの欠落を含む、不正な登録オブジェクトを持つツールは、エージェント実行を壊す代わりにスキップされ、Plugin 診断で報告されます- 副作用や追加のバイナリ要件を持つツールには
optional: trueを使用してください - ユーザーは Plugin ID を
tools.allowに追加することで、その Plugin のすべてのツールを有効にできます
CLI コマンドの登録
Plugin はapi.registerCli を使って、ルート openclaw コマンドグループを追加できます。OpenClaw がすべての Plugin ランタイムを先読みせずにコマンドを表示してルーティングできるように、各トップレベルコマンドルートに descriptors を提供してください。
インポート規約
常に対象を絞ったopenclaw/plugin-sdk/<subpath> パスからインポートしてください。
api.ts、runtime-api.ts)を使用してください。自分の Plugin を SDK パス経由でインポートしてはいけません。
Provider Plugin では、そのつなぎ目が本当に汎用でない限り、プロバイダー固有のヘルパーをそれらのパッケージルートのバレルに保持してください。現在のバンドル例は次のとおりです。
- Anthropic: Claude ストリームラッパーと
service_tier/ ベータヘルパー - OpenAI: プロバイダービルダー、デフォルトモデルヘルパー、リアルタイムプロバイダー
- OpenRouter: プロバイダービルダーとオンボーディング/設定ヘルパー
openclaw/plugin-sdk/* に昇格させるのではなく、そのパッケージルートのつなぎ目に保持してください。
一部の生成済み openclaw/plugin-sdk/<bundled-id> ヘルパーのつなぎ目は、所有者の使用状況が追跡されている場合のバンドル済み Plugin メンテナンス用としてまだ存在します。これらは予約済みサーフェスとして扱い、新しいサードパーティ Plugin の既定パターンとして扱わないでください。
提出前チェックリスト
package.json に正しい
openclaw メタデータがあるopenclaw.plugin.json マニフェストが存在し、有効である
エントリポイントが
defineChannelPluginEntry または definePluginEntry を使用しているすべてのインポートが対象を絞った
plugin-sdk/<subpath> パスを使用している内部インポートが SDK 自己インポートではなくローカルモジュールを使用している
テストが成功する(
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check が成功する(リポジトリ内 Plugin)ベータリリーステスト
- openclaw/openclaw の GitHub リリースタグを監視し、
Watch>Releasesで購読してください。ベータタグはv2026.3.N-beta.1のような形式です。リリース告知を受け取るには、OpenClaw の公式 X アカウント @openclaw の通知をオンにすることもできます。 - ベータタグが表示されたらすぐに、そのタグに対して Plugin をテストしてください。安定版までの猶予は通常、数時間だけです。
- テスト後、
plugin-forumDiscord チャンネル内の自分の Plugin スレッドに、all goodまたは壊れた内容を投稿してください。まだスレッドがない場合は作成してください。 - 何かが壊れた場合は、
Beta blocker: <plugin-name> - <summary>というタイトルの Issue を作成または更新し、beta-blockerラベルを適用してください。スレッドに Issue リンクを載せてください。 fix(<plugin-id>): beta blocker - <summary>というタイトルでmainへの PR を開き、PR と Discord スレッドの両方で Issue をリンクしてください。コントリビューターは PR にラベルを付けられないため、タイトルがメンテナーと自動化に対する PR 側のシグナルになります。PR があるブロッカーはマージされます。PR がないブロッカーは、そのまま出荷される可能性があります。メンテナーはベータテスト中にこれらのスレッドを監視します。- 無言は問題なしを意味します。期間を逃した場合、修正はおそらく次のサイクルに入ります。
次のステップ
Channel Plugins
メッセージングチャンネル Plugin を構築する
Provider Plugins
モデルプロバイダー Plugin を構築する
CLI Backend Plugins
ローカル AI CLI バックエンドを登録する
SDK Overview
インポートマップと登録 API リファレンス
Runtime Helpers
api.runtime 経由の TTS、検索、サブエージェント
Testing
テストユーティリティとパターン
Plugin Manifest
完全なマニフェストスキーマリファレンス
関連
- Plugin アーキテクチャ - 内部アーキテクチャの詳細解説
- SDK 概要 - Plugin SDK リファレンス
- マニフェスト - Plugin マニフェスト形式
- Channel Plugins - チャンネル Plugin の構築
- Provider Plugins - プロバイダー Plugin の構築