← ClaudeAtlas

surface-tensionlisted

Use when the user asks to ship the Surface Tension weekly podcast — turns personal independent blog posts surfaced by community vote on bubbles.town into a four-voice call-in radio episode published to its own public RSS feed via st_gather / st_script_plan / st_write and render.py. Skips the standard production interview because defaults are pre-set.
schmug/clodcast · ★ 0 · Data & Documents · score 67
Install: claude install-skill schmug/clodcast
# Surface Tension A weekly call-in radio show in which a **four-voice panel** argues about **personal independent blog posts surfaced by community vote** on [bubbles.town](https://bubbles.town). Sibling to the daily digest and Frontier Commits — same `render.py` production stack, its own web feed, and the only one of the three whose beat is not tech. Two things make it different from both siblings, and both are mechanical rather than aspirational: - **It is a panel, not a narrator.** A segment carries `lines: [{speaker, text}, ...]` (#172) and renders per line into one chapter. Eight chapters, roughly 35–50 speaker turns. - **The friction is assigned.** Who holds which seat, who argues which side, who opens and who closes, and who runs each bit are all decided by the week's seed before any prose exists — the panel analogue of the daily show's `SHAPE_ORDERS`. Each scene is written by an isolated `claude -p` that cannot see its neighbours, so variety cannot be negotiated between writers; it is handed to them. **This show is RSS-first.** Its canonical channel is the public feed, and it ships through `render.py`'s web-only mode (`"ship_mode": "web"`): render → artifact gate → R2 publish → deploy hook → dedup. The R2 publish **is** the ship, so its failure fails the run. ## Layout - `./st_gather.py` — two-source candidate gather (bubbles.town feeds + the OPML "Blogs" category), vote-ranked, metadata only. - `./st_script_plan.py` — the week-seeded assignment layer: roles, sta