Gateway
Heartbeat
Heartbeat menjalankan giliran agen secara berkala dalam sesi utama agar model dapat menampilkan apa pun yang memerlukan perhatian tanpa membanjiri Anda dengan pesan.
Heartbeat adalah giliran sesi utama yang terjadwal—ini tidak membuat catatan tugas latar belakang. Catatan tugas ditujukan untuk pekerjaan terpisah (proses ACP, subagen, tugas cron terisolasi).
Pemecahan masalah: Tugas Terjadwal
Mulai cepat (pemula)
Pilih interval
Biarkan heartbeat diaktifkan (nilai default-nya adalah 30m, atau 1h ketika autentikasi OAuth/token Anthropic dikonfigurasi, termasuk penggunaan kembali Claude CLI) atau tetapkan interval Anda sendiri.
Tambahkan HEARTBEAT.md (opsional)
Buat daftar periksa kecil HEARTBEAT.md atau blok tasks: di ruang kerja agen.
Tentukan tujuan pesan heartbeat
target: "none" adalah nilai default; tetapkan target: "last" untuk merutekannya ke kontak terakhir.
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 pada jam aktif (waktu setempat).
Contoh konfigurasi:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explicit delivery to last contact (default is "none") directPolicy: "allow", // default: allow direct/DM targets; set "block" to suppress lightContext: true, // optional: only inject HEARTBEAT.md from bootstrap files isolatedSession: true, // optional: fresh session each run (no conversation history) skipWhenBusy: true, // optional: also defer when this agent's subagent or nested lanes are busy // activeHours: { start: "08:00", end: "24:00" }, // includeReasoning: true, // optional: send separate `Thinking` message too }, }, },}Nilai default
- Interval:
30m. Penerapan nilai default penyedia Anthropic menaikkan interval ini menjadi1hketika mode autentikasi yang ditetapkan adalah OAuth/token (termasuk penggunaan kembali 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 yang batas waktunya tidak 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 ketika heartbeat diaktifkan untuk agen default (dan
includeSystemPromptSectionbukanfalse), serta proses tersebut ditandai secara internal. - Ketika 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 eksekusi berikutnya yang berada dalam rentang. - Heartbeat ditunda secara otomatis saat pekerjaan cron aktif atau sedang mengantre. Tetapkan
heartbeat.skipWhenBusy: trueuntuk juga menunda agen ketika subagen berbasis kunci sesi atau jalur perintah bertingkat miliknya sedang berjalan; agen sejawat tidak lagi dijeda hanya karena agen lain sedang menjalankan pekerjaan subagen.
Tujuan 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 yang mengantre) dan menampilkan apa pun yang mendesak.
- Menanyakan kabar pengguna: "Sesekali tanyakan kabar pengguna Anda pada siang hari" mendorong pesan ringan sesekali seperti "ada yang Anda perlukan?", tetapi menghindari banjir pesan pada malam hari dengan menggunakan zona waktu lokal yang Anda konfigurasi (lihat Zona waktu).
Heartbeat dapat bereaksi terhadap tugas latar belakang yang telah selesai, tetapi proses heartbeat itu sendiri tidak membuat catatan tugas.
Jika Anda ingin heartbeat melakukan sesuatu yang sangat spesifik (misalnya, "periksa statistik Gmail PubSub" atau "verifikasi kesehatan Gateway"), tetapkan 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 alternatif, proses heartbeat dapat memanggil
heartbeat_responddengannotify: falseagar tidak ada pembaruan yang terlihat, ataunotify: truebesertanotificationTextuntuk peringatan. Jika tersedia, respons alat terstruktur lebih diutamakan daripada teks cadangan. - Selama proses heartbeat, OpenClaw memperlakukan
HEARTBEAT_OKsebagai konfirmasi ketika 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.
Di luar heartbeat, HEARTBEAT_OK yang tidak semestinya pada awal/akhir pesan akan dihapus dan dicatat; pesan yang hanya berisi HEARTBEAT_OK akan dibuang.
Konfigurasi
{ agents: { defaults: { heartbeat: { every: "30m", // default: 30m (0m disables) model: "anthropic/claude-opus-4-6", includeReasoning: false, // default: false (deliver separate Thinking message when available) lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) skipWhenBusy: false, // default: false; true also waits for this agent's subagent/nested lanes target: "last", // default: none | options: last | none | <channel id> (core or plugin, e.g. "imessage") to: "+15551234567", // optional channel-specific override accountId: "ops-bot", // optional multi-account channel id 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.", includeSystemPromptSection: true, // default: true; false omits the ## Heartbeats system prompt section for the default agent ackMaxChars: 300, // max chars allowed after HEARTBEAT_OK }, }, },}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 nilai default visibilitas untuk semua kanal.channels.<channel>.heartbeatmenggantikan nilai default kanal.channels.<channel>.accounts.<id>.heartbeat(kanal multiakun) menggantikan pengaturan per kanal.
Heartbeat per agen
Jika ada entri agents.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 satu kali dan menggantinya per agen).
Contoh: dua agen, hanya agen kedua yang menjalankan heartbeat.
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explicit delivery to last contact (default is "none") }, }, list: [ { id: "main", default: true }, { id: "ops", heartbeat: { every: "1h", target: "whatsapp", to: "+15551234567", timeoutSeconds: 45, 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.", }, }, ], },}Contoh jam aktif
Batasi heartbeat pada jam kerja di zona waktu tertentu:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explicit delivery to last contact (default is "none") activeHours: { start: "09:00", end: "22:00", timezone: "America/New_York", // optional; uses your userTimezone if set, otherwise host tz }, }, }, },}Di luar rentang ini (sebelum pukul 09.00 atau setelah pukul 22.00 Waktu Timur), heartbeat dilewati. Waktu eksekusi terjadwal berikutnya yang berada dalam rentang akan berjalan seperti biasa.
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
Gunakan accountId untuk menargetkan akun tertentu pada kanal multiakun seperti Telegram:
{ agents: { list: [ { id: "ops", heartbeat: { every: "1h", target: "telegram", to: "12345678:topic:42", // optional: route to a specific topic/thread accountId: "ops-bot", }, }, ], }, channels: { telegram: { accounts: { "ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" }, }, }, },}Catatan bidang
everystringInterval heartbeat (string durasi; satuan default = menit).
modelstringPenggantian model opsional untuk proses heartbeat (provider/model).
includeReasoningbooleandefault: falseJika diaktifkan, pesan Thinking terpisah juga dikirim jika tersedia (format yang sama dengan /reasoning on).
lightContextbooleandefault: falseJika bernilai true, proses heartbeat menggunakan konteks bootstrap ringan dan hanya mempertahankan HEARTBEAT.md dari berkas bootstrap ruang kerja.
isolatedSessionbooleandefault: falseJika bernilai true, setiap heartbeat berjalan dalam sesi baru tanpa riwayat percakapan sebelumnya. Menggunakan pola isolasi yang sama dengan sessionTarget: "isolated" pada cron. Mengurangi biaya token per heartbeat secara drastis. Gabungkan dengan lightContext: true untuk penghematan maksimal. Perutean pengiriman tetap menggunakan konteks sesi utama.
skipWhenBusybooleandefault: falseJika bernilai true, proses heartbeat ditunda ketika jalur tambahan agen tersebut sedang sibuk: subagen berbasis kunci sesi miliknya atau pekerjaan perintah bertingkat. Jalur cron selalu menunda heartbeat, bahkan tanpa tanda ini, sehingga host model lokal tidak menjalankan prompt cron dan heartbeat secara bersamaan.
sessionstringKunci sesi opsional untuk proses heartbeat.
targetstringlast: kirim ke kanal eksternal yang terakhir digunakan.- kanal eksplisit: kanal atau id Plugin apa pun yang dikonfigurasi, misalnya
discord,matrix,telegram, atauwhatsapp. none(default): jalankan heartbeat, tetapi jangan kirimkan secara eksternal.
directPolicy"allow" | "block"default: allowMengontrol perilaku pengiriman langsung/DM. allow: izinkan pengiriman heartbeat langsung/DM. block: cegah pengiriman langsung/DM (reason=dm-blocked).
tostringPenggantian penerima opsional (id khusus saluran, misalnya E.164 untuk WhatsApp atau id obrolan Telegram). Untuk topik/utas Telegram, gunakan <chatId>:topic:<messageThreadId>.
accountIdstringId akun opsional untuk saluran multiakun. Ketika target: "last", id akun diterapkan pada saluran terakhir yang ditentukan jika saluran tersebut mendukung akun; jika tidak, id tersebut diabaikan. Jika id akun tidak cocok dengan akun yang dikonfigurasi untuk saluran yang ditentukan, pengiriman dilewati.
promptstringMengganti isi prompt bawaan (tidak digabungkan).
includeSystemPromptSectionbooleandefault: trueMenentukan apakah bagian prompt sistem ## Heartbeats milik agen bawaan disisipkan. Atur ke false untuk mempertahankan perilaku runtime heartbeat (interval, pengiriman, HEARTBEAT.md) sekaligus menghilangkan instruksi heartbeat dari prompt sistem agen.
ackMaxCharsnumberdefault: 300Jumlah karakter maksimum yang diizinkan setelah HEARTBEAT_OK sebelum pengiriman.
suppressToolErrorWarningsbooleanJika bernilai true, menyembunyikan payload peringatan kesalahan alat selama eksekusi heartbeat.
timeoutSecondsnumberdefault: 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 tersedia; jika tidak, gunakan interval heartbeat yang dibatasi hingga 600 detik.
activeHoursobjectMembatasi eksekusi heartbeat ke rentang waktu tertentu. Objek berisi 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 diatur; jika tidak, kembali menggunakan 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 tanpa lebar (selalu berada di luar rentang).- Di luar rentang aktif, heartbeat dilewati hingga tick berikutnya yang berada di dalam rentang.
Perilaku pengiriman
Perutean sesi dan target
- Heartbeat dijalankan di sesi utama agen secara bawaan (
agent:<id>:<mainKey>), atauglobalketikasession.scope = "global". Atursessionuntuk menggantinya dengan sesi saluran tertentu (Discord/WhatsApp/dll.). sessionhanya memengaruhi konteks eksekusi; pengiriman dikendalikan olehtargetdanto.- Untuk mengirim ke saluran/penerima tertentu, atur
target+to. Dengantarget: "last", pengiriman menggunakan saluran eksternal terakhir untuk sesi tersebut. - Pengiriman heartbeat mengizinkan target langsung/DM secara bawaan. 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 yang aktif sedang sibuk, heartbeat dilewati dan dicoba lagi nanti.
- Jika
skipWhenBusy: true, subagen berbasis kunci sesi dan jalur bertingkat milik agen ini juga menunda eksekusi heartbeat. Jalur sibuk milik agen lain tidak menunda agen ini. - Jika
targettidak menghasilkan tujuan eksternal, eksekusi tetap berlangsung tetapi tidak ada pesan keluar yang dikirim.
Visibilitas dan perilaku pelewatan
- Jika
showOk,showAlerts, danuseIndicatorsemuanya dinonaktifkan, eksekusi dilewati sejak awal denganreason=alerts-disabled. - Jika hanya pengiriman peringatan yang dinonaktifkan, OpenClaw tetap dapat menjalankan heartbeat, memperbarui stempel waktu tugas yang jatuh tempo, memulihkan stempel waktu sesi menganggur, dan menyembunyikan payload peringatan keluar.
- Jika target heartbeat yang ditentukan mendukung indikator mengetik, OpenClaw menampilkan indikator mengetik selama eksekusi heartbeat aktif. Ini menggunakan target yang sama dengan tujuan keluaran obrolan heartbeat, dan dinonaktifkan oleh
typingMode: "never".
Siklus hidup sesi dan audit
- Balasan khusus heartbeat tidak menjaga sesi tetap aktif. Metadata heartbeat dapat memperbarui baris sesi, tetapi kedaluwarsa karena menganggur menggunakan
lastInteractionAtdari pesan pengguna/saluran nyata terakhir, sedangkan kedaluwarsa harian menggunakansessionStartedAt. - Riwayat UI Kontrol dan WebChat menyembunyikan prompt heartbeat serta 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 ketika sesi utama perlu segera mengetahui sesuatu. Pembangkitan tersebut tidak menjadikan eksekusi heartbeat sebagai tugas latar belakang.
Kontrol visibilitas
Secara bawaan, pengakuan HEARTBEAT_OK disembunyikan sementara konten peringatan dikirim. Anda dapat menyesuaikannya per saluran atau per akun:
channels: defaults: heartbeat: showOk: false # Sembunyikan HEARTBEAT_OK (bawaan) showAlerts: true # Tampilkan pesan peringatan (bawaan) useIndicator: true # Pancarkan peristiwa indikator (bawaan) telegram: heartbeat: showOk: true # Tampilkan pengakuan OK di Telegram whatsapp: accounts: work: heartbeat: showAlerts: false # Sembunyikan pengiriman peringatan untuk akun iniPrioritas: per akun → per saluran → bawaan saluran → bawaan internal.
Fungsi setiap flag
showOk: mengirim pengakuanHEARTBEAT_OKketika model mengembalikan balasan yang hanya berisi OK.showAlerts: mengirim konten peringatan ketika model mengembalikan balasan selain OK.useIndicator: memancarkan peristiwa indikator untuk permukaan status UI.
Jika ketiganya bernilai false, OpenClaw melewati eksekusi heartbeat sepenuhnya (tanpa pemanggilan model).
Contoh per saluran dan per akun
channels: defaults: heartbeat: showOk: false showAlerts: true useIndicator: true slack: heartbeat: showOk: true # semua akun Slack accounts: ops: heartbeat: showAlerts: false # sembunyikan peringatan hanya untuk akun ops telegram: heartbeat: showOk: truePola umum
| Tujuan | Konfigurasi |
|---|---|
| Perilaku bawaan (OK senyap, peringatan aktif) | (tidak memerlukan 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 saluran | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (opsional)
Jika terdapat berkas HEARTBEAT.md di ruang kerja, prompt bawaan memberi tahu agen untuk membacanya. Anggap ini sebagai "daftar periksa heartbeat" Anda: ringkas, stabil, dan aman untuk dipertimbangkan setiap 30 menit.
Pada eksekusi normal, HEARTBEAT.md hanya disisipkan ketika panduan heartbeat diaktifkan untuk agen bawaan. Menonaktifkan interval heartbeat dengan 0m atau mengatur includeSystemPromptSection: false akan menghilangkannya dari konteks bootstrap normal.
Pada harness Codex native, konten HEARTBEAT.md tidak disisipkan ke dalam giliran seperti berkas bootstrap lainnya. Jika berkas tersebut ada dan memiliki konten selain spasi kosong, catatan mode kolaborasi heartbeat mengarahkan Codex ke berkas tersebut dan memintanya membacanya sebelum melanjutkan.
Jika HEARTBEAT.md ada tetapi pada dasarnya kosong (hanya baris kosong, komentar Markdown/HTML, judul Markdown seperti # Heading, penanda pagar, atau kerangka daftar periksa kosong), OpenClaw melewati eksekusi heartbeat untuk menghemat pemanggilan API. Pelewatan tersebut dilaporkan sebagai reason=empty-heartbeat-file. Jika berkas tidak ada, heartbeat tetap berjalan dan model memutuskan tindakan yang perlu dilakukan.
Jaga agar tetap ringkas (daftar periksa singkat atau pengingat) untuk menghindari pembengkakan prompt.
Contoh HEARTBEAT.md:
# Daftar periksa heartbeat - Pindai cepat: adakah hal mendesak di kotak masuk?- Jika masih siang, lakukan pemeriksaan singkat jika tidak ada hal lain yang tertunda.- Jika suatu tugas terhambat, catat _apa yang kurang_ dan tanyakan kepada Peter lain kali.Blok tasks:
HEARTBEAT.md juga mendukung blok tasks: terstruktur kecil untuk pemeriksaan berbasis interval di dalam heartbeat itu sendiri.
Contoh:
tasks: - name: inbox-triage interval: 30m prompt: "Periksa email mendesak yang belum dibaca dan tandai apa pun yang sensitif terhadap waktu."- name: calendar-scan interval: 2h prompt: "Periksa rapat mendatang yang memerlukan persiapan atau tindak lanjut." # Instruksi tambahan - Buat peringatan tetap singkat.- Jika tidak ada yang memerlukan perhatian setelah semua tugas yang jatuh tempo, balas HEARTBEAT_OK.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. - Konten non-tugas dalam
HEARTBEAT.mddipertahankan dan ditambahkan sebagai konteks tambahan setelah daftar tugas yang jatuh tempo. - Stempel waktu eksekusi terakhir tugas disimpan dalam status sesi (
heartbeatTaskState), sehingga interval tetap bertahan setelah mulai ulang normal. - Stempel waktu tugas hanya diperbarui setelah eksekusi heartbeat menyelesaikan jalur balasan normalnya. Eksekusi
empty-heartbeat-file/no-tasks-dueyang dilewati tidak menandai tugas sebagai selesai.
Mode tugas berguna ketika Anda ingin satu berkas heartbeat memuat beberapa pemeriksaan berkala tanpa membayar semua pemeriksaan tersebut pada setiap tick.
Dapatkah agen memperbarui HEARTBEAT.md?
Ya—jika Anda memintanya.
HEARTBEAT.md hanyalah berkas biasa di ruang kerja agen, sehingga Anda dapat memberi tahu agen (dalam obrolan normal) seperti:
- "Perbarui
HEARTBEAT.mduntuk menambahkan pemeriksaan kalender harian." - "Tulis ulang
HEARTBEAT.mdagar lebih singkat dan berfokus pada tindak lanjut kotak masuk."
Jika Anda ingin hal ini terjadi secara proaktif, Anda juga dapat menyertakan baris eksplisit dalam prompt heartbeat seperti: "Jika daftar periksa sudah usang, perbarui HEARTBEAT.md dengan daftar yang lebih baik."
Pembangkitan manual (sesuai permintaan)
Gunakan openclaw system event untuk mengantrekan peristiwa sistem dan secara opsional memicu heartbeat langsung:
openclaw system event --text "Check for urgent follow-ups" --mode now| Flag | Deskripsi |
|---|---|
--text <text> |
Teks peristiwa sistem (wajib). |
--mode <mode> |
now menjalankan heartbeat langsung; next-heartbeat (bawaan) menunggu tick terjadwal berikutnya. |
--session-key <sessionKey> |
Menargetkan sesi tertentu untuk peristiwa tersebut; secara bawaan menggunakan sesi utama agen. |
--json |
Menghasilkan JSON. |
Jika tidak ada --session-key yang diberikan dan beberapa agen memiliki heartbeat yang dikonfigurasi, --mode now langsung menjalankan heartbeat untuk setiap agen tersebut.
Kontrol heartbeat terkait dalam grup CLI yang sama:
openclaw system heartbeat last # tampilkan peristiwa heartbeat terakhiropenclaw system heartbeat enable # aktifkan heartbeatopenclaw system heartbeat disable # nonaktifkan heartbeatPengiriman penalaran (opsional)
Secara default, heartbeat hanya mengirim payload "jawaban" akhir.
Jika Anda menginginkan transparansi, aktifkan:
agents.defaults.heartbeat.includeReasoning: true
Saat diaktifkan, heartbeat juga akan mengirim pesan terpisah dengan prefiks Thinking (format yang sama seperti /reasoning on). Ini dapat berguna ketika agen mengelola beberapa sesi/codex dan Anda ingin mengetahui alasan agen memutuskan untuk menghubungi Anda—tetapi fitur ini juga dapat membocorkan lebih banyak detail internal daripada yang Anda inginkan. Sebaiknya tetap nonaktifkan fitur ini dalam obrolan grup.
Kesadaran biaya
Heartbeat menjalankan giliran agen secara penuh. Interval yang lebih pendek menghabiskan lebih banyak token. Untuk mengurangi biaya:
- Gunakan
isolatedSession: trueagar tidak mengirim seluruh riwayat percakapan (~100 ribu token menjadi ~2–5 ribu per proses). - Gunakan
lightContext: trueuntuk membatasi berkas bootstrap hanya padaHEARTBEAT.md. - Tetapkan
modelyang lebih murah (misalnyaollama/llama3.2:1b). - Jaga agar
HEARTBEAT.mdtetap ringkas. - Gunakan
target: "none"jika Anda hanya menginginkan pembaruan status internal.
Konteks meluap setelah heartbeat
Heartbeat mempertahankan model runtime yang ada pada sesi bersama setelah proses selesai. Karena itu, heartbeat yang mengalihkan sesi ke model lokal yang lebih kecil (misalnya model Ollama dengan jendela 32k) dapat membuat model tersebut tetap digunakan untuk giliran sesi utama berikutnya. Jika giliran berikutnya kemudian melaporkan konteks meluap, dan model runtime terakhir sesi cocok dengan heartbeat.model yang dikonfigurasi, pesan pemulihan OpenClaw akan menyebut perembesan model heartbeat sebagai kemungkinan penyebab dan menyarankan perbaikan.
Untuk menghindarinya: gunakan isolatedSession: true untuk menjalankan heartbeat dalam sesi baru (secara opsional dikombinasikan dengan lightContext: true untuk prompt sekecil mungkin), atau pilih model heartbeat dengan jendela konteks yang cukup besar untuk sesi bersama.
Terkait
- Otomatisasi - sekilas tentang semua mekanisme otomatisasi
- Tugas Latar Belakang - cara pekerjaan terpisah dilacak
- Zona Waktu - cara zona waktu memengaruhi penjadwalan heartbeat
- Pemecahan Masalah - men-debug masalah otomatisasi