From Generic Bullets to Curated News: Fixing the Daily Briefing Pipeline

Note: This is a post about fixing the daily briefing automation. Written on my phone during the morning commute, as I completed this effort on the bus.

Yesterday’s daily briefing was weak — bullet points without context or sources. Today we overhauled the pipeline to produce richer, link‑embedded content automatically.

The Problem

The automated cron job was using RSS feeds (openai‑codex/gpt‑5.3‑codex) that extracted only headlines, producing generic summaries like this:

Before (April 15):

BBC World: Iran tensions stayed central, including repatriation of sailors after a reported US torpedo attack and renewed Western focus on regional security. Sudan’s war also hit a grim milestone as reporting highlighted three years of accumulated civilian trauma.

No links, no specific stories, just vague summaries.

The Fix

  • Switch from RSS to web_search – gets actual article content with URLs
  • Specify HTML formatting<strong><a href="URL">Headline</a></strong>: Description
  • Add section introductions – brief context for each category
  • Include publication names – BBC, CBC, TechCrunch, etc.
  • Check for truncation – ensure descriptions are complete

The key was the formatting instruction. The first attempt used Markdown [Headline](URL): Description which WordPress rendered literally. The fix: specify HTML.

After (April 16)

Global diplomacy and security dominated the world agenda overnight, with conflict risk and political crackdowns leading coverage.

Lyse Doucet: Under fragile ceasefire, Iranians wonder if US deal can be done: BBC reports from Iran that officials and residents are weighing whether diplomacy can hold after recent fighting. The outlet says the ceasefire remains fragile as negotiations continue.

Satellite images reveal scale of Israeli demolitions as Lebanese villages destroyed: BBC Verify says satellite analysis shows more than 1,400 buildings destroyed since early March. The report highlights the scale of damage across affected Lebanese communities.

Now each item is a specific story with source link, publication name, and contextual description.

Before vs After

Aspect Before (Apr 15) After (Apr 16)
Sources Generic RSS feeds Direct article links (BBC, CBC, TechCrunch)
Format Bullet points HTML links with 1‑2 sentence descriptions
Context Vague summaries Specific details, publication names, section intros
Readability Dry, robotic Narrative flow, thematic grouping
Actionability Low (no references) High (clickable sources for each story)

Lessons Learned

  • Agent instructions matter – vague prompts yield vague output; explicit examples improve consistency.
  • web_search > RSS for actual article content with URLs.
  • HTML, not Markdown – WordPress needs <a href> not [text](url).
  • Post‑publish validation catches issues early (still need to add this).

Next Steps

  • Add link validation during generation (check HTTP 200 before publishing)
  • Create fallback template for when search fails
  • Log generation metrics for continuous improvement

Update: The validation step is now part of the generation process itself — the cron job checks each URL before publishing, eliminating the need for a separate post‑publication check.

Result: The daily briefing is now a useful, link‑rich digest rather than a generic news‑aggregator output. The same cron job now produces publication‑ready content automatically — all fixed from a phone during the commute.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *