3.2 KiB
Daily Tech Digest — RSS Feed Aggregator
Script: /root/.hermes/scripts/daily-feed-summary.py
Purpose
Collect from 6 RSS feeds + 2 scraped sites, produce a markdown daily tech digest, optionally email it.
Sources
- RSS: XDA Developers, MakeUseOf, Virtualization HowTo, 9to5Mac, Gizmodo, How-To Geek
- Scraped (no RSS): Top Gear (
topgear.com/car-news) — BROKEN (empty since 2026-07-13), HotHardware (hothardware.com/news) — titles only, no summaries
Cron Environment PATH — ROOT CAUSE & FIX
The script's shebang is #!/usr/bin/env python3. In interactive shells, python3 resolves to /opt/awscli-venv/bin/python3. In the Hermes cron executor, the PATH may be different — python3 may resolve to /usr/bin/python3 (system Python) or fail entirely.
The script only needs feedparser, which is available in both environments:
- apt package (
python3-feedparser):/usr/lib/python3/dist-packages/— available to/usr/bin/python3 - pip install (in
/opt/awscli-venv): available to the venv Python
The error ModuleNotFoundError: No module named 'feedparser' occurred:
- 2026-07-13 at 11:00 AM ET — cron run failed; manual
hermes cron run b360d3ef6a6asucceeded - 2026-07-15 at 11:00 AM ET — same failure;
hermes cron listshowed last successful run as 07-14, next run skipped to 07-16 after failure
Permanent fix: Change the script's shebang to an absolute system Python path — /usr/bin/python3 — which always has python3-feedparser available via apt. This eliminates the PATH ambiguity entirely.
# Verify before changing:
/usr/bin/python3 -c "import feedparser; print('OK')"
# → change shebang line 1 to: #!/usr/bin/python3
To test (simulates stripped cron environment):
env -i PATH="/usr/local/bin:/usr/bin:/bin" HOME=/root /usr/bin/python3 /root/.hermes/scripts/daily-feed-summary.py
Usage
# Print to stdout (for cron capture)
python3 /root/.hermes/scripts/daily-feed-summary.py
# Include email delivery
python3 /root/.hermes/scripts/daily-feed-summary.py --email
Email sends to g@germainebrown.com via mail.germainebrown.com:2525 with STARTTLS. Converts markdown to inline-styled HTML.
Current Cron Status
Hermes cron job b360d3ef6a6a (name: daily-tech-digest), runs daily at 11:00 AM Eastern. Delivers to origin. Agent-mode job (not no-agent) — the script output is passed to the agent for formatting and delivery.
hermes cron list | grep digest # Check status
hermes cron run b360d3ef6a6a # Force a run
Known Issues
- Top Gear scraping broken (since 2026-07-13):
fetch_topgear()returns 0 articles. The HTML parser (TGLinkParser) looks for<a href="/car-news/...">links withtitleattributes — site structure may have changed. - HotHardware titles only:
fetch_hothardware()returns article links but no summaries. The parser extracts link text from<a href="/news/...">tags on the news listing page — these are bare titles without descriptions. - Script shebang uses
env python3: Resolves inconsistently between interactive shell and cron executor. Pinned above under "Cron Environment PATH" with the/usr/bin/python3fix.