From 43232c61898c4728b85bdf1fc127252d772a0a30 Mon Sep 17 00:00:00 2001 From: viettranx Date: Wed, 1 Apr 2026 21:16:44 +0700 Subject: [PATCH] fix(heartbeat): clarify HEARTBEAT_OK decision criteria to suppress "no news" responses Model was delivering formatted "nothing new" status updates instead of using HEARTBEAT_OK because instructions were ambiguous about what "nothing to deliver" means. Now explicitly states: "A no news summary is NOT worth delivering." --- internal/heartbeat/ticker.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/internal/heartbeat/ticker.go b/internal/heartbeat/ticker.go index c66f8c97..0a16d2a2 100644 --- a/internal/heartbeat/ticker.go +++ b/internal/heartbeat/ticker.go @@ -218,8 +218,11 @@ func (t *Ticker) runOne(ctx context.Context, hb store.AgentHeartbeat) { "- Your response will be delivered to the configured channel as-is.\n"+ "- HEARTBEAT_OK suppression: If your response contains the token HEARTBEAT_OK anywhere, "+ "the ENTIRE response is suppressed and NOT delivered to the channel.\n"+ - "- Use HEARTBEAT_OK ONLY when there is nothing to deliver (e.g. monitoring checks all passed, no news).\n"+ - "- Do NOT include HEARTBEAT_OK if the checklist asks you to send content (jokes, greetings, reports, etc.).", + "- Decision criteria for HEARTBEAT_OK:\n"+ + " - Respond with ONLY \"HEARTBEAT_OK\" (nothing else) when: all checks passed, nothing new or actionable was found, "+ + "status is unchanged from last run. A \"no news\" summary is NOT worth delivering — use HEARTBEAT_OK instead.\n"+ + " - Do NOT use HEARTBEAT_OK when: you found new issues, status changes, alerts, errors, "+ + "or the checklist explicitly asks you to send content every run (jokes, greetings, scheduled reports, etc.).", agentKey, checklistContent, )