Heartbeat (Gateway)
Heartbeat vs Cron? Lihat Otomatisasi & Tugas untuk panduan kapan menggunakan masing-masing.Heartbeat menjalankan giliran agent berkala di sesi utama agar model dapat menampilkan apa pun yang perlu diperhatikan tanpa mengirim spam kepada Anda. Heartbeat adalah giliran sesi utama terjadwal — ini tidak membuat catatan tugas latar belakang. Catatan tugas digunakan untuk pekerjaan yang terlepas (run ACP, subagent, pekerjaan cron terisolasi). Pemecahan masalah: Tugas Terjadwal
Memulai cepat (pemula)
- Biarkan heartbeat tetap aktif (default adalah
30m, atau1huntuk auth OAuth/token Anthropic, termasuk penggunaan ulang Claude CLI) atau atur cadence Anda sendiri. - Buat checklist
HEARTBEAT.mdkecil atau bloktasks:di workspace agent (opsional tetapi disarankan). - Tentukan ke mana pesan heartbeat harus dikirim (
target: "none"adalah default; aturtarget: "last"untuk merutekan ke kontak terakhir). - Opsional: aktifkan pengiriman reasoning heartbeat untuk transparansi.
- Opsional: gunakan konteks bootstrap ringan jika run heartbeat hanya memerlukan
HEARTBEAT.md. - Opsional: aktifkan sesi terisolasi agar riwayat percakapan penuh tidak dikirim di setiap heartbeat.
- Opsional: batasi heartbeat ke jam aktif (waktu lokal).
Default
- Interval:
30m(atau1hketika auth OAuth/token Anthropic adalah mode auth yang terdeteksi, termasuk penggunaan ulang Claude CLI). Aturagents.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. Prompt sistem menyertakan bagian “Heartbeat” dan run ditandai secara internal.
- Jam aktif (
heartbeat.activeHours) diperiksa dalam zona waktu yang dikonfigurasi. Di luar jendela itu, heartbeat dilewati hingga tick berikutnya di dalam jendela.
Untuk apa prompt heartbeat digunakan
Prompt default sengaja dibuat luas:- Tugas latar belakang: “Consider outstanding tasks” mendorong agent untuk meninjau tindak lanjut (inbox, kalender, pengingat, pekerjaan yang tertunda) dan menampilkan hal mendesak.
- Check-in manusia: “Checkup sometimes on your human during day time” mendorong pesan ringan sesekali seperti “ada yang Anda perlukan?”, tetapi menghindari spam malam hari dengan menggunakan zona waktu lokal yang Anda konfigurasi (lihat /concepts/timezone).
agents.defaults.heartbeat.prompt (atau
agents.list[].heartbeat.prompt) ke isi kustom (dikirim apa adanya).
Kontrak respons
- Jika tidak ada yang perlu diperhatikan, balas dengan
HEARTBEAT_OK. - Selama run heartbeat, OpenClaw memperlakukan
HEARTBEAT_OKsebagai ack ketika muncul di awal atau akhir balasan. Token tersebut dihapus dan balasannya dibuang jika sisa kontennya ≤ackMaxChars(default: 300). - Jika
HEARTBEAT_OKmuncul di tengah balasan, itu tidak diperlakukan secara khusus. - Untuk peringatan, jangan sertakan
HEARTBEAT_OK; kembalikan hanya teks peringatannya.
HEARTBEAT_OK yang muncul sendiri di awal/akhir pesan dihapus
dan dicatat di log; pesan yang hanya berisi HEARTBEAT_OK akan dibuang.
Config
Cakupan dan prioritas
agents.defaults.heartbeatmenetapkan perilaku heartbeat global.agents.list[].heartbeatdigabungkan di atasnya; jika ada agent yang memiliki blokheartbeat, hanya agent-agent 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 pengaturan per-channel.
Heartbeat per-agent
Jika entriagents.list[] mana pun menyertakan blok heartbeat, hanya agent-agent tersebut
yang menjalankan heartbeat. Blok per-agent digabungkan di atas agents.defaults.heartbeat
(sehingga Anda dapat menetapkan default bersama sekali lalu menimpa per agent).
Contoh: dua agent, hanya agent kedua yang menjalankan heartbeat.
Contoh jam aktif
Batasi heartbeat ke jam kerja dalam zona waktu tertentu:Penyiapan 24/7
Jika Anda ingin heartbeat berjalan sepanjang hari, gunakan salah satu pola ini:- Hilangkan
activeHourssepenuhnya (tanpa pembatasan jendela waktu; ini perilaku default). - Atur 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 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 menyimpanHEARTBEAT.mddari file bootstrap workspace.isolatedSession: saat true, setiap heartbeat berjalan dalam 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 maksimal. Routing pengiriman tetap menggunakan konteks sesi utama.session: kunci sesi opsional untuk run heartbeat.target:last: kirim ke channel eksternal terakhir yang digunakan.- channel eksplisit: channel atau id plugin apa pun yang dikonfigurasi, misalnya
discord,matrix,telegram, atauwhatsapp. none(default): jalankan heartbeat tetapi jangan kirim ke luar.
directPolicy: mengontrol perilaku pengiriman langsung/DM:allow(default): izinkan pengiriman heartbeat langsung/DM.block: tekan pengiriman target langsung/DM (reason=dm-blocked).
to: override penerima opsional (id spesifik channel, misalnya E.164 untuk WhatsApp atau id chat Telegram). Untuk topik/thread Telegram, gunakan<chatId>:topic:<messageThreadId>.accountId: id akun opsional untuk channel multi-akun. Saattarget: "last", id akun berlaku untuk channel terakhir yang teresolusikan jika mendukung akun; jika tidak, diabaikan. Jika id akun tidak cocok dengan akun yang dikonfigurasi untuk channel yang teresolusikan, pengiriman dilewati.prompt: menimpa isi prompt default (tidak digabungkan).ackMaxChars: jumlah karakter maksimum yang diizinkan setelahHEARTBEAT_OKsebelum pengiriman.suppressToolErrorWarnings: saat true, menekan payload peringatan error tool selama run heartbeat.activeHours: membatasi run heartbeat ke jendela waktu. Objek denganstart(HH:MM, inklusif; gunakan00:00untuk awal hari),end(HH:MM, eksklusif;24:00diizinkan untuk akhir hari), dantimezoneopsional.- Dihilangkan atau
"user": menggunakanagents.defaults.userTimezoneAnda jika diatur, jika tidak fallback ke zona waktu sistem host. "local": selalu menggunakan zona waktu sistem host.- Pengidentifikasi IANA apa pun (mis.
America/New_York): digunakan langsung; jika tidak valid, fallback 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 hingga tick berikutnya di dalam jendela.
- Dihilangkan atau
Perilaku pengiriman
- Heartbeat secara default berjalan di sesi utama agent (
agent:<id>:<mainKey>), atauglobalketikasession.scope = "global". Atursessionuntuk menimpa ke sesi channel tertentu (Discord/WhatsApp/dll.). sessionhanya memengaruhi konteks run; pengiriman dikendalikan olehtargetdanto.- Untuk mengirim ke channel/penerima tertentu, atur
target+to. Dengantarget: "last", pengiriman menggunakan channel eksternal terakhir untuk sesi itu. - Pengiriman heartbeat secara default mengizinkan target langsung/DM. Atur
directPolicy: "block"untuk menekan pengiriman target langsung sambil tetap menjalankan giliran heartbeat. - Jika antrean utama sibuk, heartbeat dilewati dan dicoba lagi nanti.
- Jika
targettidak teresolusikan ke tujuan eksternal mana pun, run tetap terjadi tetapi tidak ada pesan outbound yang dikirim. - Jika
showOk,showAlerts, danuseIndicatorsemuanya dinonaktifkan, run dilewati dari awal sebagaireason=alerts-disabled. - Jika hanya pengiriman alert yang dinonaktifkan, OpenClaw masih dapat menjalankan heartbeat, memperbarui timestamp tugas yang jatuh tempo, memulihkan timestamp idle sesi, dan menekan payload alert keluar.
- Balasan khusus heartbeat tidak membuat sesi tetap hidup;
updatedAtterakhir dipulihkan agar kedaluwarsa idle tetap berperilaku normal. - Tugas latar belakang yang terlepas dapat mengantrikan event sistem dan membangunkan heartbeat ketika sesi utama perlu segera menyadari sesuatu. Bangun ini tidak membuat run heartbeat menjadi tugas latar belakang.
Kontrol visibilitas
Secara default, ackHEARTBEAT_OK ditekan sementara konten alert tetap
dikirim. Anda dapat menyesuaikannya per channel atau per akun:
Fungsi setiap flag
showOk: mengirim ackHEARTBEAT_OKketika model mengembalikan balasan yang hanya berisi OK.showAlerts: mengirim konten alert ketika model mengembalikan balasan non-OK.useIndicator: memancarkan event indikator untuk permukaan status UI.
Contoh per-channel vs per-akun
Pola umum
| Tujuan | Config |
|---|---|
| Perilaku default (OK senyap, alert aktif) | (tidak perlu config) |
| 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
agent untuk membacanya. Anggap ini sebagai “checklist heartbeat” Anda: kecil, stabil, dan
aman untuk disertakan setiap 30 menit.
Jika HEARTBEAT.md ada tetapi secara efektif kosong (hanya baris kosong dan header
markdown seperti # Heading), OpenClaw melewati run heartbeat untuk menghemat panggilan API.
Lewatan ini dilaporkan sebagai reason=empty-heartbeat-file.
Jika file tidak ada, heartbeat tetap berjalan dan model memutuskan apa yang harus dilakukan.
Jaga agar tetap kecil (checklist singkat 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 mem-parse blok
tasks:dan memeriksa setiap tugas terhadapinterval-nya 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 panggilan model yang sia-sia. - Konten non-task di
HEARTBEAT.mddipertahankan dan ditambahkan sebagai konteks tambahan setelah daftar tugas yang jatuh tempo. - Timestamp terakhir-jalan tugas disimpan di state sesi (
heartbeatTaskState), sehingga interval bertahan melewati restart normal. - Timestamp tugas hanya dimajukan setelah run heartbeat menyelesaikan jalur balasan normalnya. Run
empty-heartbeat-file/no-tasks-dueyang dilewati tidak menandai tugas sebagai selesai.
Apakah agent dapat memperbarui HEARTBEAT.md?
Ya — jika Anda memintanya.HEARTBEAT.md hanyalah file biasa di workspace agent, jadi Anda dapat memberi tahu
agent (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 mengantrikan event sistem dan memicu heartbeat segera dengan:heartbeat yang dikonfigurasi, bangun manual akan menjalankan setiap heartbeat
agent tersebut segera.
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 agent
mengelola beberapa sesi/codex dan Anda ingin melihat mengapa ia memutuskan untuk menghubungi
Anda — tetapi ini juga dapat membocorkan detail internal lebih banyak daripada yang Anda inginkan. Sebaiknya tetap nonaktif di chat grup.
Kesadaran biaya
Heartbeat menjalankan giliran agent penuh. Interval yang lebih pendek membakar lebih banyak token. Untuk mengurangi biaya:- Gunakan
isolatedSession: trueagar riwayat percakapan penuh tidak dikirim (~100K token turun menjadi ~2-5K per run). - Gunakan
lightContext: trueuntuk membatasi file bootstrap hanya keHEARTBEAT.md. - Atur
modelyang lebih murah (mis.ollama/llama3.2:1b). - Jaga
HEARTBEAT.mdtetap kecil. - Gunakan
target: "none"jika Anda hanya ingin pembaruan state internal.
Terkait
- Otomatisasi & Tugas — semua mekanisme otomatisasi sekilas
- Tugas Latar Belakang — bagaimana pekerjaan terlepas dilacak
- Zona waktu — bagaimana zona waktu memengaruhi penjadwalan heartbeat
- Pemecahan masalah — debugging masalah otomatisasi