Instal dan gunakan plugin
Panduan pengguna akhir untuk menambahkan, mengaktifkan, dan memecahkan masalah plugin.
Membangun plugin
Tutorial plugin pertama dengan manifes kerja terkecil.
Plugin channel
Bangun Plugin channel pesan.
Plugin penyedia
Bangun Plugin penyedia model.
Ringkasan SDK
Referensi API peta impor dan registrasi.
Model kapabilitas publik
Kapabilitas adalah model Plugin native publik di dalam OpenClaw. Setiap Plugin OpenClaw native mendaftar terhadap satu atau beberapa jenis kapabilitas:| Kapabilitas | Metode registrasi | Contoh plugin |
|---|---|---|
| Inferensi teks | api.registerProvider(...) | openai, anthropic |
| Backend inferensi CLI | api.registerCliBackend(...) | openai, anthropic |
| Embedding | api.registerEmbeddingProvider(...) | Plugin vektor milik penyedia |
| Ucapan | api.registerSpeechProvider(...) | elevenlabs, microsoft |
| Transkripsi realtime | api.registerRealtimeTranscriptionProvider(...) | openai |
| Suara realtime | api.registerRealtimeVoiceProvider(...) | openai |
| Pemahaman media | api.registerMediaUnderstandingProvider(...) | openai, google |
| Sumber transkrip | api.registerTranscriptSourceProvider(...) | discord |
| Pembuatan gambar | api.registerImageGenerationProvider(...) | openai, google, fal, minimax |
| Pembuatan musik | api.registerMusicGenerationProvider(...) | google, minimax |
| Pembuatan video | api.registerVideoGenerationProvider(...) | qwen |
| Pengambilan web | api.registerWebFetchProvider(...) | firecrawl |
| Pencarian web | api.registerWebSearchProvider(...) | google |
| Channel / pesan | api.registerChannel(...) | msteams, matrix |
| Penemuan Gateway | api.registerGatewayDiscoveryService(...) | bonjour |
Plugin yang mendaftarkan nol kapabilitas tetapi menyediakan hook, alat, layanan penemuan, atau layanan latar belakang adalah Plugin hanya hook legacy. Pola itu masih didukung sepenuhnya.
Sikap kompatibilitas eksternal
Model kapabilitas sudah masuk ke core dan digunakan oleh plugin bundled/native saat ini, tetapi kompatibilitas plugin eksternal masih membutuhkan standar yang lebih ketat daripada “sudah diekspor, jadi sudah dibekukan.”| Situasi Plugin | Panduan |
|---|---|
| Plugin eksternal yang ada | Pertahankan integrasi berbasis hook tetap berfungsi; ini adalah baseline kompatibilitas. |
| Plugin bundled/native baru | Lebih pilih registrasi kapabilitas eksplisit daripada reach-in khusus vendor atau desain baru yang hanya hook. |
| Plugin eksternal yang mengadopsi registrasi kapabilitas | Diizinkan, tetapi perlakukan surface helper khusus kapabilitas sebagai berkembang kecuali docs menandainya stabil. |
Bentuk Plugin
OpenClaw mengklasifikasikan setiap plugin yang dimuat ke dalam bentuk berdasarkan perilaku registrasi aktualnya (bukan hanya metadata statis):plain-capability
plain-capability
Mendaftarkan tepat satu jenis kapabilitas (misalnya plugin hanya penyedia seperti
mistral).hybrid-capability
hybrid-capability
Mendaftarkan beberapa jenis kapabilitas (misalnya
openai memiliki inferensi teks, ucapan, pemahaman media, dan pembuatan gambar).hook-only
hook-only
Hanya mendaftarkan hook (bertipe atau kustom), tanpa kapabilitas, alat, perintah, atau layanan.
non-capability
non-capability
Mendaftarkan alat, perintah, layanan, atau route tetapi tanpa kapabilitas.
openclaw plugins inspect <id> untuk melihat bentuk plugin dan rincian kapabilitasnya. Lihat referensi CLI untuk detail.
Hook legacy
Hookbefore_agent_start tetap didukung sebagai jalur kompatibilitas untuk plugin hanya hook. Plugin dunia nyata legacy masih bergantung padanya.
Arah:
- pertahankan agar tetap berfungsi
- dokumentasikan sebagai legacy
- pilih
before_model_resolveuntuk pekerjaan override model/penyedia - pilih
before_prompt_builduntuk pekerjaan mutasi prompt - hapus hanya setelah penggunaan nyata turun dan cakupan fixture membuktikan keamanan migrasi
Sinyal kompatibilitas
Saat Anda menjalankanopenclaw doctor atau openclaw plugins inspect <id>, Anda mungkin melihat salah satu label ini:
| Sinyal | Arti |
|---|---|
| config valid | Config diurai dengan baik dan plugin terselesaikan |
| compatibility advisory | Plugin menggunakan pola yang didukung tetapi lebih lama (mis. hook-only) |
| legacy warning | Plugin menggunakan before_agent_start, yang sudah deprecated |
| hard error | Config tidak valid atau plugin gagal dimuat |
hook-only maupun before_agent_start tidak akan merusak plugin Anda saat ini: hook-only bersifat advisori, dan before_agent_start hanya memicu peringatan. Sinyal ini juga muncul di openclaw status --all dan openclaw plugins doctor.
Ringkasan arsitektur
Sistem Plugin OpenClaw memiliki empat lapisan:Manifes + penemuan
OpenClaw menemukan kandidat plugin dari jalur yang dikonfigurasi, root workspace, root plugin global, dan plugin bundled. Penemuan membaca manifes native
openclaw.plugin.json plus manifes bundle yang didukung terlebih dahulu.Pengaktifan + validasi
Core memutuskan apakah plugin yang ditemukan diaktifkan, dinonaktifkan, diblokir, atau dipilih untuk slot eksklusif seperti memori.
Pemuatan runtime
Plugin OpenClaw native dimuat dalam proses dan mendaftarkan kapabilitas ke registry pusat. JavaScript berpaket dimuat melalui
require native; TypeScript sumber lokal pihak ketiga adalah fallback darurat Jiti. Bundle yang kompatibel dinormalisasi menjadi record registry tanpa mengimpor kode runtime.- metadata waktu parsing berasal dari
registerCli(..., { descriptors: [...] }) - modul CLI plugin sebenarnya dapat tetap lazy dan mendaftar saat pemanggilan pertama
- validasi manifes/config harus bekerja dari metadata manifes/skema tanpa mengeksekusi kode plugin
- penemuan kapabilitas native dapat memuat kode entri plugin tepercaya untuk membangun snapshot registry non-aktif
- perilaku runtime native berasal dari jalur
register(api)modul plugin denganapi.registrationMode === "full"
Snapshot metadata Plugin dan tabel lookup
Startup Gateway membangun satuPluginMetadataSnapshot untuk snapshot config saat ini. Snapshot ini hanya metadata: menyimpan indeks plugin terpasang, registry manifes, diagnostik manifes, peta pemilik, penormal id plugin, dan record manifes. Snapshot ini tidak menyimpan modul plugin yang dimuat, SDK penyedia, isi paket, atau ekspor runtime.
Validasi config yang sadar plugin, pengaktifan otomatis saat startup, dan bootstrap plugin Gateway menggunakan snapshot itu alih-alih membangun ulang metadata manifes/indeks secara terpisah. PluginLookUpTable diturunkan dari snapshot yang sama dan menambahkan rencana plugin startup untuk config runtime saat ini.
Setelah startup, Gateway mempertahankan snapshot metadata saat ini sebagai produk runtime yang dapat diganti. Penemuan penyedia runtime berulang dapat meminjam snapshot itu alih-alih merekonstruksi indeks terpasang dan registry manifes untuk setiap pass katalog penyedia. Snapshot dihapus atau diganti saat Gateway shutdown, perubahan config/inventaris plugin, dan penulisan indeks terpasang; pemanggil fallback ke jalur manifes/indeks dingin saat tidak ada snapshot saat ini yang kompatibel. Pemeriksaan kompatibilitas harus menyertakan root penemuan plugin seperti plugins.load.paths dan workspace agen default, karena plugin workspace adalah bagian dari cakupan metadata.
Snapshot dan tabel lookup menjaga keputusan startup berulang tetap di jalur cepat:
- kepemilikan channel
- startup channel tertunda
- id plugin startup
- kepemilikan penyedia dan backend CLI
- setup penyedia, alias perintah, penyedia katalog model, dan kepemilikan kontrak manifes
- validasi skema config plugin dan skema config channel
- keputusan pengaktifan otomatis saat startup
PluginLookUpTable Gateway. Jalur itu kini merekonstruksi registry sesuai kebutuhan; pilih meneruskan tabel lookup saat ini atau registry manifes eksplisit melalui flow runtime saat pemanggil sudah memilikinya.
Perencanaan aktivasi
Perencanaan aktivasi adalah bagian dari control plane. Pemanggil dapat menanyakan plugin mana yang relevan untuk perintah, penyedia, channel, route, harness agen, atau kapabilitas konkret sebelum memuat registry runtime yang lebih luas. Planner menjaga perilaku manifes saat ini tetap kompatibel:- kolom
activation.*adalah petunjuk perencana yang eksplisit providers,channels,commandAliases,setup.providers,contracts.tools, dan hook tetap menjadi fallback kepemilikan manifes- API perencana khusus id tetap tersedia untuk caller yang sudah ada
- API rencana melaporkan label alasan sehingga diagnostik dapat membedakan petunjuk eksplisit dari fallback kepemilikan
Plugin kanal dan alat pesan bersama
Plugin kanal tidak perlu mendaftarkan alat kirim/edit/reaksi terpisah untuk aksi obrolan normal. OpenClaw mempertahankan satu alatmessage bersama di inti, dan Plugin kanal memiliki discovery serta eksekusi khusus kanal di baliknya.
Batas saat ini adalah:
- inti memiliki host alat
messagebersama, wiring prompt, pencatatan sesi/thread, dan dispatch eksekusi - Plugin kanal memiliki discovery aksi terscoped, discovery kapabilitas, dan fragmen skema khusus kanal apa pun
- Plugin kanal memiliki tata bahasa percakapan sesi khusus penyedia, seperti bagaimana id percakapan mengodekan id thread atau mewarisi dari percakapan induk
- Plugin kanal menjalankan aksi akhir melalui adapter aksinya
ChannelMessageActionAdapter.describeMessageTool(...). Panggilan discovery terpadu tersebut memungkinkan Plugin mengembalikan aksi yang terlihat, kapabilitas, dan kontribusi skemanya bersama-sama agar bagian-bagian itu tidak menyimpang.
Ketika param alat pesan khusus kanal membawa sumber media seperti path lokal atau URL media jarak jauh, Plugin juga harus mengembalikan mediaSourceParams dari describeMessageTool(...). Inti menggunakan daftar eksplisit itu untuk menerapkan normalisasi path sandbox dan petunjuk akses media keluar tanpa meng-hardcode nama param milik Plugin. Utamakan map terscoped aksi di sana, bukan satu daftar datar selebar kanal, agar param media khusus profil tidak dinormalisasi pada aksi yang tidak terkait seperti send.
Inti meneruskan scope runtime ke langkah discovery tersebut. Kolom penting mencakup:
accountIdcurrentChannelIdcurrentThreadTscurrentMessageIdsessionKeysessionIdagentIdrequesterSenderIdinbound tepercaya
message inti.
Inilah mengapa perubahan routing embedded-runner tetap menjadi pekerjaan Plugin: runner bertanggung jawab meneruskan identitas obrolan/sesi saat ini ke batas discovery Plugin agar alat message bersama mengekspos permukaan milik kanal yang tepat untuk giliran saat ini.
Untuk helper eksekusi milik kanal, Plugin bawaan harus mempertahankan runtime eksekusi di dalam modul ekstensi mereka sendiri. Inti tidak lagi memiliki runtime aksi pesan Discord, Slack, Telegram, atau WhatsApp di bawah src/agents/tools. Kami tidak menerbitkan subpath plugin-sdk/*-action-runtime terpisah, dan Plugin bawaan harus mengimpor kode runtime lokal mereka sendiri langsung dari modul milik ekstensi mereka.
Batas yang sama berlaku untuk seam SDK bernama penyedia secara umum: inti tidak boleh mengimpor barrel kemudahan khusus kanal untuk Slack, Discord, Signal, WhatsApp, atau ekstensi serupa. Jika inti membutuhkan suatu perilaku, konsumsi barrel api.ts / runtime-api.ts milik Plugin bawaan itu sendiri atau promosikan kebutuhan tersebut menjadi kapabilitas generik yang sempit di SDK bersama.
Plugin bawaan mengikuti aturan yang sama. runtime-api.ts milik Plugin bawaan tidak boleh mengekspor ulang facade bermerek openclaw/plugin-sdk/<plugin-id> miliknya sendiri. Facade bermerek tersebut tetap menjadi shim kompatibilitas untuk Plugin eksternal dan konsumen lama, tetapi Plugin bawaan harus menggunakan ekspor lokal plus subpath SDK generik yang sempit seperti openclaw/plugin-sdk/channel-policy, openclaw/plugin-sdk/runtime-store, atau openclaw/plugin-sdk/webhook-ingress. Kode baru tidak boleh menambahkan facade SDK khusus plugin-id kecuali batas kompatibilitas untuk ekosistem eksternal yang sudah ada membutuhkannya.
Khusus untuk polling, ada dua path eksekusi:
outbound.sendPolladalah baseline bersama untuk kanal yang cocok dengan model polling umumactions.handleAction("poll")adalah path yang diutamakan untuk semantik polling khusus kanal atau parameter polling tambahan
Model kepemilikan kapabilitas
OpenClaw memperlakukan Plugin native sebagai batas kepemilikan untuk sebuah perusahaan atau sebuah fitur, bukan sebagai kumpulan integrasi yang tidak saling terkait. Artinya:- Plugin perusahaan biasanya harus memiliki semua permukaan yang menghadap OpenClaw untuk perusahaan tersebut
- Plugin fitur biasanya harus memiliki seluruh permukaan fitur yang diperkenalkannya
- kanal harus mengonsumsi kapabilitas inti bersama alih-alih mengimplementasikan ulang perilaku penyedia secara ad hoc
Vendor multi-capability
Vendor multi-capability
openai memiliki inferensi teks, wicara, suara realtime, pemahaman media, dan pembuatan gambar. google memiliki inferensi teks plus pemahaman media, pembuatan gambar, dan pencarian web. qwen memiliki inferensi teks plus pemahaman media dan pembuatan video.Vendor single-capability
Vendor single-capability
elevenlabs dan microsoft memiliki wicara; firecrawl memiliki web-fetch; minimax / mistral / moonshot / zai memiliki backend pemahaman media.Feature plugin
Feature plugin
voice-call memiliki transport panggilan, alat, CLI, route, dan bridging media-stream Twilio, tetapi mengonsumsi kapabilitas wicara bersama, transkripsi realtime, dan suara realtime alih-alih mengimpor Plugin vendor secara langsung.- OpenAI hidup dalam satu Plugin meskipun mencakup model teks, wicara, gambar, dan video masa depan
- vendor lain dapat melakukan hal yang sama untuk area permukaannya sendiri
- kanal tidak peduli Plugin vendor mana yang memiliki penyedia; kanal mengonsumsi kontrak kapabilitas bersama yang diekspos oleh inti
- Plugin = batas kepemilikan
- kapabilitas = kontrak inti yang dapat diimplementasikan atau dikonsumsi oleh beberapa Plugin
Ini menjaga kepemilikan tetap eksplisit sambil menghindari perilaku inti yang bergantung pada satu vendor atau path kode khusus Plugin sekali pakai.
Pelapisan kapabilitas
Gunakan model mental ini saat memutuskan di mana kode berada:- Core capability layer
- Vendor plugin layer
- Channel/feature plugin layer
Orkestrasi bersama, kebijakan, fallback, aturan merge config, semantik pengiriman, dan kontrak bertipe.
- inti memiliki kebijakan TTS saat balasan, urutan fallback, preferensi, dan pengiriman kanal
openai,elevenlabs, danmicrosoftmemiliki implementasi sintesisvoice-callmengonsumsi helper runtime TTS telepon
Contoh Plugin perusahaan multi-kapabilitas
Plugin perusahaan harus terasa kohesif dari luar. Jika OpenClaw memiliki kontrak bersama untuk model, wicara, transkripsi realtime, suara realtime, pemahaman media, pembuatan gambar, pembuatan video, fetch web, dan pencarian web, vendor dapat memiliki semua permukaannya di satu tempat:- satu Plugin memiliki permukaan vendor
- inti tetap memiliki kontrak kapabilitas
- kanal dan Plugin fitur mengonsumsi helper
api.runtime.*, bukan kode vendor - pengujian kontrak dapat menegaskan bahwa Plugin mendaftarkan kapabilitas yang diklaimnya dimiliki
Contoh kapabilitas: pemahaman video
OpenClaw sudah memperlakukan pemahaman gambar/audio/video sebagai satu kapabilitas bersama. Model kepemilikan yang sama berlaku di sana:Vendor plugins register
Plugin vendor mendaftarkan
describeImage, transcribeAudio, dan describeVideo sesuai kebutuhan.api.registerVideoGenerationProvider(...) terhadapnya.
Butuh checklist rollout konkret? Lihat Capability Cookbook.
Kontrak dan penegakan
Permukaan API Plugin sengaja dibuat bertipe dan terpusat diOpenClawPluginApi. Kontrak itu mendefinisikan titik pendaftaran yang didukung dan helper runtime yang boleh diandalkan oleh Plugin.
Mengapa ini penting:
- penulis Plugin mendapatkan satu standar internal yang stabil
- inti dapat menolak kepemilikan duplikat seperti dua Plugin yang mendaftarkan id penyedia yang sama
- startup dapat menampilkan diagnostik yang dapat ditindaklanjuti untuk pendaftaran yang malformed
- pengujian kontrak dapat menegakkan kepemilikan Plugin bawaan dan mencegah penyimpangan senyap
Penegakan pendaftaran runtime
Penegakan pendaftaran runtime
Registry plugin memvalidasi pendaftaran saat plugin dimuat. Contoh: id penyedia duplikat, id penyedia speech duplikat, dan pendaftaran yang tidak valid menghasilkan diagnostik plugin alih-alih perilaku yang tidak terdefinisi.
Pengujian kontrak
Pengujian kontrak
Plugin bawaan ditangkap dalam registry kontrak selama test run sehingga OpenClaw dapat menegaskan kepemilikan secara eksplisit. Saat ini ini digunakan untuk penyedia model, penyedia speech, penyedia pencarian web, dan kepemilikan pendaftaran bawaan.
Apa yang termasuk dalam kontrak
- Kontrak yang baik
- Kontrak yang buruk
- bertipe
- kecil
- spesifik capability
- dimiliki oleh core
- dapat digunakan ulang oleh beberapa plugin
- dapat dikonsumsi oleh channel/fitur tanpa pengetahuan vendor
Model eksekusi
Plugin OpenClaw native berjalan di dalam proses bersama Gateway. Plugin tersebut tidak di-sandbox. Plugin native yang dimuat memiliki batas kepercayaan tingkat proses yang sama dengan kode core. Bundle yang kompatibel lebih aman secara default karena OpenClaw saat ini memperlakukannya sebagai paket metadata/konten. Dalam rilis saat ini, itu umumnya berarti Skills bawaan. Gunakan allowlist dan jalur install/load eksplisit untuk plugin non-bawaan. Perlakukan plugin workspace sebagai kode waktu pengembangan, bukan default produksi. Untuk nama paket workspace bawaan, pertahankan id plugin yang tertambat pada nama npm:@openclaw/<id> secara default, atau sufiks bertipe yang disetujui seperti -provider, -plugin, -speech, -sandbox, atau -media-understanding ketika paket tersebut sengaja mengekspos peran plugin yang lebih sempit.
Catatan kepercayaan:
plugins.allow memercayai id plugin, bukan asal sumber. Plugin workspace dengan id yang sama dengan plugin bawaan secara sengaja membayangi salinan bawaan ketika plugin workspace tersebut diaktifkan/dimasukkan allowlist. Ini normal dan berguna untuk pengembangan lokal, pengujian patch, dan hotfix. Kepercayaan plugin bawaan diselesaikan dari snapshot sumber — manifest dan kode di disk saat load time — bukan dari metadata install. Catatan install yang rusak atau diganti tidak dapat secara diam-diam memperluas surface kepercayaan plugin bawaan melebihi apa yang diklaim sumber aktual.Batas ekspor
OpenClaw mengekspor capability, bukan kemudahan implementasi. Jaga pendaftaran capability tetap publik. Pangkas ekspor helper non-kontrak:- subpath helper khusus plugin bawaan
- subpath plumbing runtime yang tidak dimaksudkan sebagai API publik
- helper kemudahan khusus vendor
- helper penyiapan/onboarding yang merupakan detail implementasi
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime, dan plugin-sdk/plugin-config-runtime.