/new, /reset, /stop, agent:bootstrap veya gateway:startup
gibi komut ve Gateway olayları için operatör tarafından kurulan küçük bir
HOOK.md betiği istediğinizde kullanın.
Hızlı başlangıç
Plugin giriş noktanızdanapi.on(...) ile tipli Plugin hook’larını kaydedin:
priority sırasıyla ardışık olarak çalışır. Aynı öncelikteki hook’lar
kayıt sırasını korur.
Hook kataloğu
Hook’lar, genişlettikleri yüzeye göre gruplandırılmıştır. Kalın yazılan adlar bir karar sonucu kabul eder (engelleme, iptal, geçersiz kılma veya onay isteme); diğerlerinin tümü yalnızca gözlem içindir. Aracı turubefore_model_resolve— oturum mesajları yüklenmeden önce sağlayıcıyı veya modeli geçersiz kılbefore_prompt_build— model çağrısından önce dinamik bağlam veya sistem prompt metni eklebefore_agent_start— yalnızca uyumluluk için birleşik aşama; bunun yerine yukarıdaki iki hook’u tercih edinbefore_agent_reply— sentetik bir yanıtla model turunu kısa devreye al veya susturagent_end— son mesajları, başarı durumunu ve çalıştırma süresini gözlemle
llm_input— sağlayıcı girdisini gözlemle (sistem prompt’u, prompt, geçmiş)llm_output— sağlayıcı çıktısını gözlemle
before_tool_call— araç parametrelerini yeniden yaz, yürütmeyi engelle veya onay isteafter_tool_call— araç sonuçlarını, hataları ve süreyi gözlemletool_result_persist— araç sonucundan üretilen yardımcı mesajını yeniden yazbefore_message_write— devam eden bir mesaj yazımını incele veya engelle (nadir)
inbound_claim— aracı 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 teslimatı iptal etmessage_sent— giden teslimat başarısını veya hatasını gözlemlebefore_dispatch— kanal devrinden önce giden bir dispatch’i incele veya yeniden yazreply_dispatch— son yanıt-dispatch işlem hattına katıl
session_start/session_end— oturum yaşam döngüsü sınırlarını izlebefore_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— alt aracı yönlendirmesini ve tamamlanma teslimatını koordine et
gateway_start/gateway_stop— Gateway ile birlikte Plugin’e ait hizmetleri başlat veya durdurbefore_install— Skill veya Plugin kurulum taramalarını incele ve isteğe bağlı olarak engelle
Araç çağrısı ilkesi
before_tool_call şunları alır:
event.toolNameevent.params- isteğe bağlı
event.runId - isteğe bağlı
event.toolCallId ctx.agentId,ctx.sessionKey,ctx.sessionIdve tanılama amaçlıctx.tracegibi bağlam alanları
block: truenihaidir ve daha düşük öncelikli işleyicileri atlar.block: falsekarar verilmemiş olarak değerlendirilir.params, yürütme için araç parametrelerini yeniden yazar.requireApproval, aracı çalıştırmasını duraklatır ve kullanıcıya Plugin onayları üzerinden sorar./approvekomutu hem exec hem de Plugin onaylarını onaylayabilir.- Daha düşük öncelikli bir
block: true, daha yüksek öncelikli bir hook onay istemiş olsa bile yine de engelleyebilir. onResolution, çözümlenen onay kararını alır —allow-once,allow-always,deny,timeoutveyacancelled.
Prompt ve model hook’ları
Yeni Plugin’ler için aşamaya özgü hook’ları kullanın:before_model_resolve: yalnızca geçerli prompt’u ve ek meta verilerini alır.providerOverrideveyamodelOverridedöndürün.before_prompt_build: geçerli prompt’u ve oturum mesajlarını alır.prependContext,systemPrompt,prependSystemContextveyaappendSystemContextdöndürün.
before_agent_start uyumluluk için kalır. Bunun yerine yukarıdaki açık hook’ları
tercih edin; böylece Plugin’iniz eski birleşik aşamaya bağlı kalmaz.
before_agent_start ve agent_end, OpenClaw etkin çalıştırmayı
tanımlayabildiğinde event.runId içerir. Aynı değer ctx.runId üzerinde de bulunur.
llm_input, llm_output veya agent_end gerektiren paketlenmemiş Plugin’ler şunu ayarlamalıdır:
plugins.entries.<id>.hooks.allowPromptInjection=false ile devre dışı bırakılabilir.
Mesaj hook’ları
Kanal düzeyinde 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ıştırma/oturum ilişkilendirmesini ve meta verileri gözlemle.message_sending:contentdeğerini yeniden yaz veya{ cancel: true }döndür.message_sent: son başarıyı veya hatayı gözlemle.
content gizli konuşma transkriptini içerebilir. Bu
content değerini yeniden yazmak yalnızca hook tarafından görünen transkripti günceller; medya açıklaması olarak işlenmez.
Mesaj hook bağlamları, mevcut olduğunda kararlı ilişkilendirme 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 verileri okumadan önce
bu birinci sınıf alanları tercih edin.
Kanala özgü meta verileri kullanmadan önce tipli threadId ve replyToId alanlarını tercih edin.
Karar kuralları:
message_sendingilecancel: truenihaidir.message_sendingilecancel: false, karar verilmemiş olarak değerlendirilir.- Yeniden yazılmış
content, daha sonraki bir hook teslimatı iptal etmediği sürece daha düşük öncelikli hook’lara iletilmeye devam eder.
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 nihaidir. block: false karar verilmemiş olarak değerlendirilir.
Gateway yaşam döngüsü
Gateway’e ait duruma ihtiyaç duyan Plugin hizmetleri 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 çalışma zamanı hizmetleri için iç gateway:startup hook’una güvenmeyin.
Yaklaşan kullanımdan kaldırmalar
Birkaç hook’a bitişik yüzey kullanımdan kaldırılmıştır ancak hâlâ desteklenmektedir. Bir sonraki major sürümden önce geçiş yapın:- Düz metin kanal zarfları,
inbound_claimvemessage_receivedişleyicilerinde. 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 kullanır (allow-once/allow-always/deny/timeout/cancelled).
command-auth → command-status yeniden adlandırması dahil tam liste için bkz.
Plugin SDK migration → Etkin kullanımdan kaldırmalar.
İlgili
- Plugin SDK migration — etkin kullanımdan kaldırmalar ve kaldırma zaman çizelgesi
- Plugin oluşturma
- Plugin SDK genel bakışı
- Plugin giriş noktaları
- İç hook’lar
- Plugin architecture internals