rss-digest-to-doc
Daily RSS digest that appends to a growing Google Doc archive instead of just emailing. Each run prepends a new dated section to a single shared Doc (so most-recent appears at the top), and the notification email contains just a link — not the bulk content. Builds a searchable reverse-chronological news archive without cluttering your inbox.
Use case
The existing rss-digest workflow emails a one-shot summary every day. You read it once and lose it. The upgrade: keep the history. A single Doc that grows by one dated section per day becomes a year-long archive you can search with Ctrl-F, share with a team via the Doc's link, and search across all past digests in seconds. The email is now just a 2-line "today's digest is ready" notification with the link.
Cross-platform — uses the python runtime InTouch auto-creates on every OS.
Setup
- Credentials (Credentials view):
-
google-workspace— service-account JSON with domain-wide delegation -claude-api— Anthropic API key (for the summarization step) - Runtime environment (Runtime Environments view):
-
python— auto-created on every OS by InTouch - One-time GCP setup:
- Enable the Google Docs API in your GCP project. The
docs insertcall powering the append needs it; without it the workflow fails on first run with a 403 and an enablement URL in the error message. - Archive Doc (one-time): - Create a new Google Doc to be the running archive (any title, e.g. "RSS Archive — All Feeds"). The workflow inserts new content at the very top of the body each run; older sections push down. You can put your own header/index at the top of the doc — but only above where the workflow inserts (the workflow inserts at index 1, the very first position). - Copy the Doc's ID from the URL.
- Edit
workflow.yaml— replace the four placeholders: -<<RSS_FEED_URLS>>— comma-separated list of feed URLs (e.g.https://hnrss.org/newest?points=100,https://feeds.arstechnica.com/arstechnica/technology-lab) -<<RSS_ARCHIVE_DOC_ID>>— the Doc ID -<<OWNER_PUBLISHER>>— user name for the "digest ready" notification - Schedule the workflow once daily (typical: 7 AM).
Pipeline
- read-feeds —
rss-reader(existing hub tool). Fetches each configured RSS feed, returns entries from the last 24 hours. - ai-summarize —
anthropic(claude-sonnet-4-6). Groups entries by source, picks highlights, produces a markdown digest. No top-level heading — the next step adds the dated header. - append-to-doc —
runtimeenv(python). Prepends a dated section to the archive Doc viagog docs insert --index 1(plain text — gog'sdocs insertdoesn't accept--format markdown; that flag isdocs find-replace-only, confirmed against the bundled gog v0.19.0). Outputs the doc link and a 600-char preview for the email. - email-link —
message. Sends "Today's digest appended to: " plus the preview to the owner user.
Doc structure after a few runs
# Monday, May 10, 2026
Hacker News:
- Article 1 title — https://example.com/1
- Article 2 title — https://example.com/2
Ars Technica:
- ...
---
# Sunday, May 9, 2026
Hacker News:
- ...
---
Newest at top, separator between days. Content goes in as plain text — Doc renders it directly (searchable via Ctrl-F, foldable if you manually use Doc's Heading styles, shareable via a single Doc link). For richer styling (auto-headings, bold, hyperlinks) you'd need a docs find-replace pattern with a template doc instead of docs insert.
Customization
- Doc-per-month or per-week — change the
DOC_IDperiodically to roll into a fresh archive (or write a separate yearly-archive workflow that copies + clears the current Doc on Jan 1). - Summary style — edit the
systemPromptofai-summarize. Common variants: - Terse "headlines only" mode: one line per entry
- Verbose "deep dive" mode: 1-2 paragraph synthesis per source
- Categorized: "tech / business / policy / culture" rather than per-source grouping
- Different AI provider — swap
tool: anthropicforopenai,gemini, orollama. Same prompt works. - Append at the bottom instead of prepending — change
--index 1to omit the flag (defaults to end). Older sections at top, newest at the bottom. - Skip the email entirely — drop the
email-linktask; the Doc is the deliverable. - Multiple archive docs by topic — split the workflow into two: one for tech feeds → tech archive doc, one for business → business archive doc. Same pattern, different IDs.
Differences from rss-digest
rss-digest |
rss-digest-to-doc |
|
|---|---|---|
| Output destination | Email body (digest text) | Google Doc (archived) + email link |
| History | None; gone after you delete the email | Persistent searchable archive |
| Searchability | Email search (limited, single-day) | Ctrl-F across the whole archive |
| Sharing | Forward the email | Share the Doc link with anyone |
| Inbox clutter | Daily growing email thread | One short link per day |
| Runtime cost | 1 AI call + 1 email send | 1 AI call + 1 Doc insert + 1 email send (negligible diff) |
Verified
rss-reader tool, anthropic task, and gog docs insert --index 1 (plain text — docs insert has no --format markdown; that flag is docs find-replace-only) all confirmed against the bundled gog v0.19.0 help output (2026-06-01). The Docs API enablement requirement was hit and documented during coc-generator development; same prerequisite applies here.
Source
See workflow.yaml.