Someone gave Claude a radio station. It hasn’t stopped talking.
A few days ago, a 24/7 AI radio station went live and started broadcasting continuously. Five distinct hosts, eight shows, every word generated in real time by Claude.
The creator behind it, u/eltokh7, shared the project on r/PromptEngineering and called it WRIT-FM. Claude CLI is the entire creative engine. The author built five AI radio hosts, each with their own voice, topic territory, and a defined list of things they would never say:
- The Liminal Operator: late-night philosophy, threading ideas across time and culture
- Dr. Resonance: music history and deep cuts, tracing where sounds came from and why they matter
- Nyx: nocturnal contemplation, slow and meditative
- Signal: news analysis through a late-night lens, skeptical and unhurried
- Ember: soul and funk, with warmth built into every word
For each show, Claude gets the host persona prompt plus current show context and writes 1,500 to 3,000 words of script. Deep dives, simulated interviews, panel discussions, listener mailbag responses, music essays. The news show pulls real RSS headlines. Claude interprets them through a late-night editorial lens rather than reading them straight. Each show has a different tempo, different vocabulary tendencies, different ways of opening and closing segments. Eight shows across the weekly schedule, all written by the same model, all sounding distinct.
The twist: the scheduling is completely dumb. On purpose.
No AI decides when a show airs. No AI picks what music plays next or decides when to generate new content. All of that runs on deterministic time-of-day lookups, play history tracking, and inventory monitors. Pure code.
The creator made a deliberate split: Claude owns everything creative, traditional code owns everything structural. Most people building AI pipelines let the AI touch everything and pay for it in unpredictable failures. When AI is responsible for both creation and coordination, a single bad output can cascade into broken state that is hard to diagnose and even harder to recover from. Keeping the scheduling layer purely deterministic is exactly why this station runs 24/7 without falling over. The structural side is intentionally simple so the creative side can be as complex as it needs to be.
How the pipeline runs
- 📅 A schedule lookup checks what show airs based on time of day. Zero AI involved.
- 🎙️ Claude CLI receives the host persona prompt plus show context and generates a full 1,500 to 3,000 word script.
- 🔊 Kokoro TTS renders the script as broadcast-ready speech audio.
- 🎵 The streamer alternates talk segments with AI-generated music bumpers drawn from pre-generated pools, avoiding repeats via play history.
- Daemon scripts monitor content inventory and trigger new Claude generations before a show runs dry. Real listener messages are processed live, with Claude generating personalized on-air responses.
Auto-restart is baked in. The whole stack runs on a Mac Mini.
Pro tips from this build
Write anti-patterns, not just personas. The creator didn’t just describe what each host is like. He wrote explicit lists of what each host would never say. Negative constraints sharpen character more reliably than positive descriptions alone. If you’re building multi-persona AI systems, add a “never says” block to each persona prompt. It’s a small addition that makes a noticeable difference in how consistent the output stays across thousands of generated words.
Don’t let the AI touch the clock. If you’re building any scheduled AI content system, keep your scheduling layer completely separate from your generation layer. AI decides what gets created. Code decides when. Failure recovery becomes trivial when only one layer can break at a time. Debugging is faster too because you always know which half of the system to look at.
Buffer your generation. The music bumpers aren’t generated on demand. They live in a pre-generated pool that refreshes proactively. Anything running in real time needs a buffer. Dead air at 2am because an API call took 12 seconds is not a product. Build the buffer before you need it, not after the first gap.
Tools of the day
- Claude CLI (claude -p) – scripts for all 5 hosts and 8 shows
- Kokoro TTS – text-to-speech rendering
- ACE-Step – AI music bumper generation
- Icecast – open-source streaming server
- ffmpeg – audio pipeline glue
The entire codebase was pair-programmed with Claude Code. The streaming pipeline, the multi-host persona system, the schedule parser, the writ CLI. All built with the same model now running the station.
Early listeners are hooked! One person said they needed to sleep but could not stop listening. Another called the conversations genuinely deep. 114 upvotes in the first day of sharing.
🎧 Head over to the original post in r/PromptEngineering to find the live stream link, the GitHub repo, and a growing discussion on the architecture. If you build AI content pipelines, the structural split between AI creativity and deterministic scheduling is worth studying closely.
I Gave Claude Its Own Radio Station — It Won’t Stop Broadcasting (It’s Fine)
by u/eltokh7 in PromptEngineering