An automated AI morning digest: gather RSS, GitHub, Jira and summarize into one message
TL;DR
7am schedule → fetch data (tech RSS, GitHub releases of repos you track, Jira tickets changed yesterday) → dedupe in code → Claude summarizes in 3 tiers (act today / good to know / further reading) → send one message. Build it in n8n or with claude -p + cron.
Every morning a Technical PM typically opens 6–8 tabs — Jira, GitHub, Sentry, Slack, a few tech blogs — just to learn “what needs handling today”. An automated AI digest gathers it all into a single message at 7 am, already sorted by urgency — saving 20–30 minutes a day and reducing the chance of missing something. This article covers source design, the prompt, two implementations (n8n and the command line) and how to improve it over time.
Architecture
Schedule 7:00 Mon–Fri
→ Collect in parallel: RSS · GitHub releases · Jira · Sentry
→ Code: deduplicate, filter to last 24h, trim content
→ LLM: summarise + classify 🔴🟡🔵, with links
→ Send to Telegram / Slack / email
→ Save the digest to a Sheet/Notion for reference
Suggested sources
| Source | Fetched with | Filter |
|---|---|---|
| Blogs / tech news | RSS Read node | Posts in the last 24h, keywords relevant to your stack |
| Releases of repos you use | GitHub API or RSS /releases.atom | New versions, flag “breaking” |
| Tickets that changed status | Jira API (JQL updated >= -1d) | Blocked, overdue, new P1s |
| Production errors | Sentry / log API | New errors or spikes |
| Pull requests | GitHub API | PRs awaiting review > 2 days |
Summary prompt
You are a Technical PM's assistant. From the data below, write a digest of at most 15 lines:
🔴 Handle today (blocked tickets, production errors, breaking changes)
🟡 Good to know (new releases, notable changes, long-waiting PRs)
🔵 Further reading (at most the 3 best links)
Rules:
- Every line has a source link.
- Add no information beyond the data provided.
- If a section is empty, write "None".
{{collected_json}}
The key is a length limit and a fixed structure. A digest longer than one phone screen will soon be ignored.
Option 1: n8n
- Schedule Trigger at 7:00, Mon–Fri.
- Parallel branches: RSS Read, HTTP Request (GitHub, Jira, Sentry).
- Code node: merge, deduplicate, trim each item to title + 200 characters + link.
- An LLM node (Anthropic) with the prompt above.
- A Telegram/Slack node to send; a Google Sheets node to archive.
Option 2: command line + cron
# crontab: 7 am Mon–Fri
0 7 * * 1-5 /opt/digest/collect.sh \
| claude -p "$(cat /opt/digest/prompt.txt)" \
| /opt/digest/send-telegram.sh
collect.sh calls the APIs with curl + jq and outputs compact JSON; claude -p runs Claude Code non-interactively; the last script sends the result via the Telegram Bot API. Advantages: no workflow server needed, easy to keep in Git.
Principles for a useful digest
- Filter with code before the model: cheaper, faster, and better summaries because there’s less noise.
- Always include source links: readers verify in one tap; reduces the risk of misinterpretation.
- Don’t let the AI invent: say “use only the data provided”; empty sections say “None”.
- Keep history: look up “what happened last week” and assess quality over time.
- Fail loudly: if a source errors, still send the digest with “Couldn’t fetch Sentry data” rather than staying silent.
Improve after two weeks
- Ask recipients which lines are useless — drop that source or tighten its filter.
- Was anything 🟡 that should have been 🔴? Add definitions or examples to the prompt.
- Consider role-specific digests: devs get PRs/errors, PMs get tickets/risks, leadership gets a weekly overview.
How to apply it
- Developers: Start with two sources (GitHub + Sentry) and add more. Make
collect.shrunnable on its own for debugging. - Tech Leads: Use the digest as an “async standup” — shorter morning meetings.
- PMs: The digests are great input for weekly reports: feed five daily digests to the AI and have it produce a progress report.
Sources & references
- RSS Read node — n8n Docs
- Run Claude Code programmatically — Claude Code Docs