HOOK.md kecil yang diinstal operator untuk perintah dan peristiwa Gateway seperti
/new, /reset, /stop, agent:bootstrap, atau gateway:startup.
Mulai cepat
Daftarkan Plugin hooks bertipe denganapi.on(...) dari entry Plugin Anda:
priority menurun. Hook dengan prioritas yang sama
mempertahankan urutan pendaftaran.
Katalog hook
Hook dikelompokkan berdasarkan surface yang diperluas. Nama yang dicetak tebal menerima hasil keputusan (block, cancel, override, atau require approval); semua yang lain hanya untuk observasi. Giliran agenbefore_model_resolve— override provider atau model sebelum pesan sesi dimuatbefore_prompt_build— tambahkan konteks dinamis atau teks prompt sistem sebelum pemanggilan modelbefore_agent_start— fase gabungan untuk kompatibilitas saja; sebaiknya gunakan dua hook di atasbefore_agent_reply— short-circuit giliran model dengan balasan sintetis atau keheninganagent_end— amati pesan akhir, status keberhasilan, dan durasi eksekusi
llm_input— amati input provider (prompt sistem, prompt, riwayat)llm_output— amati output provider
before_tool_call— tulis ulang parameter tool, blokir eksekusi, atau minta persetujuanafter_tool_call— amati hasil tool, error, dan durasitool_result_persist— tulis ulang pesan asisten yang dihasilkan dari hasil toolbefore_message_write— periksa atau blokir penulisan pesan yang sedang berlangsung (jarang)
inbound_claim— klaim pesan masuk sebelum routing agen (balasan sintetis)message_received— amati konten masuk, pengirim, thread, dan metadatamessage_sending— tulis ulang konten keluar atau batalkan pengirimanmessage_sent— amati keberhasilan atau kegagalan pengiriman keluarbefore_dispatch— periksa atau tulis ulang dispatch keluar sebelum handoff kanalreply_dispatch— berpartisipasi dalam pipeline dispatch balasan akhir
session_start/session_end— lacak batas siklus hidup sesibefore_compaction/after_compaction— amati atau beri anotasi pada siklus Compactionbefore_reset— amati peristiwa reset sesi (/reset, reset terprogram)
subagent_spawning/subagent_delivery_target/subagent_spawned/subagent_ended— koordinasikan routing subagen dan pengiriman hasil penyelesaian
gateway_start/gateway_stop— mulai atau hentikan layanan milik Plugin bersama Gatewaybefore_install— periksa hasil pemindaian instalasi Skill atau Plugin dan opsional memblokir
Kebijakan pemanggilan tool
before_tool_call menerima:
event.toolNameevent.params- opsional
event.runId - opsional
event.toolCallId - field konteks seperti
ctx.agentId,ctx.sessionKey,ctx.sessionId, danctx.tracediagnostik
block: truebersifat terminal dan melewati handler dengan prioritas lebih rendah.block: falsediperlakukan sebagai tidak ada keputusan.paramsmenulis ulang parameter tool untuk eksekusi.requireApprovalmenjeda eksekusi agen dan meminta persetujuan pengguna melalui persetujuan Plugin. Perintah/approvedapat menyetujui persetujuan exec maupun Plugin.block: truedari prioritas yang lebih rendah tetap dapat memblokir setelah hook dengan prioritas lebih tinggi meminta persetujuan.onResolutionmenerima keputusan persetujuan yang telah diselesaikan —allow-once,allow-always,deny,timeout, ataucancelled.
Hook prompt dan model
Gunakan hook khusus fase untuk Plugin baru:before_model_resolve: hanya menerima prompt saat ini dan metadata lampiran. KembalikanproviderOverrideataumodelOverride.before_prompt_build: menerima prompt saat ini dan pesan sesi. KembalikanprependContext,systemPrompt,prependSystemContext, atauappendSystemContext.
before_agent_start tetap ada untuk kompatibilitas. Sebaiknya gunakan hook eksplisit di atas
agar Plugin Anda tidak bergantung pada fase gabungan lama.
before_agent_start dan agent_end menyertakan event.runId saat OpenClaw dapat
mengidentifikasi eksekusi aktif. Nilai yang sama juga tersedia di ctx.runId.
Plugin non-bawaan yang memerlukan llm_input, llm_output, atau agent_end harus menyetel:
plugins.entries.<id>.hooks.allowPromptInjection=false.
Hook pesan
Gunakan hook pesan untuk routing tingkat kanal dan kebijakan pengiriman:message_received: amati konten masuk, pengirim,threadId,messageId,senderId, korelasi eksekusi/sesi opsional, dan metadata.message_sending: tulis ulangcontentatau kembalikan{ cancel: true }.message_sent: amati keberhasilan atau kegagalan akhir.
content dapat berisi transkrip lisan tersembunyi
meskipun payload kanal tidak memiliki teks/caption yang terlihat. Menulis ulang
content tersebut hanya memperbarui transkrip yang terlihat oleh hook; itu tidak dirender sebagai
caption media.
Konteks hook pesan mengekspos field korelasi stabil saat tersedia:
ctx.sessionKey, ctx.runId, ctx.messageId, ctx.senderId, ctx.trace,
ctx.traceId, ctx.spanId, ctx.parentSpanId, dan ctx.callDepth. Utamakan
field kelas satu ini sebelum membaca metadata lama.
Utamakan field bertipe threadId dan replyToId sebelum menggunakan
metadata khusus kanal.
Aturan keputusan:
message_sendingdengancancel: truebersifat terminal.message_sendingdengancancel: falsediperlakukan sebagai tidak ada keputusan.contentyang telah ditulis ulang diteruskan ke hook prioritas lebih rendah kecuali hook yang lebih akhir membatalkan pengiriman.
Hook instalasi
before_install berjalan setelah pemindaian bawaan untuk instalasi Skill dan Plugin.
Kembalikan temuan tambahan atau { block: true, blockReason } untuk menghentikan
instalasi.
block: true bersifat terminal. block: false diperlakukan sebagai tidak ada keputusan.
Siklus hidup Gateway
Gunakangateway_start untuk layanan Plugin yang memerlukan state milik Gateway. Konteks
mengekspos ctx.config, ctx.workspaceDir, dan ctx.getCron?.() untuk
pemeriksaan serta pembaruan Cron. Gunakan gateway_stop untuk membersihkan resource yang berjalan lama.
Jangan bergantung pada hook internal gateway:startup untuk layanan runtime milik Plugin.
Deprekasi mendatang
Beberapa surface yang berdekatan dengan hook sudah deprecated tetapi masih didukung. Lakukan migrasi sebelum rilis mayor berikutnya:- Envelope kanal plaintext pada handler
inbound_claimdanmessage_received. BacaBodyForAgentdan blok konteks pengguna terstruktur alih-alih mem-parse teks envelope datar. Lihat Plaintext channel envelopes → BodyForAgent. before_agent_starttetap ada untuk kompatibilitas. Plugin baru sebaiknya menggunakanbefore_model_resolvedanbefore_prompt_buildalih-alih fase gabungan.onResolutiondibefore_tool_callsekarang menggunakan unionPluginApprovalResolutionbertipe (allow-once/allow-always/deny/timeout/cancelled) alih-alihstringbentuk bebas.
command-auth → command-status — lihat
Plugin SDK migration → Active deprecations.
Terkait
- Plugin SDK migration — deprekasi aktif dan timeline penghapusan
- Building plugins
- Plugin SDK overview
- Plugin entry points
- Internal hooks
- Plugin architecture internals