From 448c11f16d79897a77c1d507d79e8ee897192aae Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Sat, 9 May 2026 13:34:19 -0700 Subject: [PATCH] fix(telegram): default notifications to 'important' (silence intermediate) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per-tool-call push notifications on Telegram are noisy enough that 'all' is the wrong default — long agent runs spam the user's notification shade with status messages they didn't ask to be pinged about. Final responses, approval prompts, and slash confirmations still notify; intermediate progress, streaming, and tool-progress messages now deliver silently via disable_notification. Users who want the legacy behavior can opt back in with: display: platforms: telegram: notifications: all or HERMES_TELEGRAM_NOTIFICATIONS=all. --- gateway/platforms/telegram.py | 9 ++++++--- gateway/run.py | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gateway/platforms/telegram.py b/gateway/platforms/telegram.py index fccdca40148..9bae59a3497 100644 --- a/gateway/platforms/telegram.py +++ b/gateway/platforms/telegram.py @@ -320,11 +320,14 @@ class TelegramAdapter(BasePlatformAdapter): # and any other slash-confirm prompts; see GatewayRunner._request_slash_confirm). self._slash_confirm_state: Dict[str, str] = {} # Notification mode for message sends. - # "all" — every message triggers a push notification (default). # "important" — only final responses, approvals, and slash confirmations # trigger notifications; tool progress, streaming, status # messages are delivered silently via disable_notification. - self._notifications_mode: str = "all" + # This is the default — Telegram users found per-tool-call + # push notifications too noisy. + # "all" — every message triggers a push notification (legacy + # behavior; opt-in via display.platforms.telegram.notifications). + self._notifications_mode: str = "important" def _notification_kwargs( self, metadata: Optional[Dict[str, Any]] @@ -335,7 +338,7 @@ class TelegramAdapter(BasePlatformAdapter): (disable_notification=True) unless the caller explicitly requests a notification by setting ``metadata["notify"] = True``. """ - if getattr(self, "_notifications_mode", "all") != "important": + if getattr(self, "_notifications_mode", "important") != "important": return {} if (metadata or {}).get("notify"): return {} diff --git a/gateway/run.py b/gateway/run.py index 32549cefd50..597bef8edd0 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -4662,14 +4662,14 @@ class GatewayRunner: _notify_mode = str(_raw).strip().lower() except Exception: pass - _notify_mode = _notify_mode or "all" + _notify_mode = _notify_mode or "important" if _notify_mode not in ("all", "important"): logger.warning( "Unknown telegram notifications mode '%s', " - "defaulting to 'all' (valid: all, important)", + "defaulting to 'important' (valid: all, important)", _notify_mode, ) - _notify_mode = "all" + _notify_mode = "important" adapter._notifications_mode = _notify_mode return adapter