Files
hermes-skills/skills/devops/infrastructure-automation/references/daily-tech-digest.md
T

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 b360d3ef6a6a succeeded
  • 2026-07-15 at 11:00 AM ET — same failure; hermes cron list showed 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 with title attributes — 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/python3 fix.