defineToolPlugin membangun plugin yang hanya menambahkan alat yang dapat dipanggil agen: tanpa
channel, penyedia model, hook, layanan, atau backend penyiapan. Ini menghasilkan
metadata manifes yang dibutuhkan OpenClaw untuk menemukan alat tanpa memuat kode
runtime plugin.
Untuk plugin penyedia, channel, hook, layanan, atau berkemampuan campuran, mulailah dengan
Membangun plugin, Plugin Channel,
atau Plugin Penyedia.
Persyaratan
- Node 22.22.3+, Node 24.15+, atau Node 25.9+.
- Keluaran paket ESM TypeScript.
typeboxdalamdependencies(bukan hanyadevDependencies- plugin yang dihasilkan mengimpornya saat runtime).openclaw >=2026.5.17, versi pertama yang mengeksporopenclaw/plugin-sdk/tool-plugin.- Root paket yang menyertakan
dist/,openclaw.plugin.json, danpackage.json.
Mulai cepat
plugins init membuat kerangka:
npm run plugin:build menjalankan npm run build (tsc), lalu
openclaw plugins build --entry ./dist/index.js. npm run plugin:validate
membangun ulang dan menjalankan openclaw plugins validate --entry ./dist/index.js.
Validasi yang berhasil menampilkan:
openclaw plugins init <id>:
Menulis alat
defineToolPlugin menerima identitas plugin, skema konfigurasi opsional, dan
daftar alat statis. Jenis parameter dan konfigurasi diinferensikan dari
skema TypeBox.
Alat opsional dan berbasis factory
Tetapkanoptional: true saat pengguna harus secara eksplisit memasukkan alat ke daftar yang diizinkan sebelum
alat tersebut dikirim ke model. openclaw plugins build menulis entri manifes
toolMetadata.<tool>.optional yang sesuai, sehingga OpenClaw dapat mengetahui bahwa
alat tersebut opsional tanpa memuat kode runtime plugin.
factory saat alat membutuhkan konteks alat runtime sebelum dapat
dibuat—untuk tidak menyertakannya dalam proses tertentu, memeriksa status sandbox, atau mengikat
helper runtime. Metadata tetap statis meskipun alat konkretnya dibuat
saat runtime.
definePluginEntry
secara langsung saat plugin menghitung nama alat secara dinamis atau menggabungkan alat
dengan hook, layanan, penyedia, atau perintah.
Nilai kembalian
defineToolPlugin membungkus nilai kembalian biasa ke dalam format hasil alat
OpenClaw:
- Kembalikan string saat model harus melihat teks persis tersebut.
- Kembalikan nilai yang kompatibel dengan JSON saat Anda ingin model melihat JSON terformat
dan OpenClaw mempertahankan nilai asli dalam
details.
AgentToolResult khusus atau ingin menggunakan kembali
implementasi api.registerTool yang sudah ada.
Kontrak keluaran
TambahkanoutputSchema saat alat mengembalikan data stabil yang kompatibel dengan JSON. Ini menjelaskan
nilai asli yang disimpan dalam AgentToolResult.details, bukan teks terformat
dalam content:
details setelah hook alat sebelum mengembalikannya melalui bridge.
Skema yang tidak valid tidak dapat menjalankan alat; ketidakcocokan hasil menyebabkan panggilan yang telah selesai
gagal. Sertakan setiap varian hasil yang tidak melempar error, termasuk varian error
terstruktur, atau hilangkan skema saat hasilnya tidak stabil. Jangan menaruh rahasia
atau nilai sensitif dalam deskripsi skema karena metadata keluaran tepercaya dapat
terlihat oleh model.
Gunakan { additionalProperties: false } pada lapisan objek saat Anda menginginkan petunjuk keluaran ringkas
yang lengkap; skema terbuka atau terpotong tetap tersedia melalui
tools.describe(...), tetapi tidak ditampilkan sebagai kontrak indeks cepat yang lengkap.
Alat factory mendeklarasikan outputSchema pada AnyAgentTool konkret yang
dikembalikannya. Deklarasi statis tool({ factory }) tidak menerima
skema keluaran terpisah karena dapat menyimpang dari alat runtime.
Konfigurasi
configSchema bersifat opsional. Hilangkan dan OpenClaw akan menerapkan skema objek kosong
yang ketat; manifes yang dihasilkan tetap menyertakan configSchema.
configSchema, argumen execute kedua diberi tipe berdasarkan skema tersebut:
Metadata yang dihasilkan
OpenClaw harus membaca manifes plugin sebelum mengimpor kode runtime plugin.defineToolPlugin menyediakan metadata statis untuk hal ini, dan
openclaw plugins build menuliskannya ke dalam paket. Jalankan ulang generator setelah
mengubah id, nama, deskripsi, skema konfigurasi, aktivasi, atau nama alat
plugin:
contracts.tools adalah kontrak penemuan yang penting: kontrak ini memberi tahu OpenClaw
plugin mana yang memiliki setiap alat tanpa memuat runtime setiap plugin yang terpasang. Manifes
yang usang berarti alat dapat hilang dari penemuan, atau error pendaftaran
dituduhkan kepada plugin yang salah.
Metadata paket
openclaw plugins build juga menyelaraskan package.json dengan entri runtime
yang dipilih:
./dist/index.js), bukan entri sumber TypeScript.
Entri sumber hanya berfungsi untuk pengembangan lokal dalam workspace.
Memvalidasi dalam CI
plugins build --check gagal tanpa menulis ulang file ketika metadata yang dihasilkan
sudah usang:
plugins validate memeriksa bahwa:
openclaw.plugin.jsonada dan lolos pemuat manifes normal.- Entri saat ini mengekspor metadata
defineToolPlugin. - Bidang manifes yang dihasilkan cocok dengan metadata entri.
contracts.toolscocok dengan nama alat yang dideklarasikan.package.jsonmengarahkanopenclaw.extensionske entri runtime yang dipilih.
Menginstal dan memeriksa secara lokal
Dari checkout OpenClaw terpisah atau CLI yang terinstal, instal jalur paket:Publikasi
Publikasikan melalui ClawHub setelah paket siap.clawhub package publish
menerima sumber: folder lokal, repo GitHub (owner/repo[@ref]), atau
URL tarball.
Pemecahan masalah
plugin entry not found: ./dist/index.js
File entri yang dipilih tidak ada. Jalankan npm run build, lalu jalankan kembali
openclaw plugins build --entry ./dist/index.js atau
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Entri tersebut tidak mengekspor nilai yang dibuat oleh defineToolPlugin. Pastikan
ekspor default modul adalah hasil defineToolPlugin(...), atau teruskan
entri yang benar dengan --entry.
openclaw.plugin.json generated metadata is stale
Manifes tidak lagi cocok dengan metadata entri. Jalankan:
openclaw.plugin.json dan package.json.
package.json openclaw.extensions must include ./dist/index.js
Metadata paket mengarah ke entri runtime yang berbeda. Jalankan
openclaw plugins build --entry ./dist/index.js agar generator menyelaraskan
metadata paket dengan entri yang ingin Anda rilis.
Cannot find package 'typebox'
Plugin yang telah dibangun mengimpor typebox saat runtime. Pertahankan di dependencies,
instal ulang, bangun ulang, dan jalankan kembali validasi.
Alat tidak muncul setelah instalasi
Periksa hal-hal berikut secara berurutan:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonmemilikicontracts.toolsdengan nama alat yang diharapkan.package.jsonmemilikiopenclaw.extensions: ["./dist/index.js"].- Gateway telah dimulai ulang atau dimuat ulang setelah menginstal plugin.