JSJorge Sebastián Soriano ES

Case study · Multi-agent system

IA para Humanos: ten agents that prepare a daily newsletter

A system of ten agents that researches, fact-checks, writes and prepares a daily artificial intelligence newsletter for non-technical readers every morning. It has been running since 31 July 2026, and publishing is always my decision. The newsletter and the explanation are in Spanish.

What it is
Personal project · daily newsletter on Substack
Status
Running since 31/07/2026
My role
Product, design, review of every change and daily operation. Implementation assisted by AI (Claude Code)
Technologies
Python, Pydantic, FastAPI, httpx, pytest, mypy, Docker, Claude Code, Ollama
The ten agents of IA para Humanos, each with a single job
The ten agents, from collection to the person who decides whether to publish.

How it works, on video

How it works: the ten agents one by one (2 min, in Spanish).
The journey of a news story: in, reviewed, corrected and out (1 min 14 s, in Spanish).

The problem

Dozens of AI news stories come out every day and almost all of them are written for people who already know the field. I wanted a daily newsletter in Spanish that picks the three stories that really affect an ordinary person, checks them and explains them in plain language.

Doing it by hand every morning was not sustainable, and a bare language model produced text that sounded machine-made and made unsupported claims. The challenge was to automate it without losing three rules: nothing without a source, nothing that sounds like a machine and nothing that reaches readers without a person deciding.

What it does

Collector17 sourcesCleaning and relevancerules + scoringFact-checkerevery claimWriter ⇄ editoruntil approvedA persondecides whether to publish
  • Collector, tracker and cleaning. Reads 17 sources, follows opinion columns back to the original story and removes duplicates and noise with deterministic rules, without a language model.
  • Relevance and researcher. Scores what matters to an ordinary person, groups coverage of the same event and reads each story in full.
  • Fact-checker. Checks every claim against its source. The writer only receives supported facts.
  • Writer and editor. One writes; the other scores clarity, accuracy, style and accessibility and asks for specific changes until it approves.
  • Lay reader and notes. A reader with no technical background flags what they would not understand; a rewrite is only accepted if it keeps accuracy. Finally, three one-line notes to promote the edition.
  • It starts on its own at 7:30 and leaves a draft on Substack and an email to the editor. The code cannot send anything to subscribers.

Technical decisions

  • A custom orchestrator instead of an agent framework. The flow is fixed: a deterministic orchestrator in plain Python is easier to test and debug and does not tie the system to any provider.
  • Three engines in cascade. Main, backup and a local emergency model. If the local one ends up writing, the edition is held for review.
  • What matters is checked in code: length, formatting, tell-tale phrases of generated text and Substack's character limit are not left to the model.
  • Quality measured separately from the tests. An evaluation with fixed input cases, eight deterministic checks and judges that measure grounding in the sources detects whether a prompt change makes the writing worse.
  • Rules calibrated with production data. The rewrite for comprehension lowered accuracy in 7 of 13 runs; now the most accurate version is always kept.
  • Tests never reach the outside world. After an incident in which the test suite sent a real email, three independent barriers prevent it.

What is shown and with what data

PartIn the demoDetail
Walkthrough in the explanation and the videoRealRun of 22/09/2026, taken from its log.
Overall figuresRealRepository and system telemetry as of 28/09/2026.
Position of each bar in the relevance chartSyntheticCounts per band are real; the position within the band is illustrative.
Code, agent instructions, named sources and media textsNot includedNot published: the page explains what the system does, not how.

Results

60editions generated31/07 to 28/09/2026
392automated testspassing on 28/09/2026
107reviewed changesrepository commits
€0model cost per editionexisting subscription and local model

Generated editions are not published editions: publishing is a manual decision on Substack and is not measured here. A daily edition takes about 16 and a half minutes.

Limitations and next steps

  • Many editions are held back: 22 of 43 in September, mostly because the rewrite lowered accuracy. That is right for the reader but needs more human review; calibrating that tolerance is the next step.
  • There were failures: 9 of 86 runs ended in error, for example when the main engine changed version. The system sends an email and retries once.
  • Publishing depends on an unofficial Substack interface, isolated in a single adapter.
  • It runs on a personal computer with the Windows task scheduler; a container version is ready.

Scenes from the explanation

Frames from the animated explanation, with the real figures of the 22/09/2026 edition. The explanation is in Spanish.

The fact-checker checks every claim against its source
The fact-checker checks every claim against its source
The editor rejects version 1 and asks for specific changes
The editor rejects version 1 and asks for specific changes
The rewrite loses accuracy, so version 2 is kept
The rewrite loses accuracy, so version 2 is kept
Results from 31 July to 28 September 2026
Results from 31 July to 28 September 2026
My role in the project
My role in the project