cd /news/ai-agents/the-agenthood-news-digest-now-writes… · home topics ai-agents article
[ARTICLE · art-103703] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

The Agenthood news digest now writes itself

Agenthood has deployed a daily news digest agent that automatically generates release notes using an LLM, validates them against a strict contract, and opens pull requests for human review. The pipeline, which runs via a scheduled GitHub Action, fetches new releases, drafts the digest in the house style, and ensures the agent never pushes directly to main. The first digest covering versions v3.13.0–v3.13.6 is now live.

read4 min views5 publishedAug 19, 2026

Every Agenthood release used to end with the same chore: read the changelog, summarize what actually changed, and write the news post by hand. It was accurate, but it did not scale — and it is exactly the kind of task an agent should own.

Today we shipped the daily news digest agent (PR #64). A scheduled GitHub Action fetches new releases, asks an LLM to draft the digest in the house style, validates it against a strict contract, and opens a pull request for review. The first digest is live: Agenthood Release Digest: v3.13.0–v3.13.6.

Here is how it works, where the trust boundaries are, and what our own Reviewer member caught in review.

The pipeline is two new files:

scripts/generate-news-digest.mjs .github/workflows/news-digest.yml

It runs daily at 06:00 UTC (plus manual workflow_dispatch

): content/news/manifest.json

. Nothing new → NOOP

, no PR.deepseek-v4-flash , temperature 0.3, 8,192 max tokens) with the releases formatted as a prompt.build-news-manifest.mjs

enforces. On failure, retry once with the rejection reasons fed back to the model.content/news/whats-new-<date>.md

and regenerate the manifest.news-digest/<date>

, automation

label, always for human review.The script speaks a tiny machine protocol — WROTE <path>

or NOOP <reason>

— so the workflow and tests can assert the outcome without parsing articles. It is idempotent by slug: a re-run on the same day is a no-op.

The one rule that matters most: the agent never pushes to main. The best it can do is open a PR with a label.

The LLM output is untrusted input. Before a single byte reaches the site, the draft must satisfy a strict contract:

Rule Why it exists
title must equal the first # heading
The article can't advertise one thing and say another
date must be exactly the post date
No backdated or future-dated posts
author and summary must be non-empty
No broken front matter
summary ≤ 160 characters
Card truncation on the

title

, author

, summary

If validation fails, the script retries once, feeding the model the exact rejection reasons — "Your draft was rejected for: front matter 'title' does not match the '# ' heading. Please fix these issues…" — and fails loudly if the second attempt is also invalid.

Release bodies are also treated as untrusted: they flow straight into the prompt, so a crafted changelog could try to steer the model. Mitigated by the strict validation, the "do not invent" tone rule, and the human PR gate.

The system prompt encodes the newsroom style as a spec, not a vibe:

Warm, professional, and precise. First-person plural ("We've shipped…"). Confident but measured — no emoji, no exclamation marks, no "game-changing" marketing. Explain what changed and why it matters; prefer concrete details (limits, timeouts, files) over vague praise. Stay accurate to the changelog. Do NOT invent features, fixes, links, or press quotes.

Same ethos as this blog. The first digest reads like a human wrote it — grouped by theme, tables for the release overview, no hype.

The automation itself went through the same review pipeline Agenthood enforces on every PR. Four findings, all legitimate:

Finding The risk The fix
Release list not paginated If the gap since the last post grew past 100 releases, newer ones were silently dropped Pagination loop (≤ 10 pages × 100) that stops at the cutoff
Consecutive runs with an unmerged digest PR Overlapping PRs covering the same window Skip when any news-digest/* PR is open, not just today's
Transient 5xx bypassed the retry A single 503 killed the daily run Retry 5xx with exponential backoff (1s → 2s → 4s)
author not escaped in front matter
A newline or quote could corrupt the YAML Escape it exactly like title and summary

That last one is the pattern we like to point at: the review pipeline caught a real injection-shaped bug in the automation that was automating part of the review process itself. The Society polices its own tools.

Metric Value
Digest tests 17 (80 total in the repo)
LLM attempts per run 2 max (one retry with feedback)
HTTP retries on 5xx 3, exponential backoff
Releases fetched Up to 10 pages × 100
Summary cap 160 characters
Time to first digest Same day the agent merged

The digest agent covers the news page. The natural next step is letting The Herald draft release notes and The Mailman handle cross-posting — the delivery side of the same pipeline.

The news does not write itself. The agent drafts it, the contract gates it, and a human signs it. That is how you automate a newsroom without trusting the autopilot.

── more in #ai-agents 4 stories · sorted by recency
── more on @agenthood 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/the-agenthood-news-d…] indexed:0 read:4min 2026-08-19 ·