How I Built
The Podcast OS
in Three Weeks
A Portfolio Executive's walkthrough of the Claude Code native production OS for The AI Wage Gap podcast. Drop a Riverside recording in a folder; six agents do the VA work. Show notes, clips, thumbnails, Transistor, YouTube, beehiiv and LinkedIn. From one slash command.
Yuri Kruman
Host, The AI Wage Gap podcast · Jun 2026
marginal cost per episode
/mo Castmagic + Buffer + n8n replaced
human time per episode
subagents in the pipeline
The 30-Second Version
The Podcast Publishing OS is a Claude Code native production system. Each episode is a folder under episodes/ep_NNN/. You drop a Riverside recording into raw/ and run /podcast-build ep_NNN. Six subagents fan out in parallel and write the full content kit: show notes, blog, LinkedIn carousel, tweets, newsletter, YouTube description, titles, vertical clip picks, thumbnails. /podcast-qa runs a 12-dimension review. /podcast-distribute schedules Transistor + YouTube + beehiiv + LinkedIn for next Tuesday 06:00 ET.
The Problem
Solo podcasters paying $120+/mo for Castmagic+Buffer+n8n and still doing 4 hours of VA work per episode.
The Stack
Claude Code (orchestrator) + Node scripts + Anthropic SDK + Transistor + YouTube + beehiiv + LinkedIn + Opus Clip.
What It Doesn't Need
No Castmagic. No Buffer. No n8n. No Make. No VA. No course-platform LMS.
Build Time
Three weeks: one for the agents and orchestration, two for distribution APIs.
If you are a solo podcaster who has ever sworn at Castmagic, fought a Zapier, or paid a VA to do what an agent can do, this build log is for you. The point is not that you should clone podcast-os. The point is that production OS is a folder pattern plus seven prompts, not a SaaS.
Why a Claude Code Native OS, Not n8n
I had been running the AI Wage Gap podcast on the standard stack: Riverside for recording, Castmagic for transcripts and show notes, Buffer for scheduling, ConvertKit for email, manual upload to Transistor and YouTube. Per episode that was:
$120+/mo
Castmagic + Buffer + Riverside + ConvertKit + Opus Clip stack
3-4 hrs
per episode reformatting Castmagic output into Yuri's voice
0
platforms that let me prompt-cache a brand-voice doc
2 days
it takes a bug in Zapier to surface itself
The thing nobody at Castmagic will tell you: it's a Claude wrapper. The whole product is one prompt with a CMS UI on top. You don't need Castmagic. You need Claude with prompt caching on YOUR brand-voice doc.
- 1Claude Code is the orchestrator. Slash commands invoke subagents. Subagents run Node scripts. Node scripts call APIs. The orchestrator is free.
- 2Each episode is a folder. Everything an episode needs (raw, generated, qa, clips) lives in
episodes/ep_NNN/. State transitions are tracked instate.json. - 3Brand voice is prompt-cached. 5-minute TTL cache on the brand-voice doc makes each subagent call ~80% cheaper.
Voice rules are a hard-failing build gate, not a vibe.
Every content file goes through scripts/lib/voice-rules.js before it is written to generated/. Em dashes, Oxford commas and the 18 AI-tell phrases hard-fail the build. The episode does not ship until the voice passes. Without this gate, AI cliches creep in and the brand decays. With this gate, every episode sounds like me at compounding return on a $0.65 cost.
The Stack (and Why Each Piece)
Click each layer for the reasoning.
Orchestrator
Claude Code (slash commands + subagents)
7 slash commands wired in .claude/commands/. 7 subagents in .claude/agents/. settings.json tool-allowlist locks down what each agent can do.
Reasoning
Opus 4.7 + Sonnet 4 + Haiku 4 (per agent)
Show notes, blog, newsletter use Opus (high-stakes long-form). QA, voice humanizer, title judge use Sonnet. Clip metadata + thumbnail brief use Haiku. Right tool for each task. Brand-voice doc cached on every Anthropic call.
Recording
Riverside (local-recording, Co-Creator)
4K + WAV. Local-recording mode means even bad WiFi doesn't ruin the take. Co-Creator cuts fillers and normalizes audio before you download. The OS only consumes the post-Co-Creator master files.
Distribution
Transistor + YouTube + beehiiv + LinkedIn
Transistor: $19/mo flat, REST API for episode upload + scheduling. YouTube: Data API v3 + OAuth refresh token (one-time consent). beehiiv: REST API for newsletter scheduling. LinkedIn: personal-profile API (no native scheduling; cron fires Tuesday 07:00 ET).
Vertical Clips
Opus Clip API (or manual drop)
Opus Clip's enterprise API generates 9:16 vertical clips with auto-captioning. Fallback: drop manually-clipped MP4s + clip_metadata.json into clips/; clip-curator-agent ranks and picks top 5 either way.
Voice Lint
scripts/lib/voice-rules.js
Hard fail on em dash, Oxford comma, AI openers ("certainly", "great question"). Soft warn on "delve", "tapestry", "navigate" (verb), "leverage" (verb), "It's not X, it's Y", "Here's the thing". On hard fail, retry once with stricter prompt. Second fail halts and surfaces.
The Six-Phase Build Sequence
Each phase is ~2-4 days. The voice rules are written BEFORE the first generation agent or you ship em dashes on day one.
The Per-Episode Folder Pattern
Every episode is a self-contained folder under episodes/ep_NNN/. State is a single state.json file. Stages transition: init → raw_ready → building → qa_pending → qa_passed → scheduled → aired.
episodes/ep_001/
state.json // {stage, guest, drop_date, ...}
raw/
master.mp4
master.wav
transcript.json
guest.json
research/
brief.md
generated/
show_notes.md
blog_post.md
linkedin_posts.md
tweets.md
newsletter.md
youtube_description.md
titles.json
thumbnails/01.png 02.png 03.png
clips/
clip_01.mp4 ... clip_NN.mp4
clip_metadata.json
top_5.md
qa/
qa_report.md
build_summary.md
amplify_kit.md
social_queue.json
publish_log.jsonlNo global state. Every artifact for every episode is in one folder. Catastrophic recovery is "copy that folder."
What I'd Do Differently Today
Skip Opus Clip's enterprise API in v1
$29/mo for an API tier was a lot of dev for partial reliability. Manual clipping plus the clip-curator-agent ranking metadata works fine for the first 20 episodes. Add the API later if volume justifies.
Settle YouTube OAuth in week one, not week three
The YouTube refresh-token flow is the most annoying setup in the whole stack. Do it on day 1 while you have patience. Doing it on day 18 when you want to ship is a recipe for skipping YouTube entirely.
Auto-trigger on file drop via PostToolUse hook
A .claude/hooks/settings.json PostToolUse hook can fire /podcast-build the moment a new master.mp4 lands. I shipped without it. Adding it cut another 5 minutes of human time per episode.
Plan for multi-show from commit #1
The single-show assumption is in too many places. Copying the repo for a second show works but is brittle. A shows/{slug}/ dimension would have been a 1-hour decision in week 1, a 1-day refactor in month 6.
Adapt This for YOUR Recurring Long-Form Production
The architecture (folder → voice gate → parallel build → QA → distribute → amplify) is the template for any recurring long-form production pipeline. Five adaptations off the same skeleton:
| Production | Raw Input | Generated Kit | Distribution |
|---|---|---|---|
| YouTube channel | Raw video + transcript | Title, description, chapters, tags, end-card | YouTube + Shorts |
| Webinar series | Recording + slides | Blog recap, LinkedIn carousel, lead magnet | Site + LinkedIn + email |
| Course module | Lecture video + transcript | Lesson, quiz, exercise, slide deck | Maven / Skool |
| Customer case study | Interview recording | Story long-form, sales one-pager, social | Site + sales + LinkedIn |
| AI Wage Gap podcast | Riverside master + transcript | Show notes, blog, newsletter, social, clips, thumbs | Transistor + YT + beehiiv + LinkedIn |
Starter Prompts for Claude / Cursor
If you want your production OS shipping next week, these four prompts get you there.
"Write scripts/init-episode.js (or init-EPISODE_NOUN.js) that scaffolds episodes/ep_NNN/ with subfolders raw/, research/, generated/, clips/, qa/, plus a state.json with {stage: 'init', episode_id, slug, guest, drop_date}. Define the stage enum: init → raw_ready → building → qa_pending → qa_passed → scheduled → aired. Each stage transition appends to episodes.jsonl as a global event log."
"Write prompts/_brand_voice.md as the single source of truth for [HOST] voice: 3-5 sentence essence, 10 verbatim phrases to keep, 18 phrases to ban (em dash, Oxford comma, AI tells). Write scripts/lib/voice-rules.js exporting lint(text) and tryRetryPrompt(violations). Anthropic prompt-cache the brand-voice doc on every call with 5-min TTL. Include a unit test that fails on at least 5 banned-phrase examples."
"Set up .claude/agents/ with 6 subagents for podcast production: notes-agent (show_notes.md + blog_post.md, Opus), amplify-agent (linkedin_posts.md + tweets.md + newsletter.md, Opus), title-judge-agent (Sonnet), voice-humanizer-agent (Sonnet), clip-curator-agent (Sonnet), thumb-agent (Haiku brief + OpenAI gpt-image-1). Set up .claude/commands/podcast-build.md as a fan-out slash command that runs all 6 in parallel against episodes/ep_NNN/raw/. Each agent reads transcript.json; each writes to generated/."
"Write scripts/5-publish-transistor.js, 6-publish-youtube.js and 7-schedule-beehiiv.js. Each takes an episode_id, reads episodes/ep_NNN/, and POSTs to the platform's API with status=scheduled, scheduled_at=next Tuesday 06:00 ET. YouTube needs the OAuth refresh-token flow documented inline. beehiiv reads newsletter.md and sends as scheduled with send_at=Tue 07:30 ET. All three append a line to publish_log.jsonl and update state.json stage to 'scheduled'."
What the Podcast OS Is Not
It is not a recording platform. It does not replace Riverside. It is not a hosting platform; Transistor stores the audio. It is not a VA service; it replaces what a VA would do, but it does not replace your judgment on the Tuesday-morning amplify pass.
What it is: a production OS that lives where you already work — Claude Code, with folders and slash commands. The narrowness is the point. Podcast tools that try to also be the recording, hosting, CRM and CMS become Castmagic. Production OS that does ONE thing — turn a recording into a publishable kit — compounds.
The question is not
"can I publish a podcast?"
The question is:
"What is the marginal cost of MY next episode, and what would it take to drop it under $1 without giving up voice or quality?"
Answer that and you have a folder pattern. The next three weeks are the agents and the distribution. Then it ships every Tuesday at a price you can stop thinking about.
This walkthrough is part of the Portfolio Leverage Co. Build Bench series. For the cohort where we build these together, apply here.
