Heartbeat (Gateway)
Heartbeat vs Cron? Lihat Automation & Tasks untuk panduan kapan menggunakan masing-masing.Heartbeat menjalankan giliran agen berkala di sesi utama agar model dapat menampilkan apa pun yang perlu diperhatikan tanpa membuat Anda kewalahan. Heartbeat adalah giliran sesi utama yang terjadwal — ini tidak membuat catatan background task. Catatan task digunakan untuk pekerjaan yang terlepas (ACP run, subagen, isolated cron job). Pemecahan masalah: Scheduled Tasks
Mulai cepat (pemula)
- Biarkan heartbeat tetap aktif (default adalah
30m, atau1huntuk autentikasi Anthropic OAuth/token, termasuk penggunaan ulang Claude CLI) atau atur irama Anda sendiri. - Buat checklist
HEARTBEAT.mdkecil atau bloktasks:di workspace agen (opsional tetapi direkomendasikan). - Tentukan ke mana pesan heartbeat harus dikirim (
target: "none"adalah default; seteltarget: "last"untuk mengarahkan ke kontak terakhir). - Opsional: aktifkan pengiriman reasoning heartbeat untuk transparansi.
- Opsional: gunakan konteks bootstrap ringan jika heartbeat hanya perlu menjalankan
HEARTBEAT.md. - Opsional: aktifkan sesi terisolasi agar riwayat percakapan penuh tidak dikirim pada setiap heartbeat.
- Opsional: batasi heartbeat ke jam aktif (waktu lokal).
Default
- Interval:
30m(atau1hsaat autentikasi Anthropic OAuth/token adalah mode autentikasi yang terdeteksi, termasuk penggunaan ulang Claude CLI). Setelagents.defaults.heartbeat.everyatauagents.list[].heartbeat.every; gunakan0muntuk menonaktifkan. - Isi prompt (dapat dikonfigurasi melalui
agents.defaults.heartbeat.prompt):Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. - Prompt heartbeat dikirim apa adanya sebagai pesan pengguna. System prompt hanya menyertakan bagian “Heartbeat” saat heartbeat diaktifkan untuk agen default, dan run tersebut ditandai secara internal.
- Saat heartbeat dinonaktifkan dengan
0m, run normal juga menghilangkanHEARTBEAT.mddari konteks bootstrap sehingga model tidak melihat instruksi yang khusus untuk heartbeat. - Jam aktif (
heartbeat.activeHours) diperiksa dalam zona waktu yang dikonfigurasi. Di luar jendela tersebut, heartbeat dilewati sampai tick berikutnya di dalam jendela.
Untuk apa prompt heartbeat digunakan
Prompt default sengaja dibuat luas:- Background task: “Consider outstanding tasks” mendorong agen untuk meninjau tindak lanjut yang belum selesai (inbox, kalender, pengingat, pekerjaan dalam antrean) dan menampilkan apa pun yang mendesak.
- Check-in ke manusia: “Checkup sometimes on your human during day time” mendorong pesan ringan sesekali seperti “ada yang Anda butuhkan?”, tetapi menghindari spam di malam hari dengan menggunakan zona waktu lokal yang Anda konfigurasikan (lihat /concepts/timezone).
agents.defaults.heartbeat.prompt (atau
agents.list[].heartbeat.prompt) ke isi khusus (dikirim apa adanya).
Kontrak respons
- Jika tidak ada yang perlu diperhatikan, balas dengan
HEARTBEAT_OK. - Selama run heartbeat, OpenClaw memperlakukan
HEARTBEAT_OKsebagai ack saat muncul di awal atau akhir balasan. Token tersebut dihapus dan balasan dibuang jika konten yang tersisa ≤ackMaxChars(default: 300). - Jika
HEARTBEAT_OKmuncul di tengah balasan, token itu tidak diperlakukan secara khusus. - Untuk peringatan, jangan sertakan
HEARTBEAT_OK; kembalikan hanya teks peringatannya.
HEARTBEAT_OK yang muncul sendiri di awal/akhir pesan akan dihapus
dan dicatat dalam log; pesan yang hanya berisi HEARTBEAT_OK akan dibuang.
Konfigurasi
Cakupan dan prioritas
agents.defaults.heartbeatmenetapkan perilaku heartbeat global.agents.list[].heartbeatdigabungkan di atasnya; jika ada agen yang memiliki blokheartbeat, hanya agen tersebut yang menjalankan heartbeat.channels.defaults.heartbeatmenetapkan default visibilitas untuk semua channel.channels.<channel>.heartbeatmenimpa default channel.channels.<channel>.accounts.<id>.heartbeat(channel multi-akun) menimpa per-channel.
Heartbeat per agen
Jika ada entriagents.list[] yang menyertakan blok heartbeat, hanya agen tersebut
yang menjalankan heartbeat. Blok per agen digabungkan di atas agents.defaults.heartbeat
(sehingga Anda dapat menetapkan default bersama sekali lalu menimpa per agen).
Contoh: dua agen, hanya agen kedua yang menjalankan heartbeat.
Contoh jam aktif
Batasi heartbeat ke jam kerja dalam zona waktu tertentu:Konfigurasi 24/7
Jika Anda ingin heartbeat berjalan sepanjang hari, gunakan salah satu pola berikut:- Hilangkan
activeHourssepenuhnya (tanpa pembatasan jendela waktu; ini adalah perilaku default). - Setel jendela sehari penuh:
activeHours: { start: "00:00", end: "24:00" }.
start dan end ke waktu yang sama (misalnya 08:00 hingga 08:00).
Itu diperlakukan sebagai jendela dengan lebar nol, sehingga heartbeat selalu dilewati.
Contoh multi-akun
GunakanaccountId untuk menargetkan akun tertentu pada channel multi-akun seperti Telegram:
Catatan field
every: interval heartbeat (string durasi; unit default = menit).model: override model opsional untuk run heartbeat (provider/model).includeReasoning: saat diaktifkan, juga mengirim pesanReasoning:terpisah saat tersedia (bentuk yang sama seperti/reasoning on).lightContext: saat true, run heartbeat menggunakan konteks bootstrap ringan dan hanya mempertahankanHEARTBEAT.mddari file bootstrap workspace.isolatedSession: saat true, setiap heartbeat berjalan di sesi baru tanpa riwayat percakapan sebelumnya. Menggunakan pola isolasi yang sama seperti cronsessionTarget: "isolated". Secara drastis mengurangi biaya token per heartbeat. Gabungkan denganlightContext: trueuntuk penghematan maksimum. Routing pengiriman tetap menggunakan konteks sesi utama.session: kunci sesi opsional untuk run heartbeat.main(default): sesi utama agen.- Kunci sesi eksplisit (salin dari
openclaw sessions --jsonatau sessions CLI). - Format kunci sesi: lihat Sessions dan Groups.
target:last: kirim ke channel eksternal yang terakhir digunakan.- channel eksplisit: channel atau id plugin yang dikonfigurasi, misalnya
discord,matrix,telegram, atauwhatsapp. none(default): jalankan heartbeat tetapi jangan kirimkan secara eksternal.
directPolicy: mengontrol perilaku pengiriman direct/DM:allow(default): izinkan pengiriman heartbeat direct/DM.block: tekan pengiriman direct/DM (reason=dm-blocked).
to: override penerima opsional (id khusus channel, misalnya E.164 untuk WhatsApp atau chat id Telegram). Untuk topic/thread Telegram, gunakan<chatId>:topic:<messageThreadId>.accountId: id akun opsional untuk channel multi-akun. Saattarget: "last", id akun diterapkan ke channel terakhir yang telah di-resolve jika channel tersebut mendukung akun; jika tidak, nilai ini diabaikan. Jika id akun tidak cocok dengan akun yang dikonfigurasi untuk channel yang telah di-resolve, pengiriman dilewati.prompt: menimpa isi prompt default (tidak digabungkan).ackMaxChars: jumlah karakter maksimum yang diizinkan setelahHEARTBEAT_OKsebelum pengiriman.suppressToolErrorWarnings: saat true, menekan payload peringatan kesalahan tool selama run heartbeat.activeHours: membatasi run heartbeat ke jendela waktu tertentu. Objek denganstart(HH:MM, inklusif; gunakan00:00untuk awal hari),end(HH:MM eksklusif;24:00diperbolehkan untuk akhir hari), dantimezoneopsional.- Dihilangkan atau
"user": menggunakanagents.defaults.userTimezoneAnda jika disetel, jika tidak kembali ke zona waktu sistem host. "local": selalu menggunakan zona waktu sistem host.- Pengidentifikasi IANA apa pun (mis.
America/New_York): digunakan secara langsung; jika tidak valid, kembali ke perilaku"user"di atas. startdanendtidak boleh sama untuk jendela aktif; nilai yang sama diperlakukan sebagai lebar nol (selalu di luar jendela).- Di luar jendela aktif, heartbeat dilewati sampai tick berikutnya di dalam jendela.
- Dihilangkan atau
Perilaku pengiriman
- Heartbeat berjalan di sesi utama agen secara default (
agent:<id>:<mainKey>), atauglobalsaatsession.scope = "global". Setelsessionuntuk menimpa ke sesi channel tertentu (Discord/WhatsApp/dll.). sessionhanya memengaruhi konteks run; pengiriman dikendalikan olehtargetdanto.- Untuk mengirim ke channel/penerima tertentu, setel
target+to. Dengantarget: "last", pengiriman menggunakan channel eksternal terakhir untuk sesi tersebut. - Pengiriman heartbeat mengizinkan target direct/DM secara default. Setel
directPolicy: "block"untuk menekan pengiriman ke target direct sambil tetap menjalankan giliran heartbeat. - Jika antrean utama sibuk, heartbeat dilewati dan dicoba lagi nanti.
- Jika
targettidak di-resolve ke tujuan eksternal mana pun, run tetap terjadi tetapi tidak ada pesan keluar yang dikirim. - Jika
showOk,showAlerts, danuseIndicatorsemuanya dinonaktifkan, run dilewati sejak awal sebagaireason=alerts-disabled. - Jika hanya pengiriman peringatan yang dinonaktifkan, OpenClaw tetap dapat menjalankan heartbeat, memperbarui stempel waktu due-task, memulihkan stempel waktu idle sesi, dan menekan payload peringatan keluar.
- Balasan yang hanya untuk heartbeat tidak menjaga sesi tetap aktif; nilai
updatedAtterakhir dipulihkan agar masa kedaluwarsa idle tetap berperilaku normal. - Background task yang terlepas dapat mengantrekan system event dan membangunkan heartbeat ketika sesi utama perlu menyadari sesuatu dengan cepat. Bangun ini tidak membuat run heartbeat menjadi background task.
Kontrol visibilitas
Secara default, ackHEARTBEAT_OK ditekan sementara konten peringatan tetap
dikirim. Anda dapat menyesuaikannya per channel atau per akun:
Fungsi masing-masing flag
showOk: mengirim acknowledgmentHEARTBEAT_OKsaat model mengembalikan balasan yang hanya berisi OK.showAlerts: mengirim konten peringatan saat model mengembalikan balasan non-OK.useIndicator: memancarkan event indikator untuk tampilan status UI.
Contoh per-channel vs per-akun
Pola umum
| Tujuan | Konfigurasi |
|---|---|
| Perilaku default (OK senyap, peringatan aktif) | (tidak perlu konfigurasi) |
| Sepenuhnya senyap (tanpa pesan, tanpa indikator) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Hanya indikator (tanpa pesan) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| OK hanya di satu channel | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (opsional)
Jika fileHEARTBEAT.md ada di workspace, prompt default memberi tahu
agen untuk membacanya. Anggap ini sebagai “checklist heartbeat” Anda: kecil, stabil, dan
aman untuk disertakan setiap 30 menit.
Pada run normal, HEARTBEAT.md hanya disisipkan saat panduan heartbeat
diaktifkan untuk agen default. Menonaktifkan irama heartbeat dengan 0m atau
menyetel includeSystemPromptSection: false akan menghilangkannya dari konteks bootstrap
normal.
Jika HEARTBEAT.md ada tetapi pada dasarnya kosong (hanya baris kosong dan heading
markdown seperti # Heading), OpenClaw melewati run heartbeat untuk menghemat pemanggilan API.
Lewatan ini dilaporkan sebagai reason=empty-heartbeat-file.
Jika file tidak ada, heartbeat tetap berjalan dan model memutuskan apa yang harus dilakukan.
Pertahankan ukurannya kecil (checklist pendek atau pengingat) untuk menghindari prompt yang membengkak.
Contoh HEARTBEAT.md:
Blok tasks:
HEARTBEAT.md juga mendukung blok tasks: terstruktur kecil untuk
pemeriksaan berbasis interval di dalam heartbeat itu sendiri.
Contoh:
- OpenClaw mengurai blok
tasks:dan memeriksa setiap tugas terhadapintervalmiliknya sendiri. - Hanya tugas yang jatuh tempo yang disertakan dalam prompt heartbeat untuk tick tersebut.
- Jika tidak ada tugas yang jatuh tempo, heartbeat dilewati sepenuhnya (
reason=no-tasks-due) untuk menghindari pemanggilan model yang sia-sia. - Konten non-task di
HEARTBEAT.mddipertahankan dan ditambahkan sebagai konteks tambahan setelah daftar tugas yang jatuh tempo. - Stempel waktu terakhir dijalankan untuk tugas disimpan di status sesi (
heartbeatTaskState), sehingga interval tetap bertahan setelah restart normal. - Stempel waktu tugas hanya dimajukan setelah run heartbeat menyelesaikan jalur balasan normalnya. Run
empty-heartbeat-file/no-tasks-dueyang dilewati tidak menandai tugas sebagai selesai.
Bisakah agen memperbarui HEARTBEAT.md?
Ya — jika Anda memintanya.HEARTBEAT.md hanyalah file biasa di workspace agen, jadi Anda dapat memberi tahu
agen (dalam chat normal) sesuatu seperti:
- “Perbarui
HEARTBEAT.mduntuk menambahkan pemeriksaan kalender harian.” - “Tulis ulang
HEARTBEAT.mdagar lebih singkat dan fokus pada tindak lanjut inbox.”
HEARTBEAT.md — file ini menjadi bagian dari konteks prompt.
Bangun manual (sesuai permintaan)
Anda dapat mengantrekan system event dan memicu heartbeat segera dengan:heartbeat yang dikonfigurasi, bangun manual akan segera menjalankan heartbeat masing-masing agen tersebut.
Gunakan --mode next-heartbeat untuk menunggu tick terjadwal berikutnya.
Pengiriman reasoning (opsional)
Secara default, heartbeat hanya mengirim payload “jawaban” final. Jika Anda menginginkan transparansi, aktifkan:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (bentuk yang sama seperti /reasoning on). Ini dapat berguna ketika agen
mengelola beberapa sesi/codex dan Anda ingin melihat mengapa ia memutuskan untuk menghubungi
Anda — tetapi ini juga dapat membocorkan lebih banyak detail internal daripada yang Anda inginkan. Sebaiknya biarkan tetap
nonaktif di chat grup.
Kesadaran biaya
Heartbeat menjalankan giliran agen penuh. Interval yang lebih pendek menghabiskan lebih banyak token. Untuk mengurangi biaya:- Gunakan
isolatedSession: trueagar tidak mengirim riwayat percakapan penuh (~100K token turun menjadi ~2-5K per run). - Gunakan
lightContext: trueuntuk membatasi file bootstrap hanya keHEARTBEAT.md. - Setel
modelyang lebih murah (mis.ollama/llama3.2:1b). - Buat
HEARTBEAT.mdtetap kecil. - Gunakan
target: "none"jika Anda hanya ingin pembaruan status internal.
Terkait
- Automation & Tasks — semua mekanisme otomatisasi secara ringkas
- Background Tasks — cara pekerjaan terlepas dilacak
- Timezone — bagaimana zona waktu memengaruhi penjadwalan heartbeat
- Troubleshooting — men-debug masalah otomatisasi