/personalized-podcast
Generate a podcast episode from content you provide. Paste text, point to local files, or describe a topic. Two AI hosts discuss it in a natural conversation. Listen locally or in your favorite podcast app via RSS.
$ npx -y skills add zarazhangrui/personalized-podcast --skill personalized-podcast --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/personalized-podcast
Context preview
The summary Claude sees to decide when to auto-load this skill.
Generate a podcast episode from content you provide. Paste text, point to local files, or describe a topic. Two AI hosts discuss it in a natural conversation. Listen locally or in your favorite podcast app via RSS.
SKILL.md
personalized-podcast.SKILL.mdname: podcast
description: Generate a podcast episode from content you provide. Paste text, point to local files, or describe a topic. Two AI hosts discuss it in a natural conversation. Listen locally or in your favorite podcast app via RSS.
Path convention
Throughout this file:
- `SKILL_DIR` = the directory where this SKILL.md file lives (the skill's install location)
- `DATA_DIR` = `~/.personalized-podcast` (where user data, config, and episodes are stored)
Resolve these to absolute paths before running any commands.
Personalized Podcast
When the user invokes this skill, start by introducing it:
> "This skill turns any content into a podcast episode with two AI hosts who discuss it in a natural, conversational style. Think NotebookLM, but you control everything: the script prompt, the hosts' voices, the show format. > > You can use it to: > > - **Listen to anything on the go.** Paste an article, point to a file, drop a URL. Instead of reading, you get two people breaking it down while you walk, commute, or cook. > - **Understand yourself from the outside.** Feed it personal content like meeting transcripts, your resume, or journal entries, and have the hosts share their impressions of you. It's genuinely illuminating. > - **Create your own show.** Set up an RSS feed and new episodes show up in the podcast app you already use (Apple Podcasts, Spotify, Overcast, Snipd). No new app to download. > > Let's get started. What content do you want to turn into a podcast?"
If the user already provided content with their `/podcast` command, skip the question and go straight to setup check.
---
First-time setup
If `DATA_DIR/config.yaml` does not exist, run through this setup BEFORE generating. Do each step yourself - don't ask the user to run commands.
Step 1: Install dependencies
mkdir -p DATA_DIR/{scripts_output,episodes,logs}
python3 -m venv DATA_DIR/venv
DATA_DIR/venv/bin/pip install httpx pydub pyyaml python-dotenv jinja2 audioop-ltsCheck ffmpeg is installed:
ffmpeg -version
If not found, install it: `brew install ffmpeg` (macOS) or `sudo apt install ffmpeg` (Linux).
Step 2: Create config with default voices
cp SKILL_DIR/config/config.example.yaml DATA_DIR/config.yaml
The config comes with two pre-picked voices that work out of the box. No voice selection needed for first use.
Step 3: Get Fish Audio API key
Tell the user:
> "To turn your script into audio, this skill uses Fish Audio for text-to-speech. They have a free tier with 2 million+ voices. You just need an API key: > > 1. Go to https://fish.audio and create a free account > 2. Go to https://fish.audio/app/api-keys/ and create an API key"
Then create the .env file and open it:
echo "FISH_API_KEY=your_key_here" > DATA_DIR/.env
open DATA_DIR/.env
Tell them: "Paste your Fish Audio API key in this file, replacing 'your_key_here'. Save and close."
IMPORTANT: Never ask the user to paste API keys in the chat. Always use the .env file.
Step 4: Done
Tell the user:
> "You're all set! The default show has two hosts - Alex (curious, energetic) and Sam (analytical, witty) - with voices pre-configured. Let's generate your first episode."
Then proceed to generate the episode. Do NOT set up RSS or GitHub Pages during first-time setup. That's optional and comes later.
---
Generating an episode
Step 1: Read the content
Read all the content the user provided. If they pointed to files, read them with the Read tool. If they pasted a URL, fetch it. Combine everything into your understanding of the source material.
Step 2: Write the podcast script
Read the prompt file at `SKILL_DIR/PROMPT.md` for the hosts, style, structure, and output format. Follow those instructions to write the script.
If the user included custom instructions in their `/podcast` message (e.g., "make it a debate" or "hosts should eavesdrop on my conversation"), incorporate those. The user's inline instructions override PROMPT.md for that episode.
Save the script as a JSON array using the Write tool to: `DATA_DIR/scripts_output/YYYY-MM-DD.json` (use today's date). If a file for today already exists, append a number (e.g., `2026-04-05-2.json`).
Step 3: Generate audio
Tell the user: "Script written. Now generating audio - this takes about a minute depending on episode length."
Run the speak script:
DATA_DIR/venv/bin/python SKILL_DIR/scripts/speak.py --script <path_to_script.json>
This outputs the path to the generated MP3 file.
Step 4: Play the audio
IMMEDIATELY open the audio file for the user:
open <path_to_mp3>
On Linux use `xdg-open` instead of `open`.
Step 5: Post-generation tips
After the audio plays, tell the user:
> "Your episode is ready! A few things you can do from here: > > **Try different show formats.** The default is two hosts chatting, but you can do anything. Just describe it when you run `/podcast`: > > - "/podcast make it a debate about this article" > - "/podcast hosts should eavesdrop on my conversation and share their impressions of me" > - "/podcast interview format, one host asks questions and the other is the expert" > - "/podcast solo narrator, walk me through this research paper" > - "/podcast news roundup, read each tweet aloud then discuss" > > Or edit `PROMPT.md` to permanently change your show's format. > > **Pick your own voices.** The default voices are solid, but Fish Audio has 2 million+ to choose from. Browse https://fish.audio/discovery, find two you like, and update the voice IDs in `DATA_DIR/config.yaml`. > > **Listen in your podcast app.** Want new episodes delivered to Apple Podcasts, Spotify, Overcast, or Snipd automatically? Just ask me to set up an RSS feed for you - takes about a minute."
Only show these tips the FIRST time, or if the user asks about customization.
---
RSS feed setup (only when user asks)
When the user wants to set up an RSS feed, explain why it's us
Read more
name: podcast description: Generate a podcast episode from content you provide. Paste text, point to local files, or describe a topic. Two AI hosts discuss it in a natural conversation. Listen locally or in your favorite podcast app via RSS.
Path convention
Throughout this file:
- `SKILL_DIR` = the directory where this SKILL.md file lives (the skill's install location)
- `DATA_DIR` = `~/.personalized-podcast` (where user data, config, and episodes are stored)
Resolve these to absolute paths before running any commands.
Personalized Podcast
When the user invokes this skill, start by introducing it:
> "This skill turns any content into a podcast episode with two AI hosts who discuss it in a natural, conversational style. Think NotebookLM, but you control everything: the script prompt, the hosts' voices, the show format. > > You can use it to: > > - **Listen to anything on the go.** Paste an article, point to a file, drop a URL. Instead of reading, you get two people breaking it down while you walk, commute, or cook. > - **Understand yourself from the outside.** Feed it personal content like meeting transcripts, your resume, or journal entries, and have the hosts share their impressions of you. It's genuinely illuminating. > - **Create your own show.** Set up an RSS feed and new episodes show up in the podcast app you already use (Apple Podcasts, Spotify, Overcast, Snipd). No new app to download. > > Let's get started. What content do you want to turn into a podcast?"
If the user already provided content with their `/podcast` command, skip the question and go straight to setup check.
---
First-time setup
If `DATA_DIR/config.yaml` does not exist, run through this setup BEFORE generating. Do each step yourself - don't ask the user to run commands.
Step 1: Install dependencies
mkdir -p DATA_DIR/{scripts_output,episodes,logs}
python3 -m venv DATA_DIR/venv
DATA_DIR/venv/bin/pip install httpx pydub pyyaml python-dotenv jinja2 audioop-ltsCheck ffmpeg is installed:
ffmpeg -version
If not found, install it: `brew install ffmpeg` (macOS) or `sudo apt install ffmpeg` (Linux).
Step 2: Create config with default voices
cp SKILL_DIR/config/config.example.yaml DATA_DIR/config.yaml
The config comes with two pre-picked voices that work out of the box. No voice selection needed for first use.
Step 3: Get Fish Audio API key
Tell the user:
> "To turn your script into audio, this skill uses Fish Audio for text-to-speech. They have a free tier with 2 million+ voices. You just need an API key: > > 1. Go to https://fish.audio and create a free account > 2. Go to https://fish.audio/app/api-keys/ and create an API key"
Then create the .env file and open it:
echo "FISH_API_KEY=your_key_here" > DATA_DIR/.env open DATA_DIR/.env
Tell them: "Paste your Fish Audio API key in this file, replacing 'your_key_here'. Save and close."
IMPORTANT: Never ask the user to paste API keys in the chat. Always use the .env file.
Step 4: Done
Tell the user:
> "You're all set! The default show has two hosts - Alex (curious, energetic) and Sam (analytical, witty) - with voices pre-configured. Let's generate your first episode."
Then proceed to generate the episode. Do NOT set up RSS or GitHub Pages during first-time setup. That's optional and comes later.
---
Generating an episode
Step 1: Read the content
Read all the content the user provided. If they pointed to files, read them with the Read tool. If they pasted a URL, fetch it. Combine everything into your understanding of the source material.
Step 2: Write the podcast script
Read the prompt file at `SKILL_DIR/PROMPT.md` for the hosts, style, structure, and output format. Follow those instructions to write the script.
If the user included custom instructions in their `/podcast` message (e.g., "make it a debate" or "hosts should eavesdrop on my conversation"), incorporate those. The user's inline instructions override PROMPT.md for that episode.
Save the script as a JSON array using the Write tool to: `DATA_DIR/scripts_output/YYYY-MM-DD.json` (use today's date). If a file for today already exists, append a number (e.g., `2026-04-05-2.json`).
Step 3: Generate audio
Tell the user: "Script written. Now generating audio - this takes about a minute depending on episode length."
Run the speak script:
DATA_DIR/venv/bin/python SKILL_DIR/scripts/speak.py --script <path_to_script.json>
This outputs the path to the generated MP3 file.
Step 4: Play the audio
IMMEDIATELY open the audio file for the user:
open <path_to_mp3>
On Linux use `xdg-open` instead of `open`.
Step 5: Post-generation tips
After the audio plays, tell the user:
> "Your episode is ready! A few things you can do from here: > > **Try different show formats.** The default is two hosts chatting, but you can do anything. Just describe it when you run `/podcast`: > > - "/podcast make it a debate about this article" > - "/podcast hosts should eavesdrop on my conversation and share their impressions of me" > - "/podcast interview format, one host asks questions and the other is the expert" > - "/podcast solo narrator, walk me through this research paper" > - "/podcast news roundup, read each tweet aloud then discuss" > > Or edit `PROMPT.md` to permanently change your show's format. > > **Pick your own voices.** The default voices are solid, but Fish Audio has 2 million+ to choose from. Browse https://fish.audio/discovery, find two you like, and update the voice IDs in `DATA_DIR/config.yaml`. > > **Listen in your podcast app.** Want new episodes delivered to Apple Podcasts, Spotify, Overcast, or Snipd automatically? Just ask me to set up an RSS feed for you - takes about a minute."
Only show these tips the FIRST time, or if the user asks about customization.
---
RSS feed setup (only when user asks)
When the user wants to set up an RSS feed, explain why it's us
NotebookLM-style AI podcasts, except you control everything. The script. The prompt. The hosts' roles. Their voices. The content they discuss. All of it. A coding agent skill that turns any content into a two-host podcast episode.

