Building Plugins
Plugins は、OpenClaw に新しい機能を追加します: channels、model providers、 speech、realtime transcription、realtime voice、media understanding、image generation、video generation、web fetch、web search、agent tools、または それらの任意の組み合わせです。 plugin を OpenClaw repository に追加する必要はありません。 ClawHub または npm に公開し、ユーザーはopenclaw plugins install <package-name> でインストールします。OpenClaw は最初に ClawHub を試し、
自動的に npm にフォールバックします。
前提条件
- Node >= 22 とパッケージマネージャー(npm または pnpm)
- TypeScript(ESM)への習熟
- repo 内 plugin の場合: repository を clone 済みで、
pnpm installを実行済みであること
どの種類の plugin か?
Channel plugin
OpenClaw をメッセージングプラットフォーム(Discord、IRC など)に接続する
Provider plugin
model provider(LLM、proxy、またはカスタム endpoint)を追加する
Tool / hook plugin
agent tools、event hooks、または services を登録する — 以下に進んでください
openclaw/plugin-sdk/channel-setup の
createOptionalChannelSetupSurface(...) を使用してください。これは、
インストール要件を提示し、plugin がインストールされるまで実際の config 書き込みでは
安全側に倒して失敗する setup adapter + wizard の組を生成します。
クイックスタート: tool plugin
このチュートリアルでは、agent tool を登録する最小の plugin を作成します。channel plugin と provider plugin には、上にリンクされた専用ガイドがあります。package と manifest を作成する
docs/snippets/plugin-publish/ にあります。entry point を書く
definePluginEntry は非 channel plugin 用です。channels には
defineChannelPluginEntry を使用してください — Channel Plugins を参照してください。
entry point の完全なオプションについては、Entry Points を参照してください。plugin の機能
1 つの plugin は、api オブジェクト経由で任意の数の機能を登録できます:
| Capability | Registration method | Detailed guide |
|---|---|---|
| Text inference (LLM) | api.registerProvider(...) | Provider Plugins |
| CLI inference backend | api.registerCliBackend(...) | CLI Backends |
| Channel / messaging | api.registerChannel(...) | Channel Plugins |
| Speech (TTS/STT) | api.registerSpeechProvider(...) | Provider Plugins |
| Realtime transcription | api.registerRealtimeTranscriptionProvider(...) | Provider Plugins |
| Realtime voice | api.registerRealtimeVoiceProvider(...) | Provider Plugins |
| Media understanding | api.registerMediaUnderstandingProvider(...) | Provider Plugins |
| Image generation | api.registerImageGenerationProvider(...) | Provider Plugins |
| Video generation | api.registerVideoGenerationProvider(...) | Provider Plugins |
| Web fetch | api.registerWebFetchProvider(...) | Provider Plugins |
| Web search | api.registerWebSearchProvider(...) | Provider Plugins |
| Agent tools | api.registerTool(...) | Below |
| Custom commands | api.registerCommand(...) | Entry Points |
| Event hooks | api.registerHook(...) | Entry Points |
| HTTP routes | api.registerHttpRoute(...) | Internals |
| CLI subcommands | api.registerCli(...) | Entry Points |
config.*,
exec.approvals.*, wizard.*, update.*)は予約済みであり、たとえ plugin が
より狭い scope を要求しても、常に operator.admin に解決されます。
覚えておくべき hook ガードのセマンティクス:
before_tool_call:{ block: true }は終端であり、より低優先度の handler を停止します。before_tool_call:{ block: false }は判断なしとして扱われます。before_tool_call:{ requireApproval: true }は agent 実行を一時停止し、exec 承認オーバーレイ、Telegram ボタン、Discord interaction、または任意の channel 上の/approveコマンドを通じてユーザーに承認を求めます。before_install:{ block: true }は終端であり、より低優先度の handler を停止します。before_install:{ block: false }は判断なしとして扱われます。message_sending:{ cancel: true }は終端であり、より低優先度の handler を停止します。message_sending:{ cancel: false }は判断なしとして扱われます。
/approve コマンドは、制限付きフォールバックによって exec 承認と plugin 承認の両方を扱います:
exec 承認 id が見つからない場合、OpenClaw は同じ id を plugin 承認経由で再試行します。plugin 承認転送は、
config 内の approvals.plugin を通じて個別に設定できます。
カスタム承認の配線で同じ制限付きフォールバックケースを検出する必要がある場合は、
承認期限切れ文字列を手動で照合する代わりに、
openclaw/plugin-sdk/error-runtime の isApprovalNotFoundError を使ってください。
詳細は SDK Overview hook decision semantics を参照してください。
agent tools を登録する
tools は、LLM が呼び出せる型付き関数です。required(常に利用可能)または optional(ユーザーのオプトイン)にできます:- tool 名は core tools と衝突してはいけません(衝突したものはスキップされます)
- 副作用がある tools や追加バイナリ要件がある tools には
optional: trueを使用してください - ユーザーは
tools.allowに plugin id を追加することで、その plugin のすべての tools を有効にできます
import 規約
常に、焦点を絞ったopenclaw/plugin-sdk/<subpath> パスから import してください:
api.ts, runtime-api.ts)を使用してください。
自分自身の plugin をその SDK path 経由で import してはいけません。
provider plugins では、その seam が本当に汎用的でない限り、
provider 固有の helper はそれらの package-root
barrel に置いてください。現在の bundled 例:
- Anthropic: Claude stream wrapper と
service_tier/ beta helper - OpenAI: provider builder、default-model helper、realtime providers
- OpenRouter: provider builder と onboarding / config helper
openclaw/plugin-sdk/* に昇格させるのではなく、その
package-root seam に置いてください。
生成済みの openclaw/plugin-sdk/<bundled-id> helper seam の一部は、
bundled-plugin の保守と互換性のために依然として存在しています。たとえば
plugin-sdk/feishu-setup や plugin-sdk/zalo-setup です。これらは
新しいサードパーティ plugin のデフォルトパターンではなく、予約済みサーフェスとして扱ってください。
送信前チェックリスト
package.json に正しい
openclaw メタデータがあるopenclaw.plugin.json manifest が存在し、有効である
entry point が
defineChannelPluginEntry または definePluginEntry を使っているすべての import が焦点を絞った
plugin-sdk/<subpath> パスを使っている内部 import が SDK の自己 import ではなくローカルモジュールを使っている
テストが通る(
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check が通る(repo 内 plugin)ベータリリーステスト
- openclaw/openclaw の GitHub release tag を監視し、
Watch>Releasesで購読してください。beta tag はv2026.3.N-beta.1のような形式です。リリース告知のために、公式 OpenClaw X アカウント @openclaw の通知を有効にすることもできます。 - beta tag が出たら、できるだけ早くその tag に対して plugin をテストしてください。stable までの猶予は通常数時間しかありません。
- テスト後、Discord の
plugin-forumchannel にある自分の plugin スレッドに、all goodまたは何が壊れたかを投稿してください。まだスレッドがない場合は作成してください。 - 何か壊れている場合は、
Beta blocker: <plugin-name> - <summary>というタイトルで issue を作成または更新し、beta-blockerラベルを付けてください。その issue リンクをスレッドに貼ってください。 main向けに、fix(<plugin-id>): beta blocker - <summary>というタイトルで PR を開き、issue を PR と Discord スレッドの両方にリンクしてください。contributor は PR にラベルを付けられないため、タイトルが maintainers と automation に対する PR 側のシグナルになります。PR がある blocker はマージされますが、ない blocker はそのまま出荷されることがあります。maintainers は beta テスト中にこれらのスレッドを監視しています。- 反応がなければ問題なしという意味です。期間を逃した場合、その修正はおそらく次のサイクルに入ります。
次のステップ
Channel Plugins
メッセージング channel plugin を作成する
Provider Plugins
model provider plugin を作成する
SDK Overview
import map と登録 API リファレンス
Runtime Helpers
api.runtime 経由の TTS、search、subagentTesting
テストユーティリティとパターン
Plugin Manifest
完全な manifest schema リファレンス
関連
- Plugin Architecture — 内部アーキテクチャーの詳細
- SDK Overview — Plugin SDK リファレンス
- Manifest — plugin manifest 形式
- Channel Plugins — channel plugins の作成
- Provider Plugins — provider plugins の作成