Your own AI news feed. It reads the sources, keeps what you care about, and writes it the way you like to read.
No ads. No sponsors. No engagement ranking. One config file, free to run.
That card is live. NewsRing rebuilds it every morning at the same URL.
Read today's full digest → · as Markdown · on my site
Keeping up with AI means skimming forty tabs, most of them press releases, rewritten press releases, and threads about rewritten press releases. Aggregators rank for clicks. Newsletters are written for everyone, which means no one in particular.
NewsRing is the opposite trade. You describe what you care about in plain words. Every morning it reads every source you gave it, keeps the handful of stories that match, and writes them up in the tone you asked for: brief and dry, deep and technical, like a patient teacher, in your language. Then it emails you, and publishes a page you can share.
It is an agent, but a disciplined one. It never browses on its own, never sees a URL it could invent, and every link in your digest points at the real story.
| 📬 A personal digest | 5 to 10 stories picked against your interests, each with a write-up, why it matters to you, and links to the source and the discussion. Plus quick hits. |
| 🖼️ A shareable card | The day's 3 most exciting AI stories for everyone, as a 1200×630 image at a URL that never changes. Put it in your GitHub profile, your site, your team wiki. |
| 🌐 A static site | Every digest, archived, on GitHub Pages, with a stable today.html and a JSON feed other pages can render. |
| 🗂️ A plain archive | One Markdown and one JSON file per day in news/, committed to your repo. Your history, greppable forever. |
You need a GitHub account and a free LLM key. Gemini's free tier works; so do OpenAI, Anthropic, OpenRouter or a local Ollama.
- Fork this repository, then delete the
news/folder andnews_today.md. They are my history, not yours. - Edit
newsring.toml. Write your interests in plain words, set the tone, and pointsite_urlathttps://<you>.github.io/NewsRing/.[profile] interests = """ Robotics and embodied AI, especially open-source hardware. New open-weight models I can run on a single GPU, with what actually changed. """ avoid = "Funding rounds, hype pieces, AI policy without technical substance." [profile.tone] detail = "brief" # brief | standard | deep style = "warm and witty, like a friend who reads everything" language = "English"
- Add secrets in Settings → Secrets and variables → Actions:
CHAT_GEMINI_API_KEYS: one key, or several askey1,key2. NewsRing rotates to the next key when one is rate limited.- For email, optionally:
NEWSRING_EMAIL_TO(a comma-separated list),EMALIA_ADDRESSandEMALIA_PASSWORD(a Gmail app password).
- Turn on Pages: Settings → Pages → Source: GitHub Actions.
- Run it: Actions → Daily digest → Run workflow. After that it runs every morning on its own.
Prefer a server or your laptop? uv sync && uv run newsring run does the same thing. See deployment.
flowchart LR
S[35 sources] --> C[Collect<br/><sub>code</sub>]
H[(news/ history)] --> C
C --> T[Headliner<br/><sub>agent</sub>] --> K[Card]
C --> E[Editor<br/><sub>agent</sub>] --> N[Enrich<br/><sub>code</sub>] --> W[Writer<br/><sub>agent</sub>]
W --> P[Digest] --> O1[Site] & O2[Email] & O3[news/]
K --> O1
- Collect (no model): fetch every source concurrently, drop what is old or already sent, cap each source, merge duplicates across sources.
- Editor: one agent sees every candidate side by side and picks your stories, merging duplicate coverage and preferring primary sources.
- Enrich (no model): fetch the full article for each pick.
- Writer: one agent writes the digest in your voice, from that material only.
- Headliner: one agent picks the day's top stories for everyone, for the card.
Agents return story ids, never URLs; links are joined back in code. A normal day is three model calls, about a minute and a half, and well under a cent. The reasoning, including why NewsRing does not let an agent browse on its own, is in the design doc.
35 free feeds and APIs out of the box: frontier labs (OpenAI, Google, DeepMind, Anthropic, Meta, Mistral, Microsoft), Hacker News, Lobsters, Hugging Face daily papers and trending models, release feeds for vLLM, llama.cpp, Ollama, Transformers, Triton and LangChain, practitioner blogs, and tech press. Any RSS or Atom feed is one config block away. The full list and its quirks →
LLM free tiers rate-limit hard and popular models go "overloaded" at peak hours. NewsRing is built for that:
- Key rotation. Give it several keys; it moves to the next one when a key hits its limit, and stays there.
- Model fallback. List fallback models; an overloaded model is skipped for the rest of the call.
- Cool-down and retry. If everything is limited at once, it waits and tries the whole set again.
| Command | What it does |
|---|---|
newsring run |
Produce and publish today's digest. --dry-run prints it; --no-email skips email; --lookback-hours N sets the window. |
newsring email |
Email the newest archived digest. |
newsring sources |
Check every source, no model calls. |
newsring site |
Republish the site and card from the archive. |
NewsRing is also a field test of railtracks, the agent framework it runs on. Everything that was confusing, missing or surprising while building it is written up in RT_FEEDBACK.md.
Issues and pull requests are welcome, especially new source kinds and tone presets. See CONTRIBUTING.md. If NewsRing saves you some tabs, a ⭐ helps other people find it.


