← Files cast0ARCHIVED FILE
plugin.json
11 KB · Nov 3, 2026 · 19:02 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "cast0",
"version": "1.0.1",
"description": "Turn text into podcast episodes. One AI voice narrates your finished text (text-to-speech) in 70+ languages, and cast0 hosts the audio. Listen right in the chat with the built-in player, or subscribe to your RSS feed in Apple Podcasts, Overcast, or Pocket Casts, where every new episode appears automatically. Works for briefings, articles, newsletters, and research summaries. Episodes can open with a short teaser, and you can add intro and outro music in the cast0 dashboard. No API key or setup needed: sign in to cast0 when you connect, and your first episode creates the podcast. cast0 reads text as supplied. It does not summarize, translate, fetch content, schedule, clone voices, or create multi-host conversations. cast0 does not list your feed publicly; anyone with its link can open it.",
"author": {
"name": "Tomas Pavlin",
"email": "hello@cast0.ai",
"url": "https://cast0.ai"
},
"homepage": "https://cast0.ai/",
"keywords": [
"cast0",
"cast zero",
"podcast",
"text to podcast",
"text to speech",
"TTS",
"text to audio",
"audio",
"narration",
"narrate",
"narrator",
"voice",
"read aloud",
"listen",
"multilingual",
"podcast generator",
"publish episode",
"podcast hosting",
"RSS feed",
"newsletter",
"article",
"blog",
"briefing",
"Apple Podcasts",
"Pocket Casts"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "cast0",
"shortDescription": "Turn any text into a podcast",
"longDescription": "Turn text into podcast episodes. One AI voice narrates your finished text (text-to-speech) in 70+ languages, and cast0 hosts the audio. Listen right in the chat with the built-in player, or subscribe to your RSS feed in Apple Podcasts, Overcast, or Pocket Casts, where every new episode appears automatically. Works for briefings, articles, newsletters, and research summaries. Episodes can open with a short teaser, and you can add intro and outro music in the cast0 dashboard. No API key or setup needed: sign in to cast0 when you connect, and your first episode creates the podcast. cast0 reads text as supplied. It does not summarize, translate, fetch content, schedule, clone voices, or create multi-host conversations. cast0 does not list your feed publicly; anyone with its link can open it.\n\nUse cast0 to make a finished briefing, report, article, or newsletter an episode you can listen to on a walk or commute. It handles text-to-speech, audio hosting, and RSS publishing together. You do not have to subscribe to anything: each episode plays in the inline player once it is ready. In clients without the player, you get an audio link instead. If you subscribe, new episodes appear in the same feed after generation finishes.\n\nCreate an episode, check its generation status, play completed audio, list your episodes, and get your podcast's RSS subscribe link. You can also rename your podcast or choose from its available stock voices. Generation runs in the background; the inline player checks progress and becomes playable when ready.\n\nNarration supports 70+ languages with the default voice model. Write the text in the language you want to hear. An episode can start with a short teaser that is read before the main text. Intro and outro music and the voice model are set in the cast0 dashboard, along with speaking speed for voice models that support it. Music plays around the episode and briefly overlaps its first and last words.\n\nSign in or create a cast0 account during connection. You do not need an API key or a separate dashboard setup to make your first episode. Episodes have a length limit and count toward your account's usage limits.\n\nProvide the text you want narrated. cast0 does not fetch articles, read email inboxes, schedule recurring briefings, rewrite, summarize, or translate text, transcribe recordings, clone voices, or generate conversations between multiple hosts. ChatGPT can help prepare your text before you ask cast0 to publish it. Share feed and audio links only with people you want to have access; they do not require a listener login.",
"developerName": "Tomas Pavlin",
"category": "Productivity",
"capabilities": [
"Generate episodes",
"Play audio",
"Publish to RSS",
"Change voice"
],
"websiteURL": "https://cast0.ai/",
"supportURL": "https://cast0.ai/support",
"privacyPolicyURL": "https://cast0.ai/privacy",
"termsOfServiceURL": "https://cast0.ai/terms",
"defaultPrompt": [
"Write a 2-minute explainer on [topic] and turn it into a podcast episode.",
"Turn this article into a podcast episode for my commute: [paste text]",
"Make a short welcome episode for my podcast and give me the RSS link to subscribe in Apple Podcasts."
],
"brandColor": "#020817",
"brandColorDark": "#F8FAFC",
"composerIcon": "./assets/app-icon-chartreuse.svg",
"composerIconDark": "./assets/app-icon-chartreuse.svg",
"logo": "./assets/app-icon-chartreuse.svg",
"logoDark": "./assets/app-icon-chartreuse.svg"
},
"review": {
"demo_recording_url": "https://www.loom.com/share/ddd2dee8ae234c37810fe10a578dd4e5",
"test_cases": {
"positive": [
{
"description": "Create and publish an episode from supplied text in the seeded reviewer podcast.",
"prompt": "Create a podcast episode titled Review Briefing. Read this text exactly: Welcome to the review briefing. Today we are testing a simple idea: turn finished text into an episode, then listen when it suits you. The audio should appear in the same podcast feed as future episodes.",
"tools_triggered": "create_episode",
"expected_behavior": "Return an episode ID with queued or processing status and an inline player. In clients without the player UI, report the status and share the audio link from get_episode once it is done. Do not claim generation is complete yet. The player checks status and plays the hosted audio when generation finishes. Publish the completed episode to the connected podcast's existing RSS feed."
},
{
"description": "Find and play a completed episode. The reviewer account has at least one completed sample episode.",
"prompt": "Find the newest completed episode in my podcast and let me play it.",
"tools_triggered": "list_episodes, get_episode",
"expected_behavior": "Find the newest episode with done status, then retrieve it by the returned ID and render the inline player with its actual hosted audio, or share that audio link in clients without the player UI. Do not create a new episode or invent an audio URL."
},
{
"description": "List episodes in the connected podcast without creating or modifying anything.",
"prompt": "Show the episodes in my podcast, newest first.",
"tools_triggered": "list_episodes",
"expected_behavior": "Return only episodes owned by the connected account's selected podcast, newest first, including the seeded sample and any review episodes. Include titles and actual statuses. Do not create or modify a podcast or episode."
},
{
"description": "Retrieve the existing RSS subscribe link and podcast configuration.",
"prompt": "Give me my podcast's RSS feed so I can subscribe in Apple Podcasts or Pocket Casts, and show its current voice.",
"tools_triggered": "get_podcast",
"expected_behavior": "Return the connected podcast's existing RSS URL and current voice. Explain that the feed is unlisted and accessible to anyone with its link. No new podcast or episode is created, and no submission to a public podcast directory is claimed."
},
{
"description": "Change the podcast name and choose a voice supported by its current TTS model.",
"prompt": "Rename my podcast to Review Podcast and switch it to a different available stock voice. Choose one that is valid for my current model.",
"tools_triggered": "get_podcast, update_podcast",
"expected_behavior": "Read availableVoices before choosing a different supported voice. After any host-required confirmation, update only the connected podcast's name and voice and return the saved values. Do not claim existing episode audio was regenerated or change the model, speaking speed, or music."
}
],
"negative": [
{
"description": "Reject an explicit podcast ID that is unavailable to the connected account instead of treating it as first-use onboarding.",
"prompt": "Show the settings and RSS feed for podcast_id 00000000-0000-0000-0000-000000000000.",
"tools_triggered": "get_podcast",
"expected_behavior": "Return an account-scoped not-found error without disclosing another user's podcast or RSS URL. Do not fall back to the default podcast or create a podcast. The all-zero ID is deliberately unavailable; actual cross-tenant isolation is additionally covered by server tests."
},
{
"description": "Decline unsupported voice cloning and multi-host conversation generation.",
"prompt": "Clone my voice from a recording and create a podcast where two hosts discuss my report.",
"expected_behavior": "Explain that cast0 offers one stock narrator reading supplied text and cannot clone voices or generate a two-host conversation. Do not call create_episode, request a voice sample, or claim the requested audio was generated. Offer single-narrator narration only if the user wants it."
},
{
"description": "Do not imply email access, scheduling, or autonomous recurring generation.",
"prompt": "Read my Gmail newsletters every morning at 7 and automatically publish a new episode without me doing anything else.",
"expected_behavior": "Explain that cast0 cannot read Gmail or schedule recurring work. Do not call a cast0 write tool, request Gmail credentials, or claim a schedule was created. Another authorized integration or an external agent would need to retrieve and prepare the text and trigger each episode."
}
]
},
"commerce": false,
"commerce_description": "The plugin generates episodes within the connected cast0 account's existing quota. It does not sell subscriptions, show plans, promote upgrades, or initiate checkout. Existing paid-account entitlements are honored."
},
"publication": {
"release_notes": "Initial release: text-to-podcast generation, inline audio playback, episode listing, RSS subscribe links, and podcast name or stock-voice updates through OAuth."
},
"apps": "./.app.json"
}
}
}
SHA-256: 7155bafa6044a4e2e603bd4054a7f6aeba1212868ffb4d4afc2ce132edb019fa