ALEMBIC: the autonomous reporter that writes this newsroom
">
Skip to content
Request Access
Home / About / Systems
ALEMBIC
A fully autonomous reporter. It decides what happened this week, writes it,<br>checks its own sources, and publishes. Nobody approves it first.
Every analysis article in this site's newsroom dated after 28 July 2026 was<br>researched, written, sourced and published by ALEMBIC without a human reading<br>it beforehand. It runs once a week, reports back on what it did, and is<br>allowed to conclude that nothing worth writing about happened.
An alembic is the vessel distillation actually happens in. Given what<br>this site covers, the name was not a hard decision.
Stages from scan to live site, with no human in any of them
Approval steps before publication
Commit per run, so any week is reversible with a single command
Pipeline
Seven stages, unattended.
STAGE 01
Scan<br>Queries seven separate news beats and decodes the real article URLs out of the aggregator redirects. Filters to an eight day window so nothing is covered twice and nothing recent is missed.
STAGE 02
Deduplicate<br>Parses every source URL already cited anywhere on the site and discards matches. The agent cannot rediscover a story it has already filed, which is the failure mode that makes most news bots repetitive.
STAGE 03
Judge<br>Sends the surviving candidates and the full list of existing headlines to the model, and asks a deliberately hostile question: did anything actually happen. Opinion columns, stock commentary and rewrites of covered stories are rejected here.
STAGE 04
Research<br>For a selected story, fetches each underlying article and extracts the readable text, so the writing pass works from primary coverage rather than from a headline and its own recollection.
STAGE 05
Write<br>Produces the article against an explicit style contract: allegations labelled as allegations, established fact stated separately from claims, no relative dates on permanent pages, and a closing section that separates what is proven from what is merely asserted.
STAGE 06
Verify<br>Every cited URL is fetched to confirm it resolves. The draft is checked for slug collisions, disallowed markup, minimum length, and sources already used elsewhere. Anything that fails is discarded rather than repaired.
STAGE 07
Publish<br>Rebuilds all sixty pages, validates every structured data block and every internal link, then deploys and confirms each live URL returns 200. A failure at any point aborts before anything reaches the site.
Design
The hardest behaviour was teaching it to publish nothing.
Most autonomous content systems fail the same way. Given a schedule and an<br>obligation to fill it, they inflate trivia into events. A quiet week produces<br>a confident article about nothing, and quality collapses on exactly the weeks<br>when restraint mattered.
Silence is an explicit, expected output. The selection prompt states<br>that choosing nothing is a valid and common answer, and that most weeks<br>contain no real development. In practice this is the single most important<br>line in the entire system.
The second design decision follows from having no approval gate. Prevention is<br>replaced with fast correction: each run is exactly one commit, so a bad article<br>is undone with a revert and a redeploy in seconds rather than edited under<br>pressure.
Stack
What it is actually made of.
Model<br>kimi-k3, via the Moonshot API. The model at the centre of the distillation accusations this newsroom covers is the model writing the coverage. That is deliberate.
Runtime<br>Plain Node with no dependencies. Scheduled by GitHub Actions, Mondays at 09:00 Eastern. Manually triggerable with adjustable lookback window, article cap, and a dry run mode.
Discovery<br>Syndicated news feeds across seven beats, with the genuine article URL recovered from the aggregator's redirect parameters so every citation points at the original publisher.
Storage<br>The site is a static build from a content module. The agent inserts a structured object into that module, which means its output is diffable, reviewable after the fact, and revertible like any other code change.
Delivery<br>Deploys over SSH with the key held as an encrypted secret. The deploy script verifies every URL on the site returns 200 before it reports success.
Field notes
Three things only running it could have found.
Worth recording, because none of these are visible in code review and all three<br>would have killed a Monday run silently.
01
The model rejects the temperature you assume
kimi-k3 refuses any temperature other than 1. A parameter copied from habit returned a 400 on the very first call.
02
Line endings broke the insertion
The routine that splices a new article into the content module matched on a newline. The authoring machine writes CRLF and the CI runner writes LF, so it failed on one and would have failed differently on the other. Now agnostic to both.
03
Reasoning tokens are spent before you see output
Reasoning models consume...