Plugin kancaları, OpenClaw Plugin’leri için süreç içi genişletme noktalarıdır. Bunları, bir Plugin’in agent çalıştırmalarını, tool çağrılarını, mesaj akışını, oturum yaşam döngüsünü, subagent yönlendirmesini, kurulumları veya Gateway başlatmayı incelemesi ya da değiştirmesi gerektiğinde kullanın. Komut ve Gateway olayları için operatör tarafından kurulan küçük birDocumentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
HOOK.md
betiği istediğinizde bunun yerine dahili kancaları kullanın;
örneğin new, /reset, /stop, agent:bootstrap veya gateway:startup.
Hızlı başlangıç
Plugin girişinizdenapi.on(...) ile tipli Plugin kancaları kaydedin:
priority sırasıyla ardışık çalışır. Aynı öncelikteki
kancalar 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ı kanca başına bütçe. Ayarlandığında, kanca çalıştırıcısı bütçe dolduktan sonra ilgili işleyiciyi iptal eder ve yavaş kurulumun veya hatırlama çalışmasının çağıranın yapılandırılmış model zaman aşımını tüketmesine izin vermek yerine bir sonrakine geçer. Bunu atlayarak kanca çalıştırıcısının genel olarak uyguladığı varsayılan gözlem/karar zaman aşımını kullanın.
hooks.timeouts.<hookName>, hooks.timeoutMs değerini geçersiz kılar; bu 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. Bir Plugin’in her yerde daha uzun bütçe almaması için bilinen yavaş
kancalarda kanca başına geçersiz kılmaları tercih edin.
Her kanca, o işleyiciyi kaydeden Plugin için çözümlenmiş yapılandırma olan
event.context.pluginConfig alır. Güncel Plugin seçeneklerine ihtiyaç duyan
kanca kararları için bunu kullanın; OpenClaw bunu, diğer Plugin’lerin gördüğü
paylaşılan olay nesnesini değiştirmeden işleyici başına enjekte eder.
Kanca kataloğu
Kancalar genişlettikleri yüzeye göre gruplanır. Kalın yazılmış adlar bir karar sonucu (engelleme, iptal, geçersiz kılma veya onay isteme) kabul eder; diğerlerinin tümü yalnızca gözlemdir. Agent turubefore_model_resolve- oturum mesajları yüklenmeden önce provider veya modeli geçersiz kılagent_turn_prepare- kuyruğa alınmış Plugin turu eklemelerini tüket ve prompt kancalarından önce aynı tur bağlamı eklebefore_prompt_build- model çağrısından önce dinamik bağlam veya system prompt metni eklebefore_agent_start- yalnızca uyumluluk amaçlı birleşik faz; yukarıdaki iki kancayı tercih edinbefore_agent_run- model gönderiminden önce son prompt’u ve oturum mesajlarını incele ve isteğe bağlı olarak çalıştırmayı engellebefore_agent_reply- model turunu sentetik bir yanıt veya sessizlikle kısa devre yapbefore_agent_finalize- doğal son yanıtı incele ve bir model geçişi daha isteagent_end- son mesajları, başarı durumunu ve çalıştırma süresini gözlemleheartbeat_prompt_contribution- arka plan izleyicisi ve yaşam döngüsü Plugin’leri için yalnızca Heartbeat bağlamı ekle
model_call_started/model_call_ended- prompt veya yanıt içeriği olmadan temizlenmiş provider/model çağrısı meta verilerini, zamanlamayı, sonucu ve sınırlandırılmış istek kimliği hash’lerini gözlemlellm_input- provider girdisini gözlemle (system prompt, prompt, geçmiş)llm_output- provider çıktısını gözlemle
before_tool_call- tool parametrelerini yeniden yaz, yürütmeyi engelle veya onay isteafter_tool_call- tool sonuçlarını, hataları ve süreyi gözlemletool_result_persist- bir tool sonucundan üretilen assistant mesajını yeniden yazbefore_message_write- devam eden bir mesaj yazımını incele veya engelle (nadiren)
inbound_claim- agent yönlendirmesinden önce gelen bir mesajı sahiplen (sentetik yanıtlar)message_received- gelen içeriği, göndereni, thread’i ve meta verileri gözlemlemessage_sending- giden içeriği yeniden yaz veya teslimi iptal etmessage_sent- giden teslimin başarısını veya başarısızlığını gözlemlebefore_dispatch- kanal tesliminden önce giden bir dispatch’i incele veya yeniden yazreply_dispatch- son yanıt dispatch pipeline’ına katıl
session_start/session_end- oturum yaşam döngüsü sınırlarını izle. 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 transcript depoları gibi), aksi halde yeniden başlatmalar arasında açık durumda kalacak hayalet satırları sonlandırabilir. Sonlandırıcı sınırlandırılmıştır, bu yüzden yavaş bir Plugin SIGTERM/SIGINT’i engelleyemez.before_compaction/after_compaction- Compaction döngülerini gözlemle veya açıklama eklebefore_reset- oturum sıfırlama olaylarını gözlemle (/reset, programatik sıfırlamalar)
subagent_spawning/subagent_delivery_target/subagent_spawned/subagent_ended- subagent yönlendirmesini ve tamamlanma teslimini koordine et
gateway_start/gateway_stop- Plugin’e ait servisleri Gateway ile başlat veya durdurcron_changed- gateway’e ait Cron yaşam döngüsü değişikliklerini gözlemle (eklendi, güncellendi, kaldırıldı, başlatıldı, tamamlandı, zamanlandı)before_install- skill veya Plugin kurulum taramalarını incele ve isteğe bağlı olarak engelle
Tool çağrısı ilkesi
before_tool_call şunları alır:
event.toolNameevent.params- isteğe bağlı
event.derivedPaths;apply_patchgibi iyi bilinen tool zarfları için en iyi çabayla ana makineden türetilmiş hedef yol ipuçları içerir; mevcut olduğunda bu yollar eksik olabilir veya tool’un gerçekte dokunacağı alanı olduğundan geniş tahmin edebilir (örneğin bozuk 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 çalıştırılan işlerde ayarlanır) gibi bağlam alanları ve tanılamactx.trace
block: trueterminaldir ve daha düşük öncelikli işleyicileri atlar.block: falsekarar yok olarak ele alınır.params, yürütme için tool parametrelerini yeniden yazar.requireApproval, agent çalıştırmasını duraklatır ve Plugin onayları üzerinden kullanıcıya sorar./approvekomutu hem exec hem de Plugin onaylarını onaylayabilir.- Daha düşük öncelikli bir
block: true, daha yüksek öncelikli bir kanca onay istemiş olsa bile hâlâ engelleyebilir. onResolution, çözümlenen onay kararını alır:allow-once,allow-always,deny,timeoutveyacancelled.
api.registerTrustedToolPolicy(...) ile güvenilen tool ilkeleri kaydedebilir.
Bunlar sıradan before_tool_call kancalarından ve harici Plugin kararlarından
önce çalışır. Bunları yalnızca çalışma alanı ilkesi, bütçe uygulama veya ayrılmış
iş akışı güvenliği gibi ana makine tarafından güvenilen kapılar için kullanın.
Harici Plugin’ler normal before_tool_call kancalarını kullanmalıdır.
Tool sonucu kalıcılığı
Tool sonuçları, UI rendering, tanılama, medya yönlendirme veya Plugin’e ait meta veriler için yapılandırılmışdetails içerebilir. details değerini prompt
içeriği olarak değil, çalışma zamanı meta verisi olarak ele alın:
- OpenClaw, meta verilerin model bağlamına dönüşmemesi için provider yeniden
oynatımından ve Compaction girdisinden önce
toolResult.detailsdeğerini çıkarır. - Kalıcı oturum girdileri yalnızca sınırlandırılmış
detailstutar. Fazla büyük details, 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. Kancalar yine de döndürülendetailsdeğerlerini küçük tutmalı ve prompt ile ilgili metni yalnızcadetailsiçine koymaktan kaçınmalıdır; modelin görebileceği tool çıktısınıcontentiçine koyun.
Prompt ve model kancaları
Yeni Plugin’ler için faza özgü kancaları kullanın:before_model_resolve: yalnızca güncel prompt’u ve ek meta verilerini alır.providerOverrideveyamodelOverridedöndürün.agent_turn_prepare: güncel prompt’u, hazırlanmış oturum mesajlarını ve bu oturum için boşaltılmış tam olarak bir kez kullanılan kuyruğa alınmış eklemeleri alır.prependContextveyaappendContextdöndürün.before_prompt_build: güncel prompt’u ve oturum mesajlarını alır.prependContext,appendContext,systemPrompt,prependSystemContextveyaappendSystemContextdöndürün.heartbeat_prompt_contribution: yalnızca Heartbeat turları için çalışır veprependContextveyaappendContextdöndürür. Kullanıcı tarafından başlatılan turları değiştirmeden güncel 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 kancaları tercih edin.
before_agent_run, prompt oluşturma sonrasında ve prompt’a yerel görüntü yükleme
ile llm_input gözlemi dahil olmak üzere herhangi bir model girdisinden önce
çalışır. Güncel kullanıcı girdisini prompt olarak, yüklenmiş oturum geçmişini
messages içinde ve etkin system prompt’u alır. Modelin prompt’u okuyabilmesinden
önce çalıştırmayı durdurmak için { outcome: "block", reason, message? } döndürün.
reason dahilidir; message kullanıcıya gösterilen ikamedir. Desteklenen tek
sonuçlar pass ve block değerleridir; desteklenmeyen karar şekilleri kapalı
başarısız olur.
Bir çalıştırma engellendiğinde, OpenClaw yalnızca ikame metni message.content
içinde ve engelleyen Plugin kimliği ile zaman damgası gibi hassas olmayan engel
meta verilerini depolar. Özgün kullanıcı metni transcript’te veya gelecekteki
bağlamda tutulmaz. Dahili engel nedenleri hassas kabul edilir ve transcript,
geçmiş, yayın, günlük ve tanılama payload’larından çıkarılır. Gözlemlenebilirlik
engelleyici kimliği, sonuç, zaman damgası veya güvenli bir kategori gibi temizlenmiş
alanları kullanmalıdır.
OpenClaw etkin çalıştırmayı tanımlayabildiğinde before_agent_start ve agent_end
event.runId içerir. Aynı değer ctx.runId üzerinde de kullanılabilir. Cron
tarafından çalıştırılan işler ayrıca ctx.jobId (kaynak Cron iş kimliği) gösterir;
böylece Plugin kancaları metrikleri, yan etkileri veya durumu belirli bir
zamanlanmış işe göre kapsamlandırabilir.
Kanal kaynaklı çalıştırmalarda ctx.messageProvider, discord veya telegram
gibi provider yüzeyidir; ctx.channelId ise OpenClaw’ın oturum anahtarından veya
teslim meta verilerinden türetebildiği durumlarda konuşma hedefi tanımlayıcısıdır.
agent_end bir gözlem kancasıdır ve turdan sonra fire-and-forget şeklinde çalışır.
Kanca çalıştırıcısı, takılmış bir Plugin’in veya embedding endpoint’inin kanca
promise’ini sonsuza dek beklemede bırakmaması için 30 saniyelik zaman aşımı uygular.
Zaman aşımı günlüğe yazılır ve OpenClaw devam eder; Plugin kendi abort signal’ını
da kullanmadığı sürece Plugin’e ait ağ çalışmasını iptal etmez.
model_call_started ve model_call_ended, ham istemleri, geçmişi, yanıtları, başlıkları, istek gövdelerini veya provider istek kimliklerini almaması gereken provider çağrısı telemetrisi için kullanın. Bu hook’lar runId, callId, provider, model, isteğe bağlı api/transport, terminal durationMs/outcome ve OpenClaw sınırlı bir provider request-id hash’i türetebildiğinde upstreamRequestIdHash gibi kararlı meta veriler içerir.
before_agent_finalize yalnızca bir harness doğal bir son asistan yanıtını kabul etmek üzereyken çalışır. Bu, /stop iptal yolu değildir ve kullanıcı bir turu iptal ettiğinde çalışmaz. Sonlandırmadan önce harness’ten 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 sonucu atlayın. Codex native Stop hook’ları, OpenClaw before_agent_finalize kararları olarak bu hook’a aktarılır.
action: "revise" döndürürken, plugin’ler ek model geçişini sınırlı ve yeniden oynatma açısından güvenli hale getirmek için retry meta verisi ekleyebilir:
instruction, harness’e gönderilen revizyon gerekçesine eklenir. idempotencyKey, host’un eşdeğer finalize kararları genelinde aynı plugin isteği için yeniden denemeleri saymasına olanak tanır ve maxAttempts, host’un doğal son yanıtla devam etmeden önce kaç ek 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 paketle birlikte gelmeyen plugin’ler şunu ayarlamalıdır:
plugins.entries.<id>.hooks.allowPromptInjection=false ile plugin başına devre dışı bırakılabilir.
Oturum uzantıları ve sonraki tur enjeksiyonları
Workflow plugin’leri, küçük JSON uyumlu oturum durumunuapi.registerSessionExtension(...) ile kalıcı hale getirebilir ve Gateway sessions.pluginPatch yöntemi üzerinden güncelleyebilir. Oturum satırları, kayıtlı uzantı durumunu pluginExtensions üzerinden yansıtarak Control UI ve diğer istemcilerin plugin iç yapılarını öğrenmeden plugin’e ait durumu işlemesini sağlar.
Bir plugin’in kalıcı bağlamı tam olarak bir kez sonraki model turuna ulaştırması gerektiğinde api.enqueueNextTurnInjection(...) kullanın. OpenClaw, sıraya alınmış enjeksiyonları istem hook’larından önce boşaltır, süresi dolan enjeksiyonları bırakır ve plugin başına idempotencyKey ile yinelenenleri kaldırır. Bu, onay sürdürmeleri, ilke özetleri, arka plan izleyici deltaları ve sonraki turda model tarafından görünür olması gereken ancak kalıcı sistem istemi metnine dönüşmemesi gereken komut devamları için doğru kesişim noktasıdır.
Temizleme semantiği sözleşmenin parçasıdır. Oturum uzantısı temizliği ve runtime lifecycle temizleme callback’leri reset, delete, disable veya restart alır. Host, reset/delete/disable için sahip plugin’in kalıcı oturum uzantısı durumunu ve bekleyen sonraki tur enjeksiyonlarını kaldırır; restart, kalıcı oturum durumunu korurken temizleme callback’leri plugin’lerin eski runtime nesli için scheduler işlerini, çalışma bağlamını ve diğer bant dışı kaynakları serbest bırakmasına olanak tanır.
Mesaj hook’ları
Mesaj hook’larını kanal düzeyi yönlendirme ve teslim ilkesi için kullanın:message_received: gelen içeriği, göndereni,threadId,messageId,senderId, isteğe bağlı run/session korelasyonunu ve meta veriyi gözlemleyin.message_sending:contentöğesini yeniden yazın veya{ cancel: true }döndürün.message_sent: nihai başarıyı veya başarısızlığı gözlemleyin.
content gizli konuşulan transkripti içerebilir. Bu content öğesinin yeniden yazılması yalnızca hook tarafından görülebilen transkripti günceller; medya açıklaması olarak işlenmez.
Mesaj hook bağlamları, mevcut 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. Eski meta veriyi okumadan önce bu birinci sınıf alanları tercih edin.
Kanala özgü meta veriyi kullanmadan önce tipli threadId ve replyToId alanlarını tercih edin.
Karar kuralları:
cancel: trueiçerenmessage_sendingterminaldir.cancel: falseiçerenmessage_sendingkarar yok olarak ele alınır.- Yeniden yazılan
content, daha sonra bir hook teslimatı iptal etmediği sürece daha düşük öncelikli hook’lara devam eder. message_sending, iptalle birliktecancelReasonve sınırlımetadatadöndürebilir. Yeni mesaj lifecycle API’leri bunucancelled_by_message_sending_hookgerekçesiyle bastırılmış teslim sonucu olarak açığa çıkarır; eski doğrudan teslim, uyumluluk için boş sonuç dizisi döndürmeye devam eder.message_sentyalnızca gözlem amaçlıdır. Handler hataları günlüğe kaydedilir ve teslim sonucunu değiştirmez.
Kurulum hook’ları
before_install, skill ve plugin kurulumları için yerleşik taramadan sonra çalışır. Ek bulgular veya kurulumu durdurmak için { block: true, blockReason } döndürün.
block: true terminaldir. block: false karar yok olarak ele alınır.
Gateway lifecycle
Gateway’e ait duruma ihtiyaç duyan plugin servisleri içingateway_start kullanın. Bağlam, cron inceleme 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 runtime servisleri için dahili gateway:startup hook’una güvenmeyin.
cron_changed, added, updated, removed, started, finished ve scheduled gerekçelerini kapsayan tipli bir event payload’ı ile gateway’e ait cron lifecycle olayları için tetiklenir. Olay, bir PluginHookGatewayCronJob snapshot’ı (state.nextRunAtMs, state.lastRunStatus ve mevcut olduğunda state.lastError dahil) ve not-requested | delivered | not-delivered | unknown değerlerinden oluşan bir PluginHookGatewayCronDeliveryStatus taşır. Kaldırılan olaylar da silinen iş snapshot’ını taşır, böylece harici scheduler’lar durumu uzlaştırabilir. Harici uyandırma scheduler’larını eşitlerken runtime 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’a yakın 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_receivedhandler’larındaki 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 aşama yerinebefore_model_resolvevebefore_prompt_buildkullanmalıdır.before_tool_calliçindekionResolutionartık serbest biçimlistringyerine 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ç yapıları