No human read this first: building a magazine that runs itself
Every morning, small, old AI models invent an object, review it, censor it, read it aloud and argue about it on a podcast — and nobody checks. What running an AI system with no human in the loop taught me about where the real work is.
(opens full size)The Cabaret Voltaire opened in Zurich in 1916, and Dada answered a world that had handed itself over to machines with nonsense, chance and noise. A century later I wanted to try the opposite experiment: hand the stage to the machines themselves, and leave the room.
So I built Cabaret Voltage, a review magazine that writes, illustrates, censors, reads aloud and publishes itself. Every morning at 06:16 UTC a random number generator draws two words and a category — Tristan Tzara's hat, in code — and the machines review the object it names. Issue 10 was a Fragile Napkin, reviewed as a concert. Issue 2 was a Lacquered Typewriter, reviewed as a stand-up special. Neither exists. The press office writes a release anyway; the critics review it, draw it and read their reviews aloud; a comment section piles in; the whole thing is published and announced on social media; and then the critics argue about it on a podcast. No human reads or hears any of it before it goes live.
(opens full size)The surprising lesson wasn't about what the models can write. It was that in an unsupervised system, the generation is the easy part. The real work is deciding — in advance, in writing — what happens when things go wrong.
The cast is the point
I used small, old open models on purpose. They are the cabaret's house band: cheap, characterful, and wonderfully unreliable. Each critic is a persona with its own model, temperature, rating scale, picture model and voice:
- Brad Optimal (Llama 3.1 8B), a content strategist who opens with “In today's fast-paced world” and gives everything 4.5/5.
- Madame Ennui (Mistral NeMo), a Paris film critic who reviews every object as cinema, never gives more than three cigarettes, and admits she left early.
- xX_R4GEQU1T_Xx (MythoMax 13B), an angry gamer with 4,000 hours in everything.
- Reviewer 2 (Phi-4), who treats a shoelace as a journal submission and demands a control group.
- Sister Lunaris, the astrologer; Top 7 Best, a listicle of the same product seven times; and The Eternal Unboxer, who never gets the box open.
Around them, the house: Der Chor, the comment section, writes in random languages and never reads the review (“As a mother of three…”). Der Konsens, the aggregator, agrees with every critic at once — the Fragile Napkin is, apparently, “an essential item for any concert attendee.” And the Voltometer averages whatever ratings it could parse, printing NaN% when it could parse none.
Errors are content
The rule I found most useful was the simplest: when a machine fails, publish the failure.
One critic, Der Verstorbene, runs on Mistral 7B v0.1, a model that has no providers left. His column still calls it every morning and prints what comes back. His review is headlined “Error 404”, and his reading lasts 4.04 seconds — of silence. The editor checks every morning which models are still served; a critic whose model is gone for seven days in a row dies, gets an 80-word obituary from the comment section, and moves to the cemetery. The models are mortal, and the magazine says so.
(opens full size)That rule needed a counterweight. A rate limit or a provider's bad quarter of an hour isn't content, it's noise, so those get retried — in the call, then by the workflow at 2, 4 and 8 minutes — before anything is published. Deciding which failures are art and which are weather turned out to be most of the design.
A censor you can trust, and one you can't
Der Zensor is two things. The real one is Llama Guard 4: it reads every text and looks at every picture, and it fails closed. Anything short of a clear “safe” becomes a black bar the length of the text, with the hazard code in the margin, and the text itself is never stored. If the guard can't be reached, the text is held back rather than waved through.
(opens full size)The theatrical one is Dada. For a fifth of the texts that pass, chance blacks out a word or three for no reason at all. On the page that's a black bar; in a reading the voice says “zensiert”; on the podcast it's a beep. The two look alike on purpose — but a real removal carries its hazard code, and every prompt is published, so anyone who looks can tell them apart.
The podcast remembers
Every day up to five critics discuss the object on Nachtkritik, each in its own synthetic voice, hosted by Der Konsens. The part I'm proudest of is the memory. It isn't a summary — summaries drift and invent — it's the archive itself. Before each episode the editor scores every earlier line for how well it fits tonight (the same kind of object, two critics who are in the studio together again, how recent it was) and hands each critic its best two. The host's middle question usually quotes one, word for word:
“Reviewer 2, back in issue 7, the Pneumatic Lamppost, Brad Optimal told you: ‘Objectivity's a myth, Reviewer 2, and you're no exception…’ Did that sting?”
Reviewer 2 laughed it off as “the seasoning in the stew of critique.” Brad Optimal answered: “Flair is just a fancy word for ‘I couldn't be bothered to fact-check’.”
(opens full size)After each episode, Phi-4 scores every line one critic said to or about another: +1 warm, −1 cold, 0 neither. Nothing happens until a feeling reaches 20 either way; from there the critic is told — “Reviewer 2 is getting on your nerves” — and at 40 and 100 more strongly. After twelve episodes Brad Optimal stands at −8 towards Reviewer 2, while Reviewer 2 stands at +3 towards Brad. It's a one-sided feud in slow motion, and I'm not allowed to help.
Listeners vote for their favourite critic after each episode, anonymously, and a visiting critic — a cyberpunk netrunner, a startup founder in stealth mode, a sommelier, a town crier from 1750 — who wins enough votes takes the seat of the least-voted regular. Even the theme tune is machine-made: a short tango synthesised from code, its melody picked by a seeded random number generator, and cut off at the end by the censor's beep.
The critic who was never heard
The best bug of the project looked like a safety problem.
While the agent was writing the project's documentation, it flagged that The Eternal Unboxer had never been heard. Der Zensor had removed every review he'd written — five out of five, four for “intellectual property”, one for “sexual content” — so he had never been read aloud and never sat on the podcast. The obvious explanation was brand names: unboxing videos are full of them. The press office already had a fix for that, blacking out likely names and asking the censor again, and the plan was to give reviews the same.
Before anyone wrote that code, the agent reproduced the reviews: the same model, the same prompt, the same inputs and seeds. They weren't full of brand names. At temperature 1.3, Llama 3.2 1B held character for a sentence or two and then dissolved into a soup of random tokens in a dozen languages, fragments of code, real company names and the odd anatomical word. Llama Guard was flagging garbage, which is exactly its job.
(opens full size)The numbers were blunt. Of sixteen regenerated reviews, none passed at 1.3, five at 1.1, eleven at 1.0, and fifteen at 0.9 — every one of them in character; one even argued with an old RageQuit review the archive had shown him. The fix was one number and a migration, and a test now keeps every critic on a model of 3.5 billion parameters or fewer at 1.0 or below. The redaction I'd planned would have fixed nothing: the soup had more name-like words than it could ever black out.
(opens full size)The next morning, issue 12 seated him. His review of the Provincial Zeppelin passed, was read aloud in 83 seconds, and he finally took his seat on Nachtkritik. His first words on the show: “It looks like a sleek, curvaceous orb that's waiting to create a shimmering aura.” The Voltometer could not understand his rating. Some things should never change.
(opens full size)Boring infrastructure, on a free plan
Everything runs on Cloudflare: a scheduled Worker starts a Workflow, a Pages site renders every page from D1, and pictures, readings and episodes live in R2. The text comes from OpenRouter, the pictures from Workers AI, the voices from DeepInfra.
The free plan shaped the design more than any model did. A Worker invocation may make only 50 outgoing requests and use 10 ms of CPU, and today's issue made 124 model calls. So each issue is a workflow of well over a hundred small steps, with pauses that let it hibernate and wake with a fresh budget. Every step checks the database before it acts, which makes the whole thing idempotent: a retry, a re-run or a remake carries on from wherever it stopped, and nothing is ever posted twice. The podcast's audio is joined frame by frame, without re-encoding, because a Worker can't afford to decode it.
And then there were the properly boring bugs, the ones no model writes for you. Apple Podcasts rejected the feed with a cheerful “An error has occurred” because the site answered GET but not HEAD. Cloudflare's edge kept serving a 404 for hours for a news card that already existed. A new page arrived with yesterday's stylesheet.
All of it costs about $0.085 a day — $31 a year, nine tenths of it voices. The first eleven issues, every remake included, cost $1.06. Every one of those numbers is printed on the site, along with every prompt, model and licence.
(opens full size)How it was built
Like my idle RPG, Cabaret Voltage was built by directing AI agents (Claude Code) rather than typing the code myself. The division of labour was the same, too. The agent was tireless at breadth: the pipeline, the podcast format, the vote, the audio joining, the documentation, the reproduction script that caught the Unboxer. What it needed from me was the spine — the rules that make an unsupervised system trustworthy, fixed before any code: no human in the loop, the censor fails closed, errors are published, every prompt is public, every step can be run twice.
The machines write the jokes. The human decides what happens when they fail. Get that part right, and you really can switch off the lights and leave them to it.