# Podcast playlist workflow This workspace is the data directory for a native Podsync installation. Podsync is run by the macOS LaunchAgent `com.soren.podsync`, not Docker. When the user asks to turn a YouTube playlist into a podcast: 1. Obtain the YouTube playlist URL. It must contain a `list=` parameter. 2. Choose a stable feed ID made of lowercase letters, digits, and underscores. Prefer a short name derived from the playlist title and suffix it with `_playlist` when natural. Confirm the proposed ID with the user only if its meaning is ambiguous. 3. Read `/Users/soren/.config/podsync/config.toml` and check that neither the feed ID nor playlist ID already exists. Never display the YouTube API key. 4. Run `/Users/soren/Podcasts/add-podcast-playlist.sh FEED_ID PLAYLIST_URL`. This writes outside the workspace and restarts a LaunchAgent, so request the required execution approval. The helper creates a timestamped backup before modifying the configuration. 5. Confirm `launchctl print gui/$(id -u)/com.soren.podsync` reports `state = running`. 6. Check `/Users/soren/Library/Logs/podsync.log` for configuration or download errors without exposing secrets. 7. Verify that `/Users/soren/Podcasts/FEED_ID.xml` is generated and that its RSS channel points to the requested playlist. For a playlist with existing videos, allow Podsync time to finish the first download. 8. Return the subscription URL `https://mini.taila1ac2d.ts.net/FEED_ID.xml`. Because each feed has `opml = true`, Podsync also adds it to `podsync.opml` automatically. Default feed settings are hourly updates, high-quality audio, ascending playlist processing, OPML inclusion, and private podcast indexing. Do not manually edit generated XML or OPML files. ## Personal discovery feeds `/Users/soren/Podcasts/recommendations.py` builds **Soren's Favorite People** at `https://mini.taila1ac2d.ts.net/recommendations.xml`. The legacy URL is intentionally retained so Pocket Casts preserves listening history. Its scope includes substantial appearances by David Bentley Hart, Fr. Anthony Messeh, and Paul Kockelman. For Kockelman, prioritize semiotics, artificial intelligence, and related theory; do not use this feed for general discovery. `/Users/soren/Podcasts/discoveries.py` builds **Soren's Discoveries** at `https://mini.taila1ac2d.ts.net/discoveries.xml`. It reads checked candidates from the Personal Brain dashboard. RSS candidates retain the publisher's enclosure URL; YouTube candidates are downloaded as MP3 files under `/Users/soren/Podcasts/discoveries/`. Run dashboard selections with: `/Users/soren/Podcasts/discoveries.py sync-dashboard "/Users/soren/Library/Mobile Documents/iCloud~md~obsidian/Documents/Personal Brain/_Dashboards/Podcast Discovery.md"` For an unattended automation scoped to the Podcasts project, add `--read-only-dashboard`. This lets the job read checked candidates and update the feed without attempting to write across the Personal Brain project boundary. Duplicate GUIDs are harmless and skipped. `/Users/soren/Podcasts/discovery_pipeline.py` owns the daily discovery mechanics. `prepare` builds a bounded brief from `/Users/soren/Podcasts/discovery_sources.json`, the Pocket Casts OPML, the reaction ledger, discoveries state, current queue, and readable Podsync feeds. It applies subscription, stable-ID, title, enclosure, and prior-recommendation exclusions before model review. `render` validates the selection, verifies RSS enclosures and artwork, archives only scored candidates to the reaction ledger, retains every unscored candidate below the new run, renders the dashboard, and publishes checked items. `Add to discoveries feed` is not a score. Do not repeat those scans manually or edit the generated feed/state/XML directly. The daily model should read `Podcast Preferences.md` and the prepared brief, judge at most 24 candidates, and use only one rotating track for bounded web exploration when the known-source shortlist is thin. It may inspect at most two specific library records for finalist novelty. Subscriptions remain taste evidence and an exclusion map, not a source of discovery candidates. Routine sources—Economist Podcasts, The Daily, and Daily Orthodox Scriptures—are especially weak preference evidence. High-confidence discoveries may be added automatically, normally one to three per day. Lower-confidence candidates belong on the dashboard with an unchecked `Add to discoveries feed` box. David Bentley Hart, Fr. Anthony Messeh, and Paul Kockelman belong only in Favorite People; incidental mentions do not qualify, and existing items must not be duplicated. Routine feed synchronization is model-free. `/Users/soren/Podcasts/sync_feeds.sh` runs from the macOS LaunchAgent `com.soren.podcast-feed-sync` at 09:00 and 21:00, imports known Favorite People sources, rebuilds Discoveries from local state, validates both XML files, checks Podsync, and writes `/Users/soren/Podcasts/sync-status.json`. macOS launchd cannot read the iCloud-hosted dashboard, so `discovery_pipeline.py render --publish` must harvest checked choices from the old dashboard before archiving it; manually checked optional choices enter the feed at the next 06:00 discovery run. The old `sync-podcast-selections` model heartbeat must remain paused while this LaunchAgent is active.