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リポジトリに追加する必要はありません。 ClawHub またはnpmに公開し、ユーザーはopenclaw plugins install <package-name> でインストールできます。OpenClawはまずClawHubを試し、
自動的にnpmへフォールバックします。
前提条件
- Node >= 22 とパッケージマネージャー(npmまたはpnpm)
- TypeScript(ESM)の基本知識
- リポジトリ内pluginの場合: リポジトリを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がインストールされるまで実際の設定書き込みを安全に失敗させる
setup adapter + ウィザードの組が生成されます。
クイックスタート: tool plugin
この手順では、agent toolを登録する最小限のpluginを作成します。channel pluginとprovider pluginには、上でリンクした専用ガイドがあります。パッケージとmanifestを作成する
docs/snippets/plugin-publish/ にあります。entry pointを書く
definePluginEntry はchannel以外のplugins向けです。channelsには
defineChannelPluginEntry を使用します — Channel Plugins を参照してください。
完全なentry pointオプションについては、Entry Points を参照してください。Plugin capabilities
1つのpluginは、api オブジェクトを通じて任意の数のcapabilityを登録できます:
| Capability | Registration method | 詳細ガイド |
|---|---|---|
| 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 |
| Music generation | api.registerMusicGenerationProvider(...) | Provider Plugins |
| Video generation | api.registerVideoGenerationProvider(...) | Provider Plugins |
| Web fetch | api.registerWebFetchProvider(...) | Provider Plugins |
| Web search | api.registerWebSearchProvider(...) | Provider Plugins |
| Agent tools | api.registerTool(...) | 以下 |
| 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 guardのセマンティクス:
before_tool_call:{ block: true }は終端であり、より低い優先度のhandlerを停止します。before_tool_call:{ block: false }は未決定として扱われます。before_tool_call:{ requireApproval: true }はagent実行を一時停止し、exec approval overlay、Telegramボタン、Discord interactions、または任意のchannel上の/approveコマンドを通じてユーザーに承認を求めます。before_install:{ block: true }は終端であり、より低い優先度のhandlerを停止します。before_install:{ block: false }は未決定として扱われます。message_sending:{ cancel: true }は終端であり、より低い優先度のhandlerを停止します。message_sending:{ cancel: false }は未決定として扱われます。
/approve コマンドは、境界付きフォールバックでexec approvalとplugin approvalの両方を処理します。exec approval idが見つからない場合、
OpenClawは同じidでplugin approvalを再試行します。plugin approval forwardingは設定の approvals.plugin で個別に構成できます。
カスタムapproval処理で同じ境界付きフォールバックケースを検出する必要がある場合は、
approval-expiry文字列を手動で照合するのではなく、openclaw/plugin-sdk/error-runtime の
isApprovalNotFoundError を使用してください。
詳細は SDK Overview hook decision semantics を参照してください。
Agent toolsの登録
toolsは、LLMが呼び出せる型付き関数です。必須(常に 利用可能)または任意(ユーザーのオプトイン)が可能です:- tool名はcore toolsと衝突してはいけません(衝突したものはスキップされます)
- 副作用があるtoolsや追加バイナリが必要なtoolsには
optional: trueを使用してください - ユーザーは
tools.allowにplugin idを追加することで、そのpluginのすべてのtoolsを有効にできます
Import規約
必ず、焦点の絞られたopenclaw/plugin-sdk/<subpath> パスからimportしてください:
api.ts、runtime-api.ts)を使用してください —
SDK path経由で自分自身のpluginをimportしてはいけません。
provider pluginsでは、その継ぎ目が本当に汎用的でない限り、provider固有のhelperはそれらのpackage-root
barrelsに置いてください。現在のバンドル例:
- Anthropic: Claude stream wrappers と
service_tier/ beta helpers - OpenAI: provider builders、default-model helpers、realtime providers
- OpenRouter: provider builder と onboarding/config helpers
openclaw/plugin-sdk/* に昇格させるのではなく、その
package-root seam上に維持してください。
一部の生成済み openclaw/plugin-sdk/<bundled-id> helper seamsは、
バンドルpluginの保守と互換性のためにまだ存在しています。たとえば
plugin-sdk/feishu-setup や plugin-sdk/zalo-setup です。これらは、
新しいサードパーティpluginのデフォルトパターンではなく、予約されたsurfaceとして扱ってください。
提出前チェックリスト
package.json に正しい
openclaw メタデータがあるopenclaw.plugin.json manifestが存在し、有効である
entry pointが
defineChannelPluginEntry または definePluginEntry を使用しているすべてのimportが焦点の絞られた
plugin-sdk/<subpath> パスを使用している内部importが、SDK self-importではなくローカルmoduleを使用している
テストが通る(
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check が通る(リポジトリ内plugins)Beta Release Testing
- openclaw/openclaw のGitHub release tagを監視し、
Watch>Releasesから購読してください。beta tagはv2026.3.N-beta.1のような形式です。release告知のために、OpenClaw公式Xアカウント @openclaw の通知を有効にすることもできます。 - beta tagが出たら、できるだけ早くpluginをそのtagに対してテストしてください。stableまでの時間は通常わずか数時間です。
- テスト後、
plugin-forumDiscord channel内の自分のpluginスレッドに、all goodまたは何が壊れたかを投稿してください。まだスレッドがない場合は作成してください。 - 何か壊れた場合は、
Beta blocker: <plugin-name> - <summary>というタイトルでissueを作成または更新し、beta-blockerlabelを付けてください。issueリンクをスレッドに貼ってください。 mainに対してfix(<plugin-id>): beta blocker - <summary>というタイトルのPRを開き、PRとDiscordスレッドの両方でissueをリンクしてください。contributorはPRにlabelを付けられないため、titleがmaintainerとautomation向けのPR側シグナルになります。PRのあるblockerはマージされますが、ないものはそのまま出荷される可能性があります。maintainerはbeta testing中にこれらのスレッドを監視しています。- 無言はグリーンを意味します。期間を逃した場合、修正はおそらく次のサイクルで反映されます。
次のステップ
Channel Plugins
メッセージングchannel pluginを構築する
Provider Plugins
model provider pluginを構築する
SDK Overview
import mapと登録APIのリファレンス
Runtime Helpers
api.runtime 経由のTTS、search、subagentTesting
テストユーティリティとパターン
Plugin Manifest
完全なmanifestスキーマリファレンス
関連
- Plugin Architecture — 内部アーキテクチャの詳細解説
- SDK Overview — Plugin SDKリファレンス
- Manifest — plugin manifest形式
- Channel Plugins — channel pluginsの構築
- Provider Plugins — provider pluginsの構築