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).
Örnek yapılandırma:
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
// activeHours: { start: "08:00", end: "24:00" },
// includeReasoning: true, // optional: send separate `Reasoning:` message too
},
},
},
}
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).
Heartbeat’in çok spesifik bir şey yapmasını istiyorsanız (ör. “check Gmail PubSub
stats” veya “verify gateway health”), 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 dışında, mesajın başında/sonunda bulunan başıboş HEARTBEAT_OK çıkarılır
ve kaydedilir; yalnızca HEARTBEAT_OK olan bir mesaj düşürülür.
Yapılandırma¶
{
agents: {
defaults: {
heartbeat: {
every: "30m", // default: 30m (0m disables)
model: "anthropic/claude-opus-4-6",
includeReasoning: false, // default: false (deliver separate Reasoning: message when available)
target: "last", // last | none | <channel id> (core or plugin, e.g. "bluebubbles")
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.",
ackMaxChars: 300, // max chars allowed after HEARTBEAT_OK
},
},
},
}
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 bir agents.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.
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
},
},
list: [
{ id: "main", default: true },
{
id: "ops",
heartbeat: {
every: "1h",
target: "whatsapp",
to: "+15551234567",
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.",
},
},
],
},
}
Aktif saatler örneği¶
Belirli bir saat diliminde heartbeat’leri mesai saatleriyle sınırlayın:
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
activeHours: {
start: "09:00",
end: "22:00",
timezone: "America/New_York", // optional; uses your userTimezone if set, otherwise host tz
},
},
},
},
}
Bu pencerenin dışında (Doğu saatiyle 09:00’dan önce veya 22:00’den sonra) heartbeat’ler atlanır. Pencere içindeki bir sonraki planlı tetikleme normal şekilde çalışır.
Çoklu hesap örneği¶
Telegram gibi çoklu hesaplı kanallarda belirli bir hesabı hedeflemek için
accountId kullanın:
{
agents: {
list: [
{
id: "ops",
heartbeat: {
every: "1h",
target: "telegram",
to: "12345678",
accountId: "ops-bot",
},
},
],
},
channels: {
telegram: {
accounts: {
"ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" },
},
},
},
}
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.
İ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:
channels:
defaults:
heartbeat:
showOk: false # Hide HEARTBEAT_OK (default)
showAlerts: true # Show alert messages (default)
useIndicator: true # Emit indicator events (default)
telegram:
heartbeat:
showOk: true # Show OK acknowledgments on Telegram
whatsapp:
accounts:
work:
heartbeat:
showAlerts: false # Suppress alert delivery for this account
Öncelik: hesap başına → kanal başına → kanal varsayılanları → yerleşik varsayılanlar.
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.
Üçü de false ise, OpenClaw heartbeat çalıştırmasını tamamen atlar (model çağrısı yok).
Kanal başına vs hesap başına örnekler¶
channels:
defaults:
heartbeat:
showOk: false
showAlerts: true
useIndicator: true
slack:
heartbeat:
showOk: true # all Slack accounts
accounts:
ops:
heartbeat:
showAlerts: false # suppress alerts for the ops account only
telegram:
heartbeat:
showOk: true
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 bir HEARTBEAT.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:
# Heartbeat checklist
- Quick scan: anything urgent in inboxes?
- If it’s daytime, do a lightweight check-in if nothing else is pending.
- If a task is blocked, write down _what is missing_ and ask Peter next time.
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.”
Bunun proaktif olmasını istiyorsanız, heartbeat isteminize şu gibi açık bir satır da ekleyebilirsiniz: “Kontrol listesi bayatlamışsa, daha iyisiyle HEARTBEAT.md dosyasını güncelle.”
Güvenlik notu: 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:
openclaw system event --text "Check for urgent follow-ups" --mode now
Birden fazla ajan 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
Etkinleştirildiğinde, heartbeat’ler ayrıca 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.