Heartbeat vs cron? Lihat Automasi untuk panduan kapan harus menggunakan masing-masing.
Mulai cepat (pemula)
1
Pilih interval
Biarkan heartbeat tetap aktif (nilai default adalah
30m, atau 1h saat autentikasi OAuth/token Anthropic dikonfigurasi, termasuk penggunaan ulang Claude CLI) atau tetapkan interval Anda sendiri.2
Tambahkan HEARTBEAT.md (opsional)
Buat daftar periksa
HEARTBEAT.md singkat atau blok tasks: di ruang kerja agen.3
Tentukan tujuan pesan heartbeat
target: "none" adalah nilai default; tetapkan target: "last" untuk merutekannya ke kontak terakhir.4
Penyesuaian opsional
- Aktifkan pengiriman penalaran heartbeat untuk transparansi.
- Gunakan konteks bootstrap ringan jika proses heartbeat hanya memerlukan
HEARTBEAT.md. - Aktifkan sesi terisolasi agar tidak mengirim seluruh riwayat percakapan pada setiap heartbeat.
- Batasi heartbeat ke jam aktif (waktu setempat).
Nilai default
- Interval:
30m. Penerapan nilai default penyedia Anthropic menaikkan nilai ini menjadi1hsaat mode autentikasi yang ditentukan adalah OAuth/token (termasuk penggunaan ulang Claude CLI), tetapi hanya selamaheartbeat.everybelum ditetapkan. Tetapkanagents.defaults.heartbeat.everyatauagents.list[].heartbeat.everyper agen; gunakan0muntuk menonaktifkannya. - 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. - Batas waktu: giliran heartbeat tanpa nilai yang ditetapkan menggunakan
agents.defaults.timeoutSecondsjika tersedia. Jika tidak, giliran tersebut menggunakan interval heartbeat yang dibatasi hingga 600 detik. Tetapkanagents.defaults.heartbeat.timeoutSecondsatauagents.list[].heartbeat.timeoutSecondsper agen untuk pekerjaan heartbeat yang lebih lama. - Prompt heartbeat dikirim apa adanya sebagai pesan pengguna. Prompt sistem menyertakan bagian “Heartbeat” hanya saat heartbeat diaktifkan untuk agen default (dan
includeSystemPromptSectionbukanfalse), serta proses tersebut ditandai secara internal. - Saat heartbeat dinonaktifkan dengan
0m, proses normal juga menghilangkanHEARTBEAT.mddari konteks bootstrap agar model tidak melihat instruksi khusus heartbeat. - Jam aktif (
heartbeat.activeHours) diperiksa dalam zona waktu yang dikonfigurasi. Di luar rentang tersebut, heartbeat dilewati hingga waktu pemicu berikutnya yang berada dalam rentang. - Heartbeat secara otomatis ditunda selama pekerjaan cron aktif atau dalam antrean. Tetapkan
heartbeat.skipWhenBusy: trueuntuk juga menunda agen saat subagennya sendiri yang berkunci sesi atau jalur perintah bertingkat sedang berjalan; agen lain tidak lagi dijeda hanya karena agen lain memiliki pekerjaan subagen yang sedang berlangsung.
Kegunaan prompt heartbeat
Prompt default sengaja dibuat luas:- Tugas latar belakang: “Pertimbangkan tugas yang belum selesai” mendorong agen untuk meninjau tindak lanjut (kotak masuk, kalender, pengingat, pekerjaan dalam antrean) dan memunculkan apa pun yang mendesak.
- Pemeriksaan kondisi pengguna: “Sesekali periksa kondisi pengguna Anda pada siang hari” mendorong pengiriman pesan ringan “ada yang Anda perlukan?” sesekali, tetapi menghindari pesan berlebihan pada malam hari dengan menggunakan zona waktu setempat yang dikonfigurasi (lihat Zona waktu).
agents.defaults.heartbeat.prompt (atau agents.list[].heartbeat.prompt) ke isi khusus (dikirim apa adanya).
Kontrak respons
- Jika tidak ada yang memerlukan perhatian, balas dengan
HEARTBEAT_OK. - Sebagai gantinya, proses heartbeat dapat memanggil
heartbeat_responddengannotify: falsejika tidak ada pembaruan yang terlihat, ataunotify: truebesertanotificationTextuntuk peringatan. Jika tersedia, respons alat terstruktur lebih diutamakan daripada teks cadangan. - Hasil
heartbeat_respondyang bermakna dengannotify: falsetetap senyap, tetapi diingat sebagai konteks internal terbatas untuk giliran pengguna berikutnya dalam sesi tersebut. Konfirmasino_changedan notifikasi yang terlihat tidak disimpan dengan cara ini. - Selama proses heartbeat, OpenClaw memperlakukan
HEARTBEAT_OKsebagai konfirmasi jika muncul pada awal atau akhir balasan. Token tersebut dihapus dan balasan dibuang jika konten yang tersisa berjumlah ≤ackMaxChars(default: 300). - Jika
HEARTBEAT_OKmuncul di tengah balasan, token tersebut tidak diperlakukan secara khusus. - Untuk peringatan, jangan sertakan
HEARTBEAT_OK; hanya kembalikan teks peringatan.
HEARTBEAT_OK yang tidak disengaja pada awal/akhir pesan akan dihapus dan dicatat; pesan yang hanya berisi HEARTBEAT_OK akan dibuang.
Konfigurasi
Cakupan dan urutan 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 nilai default visibilitas untuk semua saluran.channels.<channel>.heartbeatmenggantikan nilai default saluran.channels.<channel>.accounts.<id>.heartbeat(saluran multiakun) menggantikan pengaturan per saluran.
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 nilai default bersama sekali saja dan menggantinya per agen).
Contoh: dua agen, hanya agen 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 berikut:- Hilangkan
activeHourssepenuhnya (tanpa pembatasan rentang waktu; ini adalah perilaku default). - Tetapkan rentang sehari penuh:
activeHours: { start: "00:00", end: "24:00" }.
Contoh multiakun
GunakanaccountId untuk menargetkan akun tertentu pada saluran multiakun seperti Telegram:
Catatan bidang
string
Interval heartbeat (string durasi; satuan default = menit).
string
Penggantian model opsional untuk proses heartbeat (
provider/model).boolean
default:"false"
Saat diaktifkan, kirim juga pesan
Thinking terpisah jika tersedia (bentuk yang sama dengan /reasoning on).boolean
default:"false"
Saat bernilai true, proses heartbeat menggunakan konteks bootstrap ringan dan hanya mempertahankan
HEARTBEAT.md dari berkas bootstrap ruang kerja.boolean
default:"false"
Saat bernilai true, setiap heartbeat berjalan dalam sesi baru tanpa riwayat percakapan sebelumnya. Menggunakan pola isolasi yang sama dengan cron
sessionTarget: "isolated". Secara drastis mengurangi biaya token per heartbeat. Gabungkan dengan lightContext: true untuk penghematan maksimal. Perutean pengiriman tetap menggunakan konteks sesi utama.boolean
default:"false"
Saat bernilai true, proses heartbeat ditunda pada jalur sibuk tambahan milik agen tersebut: pekerjaan subagennya sendiri yang berkunci sesi atau pekerjaan perintah bertingkat. Jalur cron selalu menunda heartbeat, bahkan tanpa flag ini, sehingga host model lokal tidak menjalankan prompt cron dan heartbeat secara bersamaan.
string
string
last: kirim ke channel eksternal yang terakhir digunakan.- channel eksplisit: channel atau id plugin apa pun yang dikonfigurasi, misalnya
discord,matrix,telegram, atauwhatsapp. none(default): jalankan heartbeat tetapi jangan kirim secara eksternal.
"allow" | "block"
default:"allow"
Mengontrol perilaku pengiriman langsung/DM.
allow: izinkan pengiriman heartbeat langsung/DM. block: cegah pengiriman langsung/DM (reason=dm-blocked).string
Penggantian penerima opsional (id khusus channel, misalnya E.164 untuk WhatsApp atau id obrolan Telegram). Untuk topik/utas Telegram, gunakan
<chatId>:topic:<messageThreadId>.string
Id akun opsional untuk channel multiakun. Saat
target: "last", id akun berlaku pada channel terakhir yang ditentukan jika channel tersebut mendukung akun; jika tidak, id diabaikan. Jika id akun tidak cocok dengan akun yang dikonfigurasi untuk channel yang ditentukan, pengiriman dilewati.string
Menggantikan isi prompt default (tidak digabungkan).
boolean
default:"true"
Menentukan apakah bagian prompt sistem
## Heartbeats milik agen default disisipkan. Atur false untuk mempertahankan perilaku runtime heartbeat (irama, pengiriman, HEARTBEAT.md) sekaligus menghilangkan instruksi heartbeat dari prompt sistem agen.number
default:"300"
Jumlah karakter maksimum yang diizinkan setelah
HEARTBEAT_OK sebelum pengiriman.boolean
Jika true, mencegah payload peringatan kesalahan alat selama proses heartbeat.
number
default:"global timeout or min(every, 600)"
Jumlah detik maksimum yang diizinkan untuk satu giliran agen heartbeat sebelum dibatalkan. Biarkan tidak diatur untuk menggunakan
agents.defaults.timeoutSeconds jika ditetapkan; jika tidak, gunakan irama heartbeat yang dibatasi hingga 600 detik.object
Membatasi proses heartbeat ke suatu rentang waktu. Objek dengan
start (HH:MM, inklusif; gunakan 00:00 untuk awal hari), end (HH:MM eksklusif; 24:00 diizinkan untuk akhir hari), dan timezone opsional.- Dihilangkan atau
"user": menggunakanagents.defaults.userTimezoneAnda jika ditetapkan; jika tidak, kembali ke zona waktu sistem host. "local": selalu menggunakan zona waktu sistem host.- Pengidentifikasi IANA apa pun (misalnya
America/New_York): digunakan secara langsung; jika tidak valid, kembali ke perilaku"user"di atas. startdanendtidak boleh sama untuk rentang aktif; nilai yang sama diperlakukan sebagai rentang selebar nol (selalu berada di luar rentang).- Di luar rentang aktif, heartbeat dilewati hingga tick berikutnya di dalam rentang.
Perilaku pengiriman
Perutean sesi dan target
Perutean sesi dan target
- Secara default, heartbeat dijalankan dalam sesi utama agen (
agent:<id>:<mainKey>), atauglobalsaatsession.scope = "global". Atursessionuntuk menggantinya dengan sesi channel tertentu (Discord/WhatsApp/dll.). sessionhanya memengaruhi konteks proses; pengiriman dikontrol olehtargetdanto.- Untuk mengirim ke channel/penerima tertentu, atur
target+to. Dengantarget: "last", pengiriman menggunakan channel eksternal terakhir untuk sesi tersebut. - Secara default, pengiriman heartbeat mengizinkan target langsung/DM. Atur
directPolicy: "block"untuk mencegah pengiriman ke target langsung sambil tetap menjalankan giliran heartbeat. - Jika antrean utama, jalur sesi target, jalur cron, atau tugas cron aktif sedang sibuk, heartbeat dilewati dan dicoba lagi nanti.
- Jika
skipWhenBusy: true, jalur subagen berbasis kunci sesi dan jalur bertingkat milik agen ini juga menunda proses heartbeat. Jalur sibuk milik agen lain tidak menunda agen ini. - Jika
targettidak menghasilkan tujuan eksternal, proses tetap berlangsung tetapi tidak ada pesan keluar yang dikirim.
Visibilitas dan perilaku pelompatan
Visibilitas dan perilaku pelompatan
- Jika
showOk,showAlerts, danuseIndicatorsemuanya dinonaktifkan, proses dilewati sejak awal sebagaireason=alerts-disabled. - Jika hanya pengiriman peringatan yang dinonaktifkan, OpenClaw masih dapat menjalankan heartbeat, memperbarui stempel waktu tugas yang jatuh tempo, memulihkan stempel waktu menganggur sesi, dan mencegah payload peringatan dikirim keluar.
- Jika target heartbeat yang ditentukan mendukung indikator pengetikan, OpenClaw menampilkan indikator pengetikan selama proses heartbeat aktif. Ini menggunakan target yang sama dengan tujuan keluaran obrolan heartbeat dan dinonaktifkan oleh
typingMode: "never".
Siklus hidup dan audit sesi
Siklus hidup dan audit sesi
- Balasan khusus heartbeat tidak mempertahankan sesi tetap aktif. Metadata heartbeat dapat memperbarui baris sesi, tetapi kedaluwarsa karena menganggur menggunakan
lastInteractionAtdari pesan pengguna/channel nyata terakhir, sedangkan kedaluwarsa harian menggunakansessionStartedAt. - Riwayat Control UI dan WebChat menyembunyikan prompt heartbeat dan pengakuan yang hanya berisi OK. Transkrip sesi yang mendasarinya tetap dapat memuat giliran tersebut untuk audit/pemutaran ulang.
- Tugas latar belakang yang dilepas dapat mengantrekan peristiwa sistem dan membangunkan heartbeat saat sesi utama perlu segera mengetahui sesuatu. Pembangkitan tersebut tidak menjadikan proses heartbeat sebagai tugas latar belakang.
Kontrol visibilitas
Secara default, pengakuanHEARTBEAT_OK dicegah sementara isi peringatan dikirimkan. Anda dapat menyesuaikannya per channel atau per akun:
Fungsi setiap flag
showOk: mengirim pengakuanHEARTBEAT_OKsaat model mengembalikan balasan yang hanya berisi OK.showAlerts: mengirim isi peringatan saat model mengembalikan balasan selain OK.useIndicator: memancarkan peristiwa indikator untuk permukaan status UI.
Contoh per channel dan per akun
Pola umum
HEARTBEAT.md (opsional)
Jika fileHEARTBEAT.md tersedia di ruang kerja, prompt default meminta agen membacanya. Anggap file ini sebagai “daftar periksa heartbeat” Anda: ringkas, stabil, dan aman untuk diperiksa setiap 30 menit.
Pada proses normal, HEARTBEAT.md hanya disisipkan jika panduan heartbeat diaktifkan untuk agen default. Menonaktifkan irama heartbeat dengan 0m atau menetapkan includeSystemPromptSection: false akan menghilangkannya dari konteks bootstrap normal.
Pada harness Codex native, isi HEARTBEAT.md tidak disisipkan ke dalam giliran seperti file bootstrap lainnya. Jika file tersebut tersedia dan memiliki isi selain spasi kosong, catatan mode kolaborasi heartbeat mengarahkan Codex ke file tersebut dan memintanya membaca file sebelum melanjutkan.
Jika HEARTBEAT.md tersedia tetapi secara efektif kosong (hanya baris kosong, komentar Markdown/HTML, heading Markdown seperti # Heading, penanda fence, atau stub daftar periksa kosong), OpenClaw melewati proses heartbeat untuk menghemat pemanggilan API. Pelompatan tersebut dilaporkan sebagai reason=empty-heartbeat-file. Jika file tidak ada, heartbeat tetap berjalan dan model menentukan tindakan yang harus dilakukan.
Pertahankan agar tetap ringkas (daftar periksa atau pengingat singkat) untuk menghindari pembengkakan prompt.
Contoh HEARTBEAT.md:
Blok tasks:
HEARTBEAT.md juga mendukung blok tasks: terstruktur berukuran kecil untuk pemeriksaan berbasis interval di dalam heartbeat itu sendiri.
Contoh:
Perilaku
Perilaku
- OpenClaw mengurai blok
tasks:dan memeriksa setiap tugas berdasarkanintervalmasing-masing. - 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. - Isi nontugas dalam
HEARTBEAT.mddipertahankan dan ditambahkan sebagai konteks tambahan setelah daftar tugas yang jatuh tempo. - Stempel waktu terakhir dijalankannya tugas disimpan dalam status sesi (
heartbeatTaskState), sehingga interval tetap bertahan setelah mulai ulang normal. - Stempel waktu tugas hanya dimajukan setelah proses heartbeat menyelesaikan jalur balasan normalnya. Proses
empty-heartbeat-file/no-tasks-dueyang dilewati tidak menandai tugas sebagai selesai.
Dapatkah agen memperbarui HEARTBEAT.md?
Ya, jika Anda memintanya.HEARTBEAT.md hanyalah file biasa di ruang kerja agen, sehingga Anda dapat memberi tahu agen (dalam obrolan normal), misalnya:
- “Perbarui
HEARTBEAT.mduntuk menambahkan pemeriksaan kalender harian.” - “Tulis ulang
HEARTBEAT.mdagar lebih ringkas dan berfokus pada tindak lanjut kotak masuk.”
Pembangkitan manual (sesuai permintaan)
Gunakanopenclaw system event untuk mengantrekan peristiwa sistem dan secara opsional memicu heartbeat langsung:
Jika
--session-key tidak diberikan dan beberapa agen telah mengonfigurasi heartbeat, --mode now segera menjalankan heartbeat setiap agen tersebut.
Kontrol heartbeat terkait dalam grup CLI yang sama:
Penyampaian penalaran (opsional)
Secara default, heartbeat hanya menyampaikan payload “jawaban” akhir. Jika menginginkan transparansi, aktifkan:agents.defaults.heartbeat.includeReasoning: true
Thinking (dengan format yang sama seperti /reasoning on). Ini dapat berguna saat agen mengelola beberapa sesi/codex dan Anda ingin mengetahui alasan agen memutuskan untuk menghubungi Anda—tetapi hal ini juga dapat membocorkan lebih banyak detail internal daripada yang Anda inginkan. Sebaiknya tetap nonaktifkan fitur ini dalam obrolan grup.
Pertimbangan biaya
Heartbeat menjalankan giliran agen secara penuh. Interval yang lebih singkat menghabiskan lebih banyak token. Untuk mengurangi biaya:- Gunakan
isolatedSession: trueagar tidak mengirim seluruh riwayat percakapan (~100K token menjadi ~2-5K per proses). - Gunakan
lightContext: trueuntuk membatasi berkas bootstrap hanya padaHEARTBEAT.md. - Tetapkan
modelyang lebih murah (misalnyaollama/llama3.2:1b). - Jaga agar
HEARTBEAT.mdtetap kecil. - Gunakan
target: "none"jika hanya menginginkan pembaruan status internal.
Luapan konteks setelah heartbeat
Heartbeat mempertahankan model runtime yang sudah ada pada sesi bersama setelah proses selesai, sehingga heartbeat yang mengalihkan sesi ke model lokal yang lebih kecil (misalnya model Ollama dengan jendela 32k) dapat membuat model tersebut tetap digunakan pada giliran sesi utama berikutnya. Jika giliran berikutnya kemudian melaporkan luapan konteks, dan model runtime terakhir sesi cocok denganheartbeat.model yang dikonfigurasi, pesan pemulihan OpenClaw menyebut kebocoran model heartbeat sebagai kemungkinan penyebab dan menyarankan perbaikan.
Untuk menghindarinya: gunakan isolatedSession: true untuk menjalankan heartbeat dalam sesi baru (secara opsional digabungkan dengan lightContext: true untuk prompt terkecil), atau pilih model heartbeat dengan jendela konteks yang cukup besar untuk sesi bersama.
Terkait
- Otomatisasi - ikhtisar semua mekanisme otomatisasi
- Tugas Latar Belakang - cara pekerjaan terpisah dilacak
- Zona Waktu - pengaruh zona waktu terhadap penjadwalan heartbeat
- Pemecahan Masalah - men-debug masalah otomatisasi