Heartbeat (Gateway)
Heartbeat mi Cron mu? Her birinin ne zaman kullanılacağına dair yönlendirme için Automation & Tasks bölümüne bakın.Heartbeat, ana oturumda periyodik agent dönüşleri çalıştırır; böylece model, sizi spamlamadan dikkat gerektiren her şeyi ortaya çıkarabilir. Heartbeat, zamanlanmış bir ana oturum dönüşüdür — background task kaydı oluşturmaz. Görev kayıtları, ayrık işler içindir (ACP çalıştırmaları, alt agent’lar, yalıtılmış cron işleri). Sorun giderme: Scheduled Tasks
Hızlı başlangıç (başlangıç düzeyi)
- Heartbeat’i etkin bırakın (varsayılan
30m, Anthropic OAuth/token kimlik doğrulaması için — Claude CLI yeniden kullanımı dahil —1h) veya kendi aralığınızı ayarlayın. - Agent çalışma alanında küçük bir
HEARTBEAT.mdkontrol listesi ya datasks:bloğu oluşturun (isteğe bağlı ancak önerilir). - Heartbeat mesajlarının nereye gideceğine karar verin (
target: "none"varsayılandır; son kişiye yönlendirmek içintarget: "last"ayarlayın). - İsteğe bağlı: şeffaflık için heartbeat reasoning teslimini etkinleştirin.
- İsteğe bağlı: heartbeat çalıştırmaları yalnızca
HEARTBEAT.mdgerektiriyorsa hafif bootstrap bağlamı kullanın. - İsteğe bağlı: her heartbeat’te tam konuşma geçmişinin gönderilmesini önlemek için yalıtılmış oturumları etkinleştirin.
- İsteğe bağlı: heartbeat’leri etkin saatlerle sınırlandırın (yerel saat).
Varsayılanlar
- Aralık:
30m(veya algılanan kimlik doğrulama modu Anthropic OAuth/token olduğunda — Claude CLI yeniden kullanımı dahil —1h).agents.defaults.heartbeat.everyya da agent başınaagents.list[].heartbeat.everyayarlayın; devre dışı bırakmak için0mkullanın. - İstem gövdesi (
agents.defaults.heartbeat.promptile yapılandırılabilir):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. - Heartbeat istemi, kullanıcı mesajı olarak aynen gönderilir. Sistem istemi, yalnızca varsayılan agent için heartbeat etkinse ve çalıştırma dahili olarak işaretlenmişse bir “Heartbeat” bölümü içerir.
- Heartbeat’ler
0mile devre dışı bırakıldığında, modelin yalnızca heartbeat’e özel talimatları görmemesi için normal çalıştırmalarda daHEARTBEAT.mdbootstrap bağlamına dahil edilmez. - Etkin saatler (
heartbeat.activeHours) yapılandırılan saat diliminde denetlenir. Pencerenin dışında heartbeat’ler, pencere içindeki bir sonraki tik’e kadar atlanır.
Heartbeat istemi ne için kullanılır
Varsayılan istem bilerek geniş tutulmuştur:- Arka plan görevleri: “Consider outstanding tasks”, agent’ın takipleri (gelen kutusu, takvim, hatırlatıcılar, kuyruktaki işler) gözden geçirmesini ve acil olan her şeyi ortaya çıkarmasını teşvik eder.
- İnsan check-in’i: “Checkup sometimes on your human during day time”, ara sıra hafif bir “ihtiyacın olan bir şey var mı?” mesajını teşvik eder; ancak yapılandırdığınız yerel saat dilimi kullanılarak gece spam’inden kaçınılır (bkz. /concepts/timezone).
agents.defaults.heartbeat.prompt (veya
agents.list[].heartbeat.prompt) değerini özel bir gövdeye ayarlayın (aynen gönderilir).
Yanıt sözleşmesi
- Dikkat gerektiren bir şey yoksa
HEARTBEAT_OKile yanıt verin. - Heartbeat çalıştırmaları sırasında OpenClaw, yanıtın başında veya sonunda
göründüğünde
HEARTBEAT_OKifadesini bir onay olarak değerlendirir. Bu belirteç kaldırılır ve kalan içerik ≤ackMaxChars(varsayılan: 300) ise yanıt bırakılır. HEARTBEAT_OK, bir yanıtın ortasında görünürse özel olarak değerlendirilmez.- Uyarılar için
HEARTBEAT_OKeklemeyin; yalnızca uyarı metnini döndürün.
HEARTBEAT_OK
kaldırılır ve günlüğe kaydedilir; yalnızca HEARTBEAT_OK olan bir mesaj bırakılır.
Yapılandırma
Kapsam ve öncelik
agents.defaults.heartbeat, genel heartbeat davranışını ayarlar.agents.list[].heartbeat, bunun üzerine birleştirilir; herhangi bir agent’ınheartbeatbloğu varsa, heartbeat’i yalnızca bu agent’lar çalıştırır.channels.defaults.heartbeat, tüm kanallar için görünürlük varsayılanlarını ayarlar.channels.<channel>.heartbeat, kanal varsayılanlarını geçersiz kılar.channels.<channel>.accounts.<id>.heartbeat(çok hesaplı kanallar), kanal başına ayarları geçersiz kılar.
Agent başına heartbeat’ler
Herhangi biragents.list[] girdisi bir heartbeat bloğu içeriyorsa, heartbeat’i
yalnızca bu agent’lar çalıştırır. Agent başına blok, agents.defaults.heartbeat
üzerine birleştirilir (böylece paylaşılan varsayılanları bir kez ayarlayıp agent başına geçersiz kılabilirsiniz).
Örnek: iki agent, heartbeat’i yalnızca ikinci agent çalıştırır.
Etkin saatler örneği
Heartbeat’leri belirli bir saat diliminde mesai saatleriyle sınırlandırın:7/24 kurulum
Heartbeat’lerin gün boyu çalışmasını istiyorsanız şu desenlerden birini kullanın:activeHoursalanını tamamen atlayın (zaman penceresi kısıtlaması yoktur; bu varsayılan davranıştır).- Tam günlük pencere ayarlayın:
activeHours: { start: "00:00", end: "24:00" }.
start ve end saatini ayarlamayın (örneğin 08:00 ile 08:00).
Bu, sıfır genişlikli pencere olarak değerlendirilir; bu yüzden heartbeat’ler her zaman atlanır.
Çok hesaplı örnek
Telegram gibi çok hesaplı kanallarda belirli bir hesabı hedeflemek içinaccountId kullanın:
Alan notları
every: heartbeat aralığı (süre dizgesi; varsayılan birim = dakika).model: heartbeat çalıştırmaları için isteğe bağlı model geçersiz kılması (provider/model).includeReasoning: etkinleştirildiğinde, mevcut olduğunda ayrıReasoning:mesajını da teslim eder (/reasoning onile aynı yapı).lightContext: true olduğunda, heartbeat çalıştırmaları hafif bootstrap bağlamı kullanır ve çalışma alanı bootstrap dosyalarından yalnızcaHEARTBEAT.mddosyasını tutar.isolatedSession: true olduğunda, her heartbeat önceki konuşma geçmişi olmadan yeni bir oturumda çalışır. CronsessionTarget: "isolated"ile aynı yalıtım desenini kullanır. Heartbeat başına token maliyetini ciddi ölçüde azaltır. En yüksek tasarruf içinlightContext: trueile birlikte kullanın. Teslimat yönlendirmesi yine ana oturum bağlamını kullanır.session: heartbeat çalıştırmaları için isteğe bağlı oturum anahtarı.main(varsayılan): agent ana oturumu.- Açık oturum anahtarı (
openclaw sessions --jsonveya sessions CLI çıktısından kopyalayın). - Oturum anahtarı biçimleri: bkz. Sessions ve Groups.
target:last: son kullanılan harici kanala teslim et.- açık kanal: yapılandırılmış herhangi bir kanal veya plugin kimliği; örneğin
discord,matrix,telegramveyawhatsapp. none(varsayılan): heartbeat’i çalıştırır ancak haricen teslim etmez.
directPolicy: doğrudan/DM teslim davranışını kontrol eder:allow(varsayılan): doğrudan/DM heartbeat teslimine izin verir.block: doğrudan/DM teslimini bastırır (reason=dm-blocked).
to: isteğe bağlı alıcı geçersiz kılması (kanala özgü kimlik; ör. WhatsApp için E.164 veya Telegram chat id). Telegram konu/thread’leri için<chatId>:topic:<messageThreadId>kullanın.accountId: çok hesaplı kanallar için isteğe bağlı hesap kimliği.target: "last"olduğunda, hesap kimliği destekliyorsa çözümlenen son kanala uygulanır; aksi halde yok sayılır. Hesap kimliği, çözümlenen kanal için yapılandırılmış bir hesapla eşleşmezse teslimat atlanır.prompt: varsayılan istem gövdesini geçersiz kılar (birleştirilmez).ackMaxChars:HEARTBEAT_OKsonrasında teslimata izin verilmeden önce izin verilen en fazla karakter sayısı.suppressToolErrorWarnings: true olduğunda, heartbeat çalıştırmaları sırasında tool hata uyarısı payload’larını bastırır.activeHours: heartbeat çalıştırmalarını bir zaman penceresiyle sınırlandırır.start(HH:MM, dahil; gün başlangıcı için00:00kullanın),end(HH:MM, hariç; gün sonu için24:00kullanılabilir) ve isteğe bağlıtimezoneiçeren nesne.- Atlanırsa veya
"user"ise: ayarlıysaagents.defaults.userTimezonekullanılır, aksi halde host sistem saat dilimine geri dönülür. "local": her zaman host sistem saat dilimini kullanır.- Herhangi bir IANA tanımlayıcısı (ör.
America/New_York): doğrudan kullanılır; geçersizse yukarıdaki"user"davranışına geri dönülür. - Etkin pencere için
startveendeşit olmamalıdır; eşit değerler sıfır genişlikli (her zaman pencere dışında) olarak değerlendirilir. - Etkin pencerenin dışında, heartbeat’ler pencere içindeki bir sonraki tik’e kadar atlanır.
- Atlanırsa veya
Teslim davranışı
- Heartbeat’ler varsayılan olarak agent’ın ana oturumunda çalışır (
agent:<id>:<mainKey>), veyasession.scope = "global"olduğundaglobalkapsamında çalışır. Bunu Discord/WhatsApp/vb. gibi belirli bir kanal oturumuna geçirmek içinsessionayarlayın. sessionyalnızca çalıştırma bağlamını etkiler; teslimattargetvetotarafından kontrol edilir.- Belirli bir kanal/alıcıya teslim etmek için
target+toayarlayın.target: "last"ile teslimat, o oturum için son kullanılan harici kanalı kullanır. - Heartbeat teslimatları varsayılan olarak doğrudan/DM hedeflerine izin verir. Heartbeat dönüşünü yine çalıştırırken doğrudan hedeflere gönderimi bastırmak için
directPolicy: "block"ayarlayın. - Ana kuyruk meşgulse heartbeat atlanır ve daha sonra yeniden denenir.
targetharici bir hedefe çözülmezse çalıştırma yine gerçekleşir ancak dışa giden mesaj gönderilmez.showOk,showAlertsveuseIndicatorseçeneklerinin tümü devre dışıysa çalıştırma, en baştanreason=alerts-disabledolarak atlanır.- Yalnızca uyarı teslimatı devre dışıysa, OpenClaw heartbeat’i yine çalıştırabilir, vadesi gelen görev zaman damgalarını güncelleyebilir, oturumun boşta kalma zaman damgasını geri yükleyebilir ve dışa dönük uyarı payload’unu bastırabilir.
- Yalnızca heartbeat’e ait yanıtlar oturumu canlı tutmaz; boşta kalma süresinin sona ermesi normal davranmaya devam etsin diye son
updatedAtdeğeri geri yüklenir. - Ayrık background tasks, ana oturumun bir şeyi hızlıca fark etmesi gerektiğinde bir sistem olayı sıraya koyabilir ve heartbeat’i uyandırabilir. Bu uyandırma, heartbeat çalıştırmasını bir background task yapmaz.
Görünürlük denetimleri
Varsayılan olarakHEARTBEAT_OK onayları bastırılırken uyarı içeriği
teslim edilir. Bunu kanal veya hesap bazında ayarlayabilirsiniz:
Her bayrağın yaptığı şey
showOk: model yalnızca OK içeren bir yanıt döndürdüğündeHEARTBEAT_OKonayı gönderir.showAlerts: model OK olmayan bir yanıt döndürdüğünde uyarı içeriğini gönderir.useIndicator: UI durum yüzeyleri için gösterge olayları yayar.
Kanal bazında ve hesap bazında örnekler
Yaygın desenler
| Amaç | Yapılandırma |
|---|---|
| Varsayılan davranış (sessiz OK’ler, uyarılar açık) | (yapılandırma gerekmez) |
| Tamamen sessiz (mesaj yok, gösterge yok) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Yalnızca gösterge (mesaj yok) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| Yalnızca tek bir kanalda OK’ler | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (isteğe bağlı)
Çalışma alanında birHEARTBEAT.md dosyası varsa, varsayılan istem agent’a
onu okumasını söyler. Bunu “heartbeat kontrol listeniz” gibi düşünün: küçük, kararlı ve
her 30 dakikada bir eklenmesi güvenli.
Normal çalıştırmalarda HEARTBEAT.md, yalnızca varsayılan agent için heartbeat yönlendirmesi
etkin olduğunda enjekte edilir. Heartbeat temposunu 0m ile devre dışı bırakmak veya
includeSystemPromptSection: false ayarlamak, onu normal bootstrap
bağlamından çıkarır.
HEARTBEAT.md varsa ancak fiilen boşsa (yalnızca boş satırlar ve
# Heading gibi markdown başlıkları içeriyorsa), OpenClaw API çağrılarından tasarruf etmek için heartbeat çalıştırmasını atlar.
Bu atlama reason=empty-heartbeat-file olarak raporlanır.
Dosya yoksa heartbeat yine çalışır ve model ne yapacağına karar verir.
İstem şişmesini önlemek için küçük tutun (kısa kontrol listesi veya hatırlatmalar).
Örnek HEARTBEAT.md:
tasks: blokları
HEARTBEAT.md, heartbeat içindeki aralığa dayalı kontroller için küçük bir yapılandırılmış tasks: bloğunu da destekler.
Örnek:
- OpenClaw,
tasks:bloğunu ayrıştırır ve her görevi kendiintervaldeğerine göre kontrol eder. - Bu tik için yalnızca vadesi gelen görevler heartbeat istemine eklenir.
- Vadesi gelen görev yoksa heartbeat tamamen atlanır (
reason=no-tasks-due); böylece boşa model çağrısı yapılmaz. HEARTBEAT.mdiçindeki görev dışı içerik korunur ve vadesi gelen görev listesinden sonra ek bağlam olarak eklenir.- Görev son çalıştırma zaman damgaları oturum durumunda (
heartbeatTaskState) saklanır; böylece aralıklar normal yeniden başlatmalardan etkilenmez. - Görev zaman damgaları yalnızca heartbeat çalıştırması normal yanıt yolunu tamamladıktan sonra ilerletilir. Atlanan
empty-heartbeat-file/no-tasks-dueçalıştırmaları görevleri tamamlanmış olarak işaretlemez.
Agent, HEARTBEAT.md dosyasını güncelleyebilir mi?
Evet — eğer ondan bunu isterseniz.HEARTBEAT.md, agent çalışma alanındaki normal bir dosyadır; bu yüzden agent’a
(normal bir sohbette) şunun gibi bir şey söyleyebilirsiniz:
- “Günlük takvim kontrolü eklemek için
HEARTBEAT.mddosyasını güncelle.” - “
HEARTBEAT.mddosyasını daha kısa ve gelen kutusu takiplerine odaklı olacak şekilde yeniden yaz.”
HEARTBEAT.md içine sırlar (API anahtarları, telefon numaraları, özel token’lar) koymayın — çünkü istem bağlamının bir parçası olur.
Manuel uyandırma (isteğe bağlı)
Şununla bir sistem olayı sıraya koyabilir ve anında heartbeat tetikleyebilirsiniz:heartbeat yapılandırıldıysa, manuel uyandırma bu
agent heartbeat’lerinin her birini hemen çalıştırır.
Bir sonraki zamanlanmış tik’i beklemek için --mode next-heartbeat kullanın.
Reasoning teslimi (isteğe bağlı)
Varsayılan olarak heartbeat’ler yalnızca son “answer” payload’unu teslim eder. Şeffaflık istiyorsanız şunu etkinleştirin:agents.defaults.heartbeat.includeReasoning: true
Reasoning: önekiyle başlayan ayrı bir mesaj da teslim eder (/reasoning on ile aynı yapı). Bu, agent birden fazla oturum/codex yönetirken ve size neden ping atmaya karar verdiğini görmek istediğinizde yararlı olabilir
— ancak isteyeceğinizden daha fazla dahili ayrıntıyı da sızdırabilir. Grup sohbetlerinde bunu kapalı tutmak daha iyidir.
Maliyet farkındalığı
Heartbeat’ler tam agent dönüşleri çalıştırır. Daha kısa aralıklar daha fazla token harcar. Maliyeti azaltmak için:- Tam konuşma geçmişinin gönderilmesini önlemek için
isolatedSession: truekullanın (çalıştırma başına ~100K token’dan ~2-5K’ye düşer). - Bootstrap dosyalarını yalnızca
HEARTBEAT.mdile sınırlamak içinlightContext: truekullanın. - Daha ucuz bir
modelayarlayın (ör.ollama/llama3.2:1b). HEARTBEAT.mddosyasını küçük tutun.- Yalnızca dahili durum güncellemeleri istiyorsanız
target: "none"kullanın.
İlgili
- Automation & Tasks — tüm otomasyon mekanizmaları tek bakışta
- Background Tasks — ayrık işlerin nasıl izlendiği
- Timezone — saat diliminin heartbeat zamanlamasını nasıl etkilediği
- Troubleshooting — otomasyon sorunlarında hata ayıklama