← Files RiversideARCHIVED FILE

skills/podcast-hosting/SKILL.md

5.22 KB · Oct 8, 2026 · 12:02 UTC

↓ Download file

See the change to this file →

---
name: podcast-hosting
description: Use when the user wants to browse or manage a Riverside hosted podcast, create or update an episode, change podcast artwork, distribute a show, or read podcast download analytics. For video edits use video-editing; for clips posted to social accounts use social-publishing.
---

# Podcast hosting

Manage hosted shows and episodes through the `hosting_` tools on the same
Riverside connection. Read the current tool schema before each call; schemas,
`hosting_get_hosting_config`, and `hosting_get_podcast_guidelines` govern valid
values and prerequisites. A missing tool is unavailable in this connection.

## Resolve the show and source

Use `hosting_get_user_context` to establish the connected account. Browse with
`hosting_list_podcasts` and `hosting_list_episodes`; inspect selected objects
with `hosting_get_podcast` and `hosting_get_episode`. Page according to the
current schemas. Ask the user to choose when several shows or episodes fit.

Podcast and episode IDs are UUIDs. Studio identifiers are not interchangeable:
`hosting_create_podcast` takes the studio **slug**, while
`hosting_list_podcasts` takes the studio **id**. Resolve both from
`platform_list_studios` or `platform_get_studio`; keep their field names.

Episode creation takes exactly one source:

- `sessionId`: the recording session ID. The hosting schema identifies the
  `id` returned by `platform_list_recordings` or `platform_get_recording` as
  this value; verify the intended recording.
- `idClip`: a verified Riverside clip ID. Do not substitute an edit ID from
  `platform_list_edits`. If the clip ID is unknown, ask the user for the clip
  ID displayed beneath the recording on the Riverside project page.

## Create and update

Before metadata writes, read `hosting_get_hosting_config` and
`hosting_get_podcast_guidelines`. Collect the fields required by the live
schema, including podcast categories and language. Podcast categories are
hosting metadata, independent of the plugin directory's Creativity category.

`hosting_create_podcast` creates a draft. If its optional artwork upload fails,
the show may already exist: preserve the returned podcast ID and retry only
`hosting_upload_cover_art` when requested. Do not create a second show.

Use `hosting_create_episode` for the chosen source and
`hosting_edit_podcast` or `hosting_edit_episode` for requested changes. Preserve
fields the user did not ask to change. For a publication date, resolve the
user's timezone and supply the schema's date and timezone fields; clarify an
ambiguous wall-clock time before writing.

Before publishing, scheduling, changing public metadata, replacing artwork,
or connecting a distribution platform, show the target show/episode and exact
changes and obtain confirmation. Confirmation of draft creation does not
authorize subsequent publication or distribution.

After a write, read the affected podcast or episode. Episode processing can
continue after creation; report the returned state and use bounded status
reads instead of recreating it. Before publishing a new episode, read
`hosting_get_episode` and wait until it is ready. Stop and report processing or
failed instead of sending a publish update. Do not force a processing episode
to ready. After an unknown mutation outcome, reconcile with list/get reads
before considering another write.

## Artwork and distribution

`hosting_upload_cover_art` replaces show artwork.
`hosting_upload_episode_artwork` replaces square episode art or a video
thumbnail; a linked YouTube thumbnail may change as well. Use the current
schema's size, format, and dimension rules. Image sources must be final public
HTTPS URLs; do not send private URLs or credentials, or rely on redirects.

Use `hosting_connect_platform` only for a requested, confirmed destination.
The current workflow requires a nonprivate show and a published episode.
Read live platform guidance: submitting a new show differs from supplying the
URL of an existing show. A YouTube connection requests uploading existing
episodes for the whole show; include that scope in the confirmation before
calling the tool. Its returned authorization URL requires the user to complete
OAuth. Do not treat an authorization URL as a completed connection.

Verify distribution with `hosting_get_platform_links`. An empty
connected-platform field on a podcast alone is not proof of disconnection.
Submission, connection, and a playable episode on the destination are
different outcomes; report only the returned evidence.

There are no exposed hosting operations for deleting a show or episode,
disconnecting a distribution platform, or managing subscribers. Do not invent
them or use a social-account operation as a substitute.

## Analytics

Use `hosting_get_podcast_analytics` or `hosting_get_episode_analytics` for the
requested show, episodes, period, and mode. Read the schema's window and
pagination requirements. Distinguish RSS downloads from YouTube views in the
returned metrics; do not infer unique listeners or subscribers from either.

`hosting_export_podcast_analytics_csv` returns inline CSV text, not a download
URL. Its date window is inclusive in UTC. Respect the live window and response
size bounds; narrow a window that exceeds them and describe the resulting
coverage. Export analytics only when requested.

SHA-256: 1209277b827acbb29a2941b762e564644b45ebf88dc26288bcae572438b2c328