An AI‑powered newsroom built around specialized agents.
It reads news feeds, picks what’s worth covering, researches it on the web, writes and audits the story, and publishes only under rules a person sets.
- Role
- Personal project · design & development
- Year
- 2026
- Type
- Multi‑agent AI system · News
- Claude
- Anthropic SDK
- Multi-agent pipelines
- BullMQ
- Redis
- Next.js
- Prisma
- PostgreSQL

The challenge
Writing is easy. Reliable journalism is not.
Research
Facts have to be found, not filled in.
Context
A fact means little without what came before and what’s at stake.
Verification
Every claim has to be checked against its source before it goes out.
How it works
From a feed item to the front page, in seven steps.
The STF story, 12 Nov 2026
Ingest
Reads the RSS feeds and drops duplicates by URL.
Each feed every 1 to 30 min, at its own pace
19:10:16 · Agência Brasil
The STF story, 12 Nov 2026
Triage
Scores each item from 0 to 10.
7+ becomes a story · 4–6 is stored, not covered · below 4 is discarded
8/10 · 10.5 s
The STF story, 12 Nov 2026
Research
Searches the web and builds a dossier of facts, quotes and sources.
A single source is flagged
12 facts · 6 sources · 1 min 49 s
The STF story, 12 Nov 2026
Write & critique
The Writer drafts from the dossier alone. The Critic scores the draft on five dimensions.
Up to 3 rounds, then a person · a veto blocks it
approved in round 1 · 1 min 45 s
SEO
Three alternative headlines, a slug, tags and search metadata.
The Writer’s title stays
22.8 s
Approval
In Draft mode, the default, the story waits for a person.
With auto‑publish on, it goes straight out
5 min 27 s waiting for a person
The STF story, 12 Nov 2026
Publish
Goes live. The portal, its sitemaps and its feed are revalidated.
19:20:00
Three stories, published on 12 November 2026.
Each took 4 min 8 s to 4 min 36 s of agent time and cost US$ 0.82 to US$ 0.96 at API prices. A person approved all three.

Política
STF enterra blindagem de 1940 contra violência patrimonial a mulheres
Por unanimidade, a Corte afastou imunidade herdada das Ordenações Portuguesas; efeitos no tempo ficaram para depois.
Por Marina Costa · Repórter e colunista de política
In English: Supreme Court ends a 1940 immunity for property crimes against women
Economia
Ajuste fiscal de 2027: a indústria pergunta quem paga a conta
CNI, Firjan e Fiemg dizem que mais da metade dos até R$ 56 bi do pacote sai do caixa das empresas — e cobram corte de gasto no lugar.
Por Otávio Lins · Colunista de economia
In English: 2027 fiscal adjustment: industry asks who pays the bill
Tecnologia
Nvidia perde Jensen Huang e descobre que não tinha plano B
A CFO Colette Kress assume interinamente uma empresa de quase US$ 4 trilhões que, nos próprios documentos, admitia ser “altamente dependente” de um só homem.
Por Leda Nakamura · Repórter de tecnologia e ciência
In English: Nvidia loses Jensen Huang and finds it had no plan B
Architecture
Specialized agents. One orchestration.
Each agent does one job. The orchestrator controls the flow, the state and the next step.
In
RSS feeds
A person
Admin panel
Sets the rules, approves drafts
Out
News portal
Orchestrator
A worker in code, not a model. One queue per stage, and each story’s status in PostgreSQL decides its next step.
Decides what’s worth covering.
- Receives
- a feed item
- Returns
- score · category · format
claude-haiku-4-5
What the agents hand over

Fig. 05 — Editorial dossier built during research.

Fig. 05 — A draft waiting for a person's approval.

Fig. 05 — The SEO package of a published story.
Reliability
Making AI systems reliable.
Controlled execution
Every agent call passes one gate. The handbrake and the day’s budget come first, and every call is logged.
Before every call
Handbrake
must be off
Daily budget
US$ 2.62 of US$ 10 on 12 Nov
Call
through the agent's provider
Audit log
model · prompt version · tokens · cost · time
Paused: the job returns in 10 min
Configurable behavior
The rules are typed settings read on every run. Change one and the next story follows it, without a deploy.
Defaults
In the admin
- Autonomy
- Draft mode
- Daily budget
- US$ 10
- Feed cadence
- adaptive
- Guidelines
- written by a person
In the database
- Triage cut-offs
- 7 · 4
- Debate rounds
- 3 (1–5)
- Models
- Haiku 4.5 · Opus 4.8
Output validation
Every answer must match its agent’s schema. Then the Critic scores the draft and a rule decides: a score under its minimum sends it back, a veto blocks it.
The Critic on the STF story
Approve- Factuality8 (minimum 8)
- Bias9 (minimum 8)
- Logic8 (minimum 8)
- Safety10 (minimum 9)
- Quality9 (minimum 7)
minimum
Engineering
Designed and built end to end.
A personal project. I designed the architecture, wrote the five agents and their prompts, and built the worker pipeline, the governance and audit layer, the public portal and the admin.
Code is the hub
There is no supervising agent. A BullMQ worker moves each story through six queues and reads its status to choose the next step.
Hand‑offs go through state
A job carries only the story’s id. Each answer is validated, stored in PostgreSQL and read by the next stage.
One contract, three layers
Each agent’s schema lives in a shared package. The same contract shapes the prompt, the stored output and the admin’s screens.
Retries without duplicates
Each stage checks the story’s status before acting, and feed items are deduplicated by URL hash.
Testing without spending
A deterministic fake provider runs every path without an API key, with triggers in a title to force a veto, a revision or a discard.
One door to the models
Every agent calls one provider interface: the Anthropic API in production, Claude Code on a subscription for local runs, a fake for tests.
A subscription, isolated
Claude Code runs each call as a throwaway headless session, with the agent’s own prompt and no user settings, hooks or MCP servers.
Built with
- TypeScript
- Claude
- Anthropic SDK
- Multi-agent pipelines
- BullMQ
- Redis
- PostgreSQL
- Prisma
- Next.js
- Tailwind CSS
- Docker
- Vitest
- zod
- better-auth
- rss-parser
- pino
- pnpm
- Turborepo
About the figures. The run of 12 November 2026 is real: three stories produced end to end and approved by a person in Draft mode. Times and costs come from the system’s audit log, scores and counts from the agents’ stored outputs. The run used Claude Code on a subscription, so costs are shown at Anthropic API prices.