Kalp Atışı (Gateway)
Heartbeat mi Cron mu? Hangisinin ne zaman kullanılacağına dair rehber için Cron vs Heartbeat bölümüne bakın.Heartbeat, ana oturumda periyodik ajan dönüşleri çalıştırır; böylece model, sizi gereksiz yere mesaj bombardımanına tutmadan dikkat gerektiren konuları gündeme getirebilir. Sorun giderme: /automation/troubleshooting
Hızlı başlangıç (yeni başlayanlar)
- Heartbeat’leri etkin bırakın (varsayılan
30m; Anthropic OAuth/setup-token için1h) veya kendi sıklığınızı ayarlayın. - Ajan çalışma alanında küçük bir
HEARTBEAT.mdkontrol listesi oluşturun (isteğe bağlı ama önerilir). - Heartbeat mesajlarının nereye gideceğine karar verin (varsayılan
target: "last"). - İsteğe bağlı: şeffaflık için heartbeat muhakeme iletimini etkinleştirin.
- İsteğe bağlı: heartbeat’leri yalnızca aktif saatlerle sınırlayın (yerel saat).
Varsayılanlar
- Aralık:
30m(Anthropic OAuth/setup-token algılanan kimlik doğrulama modu olduğunda1h). Küresel olarakagents.defaults.heartbeat.everyveya ajan bazındaagents.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 bir “Heartbeat” bölümü içerir ve çalıştırma dahili olarak işaretlenir.
- Aktif saatler (
heartbeat.activeHours) yapılandırılan saat diliminde kontrol edilir. Pencere dışında heartbeat’ler, pencere içindeki bir sonraki tetiklemeye kadar atlanır.
Heartbeat isteminin amacı
Varsayılan istem kasıtlı olarak geniştir:- Arka plan görevleri: “Consider outstanding tasks” ifadesi, ajanın takipleri (gelen kutusu, takvim, hatırlatıcılar, kuyruktaki işler) gözden geçirmesini ve acil olanları öne çıkarmasını teşvik eder.
- İnsanla kısa yoklama: “Checkup sometimes on your human during day time” ifadesi, ara sıra hafif bir “Bir şeye ihtiyacın var mı?” mesajını teşvik eder; ancak yapılandırılmış yerel saat dilimini kullanarak gece spam’ini önler (bkz. /concepts/timezone).
agents.defaults.heartbeat.prompt (veya
agents.list[].heartbeat.prompt) ile özel bir gövde ayarlayın (aynen gönderilir).
Yanıt sözleşmesi
- Dikkat gerektiren bir şey yoksa
HEARTBEAT_OKile yanıtlayın. - Heartbeat çalıştırmaları sırasında OpenClaw, yanıtın başında veya sonunda
göründüğünde
HEARTBEAT_OK’ü bir onay (ack) olarak kabul eder. Belirteç çıkarılır ve kalan içerik ≤ackMaxChars(varsayılan: 300) ise yanıt düşürülür. HEARTBEAT_OKyanıtın ortasında görünürse özel olarak ele alınmaz.- Uyarılar için
HEARTBEAT_OKeklemeyin; yalnızca uyarı metnini döndürün.
HEARTBEAT_OK çıkarılır
ve kaydedilir; yalnızca HEARTBEAT_OK olan bir mesaj düşürülür.
Yapılandırma
Kapsam ve öncelik
agents.defaults.heartbeatküresel heartbeat davranışını ayarlar.agents.list[].heartbeatbunun üzerine birleştirilir; herhangi bir ajandaheartbeatbloğu varsa yalnızca o ajanlar heartbeat çalıştırır.channels.defaults.heartbeattüm kanallar için görünürlük varsayılanlarını ayarlar.channels.<channel>.heartbeatkanal varsayılanlarını geçersiz kılar.channels.<channel>.accounts.<id>.heartbeat(çoklu hesap kanalları) kanal başına ayarları geçersiz kılar.
Per-agent heartbeats
Herhangi biragents.list[] girdisi bir heartbeat bloğu içeriyorsa,
yalnızca o ajanlar heartbeat çalıştırır. Ajan başına blok,
agents.defaults.heartbeat’in üzerine birleştirilir (paylaşılan varsayılanları bir kez
ayarlayıp ajan bazında geçersiz kılabilirsiniz).
Örnek: iki ajan, yalnızca ikinci ajan heartbeat çalıştırır.
Aktif saatler örneği
Belirli bir saat diliminde heartbeat’leri mesai saatleriyle sınırlayın:Çoklu hesap örneği
Telegram gibi çoklu hesaplı kanallarda belirli bir hesabı hedeflemek içinaccountId kullanın:
Alan notları
every: heartbeat aralığı (süre dizesi; varsayılan birim = dakika).model: heartbeat çalıştırmaları için isteğe bağlı model geçersiz kılma (provider/model).includeReasoning: etkinleştirildiğinde, ayrıReasoning:mesajını da mevcut olduğunda iletir (şekli/reasoning onile aynıdır).session: heartbeat çalıştırmaları için isteğe bağlı oturum anahtarı.main(default): agent main session.- Açık oturum anahtarı (
openclaw sessions --json’den veya sessions CLI üzerinden kopyalayın). - Oturum anahtarı biçimleri: Sessions ve Groups bölümlerine bakın.
target:last(varsayılan): son kullanılan harici kanala iletir.- açık kanal:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: heartbeat’i çalıştırır ancak harici olarak iletmez.
to: isteğe bağlı alıcı geçersiz kılma (kanala özgü kimlik; ör. WhatsApp için E.164 veya Telegram sohbet kimliği).accountId: çoklu hesap 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 iletim atlanır.prompt: varsayılan istem gövdesini geçersiz kılar (birleştirilmez).ackMaxChars: iletimden önceHEARTBEAT_OKsonrasında izin verilen azami karakter sayısı.activeHours: heartbeat çalıştırmalarını bir zaman penceresiyle sınırlar.start(HH:MM, dahil),end(HH:MM, hariç; gün sonu için24:00kabul edilir) ve isteğe bağlıtimezoneiçeren nesne.- Atlanırsa veya
"user"ise: ayarlıysaagents.defaults.userTimezonekullanılır, aksi halde ana makine sistem saat dilimine geri düşer. "local": her zaman ana makine 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üşer. - Aktif pencere dışında heartbeat’ler, pencere içindeki bir sonraki tetiklemeye kadar atlanır.
- Atlanırsa veya
İletim davranışı
- Heartbeat’ler varsayılan olarak ajanın ana oturumunda çalışır (
agent:<id>:<mainKey>), veyasession.scope = "global"olduğundaglobal. Belirli bir kanal oturumuna (Discord/WhatsApp vb.) geçersiz kılmak içinsessionayarlayın. sessionyalnızca çalıştırma bağlamını etkiler; iletimtargetvetotarafından kontrol edilir.- Belirli bir kanal/alıcıya iletmek için
target+toayarlayın.target: "last"ile, iletim o oturum için son harici kanalı kullanır. - Ana kuyruk meşgulse heartbeat atlanır ve daha sonra yeniden denenir.
targetharici bir hedefe çözümlenmezse, çalıştırma yine gerçekleşir ancak giden mesaj gönderilmez.- Yalnızca heartbeat yanıtları oturumu canlı tutmaz; son
updatedAtgeri yüklenir, böylece boşta kalma süresi normal davranır.
Görünürlük denetimleri
Varsayılan olarak,HEARTBEAT_OK onayları bastırılırken uyarı içeriği iletilir. Bunu kanal veya hesap bazında ayarlayabilirsiniz:
Her bayrağın yaptığı
showOk: model yalnızca OK içeren bir yanıt döndürdüğünde birHEARTBEAT_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ı üretir.
Kanal başına vs hesap başına örnekler
Yaygın kalıplar
| 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 } |
| OK’ler yalnızca tek bir kanalda | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (isteğe bağlı)
Çalışma alanında birHEARTBEAT.md dosyası varsa, varsayılan istem ajana onu
okumasını söyler. Bunu “heartbeat kontrol listeniz” gibi düşünün: küçük, stabil
ve her 30 dakikada bir dahil edilmesi güvenli.
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ını
kurtarmak için heartbeat çalıştırmasını atlar.
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:
Ajan HEARTBEAT.md dosyasını güncelleyebilir mi?
Evet — isterseniz.HEARTBEAT.md ajan çalışma alanında sıradan bir dosyadır; bu nedenle ajana
(normal bir sohbette) şuna benzer şeyler söyleyebilirsiniz:
- “
HEARTBEAT.mddosyasını günlük takvim kontrolü ekleyecek şekilde 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 belirteçler) koymayın — istem bağlamının bir parçası olur.
Manuel uyandırma (istek üzerine)
Bir sistem olayı kuyruğa alarak anında bir heartbeat tetikleyebilirsiniz:heartbeat yapılandırmışsa, manuel uyandırma bu ajanların
her birinin heartbeat’ini hemen çalıştırır.
Bir sonraki planlı tetiklemeyi beklemek için --mode next-heartbeat kullanın.
Reasoning delivery (optional)
Varsayılan olarak, heartbeat’ler yalnızca nihai “yanıt” yükünü iletir. Şeffaflık istiyorsanız, şunu etkinleştirin:agents.defaults.heartbeat.includeReasoning: true
Reasoning: önekiyle başlayan ayrı
bir mesaj da iletir (şekli HEARTBEAT_OK ile aynıdır). Bu, ajan birden fazla
oturum/codex yönetirken sizi neden dürttüğünü görmek için yararlı olabilir — ancak
isteyebileceğinizden daha fazla iç ayrıntı da sızdırabilir. Grup sohbetlerinde
kapalı tutmayı tercih edin.
Maliyet farkındalığı
Heartbeat’ler tam ajan dönüşleri çalıştırır. Daha kısa aralıklar daha fazla token harcar.HEARTBEAT.md’u küçük tutun ve yalnızca dahili durum güncellemeleri
istiyorsanız daha ucuz bir model veya target: "none" düşünün.