One Discord embed every morning that rolls up every automated system into a single glance, so the day starts with one read instead of five. READ-ONLY — it reads local state/logs and the calendar (read scope), never changes anything.
| Section | Source | Shows |
|---|---|---|
| 🔒 System | shared_trading_lib/kill_switch.json |
kill switch ARMED (live) or SAFE (halted) + reason |
| 🔌 Infrastructure | live Robinhood login, :8080 socket, crontab -l |
Robinhood connectivity + buying power, dashboard up, all bot/scanner/watchdog schedules active |
| 🖥️ Host | ~/.local/bin/host-status.sh |
UPS, drive health, disk headroom, pending reboots, host reachability, GPU RTD3 state |
| 💹 Trading | eod_balance.csv, each bot’s state.json, Portfolio 2 state |
last EOD equity (+ change vs prior day), each weekly/0DTE bot’s bias and open/flat status, Portfolio 2 holdings |
| 📅 Today’s Bookings | Google Calendar (reused calendar-automation auth) | today’s real Sniffspot/Swimply reservations with times; buffer blocks counted separately |
| 💾 Backup | ~/backup-projects.log + ~/backup-verify.log |
last night’s backup archive (daily freshness) and last weekly integrity verification |
| 🌐 Domain | ~/domain-monitor.log |
last bwscomputerservice.com health result |
The 🖥️ Host section is a shell-out, not code in this file (added 2026-08-16). All of its
logic lives in ~/.local/bin/host-status.sh, so the infrastructure side can change what it
reports without ever editing morning-briefing.py again. It is wrapped in the same safe()
helper, so a broken collector yields one warning line rather than killing the briefing. Full
detail: Daily Host Status.
The Infrastructure section absorbed the old 6:00 AM daily_checkin.py (retired 2026-07-12): the standalone 6 AM system check is folded in here so the morning is two alerts, not more. Because the briefing runs under the calendar venv (Google libs, no robin_stocks), the live Robinhood probe is shelled out to shared_trading_lib/robinhood_status.py under the antigravity venv (which has robin_stocks + the shared login lock) and returns one JSON line.
Privacy-inbox replies are a planned addition once that monitor script is located on disk (only the KB docs were found on 2026-07-12).
Each section is gathered independently and wrapped: if one source fails (e.g. an expired calendar token, a missing log), that field shows ⚠️ unavailable (...) and the rest of the briefing still sends. A briefing always goes out — it is a start-the-day digest, not a silent-unless-broken alert.
Verified against ~/.config/discord-webhooks/ on 2026-07-12. Four distinct Discord channels; briefing.txt is a second pointer to the stocks channel, so there are 5 webhook files but 4 rooms:
| Room | Webhook file(s) | Channel id | What posts here |
|---|---|---|---|
| Stock alerts | stocks.txt, briefing.txt |
…240710 |
5:30 sentiment/bias alert, 5:45 morning briefing, and all four bots’ trade alerts |
| Calendar automation | calendar.txt (symlink → ~/.config/backup/discord_webhook.txt) |
…103821 |
Sniffspot/Swimply buffer-automation failures (e.g. broken/expired calendar API key) |
| Backup failures | backups.txt |
…542854 |
fires when the newest backup archive is older than ~26 h |
| Domain / cert monitor | domain.txt |
…708624 |
bwscomputerservice.com health/cert check (5:40 daily; silent unless it fails) |
The morning briefing itself is the only always-sends item; the sentiment alert also always sends; the calendar/backup/domain rooms are alert-on-failure only.
…/calendar-automation/.venv/bin/python. The calendar token is kept fresh by the every-15-min buffer automation, so the briefing rides on an always-current token./home/aztechguy/.local/bin/morning-briefing.py/home/aztechguy/morning-briefing.log~/.config/discord-webhooks/briefing.txt, which currently points to the same channel as stocks.txt (webhook id …240710) — i.e. the briefing posts into the stock-alerts room by design, alongside the 5:30 sentiment alert. This is the settled layout, not a placeholder; if you later want the digest in its own channel, repoint briefing.txt at a new webhook.5:30 sentiment → 5:40 domain check (silent unless fail) → 5:45 briefing./home/aztechguy/Projects/calendar-automation/.venv/bin/python /home/aztechguy/.local/bin/morning-briefing.pyVerified end to end: kill switch armed, equity $2,246.92, three options bots flat with their biases, Portfolio 2 holding TQQQ, two real Sniffspot bookings (Rachel L. 08:30, Yessenia D. 10:00) plus 4 auto-added buffers, backup archive verified, domain check pending its first scheduled run. Embed delivered to Discord.