Featured work · AI systems

AI Newsroom: an agentic system that writes and narrates a daily news brief on its own

A multi-agent system built solo on the Claude Agent SDK. It scouts the day's AI news, fact-checks itself, narrates an episode and emails it. It runs free, on a schedule, with no server.

6 Specialized agents
100% Hands-off operation
$0 Daily running cost
Claude Agent SDK Claude Haiku GitHub Actions Gemini TTS Python

The problem worth solving

AI moves faster than anyone can keep up with, and the people who most need to stay current have the least time to read. The gap isn't access to news. It's time. So I designed around the one slot left in the day: the commute. Eyes busy, hands busy, twenty-odd minutes, already listening to something. That single constraint set the format (audio), the length (short) and the tone (a podcast, not a wall of bullets).


What I built

A team of agents modeled on a real newsroom, built on the Claude Agent SDK with Haiku as the reasoning model to keep daily cost near zero.

Scout
Pulls candidate stories from RSS feeds and decides what's relevant for today's brief.
Editor
Ranks stories, deduplicates, and sets the day's lineup in priority order.
Writer
Drafts each TLDR and the episode intro in the brief's consistent voice.
Fact-checker
Checks every draft against its source. It can reject the Writer's work and demand a second pass. That loop is what makes the output trustworthy enough to actually send.
Producer
Narrates the approved script into audio using Gemini TTS.
Orchestrator
Runs the hand-offs and the revision loop. Coordinates the full pipeline from RSS to inbox.

What makes this a real agentic AI system and not a pipeline wearing the label: the agents make decisions, they call tools, and there's a critique-and-revise loop. The Fact-checker can reject the Writer's work and demand a second pass. That loop is what makes the output trustworthy enough to actually send.

It produces a real artifact every day. A formatted brief plus a narrated audio episode, delivered by email and scheduled free on GitHub Actions.


Where it broke (the honest part)

The AI was the easy part. Scout, Editor, Writer and Fact-checker worked early and worked well. Every real fight was in the glue around the model.

The pattern is the lesson. Almost none of these were the agent logic. The model was the easy twenty percent. The plumbing was the other eighty: cloud quirks, silent failures, file formats. That's the real story of shipping an AI product, and it's the part tutorials never show.

The free voice that worked on my Mac died in the cloud
Microsoft blocks its free edge-tts voice from datacenter IPs, so GitHub's servers were turned away with a 403 error. I moved the whole audio stage to Gemini TTS and traded the Ava voice for Zephyr.
A run reported success and sent nothing
The code was swallowing errors and exiting clean even when a stage failed. I rebuilt the error handling so a real failure shows a red X, because a pipeline you can't trust is worse than no pipeline.
A WAV vs MP3 mismatch
Gemini saves .wav, but the mailer still hunted for the old .mp3. Converting to MP3 fixed it and shrank a 19MB file down to email-friendly size.

The product judgment behind it

A daily AI brief is a crowded category, and being honest about that is part of the work. In May 2026 Spotify shipped the generic version: personalized daily audio briefings, with distribution no solo project can match. That could have killed the idea. Instead it sharpened it.

Once a platform commoditizes the generic version of a feature, you don't win on the generic version. You win by going narrower and deeper than a horizontal tool ever will. I also named the assumption most likely to kill the product, that people will give up their commute music for a work brief, and designed a small two-week pilot with real users to check it, with the success and failure criteria set in advance so I couldn't move the goalposts.


What I learned, and what's next

The sharpest lesson was about where to be brave. In a crowded market the brave move isn't a flashier feature. It's narrowing hard enough that a horizontal tool can't follow, and being willing to let a small pilot kill the idea before you over-invest.

What's next: run that pilot for real. Pick one profession and go deep. Publish the podcast where people already listen: Spotify, Apple Music, YouTube. And A/B test what actually drives listening: length, voice, send time.