Plugins
Plugin kurulumu ve yapılandırması
Plugin paketleme (package.json meta verileri), manifestler (openclaw.plugin.json), kurulum girişleri ve config şemaları için referans.
Paket meta verileri
package.json dosyanızda, Plugin sistemine plugin'inizin ne sağladığını söyleyen bir openclaw alanı gerekir:
Channel plugin
{
"name": "@myorg/openclaw-my-channel",
"version": "1.0.0",
"type": "module",
"openclaw": {
"extensions": ["./index.ts"],
"setupEntry": "./setup-entry.ts",
"channel": {
"id": "my-channel",
"label": "My Channel",
"blurb": "Short description of the channel."
}
}
}
Provider plugin / ClawHub baseline
{
"name": "@myorg/openclaw-my-plugin",
"version": "1.0.0",
"type": "module",
"openclaw": {
"extensions": ["./index.ts"],
"compat": {
"pluginApi": ">=2026.3.24-beta.2",
"minGatewayVersion": "2026.3.24-beta.2"
},
"build": {
"openclawVersion": "2026.3.24-beta.2",
"pluginSdkVersion": "2026.3.24-beta.2"
}
}
}
openclaw alanları
extensionsstring[]Giriş noktası dosyaları (paket köküne göre göreli).
setupEntrystringHafif, yalnızca kuruluma yönelik giriş (isteğe bağlı).
channelobjectKurulum, seçici, hızlı başlangıç ve durum yüzeyleri için kanal katalog meta verileri.
providersstring[]Bu Plugin tarafından kaydedilen provider kimlikleri.
installobjectKurulum ipuçları: npmSpec, localPath, defaultChoice, minHostVersion, expectedIntegrity, allowInvalidConfigRecovery.
startupobjectBaşlatma davranışı bayrakları.
openclaw.channel
openclaw.channel, çalışma zamanı yüklenmeden önce kanal keşfi ve kurulum yüzeyleri için düşük maliyetli paket meta verisidir.
| Alan | Tür | Anlamı |
|---|---|---|
id |
string |
Standart kanal kimliği. |
label |
string |
Birincil kanal etiketi. |
selectionLabel |
string |
label değerinden farklı olması gerektiğinde seçici/kurulum etiketi. |
detailLabel |
string |
Daha zengin kanal katalogları ve durum yüzeyleri için ikincil ayrıntı etiketi. |
docsPath |
string |
Kurulum ve seçim bağlantıları için doküman yolu. |
docsLabel |
string |
Kanal kimliğinden farklı olması gerektiğinde doküman bağlantıları için kullanılan geçersiz kılma etiketi. |
blurb |
string |
Kısa onboarding/katalog açıklaması. |
order |
number |
Kanal kataloglarındaki sıralama düzeni. |
aliases |
string[] |
Kanal seçimi için ek arama takma adları. |
preferOver |
string[] |
Bu kanalın önüne geçmesi gereken daha düşük öncelikli plugin/kanal kimlikleri. |
systemImage |
string |
Kanal UI katalogları için isteğe bağlı simge/sistem görseli adı. |
selectionDocsPrefix |
string |
Seçim yüzeylerinde doküman bağlantılarından önceki ön ek metni. |
selectionDocsOmitLabel |
boolean |
Seçim kopyasında etiketli bir doküman bağlantısı yerine doküman yolunu doğrudan göster. |
selectionExtras |
string[] |
Seçim kopyasına eklenen ek kısa dizeler. |
markdownCapable |
boolean |
Kanalı giden biçimlendirme kararları için markdown destekli olarak işaretler. |
exposure |
object |
Kurulum, yapılandırılmış listeler ve doküman yüzeyleri için kanal görünürlüğü denetimleri. |
quickstartAllowFrom |
boolean |
Bu kanalı standart hızlı başlangıç allowFrom kurulum akışına dahil eder. |
forceAccountBinding |
boolean |
Yalnızca bir hesap olsa bile açık hesap bağlamayı zorunlu kılar. |
preferSessionLookupForAnnounceTarget |
boolean |
Bu kanal için duyuru hedeflerini çözerken oturum aramasını tercih eder. |
Örnek:
{
"openclaw": {
"channel": {
"id": "my-channel",
"label": "My Channel",
"selectionLabel": "My Channel (self-hosted)",
"detailLabel": "My Channel Bot",
"docsPath": "/channels/my-channel",
"docsLabel": "my-channel",
"blurb": "Webhook-based self-hosted chat integration.",
"order": 80,
"aliases": ["mc"],
"preferOver": ["my-channel-legacy"],
"selectionDocsPrefix": "Guide:",
"selectionExtras": ["Markdown"],
"markdownCapable": true,
"exposure": {
"configured": true,
"setup": true,
"docs": true
},
"quickstartAllowFrom": true
}
}
}
exposure şunları destekler:
configured: kanalı yapılandırılmış/durum tarzı listeleme yüzeylerine dahil edersetup: kanalı etkileşimli kurulum/yapılandırma seçicilerine dahil ederdocs: kanalı dokümanlar/gezinme yüzeylerinde kamuya açık olarak işaretler
openclaw.install
openclaw.install paket meta verisidir, manifest meta verisi değildir.
| Alan | Tür | Anlamı |
|---|---|---|
clawhubSpec |
string |
Kurulum/güncelleme ve onboarding sırasında talep üzerine kurulum akışları için standart ClawHub belirtimi. |
npmSpec |
string |
Kurulum/güncelleme yedek akışları için standart npm belirtimi. |
localPath |
string |
Yerel geliştirme veya paketle birlikte gelen kurulum yolu. |
defaultChoice |
"clawhub" | "npm" | "local" |
Birden fazla kaynak mevcut olduğunda tercih edilen kurulum kaynağı. |
minHostVersion |
string |
>=x.y.z veya >=x.y.z-prerelease biçiminde desteklenen minimum OpenClaw sürümü. |
expectedIntegrity |
string |
Sabitlenmiş kurulumlar için genellikle sha512-... olan beklenen npm dağıtım bütünlüğü dizesi. |
allowInvalidConfigRecovery |
boolean |
Paketle gelen plugin yeniden kurulum akışlarının belirli eski config hatalarından toparlanmasını sağlar. |
Onboarding behavior
Etkileşimli onboarding, talep üzerine kurulum yüzeyleri için openclaw.install değerini de kullanır. Plugin'iniz provider auth seçeneklerini veya kanal kurulum/katalog meta verilerini çalışma zamanı yüklenmeden önce sunuyorsa, onboarding bu seçimi gösterebilir, ClawHub, npm veya yerel kurulum için sorabilir, plugin'i kurabilir ya da etkinleştirebilir ve ardından seçilen akışa devam edebilir. ClawHub onboarding seçenekleri clawhubSpec kullanır ve mevcut olduğunda tercih edilir; npm seçenekleri, kayıt defteri npmSpec içeren güvenilir katalog meta verileri gerektirir; kesin sürümler ve expectedIntegrity isteğe bağlı npm sabitlemeleridir. expectedIntegrity mevcutsa kurulum/güncelleme akışları bunu npm için zorunlu kılar. "Ne gösterilecek" meta verisini openclaw.plugin.json içinde, "nasıl kurulacak" meta verisini ise package.json içinde tutun.
minHostVersion enforcement
minHostVersion ayarlanırsa hem kurulum hem de paketle gelmeyen manifest kayıt defteri yüklemesi bunu zorunlu kılar. Eski host'lar harici plugin'leri atlar; geçersiz sürüm dizeleri reddedilir. Paketle gelen kaynak plugin'lerin host checkout'ı ile aynı sürümde olduğu varsayılır.
Pinned npm installs
Sabitlenmiş npm kurulumları için kesin sürümü npmSpec içinde tutun ve beklenen yapıt bütünlüğünü ekleyin:
{
"openclaw": {
"install": {
"npmSpec": "@wecom/[email protected]",
"expectedIntegrity": "sha512-REPLACE_WITH_NPM_DIST_INTEGRITY",
"defaultChoice": "npm"
}
}
}
allowInvalidConfigRecovery scope
allowInvalidConfigRecovery, bozuk config'ler için genel bir baypas değildir. Yalnızca dar kapsamlı, paketle gelen plugin toparlanması içindir; böylece yeniden kurulum/kurulum, eksik bir paketle gelen plugin yolu veya aynı plugin için eski channels.<id> girdisi gibi bilinen yükseltme kalıntılarını onarabilir. Config ilgisiz nedenlerle bozuksa kurulum yine kapalı şekilde başarısız olur ve operatöre openclaw doctor --fix çalıştırmasını söyler.
Ertelenmiş tam yükleme
Channel plugin'leri şu şekilde ertelenmiş yüklemeyi seçebilir:
{
"openclaw": {
"extensions": ["./index.ts"],
"setupEntry": "./setup-entry.ts",
"startup": {
"deferConfiguredChannelFullLoadUntilAfterListen": true
}
}
}
Etkinleştirildiğinde OpenClaw, ön dinleme başlatma aşamasında, halihazırda yapılandırılmış kanallar için bile yalnızca setupEntry değerini yükler. Tam giriş, gateway dinlemeye başladıktan sonra yüklenir.
Kurulum/tam girişiniz gateway RPC yöntemleri kaydediyorsa, bunları plugin'e özgü bir ön ekte tutun. Ayrılmış çekirdek admin ad alanları (config.*, exec.approvals.*, wizard.*, update.*) çekirdeğe ait kalır ve her zaman operator.admin olarak çözülür.
Plugin manifesti
Her yerel plugin, paket kökünde bir openclaw.plugin.json ile gelmelidir. OpenClaw bunu plugin kodunu çalıştırmadan config doğrulamak için kullanır.
{
"id": "my-plugin",
"name": "My Plugin",
"description": "Adds My Plugin capabilities to OpenClaw",
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"webhookSecret": {
"type": "string",
"description": "Webhook verification secret"
}
}
}
}
Channel plugin'leri için kind ve channels ekleyin:
{
"id": "my-channel",
"kind": "channel",
"channels": ["my-channel"],
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {}
}
}
Config'i olmayan plugin'ler bile bir şema ile gelmelidir. Boş bir şema geçerlidir:
{
"id": "my-plugin",
"configSchema": {
"type": "object",
"additionalProperties": false
}
}
Tam şema referansı için Plugin manifesti bölümüne bakın.
ClawHub yayımlama
Plugin paketleri için pakete özgü ClawHub komutunu kullanın:
clawhub package publish your-org/your-plugin --dry-run
clawhub package publish your-org/your-plugin
Kurulum girdisi
setup-entry.ts dosyası, OpenClaw yalnızca kurulum yüzeylerine (onboarding, yapılandırma onarımı, devre dışı kanal denetimi) ihtiyaç duyduğunda yüklediği index.ts için hafif bir alternatiftir.
// setup-entry.ts
export default defineSetupPluginEntry(myChannelPlugin);
Bu, kurulum akışları sırasında ağır runtime kodunun (kripto kitaplıkları, CLI kayıtları, arka plan hizmetleri) yüklenmesini önler.
Kurulum açısından güvenli dışa aktarmaları yan modüllerde tutan paketle birlikte gelen çalışma alanı kanalları, defineSetupPluginEntry(...) yerine openclaw/plugin-sdk/channel-entry-contract içindeki defineBundledChannelSetupEntry(...) öğesini kullanabilir. Bu paketle gelen sözleşme, kurulum zamanındaki runtime bağlantılarının hafif ve açık kalabilmesi için isteğe bağlı bir runtime dışa aktarımını da destekler.
OpenClaw tam girdi yerine setupEntry kullandığında
- Kanal devre dışıdır ancak kurulum/onboarding yüzeylerine ihtiyaç duyar.
- Kanal etkindir ancak yapılandırılmamıştır.
- Ertelenmiş yükleme etkindir (
deferConfiguredChannelFullLoadUntilAfterListen).
setupEntry'nin kaydetmesi gerekenler
- Kanal Plugin nesnesi (
defineSetupPluginEntryaracılığıyla). - Gateway dinlemeye başlamadan önce gereken HTTP rotaları.
- Başlatma sırasında gereken Gateway yöntemleri.
Bu başlatma Gateway yöntemleri yine de config.* veya update.* gibi ayrılmış temel yönetim ad alanlarından kaçınmalıdır.
setupEntry'nin içermemesi gerekenler
- CLI kayıtları.
- Arka plan hizmetleri.
- Ağır runtime içe aktarmaları (kripto, SDK'ler).
- Yalnızca başlatmadan sonra gereken Gateway yöntemleri.
Dar kurulum yardımcısı içe aktarmaları
Sıcak yalnızca kurulum yolları için, kurulum yüzeyinin yalnızca bir kısmına ihtiyaç duyduğunuzda daha geniş plugin-sdk/setup şemsiyesi yerine dar kurulum yardımcısı bağlantı noktalarını tercih edin:
| İçe aktarma yolu | Kullanım amacı | Temel dışa aktarımlar |
|---|---|---|
plugin-sdk/setup-runtime |
setupEntry / ertelenmiş kanal başlatmada kullanılabilir kalan kurulum zamanı runtime yardımcıları |
createPatchedAccountSetupAdapter, createEnvPatchedAccountSetupAdapter, createSetupInputPresenceValidator, noteChannelLookupFailure, noteChannelLookupSummary, promptResolvedAllowFrom, splitSetupEntries, createAllowlistSetupWizardProxy, createDelegatedSetupWizardProxy |
plugin-sdk/setup-adapter-runtime |
ortama duyarlı hesap kurulum bağdaştırıcıları | createEnvPatchedAccountSetupAdapter |
plugin-sdk/setup-tools |
kurulum/yükleme CLI/arşiv/docs yardımcıları | formatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR |
moveSingleAccountChannelSectionToDefaultAccount(...) gibi yapılandırma yaması yardımcıları dahil olmak üzere paylaşılan kurulum araç takımının tamamını istediğinizde daha geniş plugin-sdk/setup bağlantı noktasını kullanın.
Kurulum yama bağdaştırıcıları içe aktarmada sıcak yol açısından güvenli kalır. Paketle gelen tek hesap yükseltme sözleşme yüzeyi araması tembeldir; bu nedenle plugin-sdk/setup-runtime içe aktarmak, bağdaştırıcı gerçekten kullanılmadan önce paketle gelen sözleşme yüzeyi keşfini hevesle yüklemez.
Kanalın sahip olduğu tek hesap yükseltme
Bir kanal tek hesaplı üst düzey yapılandırmadan channels.<id>.accounts.* yapısına yükseltildiğinde, varsayılan paylaşılan davranış yükseltilen hesap kapsamlı değerleri accounts.default içine taşımaktır.
Paketle gelen kanallar, kurulum sözleşme yüzeyleri aracılığıyla bu yükseltmeyi daraltabilir veya geçersiz kılabilir:
singleAccountKeysToMove: yükseltilen hesaba taşınması gereken ek üst düzey anahtarlarnamedAccountPromotionKeys: adlandırılmış hesaplar zaten mevcut olduğunda, yalnızca bu anahtarlar yükseltilen hesaba taşınır; paylaşılan ilke/teslim anahtarları kanal kökünde kalırresolveSingleAccountPromotionTarget(...): yükseltilen değerleri hangi mevcut hesabın alacağını seçer
Yapılandırma şeması
Plugin yapılandırması, manifestinizdeki JSON Schema ile doğrulanır. Kullanıcılar Plugin'leri şu şekilde yapılandırır:
{
plugins: {
entries: {
"my-plugin": {
config: {
webhookSecret: "abc123",
},
},
},
},
}
Plugin'iniz bu yapılandırmayı kayıt sırasında api.pluginConfig olarak alır.
Kanala özgü yapılandırma için bunun yerine kanal yapılandırma bölümünü kullanın:
{
channels: {
"my-channel": {
token: "bot-token",
allowFrom: ["user1", "user2"],
},
},
}
Kanal yapılandırma şemaları oluşturma
Bir Zod şemasını Plugin'e ait yapılandırma artefaktları tarafından kullanılan ChannelConfigSchema sarmalayıcısına dönüştürmek için buildChannelConfigSchema kullanın:
const accountSchema = z.object({
token: z.string().optional(),
allowFrom: z.array(z.string()).optional(),
accounts: z.object({}).catchall(z.any()).optional(),
defaultAccount: z.string().optional(),
});
const configSchema = buildChannelConfigSchema(accountSchema);
Sözleşmeyi zaten JSON Schema veya TypeBox olarak yazıyorsanız, OpenClaw'ın meta veri yollarında Zod'dan JSON Schema'ya dönüştürmeyi atlayabilmesi için doğrudan yardımcıyı kullanın:
const configSchema = buildJsonChannelConfigSchema(
Type.Object({
token: Type.Optional(Type.String()),
allowFrom: Type.Optional(Type.Array(Type.String())),
}),
);
Üçüncü taraf Plugin'ler için soğuk yol sözleşmesi hâlâ Plugin manifestidir: oluşturulan JSON Schema'yı openclaw.plugin.json#channelConfigs içine yansıtın; böylece yapılandırma şeması, kurulum ve UI yüzeyleri runtime kodunu yüklemeden channels.<id> öğesini inceleyebilir.
Kurulum sihirbazları
Kanal Plugin'leri openclaw onboard için etkileşimli kurulum sihirbazları sağlayabilir. Sihirbaz, ChannelPlugin üzerindeki bir ChannelSetupWizard nesnesidir:
const setupWizard: ChannelSetupWizard = {
channel: "my-channel",
status: {
configuredLabel: "Connected",
unconfiguredLabel: "Not configured",
resolveConfigured: ({ cfg }) => Boolean((cfg.channels as any)?.["my-channel"]?.token),
},
credentials: [
{
inputKey: "token",
providerHint: "my-channel",
credentialLabel: "Bot token",
preferredEnvVar: "MY_CHANNEL_BOT_TOKEN",
envPrompt: "Use MY_CHANNEL_BOT_TOKEN from environment?",
keepPrompt: "Keep current token?",
inputPrompt: "Enter your bot token:",
inspect: ({ cfg, accountId }) => {
const token = (cfg.channels as any)?.["my-channel"]?.token;
return {
accountConfigured: Boolean(token),
hasConfiguredValue: Boolean(token),
};
},
},
],
};
ChannelSetupWizard türü credentials, textInputs, dmPolicy, allowFrom, groupAccess, prepare, finalize ve daha fazlasını destekler. Tam örnekler için paketle gelen Plugin paketlerine (örneğin Discord Plugin'i src/channel.setup.ts) bakın.
Paylaşılan allowFrom istemleri
Yalnızca standart note -> prompt -> parse -> merge -> patch akışına ihtiyaç duyan DM izin listesi istemleri için openclaw/plugin-sdk/setup içindeki paylaşılan kurulum yardımcılarını tercih edin: createPromptParsedAllowFromForAccount(...), createTopLevelChannelParsedAllowFromPrompt(...) ve createNestedChannelParsedAllowFromPrompt(...).
Standart kanal kurulum durumu
Yalnızca etiketlere, skorlara ve isteğe bağlı ek satırlara göre değişen kanal kurulum durumu blokları için her Plugin'de aynı status nesnesini elle oluşturmak yerine openclaw/plugin-sdk/setup içindeki createStandardChannelSetupStatus(...) öğesini tercih edin.
İsteğe bağlı kanal kurulum yüzeyi
Yalnızca belirli bağlamlarda görünmesi gereken isteğe bağlı kurulum yüzeyleri için openclaw/plugin-sdk/channel-setup içindeki createOptionalChannelSetupSurface kullanın:
import { createOptionalChannelSetupSurface } from "openclaw/plugin-sdk/channel-setup";
const setupSurface = createOptionalChannelSetupSurface({
channel: "my-channel",
label: "My Channel",
npmSpec: "@myorg/openclaw-my-channel",
docsPath: "/channels/my-channel",
});
// Returns { setupAdapter, setupWizard }
plugin-sdk/channel-setup, isteğe bağlı yükleme yüzeyinin yalnızca bir yarısına ihtiyaç duyduğunuzda daha düşük seviyeli createOptionalChannelSetupAdapter(...) ve createOptionalChannelSetupWizard(...) oluşturucularını da dışa aktarır.
Oluşturulan isteğe bağlı bağdaştırıcı/sihirbaz gerçek yapılandırma yazmalarında kapalı hata verir. validateInput, applyAccountConfig ve finalize genelinde tek bir yükleme gerekli mesajını yeniden kullanır ve docsPath ayarlandığında bir docs bağlantısı ekler.
İkili dosya destekli kurulum yardımcıları
İkili dosya destekli kurulum UI'ları için aynı ikili dosya/durum bağlantısını her kanala kopyalamak yerine paylaşılan yetki devredilmiş yardımcıları tercih edin:
- Yalnızca etiketlere, ipuçlarına, skorlara ve ikili dosya algılamasına göre değişen durum blokları için
createDetectedBinaryStatus(...) - Yol destekli metin girişleri için
createCliPathTextInput(...) setupEntrydaha ağır tam bir sihirbaza tembel şekilde yönlendirme yapması gerektiğindecreateDelegatedSetupWizardStatusResolvers(...),createDelegatedPrepare(...),createDelegatedFinalize(...)vecreateDelegatedResolveConfigured(...)setupEntryyalnızca birtextInputs[*].shouldPromptkararını devretmesi gerektiğindecreateDelegatedTextInputShouldPrompt(...)
Yayınlama ve yükleme
Harici Plugin'ler: ClawHub üzerinde yayınlayın, ardından yükleyin:
npm
openclaw plugins install @myorg/openclaw-my-plugin
Yalın paket belirtimleri, başlatma geçişi sırasında npm'den yüklenir.
Yalnızca ClawHub
openclaw plugins install clawhub:@myorg/openclaw-my-plugin
npm paket belirtimi
Bir paket henüz ClawHub'a taşınmadığında veya geçiş sırasında doğrudan bir npm yükleme yoluna ihtiyaç duyduğunuzda npm kullanın:
openclaw plugins install npm:@myorg/openclaw-my-plugin
Repo içi Plugin'ler: birlikte gelen Plugin çalışma alanı ağacının altına yerleştirin; derleme sırasında otomatik olarak keşfedilirler.
Kullanıcılar şunu yükleyebilir:
openclaw plugins install <package-name>
Birlikte gelen paket meta verileri açıktır; Gateway başlatılırken derlenmiş JavaScript'ten çıkarılmaz. Çalışma zamanı bağımlılıkları, onlara sahip olan Plugin paketinde yer alır; paketlenmiş OpenClaw başlatması Plugin bağımlılıklarını hiçbir zaman onarmaz veya yansıtmaz.
İlgili
- Plugin oluşturma — adım adım başlangıç kılavuzu
- Plugin bildirimi — tam bildirim şeması başvurusu
- SDK giriş noktaları —
definePluginEntryvedefineChannelPluginEntry