/new, /reset, /stop, agent:bootstrap veya gateway:startup gibi komut ve Gateway olayları için operatör tarafından kurulmuş küçük bir HOOK.md betiği istediğinizde bunun yerine dahili hook’ları kullanın.
Hızlı başlangıç
Plugin girişinizdenapi.on(...) ile tipli Plugin hook’ları kaydedin:
priority sırasıyla ardışık çalışır. Aynı önceliğe sahip hook’lar kayıt sırasını korur.
api.on(name, handler, opts?) şunları kabul eder:
priority- işleyici sıralaması (daha yüksek olan önce çalışır).timeoutMs- isteğe bağlı hook başına bütçe. Ayarlandığında, hook çalıştırıcısı bütçe dolduktan sonra o işleyiciyi iptal eder ve yavaş kurulum ya da hatırlama işinin çağıranın yapılandırılmış model zaman aşımını tüketmesine izin vermek yerine sonrakiyle devam eder. Hook çalıştırıcısının genel olarak uyguladığı varsayılan gözlem/karar zaman aşımını kullanmak için bunu atlayın.
hooks.timeouts.<hookName>, hooks.timeoutMs değerini geçersiz kılar; o da Plugin tarafından yazılmış api.on(..., { timeoutMs }) değerini geçersiz kılar. Yapılandırılan her değer, 600000 milisaniyeden büyük olmayan pozitif bir tam sayı olmalıdır. Bilinen yavaş hook’lar için hook başına geçersiz kılmaları tercih edin; böylece bir Plugin her yerde daha uzun bütçe almaz.
Her hook, o işleyiciyi kaydeden Plugin için çözümlenmiş yapılandırma olan event.context.pluginConfig değerini alır. Geçerli Plugin seçeneklerine ihtiyaç duyan hook kararları için bunu kullanın; OpenClaw bunu diğer Plugin’lerin gördüğü paylaşılan olay nesnesini değiştirmeden her işleyici için enjekte eder.
Hook kataloğu
Hook’lar genişlettikleri yüzeye göre gruplanır. Kalın adlar bir karar sonucu (engelleme, iptal, geçersiz kılma veya onay isteme) kabul eder; diğerlerinin tümü yalnızca gözlem içindir. Ajan turubefore_model_resolve- oturum mesajları yüklenmeden önce sağlayıcıyı veya modeli geçersiz kılınagent_turn_prepare- kuyruğa alınmış Plugin tur enjeksiyonlarını tüketin ve istem hook’larından önce aynı tura bağlam ekleyinbefore_prompt_build- model çağrısından önce dinamik bağlam veya sistem istemi metni ekleyinbefore_agent_start- yalnızca uyumluluk amaçlı birleşik aşama; yukarıdaki iki hook’u tercih edinbefore_agent_run- model gönderiminden önce son istemi ve oturum mesajlarını inceleyin ve isteğe bağlı olarak çalıştırmayı engelleyinbefore_agent_reply- model turunu sentetik bir yanıtla veya sessizlikle kısa devre edinbefore_agent_finalize- doğal son yanıtı inceleyin ve bir model geçişi daha isteyinagent_end- son mesajları, başarı durumunu ve çalıştırma süresini gözlemleyinheartbeat_prompt_contribution- arka plan izleyici ve yaşam döngüsü Plugin’leri için yalnızca Heartbeat bağlamı ekleyin
model_call_started/model_call_ended- istem veya yanıt içeriği olmadan temizlenmiş sağlayıcı/model çağrısı meta verilerini, zamanlamayı, sonucu ve sınırlı istek kimliği hash’lerini gözlemleyinllm_input- sağlayıcı girdisini (sistem istemi, istem, geçmiş) gözlemleyinllm_output- sağlayıcı çıktısını, kullanımı ve mevcut olduğunda çözümlenmişcontextTokenBudgetdeğerini gözlemleyin
before_tool_call- araç parametrelerini yeniden yazın, yürütmeyi engelleyin veya onay isteyinafter_tool_call- araç sonuçlarını, hataları ve süreyi gözlemleyinresolve_exec_env- Plugin’in sahip olduğu ortam değişkenleriniexeciçin katkıda bulununtool_result_persist- araç sonucundan üretilen asistan mesajını yeniden yazınbefore_message_write- devam eden bir mesaj yazımını inceleyin veya engelleyin (nadir)
inbound_claim- ajan yönlendirmesinden önce gelen bir mesajı sahiplenin (sentetik yanıtlar)message_received— gelen içeriği, göndereni, iş parçacığını ve meta verileri gözlemleyinmessage_sending— giden içeriği yeniden yazın veya teslimatı iptal edinreply_payload_sending— teslimattan önce normalleştirilmiş yanıt yüklerini değiştirin veya iptal edinmessage_sent— giden teslimat başarısını veya hatasını gözlemleyinbefore_dispatch- kanal devrinden önce giden bir dispatch’i inceleyin veya yeniden yazınreply_dispatch- son yanıt dispatch hattına katılın
session_start/session_end- oturum yaşam döngüsü sınırlarını takip edin. Olayınreasondeğerinew,reset,idle,daily,compaction,deleted,shutdown,restartveyaunknowndeğerlerinden biridir.shutdownverestartdeğerleri, oturumlar hâlâ etkinken süreç durdurulduğunda veya yeniden başlatıldığında Gateway kapatma sonlandırıcısından tetiklenir; böylece aşağı akış Plugin’leri (bellek veya transkript depoları gibi), aksi halde yeniden başlatmalar arasında açık durumda kalacak hayalet satırları sonlandırabilir. Sonlandırıcı sınırlıdır, bu nedenle yavaş bir Plugin SIGTERM/SIGINT’i engelleyemez.before_compaction/after_compaction- Compaction döngülerini gözlemleyin veya açıklama ekleyinbefore_reset- oturum sıfırlama olaylarını gözlemleyin (/reset, programatik sıfırlamalar)
subagent_spawned/subagent_ended- alt ajan başlatmayı ve tamamlanmayı gözlemleyin.subagent_delivery_target- çekirdek oturum bağlaması bir rota yansıtamadığında tamamlama teslimi için uyumluluk hook’u.subagent_spawning- kullanımdan kaldırılmış uyumluluk hook’u. Çekirdek artıksubagent_spawnedtetiklenmeden önce kanal oturum bağlama bağdaştırıcıları üzerindenthread: truealt ajan bağlamalarını hazırlar.subagent_spawned, OpenClaw başlatmadan önce alt oturumun yerel modelini çözdüğünderesolvedModelveresolvedProvideriçerir.subagent_ended,targetSessionKey(kimlik — bu,subagent_spawned.childSessionKeyile eşleşir),targetKind("subagent"veya"acp"),reason, isteğe bağlıoutcome("ok","error","timeout","killed","reset"veya"deleted"), isteğe bağlıerror,runId,endedAt,accountIdvesendFarewelltaşır.agentIdveyachildSessionKeyiçermez; karşılık gelensubagent_spawnedolayıyla ilişkilendirmek içintargetSessionKeykullanın.
gateway_start/gateway_stop- Gateway ile Plugin’in sahip olduğu hizmetleri başlatın veya durdurundeactivate-gateway_stopiçin kullanımdan kaldırılmış uyumluluk takma adı; yeni Plugin’lerdegateway_stopkullanıncron_changed- Gateway’in sahip olduğu Cron yaşam döngüsü değişikliklerini gözlemleyin (eklendi, güncellendi, kaldırıldı, başlatıldı, tamamlandı, zamanlandı)before_install- yüklenmiş bir Plugin çalışma zamanından hazırlanmış Skills veya Plugin kurulum malzemesini inceleyin
Çalışma zamanı hook’larında hata ayıklama
Bir Plugin’in bir ajan turu için sağlayıcıyı veya modeli değiştirmesi gerektiğindebefore_model_resolve kullanın. Bu, model çözümlemesinden önce çalışır; llm_output yalnızca bir model denemesi asistan çıktısı ürettikten sonra çalışır.
Etkili oturum modelinin kanıtı için çalışma zamanı kayıtlarını inceleyin, ardından openclaw sessions veya Gateway oturum/durum yüzeylerini kullanın. Sağlayıcı yüklerinde hata ayıklarken Gateway’i --raw-stream ve --raw-stream-path <path> ile başlatın; bu bayraklar ham model akış olaylarını bir jsonl dosyasına yazar.
Araç çağrısı ilkesi
before_tool_call şunları alır:
event.toolNameevent.params- isteğe bağlı
event.toolKindveevent.toolInputKind; bilerek aynı adları paylaşan araçlar için host tarafından yetkili ayırt ediciler. Örneğin, dış kod moduexecçağrılarıtoolKind: "code_mode_exec"kullanır ve giriş dili bilindiğindetoolInputKind: "javascript" | "typescript"içerir - isteğe bağlı
event.derivedPaths;apply_patchgibi iyi bilinen araç zarfları için host tarafından en iyi çabayla türetilmiş hedef yol ipuçlarını içerir. Mevcut olduğunda bu yollar eksik olabilir veya aracın gerçekten dokunacağı şeyi fazla yaklaşık gösterebilir (örneğin hatalı biçimlendirilmiş veya kısmi girdilerle) - isteğe bağlı
event.runId - isteğe bağlı
event.toolCallId ctx.agentId,ctx.sessionKey,ctx.sessionId,ctx.runId,ctx.jobId(Cron tarafından sürülen çalıştırmalarda ayarlanır),ctx.toolKind,ctx.toolInputKindve tanılamactx.tracegibi bağlam alanları
block: trueterminaldir ve daha düşük öncelikli işleyicileri atlar.block: falsekarar yok olarak değerlendirilir.params, yürütme için araç parametrelerini yeniden yazar.requireApproval, ajan çalıştırmasını duraklatır ve Plugin onayları üzerinden kullanıcıya sorar./approvekomutu hem exec hem de Plugin onaylarını onaylayabilir. Codex app-server report-mode yerelPreToolUseaktarımlarında bu, eşleşen app-server onay isteğine ertelenir; bkz. Codex harness çalışma zamanı.- Daha düşük öncelikli bir
block: true, daha yüksek öncelikli bir hook onay istemiş olsa bile hâlâ engelleyebilir. onResolution, çözümlenmiş onay kararını alır -allow-once,allow-always,deny,timeoutveyacancelled.
requireApproval öğesinin isteğe bağlı araçlar veya exec onayları yerine ne zaman kullanılacağı için Plugin izin istekleri sayfasına bakın.
Host düzeyinde ilkeye ihtiyaç duyan Plugin’ler, api.registerTrustedToolPolicy(...) ile güvenilir araç ilkeleri kaydedebilir. Bunlar sıradan before_tool_call hook’larından ve normal hook kararlarından önce çalışır. Paketlenmiş güvenilir ilkeler önce çalışır; kurulu Plugin güvenilir ilkeleri ardından Plugin yükleme sırasında çalışır; sıradan before_tool_call hook’ları bunlardan sonra çalışır. Paketlenmiş Plugin’ler mevcut güvenilir ilke yolunu korur. Kurulu Plugin’ler açıkça etkinleştirilmeli ve her ilke kimliğini contracts.trustedToolPolicies içinde bildirmelidir; bildirilmemiş kimlikler kayıttan önce reddedilir. İlke kimlikleri kaydeden Plugin’e kapsamlanır, bu nedenle farklı Plugin’ler aynı yerel kimliği yeniden kullanabilir. Bu katmanı yalnızca çalışma alanı ilkesi, bütçe zorlaması veya ayrılmış iş akışı güvenliği gibi host tarafından güvenilen kapılar için kullanın.
Exec ortamı hook’u
resolve_exec_env, temel exec ortamı oluşturulduktan ve komut çalışmadan önce Plugin’lerin exec araç çağrılarına ortam değişkenleri katkıda bulunmasını sağlar. Şunları alır:
event.sessionKeyevent.toolName, şu anda her zaman"exec"event.host,"gateway","sandbox"veya"node"değerlerinden birictx.agentId,ctx.sessionKey,ctx.messageProvidervectx.channelIdgibi bağlam alanları
Record<string, string> döndürün. İşleyiciler öncelik sırasıyla çalışır ve sonraki hook sonuçları aynı anahtar için önceki hook sonuçlarını geçersiz kılar.
Hook çıktısı birleştirilmeden önce host exec ortam anahtarı ilkesi üzerinden filtrelenir. Geçersiz anahtarlar, PATH ve LD_*, DYLD_*, NODE_OPTIONS, proxy değişkenleri ve TLS override değişkenleri gibi tehlikeli host override anahtarları atılır. Filtrelenmiş plugin env, gateway onay/denetim meta verilerine eklenir ve node-host yürütme isteklerine iletilir.
Araç sonucu kalıcılığı
Araç sonuçları UI işleme, tanılama, medya yönlendirme veya plugin sahipli meta veriler için yapılandırılmışdetails içerebilir. details alanını prompt içeriği olarak değil, runtime meta verisi olarak ele alın:
- OpenClaw, meta verilerin model bağlamına dönüşmemesi için provider yeniden oynatmasından ve compaction girdisinden önce
toolResult.detailsalanını çıkarır. - Kalıcı session girdileri yalnızca sınırlandırılmış
detailstutar. Aşırı büyük ayrıntılar kompakt bir özet vepersistedDetailsTruncated: trueile değiştirilir. tool_result_persistvebefore_message_write, son kalıcılık sınırından önce çalışır. Hook’lar yine de döndürülendetailsalanını küçük tutmalı ve prompt ile ilgili metni yalnızcadetailsiçine koymaktan kaçınmalıdır; modelin görebileceği araç çıktısınıcontentiçine koyun.
Prompt ve model hook’ları
Yeni plugin’ler için faza özgü hook’ları kullanın:before_model_resolve: yalnızca geçerli prompt ve ek meta verilerini alır.providerOverrideveyamodelOverridedöndürün.agent_turn_prepare: geçerli prompt’u, hazırlanmış session mesajlarını ve bu session için boşaltılmış tam olarak bir kez kuyruğa alınmış enjeksiyonları alır.prependContextveyaappendContextdöndürün.before_prompt_build: geçerli prompt’u ve session mesajlarını alır.prependContext,appendContext,systemPrompt,prependSystemContextveyaappendSystemContextdöndürün.heartbeat_prompt_contribution: yalnızca heartbeat turn’leri için çalışır veprependContextveyaappendContextdöndürür. Kullanıcı tarafından başlatılan turn’leri değiştirmeden geçerli durumu özetlemesi gereken arka plan izleyicileri için tasarlanmıştır.
before_agent_start uyumluluk için kalır. Plugin’inizin eski birleşik bir faza bağımlı olmaması için yukarıdaki açık hook’ları tercih edin.
before_agent_run, prompt oluşturulduktan sonra ve prompt’a yerel görüntü yükleme ile llm_input gözlemi dahil olmak üzere herhangi bir model girdisinden önce çalışır. Geçerli kullanıcı girdisini prompt olarak, yüklenmiş session geçmişini messages içinde ve etkin sistem prompt’unu alır. Model prompt’u okuyamadan çalıştırmayı durdurmak için { outcome: "block", reason, message? } döndürün. reason içseldir; message kullanıcıya gösterilen değişim metnidir. Desteklenen tek sonuçlar pass ve block değerleridir; desteklenmeyen karar şekilleri güvenli şekilde kapalı başarısız olur.
Bir çalışma engellendiğinde OpenClaw, message.content içinde yalnızca değişim metnini ve engelleyen plugin id’si ile zaman damgası gibi hassas olmayan engelleme meta verilerini saklar. Özgün kullanıcı metni transcript’te veya gelecekteki bağlamda tutulmaz. İç engelleme nedenleri hassas kabul edilir ve transcript, geçmiş, broadcast, log ve tanılama payload’larından hariç tutulur. Observability; engelleyici id’si, sonuç, zaman damgası veya güvenli kategori gibi arındırılmış alanları kullanmalıdır.
before_agent_start ve agent_end, OpenClaw etkin çalışmayı belirleyebildiğinde event.runId içerir. Aynı değer ctx.runId üzerinde de kullanılabilir. Cron tarafından yürütülen çalışmalar ayrıca ctx.jobId değerini (kaynak cron işi id’si) açığa çıkarır; böylece plugin hook’ları metrikleri, yan etkileri veya durumu belirli bir zamanlanmış işe kapsamlayabilir.
Kanal kaynaklı çalışmalarda ctx.channel ve ctx.messageProvider, discord veya telegram gibi provider yüzeyini tanımlar; ctx.channelId ise OpenClaw bunu session anahtarından veya teslim meta verilerinden türetebildiğinde konuşma hedef tanımlayıcısıdır.
Gönderen kimliği kullanılabilir olduğunda agent hook bağlamları ayrıca şunları içerir:
ctx.senderId— kanal kapsamlı gönderen ID’si (ör. Feishuopen_id, Discord kullanıcı ID’si). Çalışma, bilinen gönderen meta verilerine sahip bir kullanıcı mesajından kaynaklandığında doldurulur.ctx.chatId— taşıma yerel konuşma tanımlayıcısı (ör. Feishuchat_id, Telegramchat_id). Kaynak kanal yerel bir konuşma ID’si sağladığında doldurulur.ctx.channelContext.sender.id—ctx.senderIdile aynı gönderen ID’si; plugin’lerin kanala özgü alanlarla genişletebileceği, kanal sahipli bir nesnenin altında bulunur.ctx.channelContext.chat.id—ctx.chatIdile aynı konuşma ID’si; plugin’lerin kanala özgü alanlarla genişletebileceği, kanal sahipli bir nesnenin altında bulunur.
id alanlarını tanımlar. Inbound helper üzerinden daha zengin gönderen veya sohbet meta verileri geçiren kanal plugin’leri, openclaw/plugin-sdk/channel-inbound üzerinden PluginHookChannelSenderContext veya PluginHookChannelChatContext öğesini genişletebilir:
ctx.senderExternalId, eski plugin’ler için kullanımdan kaldırılmış bir kaynak uyumluluğu alanı olarak kalır. Core bunu doldurmaz; yeni kanala özgü gönderen kimlikleri, modül genişletme yoluyla ctx.channelContext.sender altında yaşamalıdır.
agent_end bir gözlem hook’udur. Gateway ve kalıcı harness yolları bunu turn’den sonra fire-and-forget çalıştırırken, kısa ömürlü tek seferlik CLI yolları process cleanup’tan önce hook promise’ini bekler; böylece güvenilir plugin’ler terminal observability verilerini aktarabilir veya durum yakalayabilir. Hook runner 30 saniyelik zaman aşımı uygular; böylece takılmış bir plugin veya embedding endpoint’i hook promise’ini sonsuza dek beklemede bırakamaz. Zaman aşımı loglanır ve OpenClaw devam eder; plugin kendi abort sinyalini de kullanmadığı sürece plugin sahipli ağ işini iptal etmez.
Ham prompt’ları, geçmişi, yanıtları, header’ları, istek gövdelerini veya provider istek ID’lerini almaması gereken provider-call telemetrisi için model_call_started ve model_call_ended kullanın. Bu hook’lar runId, callId, provider, model, isteğe bağlı api/transport, terminal durationMs/outcome ve OpenClaw sınırlandırılmış bir provider request-id hash’i türetebildiğinde upstreamRequestIdHash gibi kararlı meta verileri içerir. Runtime context-window meta verilerini çözdüğünde hook event’i ve bağlamı ayrıca model/config/agent sınırlarından sonraki etkin token bütçesi olan contextTokenBudget değerini ve daha düşük bir sınır uygulandığında contextWindowSource ile contextWindowReferenceTokens değerlerini içerir.
before_agent_finalize yalnızca bir harness doğal bir son assistant yanıtını kabul etmek üzereyken çalışır. Bu, /stop iptal yolu değildir ve kullanıcı bir turn’ü durdurduğunda çalışmaz. Harness’ten sonlandırmadan önce bir model geçişi daha istemek için { action: "revise", reason }, sonlandırmayı zorlamak için { action: "finalize", reason? } döndürün veya devam etmek için sonuç döndürmeyin. Codex yerel Stop hook’ları bu hook’a OpenClaw before_agent_finalize kararları olarak aktarılır.
action: "revise" döndürürken plugin’ler, ekstra model geçişini sınırlandırılmış ve yeniden oynatmaya güvenli yapmak için retry meta verilerini ekleyebilir:
instruction, harness’e gönderilen revizyon nedenine eklenir. idempotencyKey, host’un eşdeğer finalize kararları arasında aynı plugin isteği için retry saymasını sağlar ve maxAttempts, host’un doğal son yanıtla devam etmeden önce kaç ekstra geçişe izin vereceğini sınırlar.
Ham konuşma hook’larına (before_model_resolve, before_agent_reply, llm_input, llm_output, before_agent_finalize, agent_end veya before_agent_run) ihtiyaç duyan paketlenmemiş plugin’ler şunu ayarlamalıdır:
plugins.entries.<id>.hooks.allowPromptInjection=false ile devre dışı bırakılabilir.
Session genişletmeleri ve sonraki turn enjeksiyonları
Workflow plugin’leri,api.registerSessionExtension(...) ile küçük JSON uyumlu session durumu kalıcılaştırabilir ve bunu Gateway sessions.pluginPatch yöntemi üzerinden güncelleyebilir. Session satırları kayıtlı genişletme durumunu pluginExtensions üzerinden projekte eder; böylece Control UI ve diğer istemciler, plugin iç detaylarını öğrenmeden plugin sahipli durumu işleyebilir.
Bir plugin’in kalıcı bağlamı tam olarak bir kez sonraki model turn’üne ulaştırması gerektiğinde api.enqueueNextTurnInjection(...) kullanın. OpenClaw kuyruğa alınmış enjeksiyonları prompt hook’larından önce boşaltır, süresi dolmuş enjeksiyonları atar ve plugin başına idempotencyKey ile tekilleştirir. Onay devamları, ilke özetleri, arka plan izleyici deltaları ve sonraki turn’de modele görünmesi gereken ancak kalıcı sistem prompt metnine dönüşmemesi gereken komut devamları için doğru seam budur.
Cleanup semantiği sözleşmenin bir parçasıdır. Session genişletme cleanup ve runtime yaşam döngüsü cleanup callback’leri reset, delete, disable veya restart alır. Host, reset/delete/disable için sahip plugin’in kalıcı session genişletme durumunu ve bekleyen sonraki turn enjeksiyonlarını kaldırır; restart kalıcı session durumunu tutarken cleanup callback’leri plugin’lerin eski runtime nesli için scheduler işlerini, çalışma bağlamını ve diğer out-of-band kaynakları serbest bırakmasına olanak tanır.
Mesaj hook’ları
Kanal düzeyi yönlendirme ve teslim ilkesi için mesaj hook’larını kullanın:message_received: gelen içeriği, göndereni,threadId,messageId,senderId, isteğe bağlı çalışma/session korelasyonunu ve meta verileri gözlemler.message_sending:contentdeğerini yeniden yazar veya{ cancel: true }döndürür.reply_payload_sending: normalleştirilmişReplyPayloadnesnelerini (presentation,delivery, medya ref’leri ve metin dahil) yeniden yazar veya{ cancel: true }döndürür.message_sent: son başarıyı veya hatayı gözlemler.
content gizli konuşulan transcript’i içerebilir. Bu content değerini yeniden yazmak yalnızca hook tarafından görülebilen transcript’i günceller; medya açıklaması olarak işlenmez.
reply_payload_sending event’leri, mümkün olan en iyi canlı turn başına model/kullanım/bağlam snapshot’ı olan usageState içerebilir. Kalıcı teslim, kurtarılmış yeniden oynatma ve kesin çalışma korelasyonu olmayan yanıtlar bunu atlar.
Mesaj hook bağlamları kullanılabilir olduğunda kararlı korelasyon alanlarını açığa çıkarır:
ctx.sessionKey, ctx.runId, ctx.messageId, ctx.senderId, ctx.trace,
ctx.traceId, ctx.spanId, ctx.parentSpanId ve ctx.callDepth. Inbound ve before_dispatch bağlamları, kanal görünürlük filtreli alıntılanmış mesaj verisine sahip olduğunda yanıt meta verilerini de açığa çıkarır: replyToId, replyToIdFull, replyToBody, replyToSender ve replyToIsQuote. Eski meta verileri okumadan önce bu birinci sınıf alanları tercih edin.
Kanala özgü meta verileri kullanmadan önce yazılmış threadId ve replyToId alanlarını tercih edin.
Karar kuralları:
cancel: trueilemessage_sendingterminaldir.cancel: falseilemessage_sendingkarar yok olarak değerlendirilir.- Yeniden yazılan
content, daha sonra gelen bir hook teslimatı iptal etmediği sürece daha düşük öncelikli hook’lara devam eder. reply_payload_sending, yük normalleştirmesinden sonra ve kanal teslimatından önce çalışır; kaynak kanala geri yönlendirilen yanıtlar buna dahildir. İşleyiciler sıralı çalışır ve her işleyici, daha yüksek öncelikli işleyiciler tarafından üretilen en son yükü görür.reply_payload_sendingyükleri,trustedLocalMediagibi çalışma zamanı güven işaretlerini açığa çıkarmaz; plugin’ler yük şeklini düzenleyebilir ancak yerel medya güveni veremez.message_sending, bir iptalle birliktecancelReasonve sınırlımetadatadöndürebilir. Yeni ileti yaşam döngüsü API’leri bunucancelled_by_message_sending_hooknedeni ile bastırılmış teslimat sonucu olarak açığa çıkarır; eski doğrudan teslimat, uyumluluk için boş sonuç dizisi döndürmeye devam eder.message_sentyalnızca gözlem amaçlıdır. İşleyici hataları günlüğe kaydedilir ve teslimat sonucunu değiştirmez.
Kurulum hook’ları
Operatörün sahip olduğu izin verme/engelleme kararları içinsecurity.installPolicy kullanın. Bu ilke OpenClaw yapılandırmasından çalışır, CLI kurulum ve güncelleme yollarını kapsar ve etkinleştirilmiş ama kullanılamaz durumdaysa kapalı hata verir.
before_install, bir plugin çalışma zamanı yaşam döngüsü hook’udur. Yalnızca plugin hook’larının zaten yüklenmiş olduğu OpenClaw sürecinde, örneğin Gateway destekli kurulum akışlarında, security.installPolicy sonrasında çalışır. Plugin’e ait gözlemler, uyarılar ve uyumluluk denetimleri için kullanışlıdır, ancak kurulumlar için birincil kurumsal veya ana makine güvenlik sınırı değildir. builtinScan alanı uyumluluk için olay yükünde kalır, ancak OpenClaw artık yerleşik kurulum zamanı tehlikeli kod engellemesi çalıştırmadığından bu alan boş bir ok sonucudur. Bu süreçte kurulumu durdurmak için ek bulgular veya { block: true, blockReason } döndürün.
block: true terminaldir. block: false karar yok olarak değerlendirilir. İşleyici hataları kurulumu kapalı hata vererek engeller.
Gateway yaşam döngüsü
Gateway’in sahip olduğu duruma ihtiyaç duyan plugin hizmetleri içingateway_start kullanın. Bağlam, cron incelemesi ve güncellemeleri için ctx.config, ctx.workspaceDir ve ctx.getCron?.() alanlarını açığa çıkarır. Uzun süre çalışan kaynakları temizlemek için gateway_stop kullanın.
Plugin’e ait çalışma zamanı hizmetleri için dahili gateway:startup hook’una güvenmeyin.
cron_changed, added, updated, removed, started, finished ve scheduled nedenlerini kapsayan tipli olay yüküyle Gateway’e ait cron yaşam döngüsü olayları için tetiklenir. Olay, bir PluginHookGatewayCronJob anlık görüntüsü (state.nextRunAtMs, state.lastRunStatus ve varsa state.lastError dahil) ve not-requested | delivered | not-delivered | unknown değerlerinden oluşan bir PluginHookGatewayCronDeliveryStatus taşır. Kaldırılmış olaylar, dış zamanlayıcıların durumu uzlaştırabilmesi için silinen iş anlık görüntüsünü yine de taşır. Dış uyandırma zamanlayıcılarını eşitlerken çalışma zamanı bağlamından ctx.getCron?.() ve ctx.config kullanın ve vade denetimleri ile yürütme için OpenClaw’ı doğruluk kaynağı olarak tutun.
Yaklaşan kullanımdan kaldırmalar
Hook’larla ilişkili birkaç yüzey kullanımdan kaldırılmıştır ancak hâlâ desteklenmektedir. Bir sonraki majör sürümden önce geçiş yapın:inbound_claimvemessage_receivedişleyicilerindeki düz metin kanal zarfları. Düz zarf metnini ayrıştırmak yerineBodyForAgentve yapılandırılmış kullanıcı bağlamı bloklarını okuyun. Bkz. Düz metin kanal zarfları → BodyForAgent.before_agent_startuyumluluk için kalır. Yeni plugin’ler birleşik faz yerinebefore_model_resolvevebefore_prompt_buildkullanmalıdır.subagent_spawningeski plugin’lerle uyumluluk için kalır, ancak yeni plugin’ler buradan thread yönlendirmesi döndürmemelidir. Core,subagent_spawnedtetiklenmeden önce kanal oturum bağlama adaptörleri üzerindenthread: truesubagent bağlamalarını hazırlar.deactivate, 2026-08-16 sonrasına kadar kullanımdan kaldırılmış bir temizleme uyumluluk takma adı olarak kalır. Yeni plugin’lergateway_stopkullanmalıdır.before_tool_calliçindekionResolutionartık serbest biçimli birstringyerine tipliPluginApprovalResolutionbirleşimini (allow-once/allow-always/deny/timeout/cancelled) kullanır.
command-auth → command-status yeniden adlandırması - bkz. Plugin SDK geçişi → Aktif kullanımdan kaldırmalar.
İlgili
- Plugin SDK geçişi - aktif kullanımdan kaldırmalar ve kaldırma zaman çizelgesi
- Plugin oluşturma
- Plugin SDK genel bakışı
- Plugin giriş noktaları
- Dahili hook’lar
- Plugin mimarisi iç işleyişi