Audits › Controls › Heartbeat and alerts
Connection and operation · control 9 of 21
Heartbeat and alerts: does your trading bot have it?
Does it notify the user (Telegram, email, webhook) when it fails, stops or loses its data feed, and does it expose a heartbeat or health status that can be watched from outside?
Why it matters
A bot that dies silently leaves positions open with nobody knowing.
How to check it in the code
- Search for telegram, webhook, notify, alert, healthcheck, /health, heartbeat.
- Check the alert fires on errors and on shutdown, not only on trades.
- Check whether a health endpoint or a periodic status message exists.
This is what the audit does for every bot in the list, on public code, without installing or running anything. Verdict values: present, partial, absent, not applicable, not verified. See the method.
Results across audited bots
Across 10 audited bots: 4 present, 3 partial, 1 absent, 0 not applicable, 2 not verified.
| Bot | Verdict | Evidence | Note |
|---|---|---|---|
| HKUDS/Vibe-Trading | Not verified | agent/src/live/audit.py fans out a 'live.action' SSE event on every order decision; agent/src/channels/ has Telegram/Discord/DingTalk messaging channels | No explicit heartbeat/health-check endpoint or 'bot is down' alert was confirmed within budget. |
| hummingbot/hummingbot | Present | hummingbot/remote_iface/mqtt.py, class TopicSpecs: HEARTBEATS = '/hb', NOTIFICATIONS = '/notify'; hummingbot/notifier/notifier_base.py | The bot publishes a heartbeat topic and a notification topic over MQTT that can be watched externally. |
| Drakkar-Software/OctoBot | Partial | index_trading.py._send_alert_notification() sends a notification via octobot_services.api.send_notification on each rebalance trigger; telegram_bot.py exposes a /ping command; requirements.txt pins sentry-sdk==2.56.0 for exception tracking. | Event-based alerts and crash reporting to the maintainers (Sentry) exist, but no externally-pollable health/heartbeat endpoint was found for a user's own uptime monitor. |
| freqtrade/freqtrade | Not verified | ||
| jesse-ai/jesse | Partial | jesse/services/notifier.py (notify() queues Telegram/Discord/Slack messages; jesse/services/logger.py calls it on error) + jesse/services/failure.py (sync_publish('exception', …) and sync_publish('unexpectedTermination', …) over redis for the dashboard) | Outbound alerts on error/crash exist, but no externally pollable health/heartbeat endpoint (e.g. a '/health' or '/ping' route) was found in jesse/controllers; monitoring depends on the dashboard being open or on redis pub/sub events. |
| chrisleekr/binance-trading-bot | Present | deploy/README.md step 9; docs/_generated/config/env.md (ADMIN_PORT); docs/concepts/notifiers.md (alive, discovery-health, job-failed rows) | /healthz, /readyz (checks DB+Redis ping) and /metrics are exposed on a separate admin listener (default 127.0.0.1:9100). Notifier categories include a recurring "alive" balance/holdings digest, a "discovery-health" staleness alert, and an account-wide "job-failed" alert for dead-lettered background jobs, sent to Slack/Telegram/webhook. |
| alsk1992/CloddsBot | Present | docs/TELEMETRY.md documents telemetry.getHealth() (healthy/status/uptime) and a Prometheus /metrics endpoint via telemetry.startMetricsServer(9090); dedicated src/alerts/index.ts and src/alerts/realtime.ts modules exist for outbound notifications. | Both an externally-pollable health signal and an outbound alerting module exist. |
| Lumiwealth/lumibot | Partial | docs/AI_AGENT_NOTIFICATIONS.md: native `self.notify(...)` / `self.notifications.configure_telegram(...)` outbound alerting exists, but 'Backtests disable notifications by default' and it must be called explicitly by the strategy author. The only 'heartbeat' hits found (docs/ENV_VARS.md, BACKTESTING_PROGRESS_HEARTBEAT*) are for a backtest progress-bar UI, not a live health/watchdog signal. | |
| YizhiSong/FriesTrader | Absent | Full repo file tree (git/trees/main) has no Telegram/email/webhook code or config. The only documented failure-reporting channel is the Claude Code session's own end-of-run text summary (README Phase A/B prompt templates: 'report the exact conflict/error in your final summary'). | Requires the human to actively open the routine's run history to notice a failure -- no push notification, no external heartbeat/health endpoint. |
| c9s/bbgo | Present | pkg/notifier/slacknotifier, pkg/notifier/telegramnotifier, pkg/interact/* (command bot) | Dedicated Slack and Telegram notifier packages plus an interactive command bot exist for pushing alerts and querying bot status remotely. |
If your bot does not have it
The watchdog enforces daily loss, drawdown, position size and heartbeat limits from outside the bot, with a read-only key, whatever the bot's own code does.