Hook adalah skrip kecil yang berjalan ketika sesuatu terjadi di dalam Gateway. Hook dapat ditemukan dari direktori dan diperiksa denganDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw hooks. Gateway memuat hook internal hanya setelah Anda mengaktifkan hook atau mengonfigurasi setidaknya satu entri hook, paket hook, handler lama, atau direktori hook tambahan.
Ada dua jenis hook di OpenClaw:
- Hook internal (halaman ini): berjalan di dalam Gateway saat peristiwa agen dipicu, seperti
/new,/reset,/stop, atau peristiwa siklus hidup. - Webhook: endpoint HTTP eksternal yang memungkinkan sistem lain memicu pekerjaan di OpenClaw. Lihat Webhook.
openclaw hooks list menampilkan hook mandiri dan hook yang dikelola Plugin.
Mulai cepat
Jenis peristiwa
| Peristiwa | Kapan dipicu |
|---|---|
command:new | Perintah /new diterbitkan |
command:reset | Perintah /reset diterbitkan |
command:stop | Perintah /stop diterbitkan |
command | Peristiwa perintah apa pun (listener umum) |
session:compact:before | Sebelum Compaction meringkas riwayat |
session:compact:after | Setelah Compaction selesai |
session:patch | Saat properti sesi dimodifikasi |
agent:bootstrap | Sebelum file bootstrap ruang kerja disisipkan |
gateway:startup | Setelah channel dimulai dan hook dimuat |
gateway:shutdown | Saat pematian gateway dimulai |
gateway:pre-restart | Sebelum restart gateway yang diharapkan |
message:received | Pesan masuk dari channel mana pun |
message:transcribed | Setelah transkripsi audio selesai |
message:preprocessed | Setelah prapemrosesan media dan tautan selesai atau dilewati |
message:sent | Pesan keluar terkirim |
Menulis hook
Struktur hook
Setiap hook adalah direktori yang berisi dua file:Format HOOK.md
metadata.openclaw):
| Kolom | Deskripsi |
|---|---|
emoji | Emoji tampilan untuk CLI |
events | Array peristiwa yang akan didengarkan |
export | Ekspor bernama yang digunakan (default ke "default") |
os | Platform yang diperlukan (misalnya, ["darwin", "linux"]) |
requires | Jalur bins, anyBins, env, atau config yang diperlukan |
always | Lewati pemeriksaan kelayakan (boolean) |
install | Metode instalasi |
Implementasi handler
type, action, sessionKey, timestamp, messages (push untuk mengirim ke pengguna), dan context (data khusus peristiwa). Konteks hook Plugin agen dan alat juga dapat mencakup trace, konteks jejak diagnostik baca-saja yang kompatibel dengan W3C yang dapat diteruskan plugin ke log terstruktur untuk korelasi OTEL.
Sorotan konteks peristiwa
Peristiwa perintah (command:new, command:reset): context.sessionEntry, context.previousSessionEntry, context.commandSource, context.workspaceDir, context.cfg.
Peristiwa pesan (message:received): context.from, context.content, context.channelId, context.metadata (data khusus penyedia termasuk senderId, senderName, guildId). context.content mengutamakan isi perintah yang tidak kosong untuk pesan seperti perintah, lalu kembali ke isi masuk mentah dan isi umum; ini tidak mencakup pengayaan khusus agen seperti riwayat thread atau ringkasan tautan.
Peristiwa pesan (message:sent): context.to, context.content, context.success, context.channelId.
Peristiwa pesan (message:transcribed): context.transcript, context.from, context.channelId, context.mediaPath.
Peristiwa pesan (message:preprocessed): context.bodyForAgent (isi akhir yang diperkaya), context.from, context.channelId.
Peristiwa bootstrap (agent:bootstrap): context.bootstrapFiles (array yang dapat diubah), context.agentId.
Peristiwa patch sesi (session:patch): context.sessionEntry, context.patch (hanya kolom yang berubah), context.cfg. Hanya klien berhak istimewa yang dapat memicu peristiwa patch.
Peristiwa Compaction: session:compact:before mencakup messageCount, tokenCount. session:compact:after menambahkan compactedCount, summaryLength, tokensBefore, tokensAfter.
command:stop mengamati pengguna menerbitkan /stop; ini adalah siklus hidup pembatalan/perintah, bukan gerbang finalisasi agen. Plugin yang perlu memeriksa jawaban akhir alami dan meminta agen melakukan satu lintasan lagi harus menggunakan hook Plugin bertipe before_agent_finalize. Lihat Hook Plugin.
Peristiwa siklus hidup Gateway: gateway:shutdown mencakup reason dan restartExpectedMs serta dipicu saat pematian gateway dimulai. gateway:pre-restart mencakup konteks yang sama tetapi hanya dipicu saat pematian merupakan bagian dari restart yang diharapkan dan nilai restartExpectedMs terbatas disediakan. Selama pematian, setiap penantian hook siklus hidup bersifat upaya terbaik dan dibatasi agar pematian tetap berlanjut jika handler macet.
Di antara peristiwa gateway:shutdown (atau gateway:pre-restart) dan sisa rangkaian pematian, gateway juga memicu hook Plugin bertipe session_end untuk setiap sesi yang masih aktif saat proses berhenti. reason peristiwa adalah shutdown untuk penghentian SIGTERM/SIGINT biasa dan restart saat penutupan dijadwalkan sebagai bagian dari restart yang diharapkan. Pengurasan ini dibatasi agar handler session_end yang lambat tidak dapat memblokir keluarnya proses, dan sesi yang sudah difinalisasi melalui replace / reset / delete / compaction dilewati untuk menghindari pemicuan ganda.
Penemuan hook
Hook ditemukan dari direktori berikut, dalam urutan prioritas override yang meningkat:- Hook bawaan: dikirim bersama OpenClaw
- Hook Plugin: hook yang dibundel di dalam plugin terinstal
- Hook terkelola:
~/.openclaw/hooks/(diinstal pengguna, dibagikan di seluruh ruang kerja). Direktori tambahan darihooks.internal.load.extraDirsberbagi prioritas ini. - Hook ruang kerja:
<workspace>/hooks/(per agen, dinonaktifkan secara default hingga diaktifkan secara eksplisit)
openclaw hooks enable <name>, instal paket hook, atau atur hooks.internal.enabled=true untuk ikut serta. Saat Anda mengaktifkan satu hook bernama, Gateway hanya memuat handler hook tersebut; hooks.internal.enabled=true, direktori hook tambahan, dan handler lama ikut serta dalam penemuan luas.
Paket hook
Paket hook adalah paket npm yang mengekspor hook melaluiopenclaw.hooks di package.json. Instal dengan:
Hook bawaan
| Hook | Peristiwa | Yang dilakukan |
|---|---|---|
| session-memory | command:new, command:reset | Menyimpan konteks sesi ke <workspace>/memory/ |
| bootstrap-extra-files | agent:bootstrap | Menyisipkan file bootstrap tambahan dari pola glob |
| command-logger | command | Mencatat semua perintah ke ~/.openclaw/logs/commands.log |
| compaction-notifier | session:compact:before, session:compact:after | Mengirim pemberitahuan chat yang terlihat saat Compaction sesi dimulai/berakhir |
| boot-md | gateway:startup | Menjalankan BOOT.md saat gateway dimulai |
Detail session-memory
Mengekstrak 15 pesan pengguna/asisten terakhir dan menyimpannya ke<workspace>/memory/YYYY-MM-DD-HHMM.md menggunakan tanggal lokal host. Penangkapan memori berjalan di latar belakang sehingga pengakuan /new dan /reset tidak tertunda oleh pembacaan transkrip atau pembuatan slug opsional. Atur hooks.internal.entries.session-memory.llmSlug: true untuk menghasilkan slug nama file deskriptif dengan model yang dikonfigurasi. Memerlukan workspace.dir dikonfigurasi.
Konfigurasi bootstrap-extra-files
AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, MEMORY.md).
Detail command-logger
Mencatat setiap perintah slash ke~/.openclaw/logs/commands.log.
Detail compaction-notifier
Mengirim pesan status singkat ke percakapan saat ini ketika OpenClaw mulai dan selesai memadatkan transkrip sesi. Ini membuat giliran panjang tidak terlalu membingungkan di permukaan chat karena pengguna dapat melihat bahwa asisten sedang meringkas konteks dan akan melanjutkan setelah Compaction.Detail boot-md
MenjalankanBOOT.md dari ruang kerja aktif saat gateway dimulai.
Hook Plugin
Plugin dapat mendaftarkan hook bertipe melalui Plugin SDK untuk integrasi yang lebih dalam: mencegat panggilan alat, memodifikasi prompt, mengontrol alur pesan, dan lainnya. Gunakan hook Plugin saat Anda membutuhkanbefore_tool_call, before_agent_reply,
before_install, atau hook siklus hidup dalam proses lainnya.
Untuk referensi hook Plugin lengkap, lihat Hook Plugin.
Konfigurasi
Format konfigurasi array lama
hooks.internal.handlers masih didukung untuk kompatibilitas mundur, tetapi hook baru sebaiknya menggunakan sistem berbasis discovery.Referensi CLI
Praktik terbaik
- Jaga agar handler tetap cepat. Hook berjalan selama pemrosesan perintah. Jalankan pekerjaan berat secara fire-and-forget dengan
void processInBackground(event). - Tangani kesalahan dengan baik. Bungkus operasi berisiko dalam try/catch; jangan melempar error agar handler lain dapat berjalan.
- Filter event sejak awal. Segera kembali jika tipe/tindakan event tidak relevan.
- Gunakan kunci event yang spesifik. Pilih
"events": ["command:new"]daripada"events": ["command"]untuk mengurangi overhead.
Pemecahan masalah
Hook tidak ditemukan
Hook tidak memenuhi syarat
Hook tidak dijalankan
- Pastikan hook diaktifkan:
openclaw hooks list - Mulai ulang proses gateway Anda agar hook dimuat ulang.
- Periksa log gateway:
./scripts/clawlog.sh | grep hook
Terkait
- Referensi CLI: hooks
- Webhook
- Hook Plugin — hook siklus hidup plugin dalam proses
- Konfigurasi