Private podcast feed
Use when publishing a private MP3+RSS feed for self-subscription. Covers itunes:block, token-prefixed URLs, ID3 CHAP/CTOC chapters for Overcast skip-ahead, and the Overcast refresh ping. Triggers: private podcast, RSS feed for Overcast, self-hosted podcast, private audio feed, MP3 RSS, personal podcast, chapter markers, Overcast ping, podcast XML, itunes:block.From its SKILL.md
npx -y skills add eins78/agent-skills --skill private-podcast-feedAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 6 commands, including `openssl rand -hex 16` and 5 more.
- fetches URLsInstructs the agent to fetch 1 URL, including https://overcast.fm/ping?urlprefix=<encoded-prefix>.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.5 KB, 831 tokens by cl100k_base, as published. Nobody here has run it
private-podcast-feed
Publishes a private MP3+RSS feed for self-subscription in Overcast (or any
podcast client). "Private" means URL obscurity via token prefix and
itunes:block=Yes to keep it out of public indexes. Not cryptographic access
control — the feed URL is the only secret.
1. [email protected] Named Export
Use the named export — the default export does not work:
import { podcast } from "podcast"; // ✅ named — correct
import podcast from "podcast"; // ❌ default — fails at runtime (R3 gotcha)
2. itunes:block=Yes via customElements
The typed FeedITunes interface does not expose itunesBlock. The only
correct path is the customElements array:
const feed = new podcast({
title: "My Private Feed",
feedUrl,
siteUrl: new URL(feedUrl).origin,
customElements: [{ "itunes:block": "Yes" }], // keeps feed out of public indexes
});
Without this, the feed may be discovered and indexed by Apple Podcasts search.
3. Token-Prefixed URL
Serve the feed at /p/<32-hex>/feed.xml. The 32-hex token is 128 bits of URL
obscurity — anyone with the URL can subscribe.
https://your-host.com/p/5042a002464df562718eef84ac1316f5/feed.xml
Generate a token: openssl rand -hex 16
Gitignore .token if you store the raw token on disk. Note: this is NOT
access control — the URL is the only barrier. Do not store sensitive content.
4. ID3 CHAP/CTOC Chapter Frames
Inject chapters post-ffmpeg via mutagen so Overcast shows skippable chapters:
# inject_chapters.py (bundled in text-to-speech skill)
inject(mp3_path, [
{"start_ms": 0, "title": "Introduction"},
{"start_ms": 125000, "title": "Section Two"},
])
Chapters must be strictly increasing by start_ms. End time of chapter N is
set to start time of N+1; last chapter ends at the MP3's total duration.
If using the text-to-speech skill, chapters are injected automatically during
render when chapters.json is present.
5. Static-Hosting Pattern
The feed needs an HTTPS host returning correct content-types:
feed.xml → Content-Type: text/xml
*.mp3 → Content-Type: audio/mpeg
Any static hosting platform works (Cloudflare R2, S3, Caddy, nginx). Podcast clients revalidate the feed URL periodically — the URL must be stable.
6. Overcast Refresh Ping
After publishing a new episode, ping Overcast to trigger an immediate fetch:
${CLAUDE_SKILL_DIR}/scripts/ping-overcast.sh https://your-host.com/p/<token>/
The script is idempotent — safe to call on every feed regeneration. It pings
https://overcast.fm/ping?urlprefix=<encoded-prefix> and exits 0 on HTTP 2xx.
7. Sanity Verification
# Feed responds with correct type
curl -I <feed-url>
# itunes:block is set
curl -s <feed-url> | grep "itunes:block" # must print "Yes"
# Item count
curl -s <feed-url> | xmllint --xpath 'count(//item)' -
# MP3 URL responds
curl -I <mp3-url> # expect: HTTP/2 200, content-type: audio/mpeg
What ships with it: 3 files
4.7 KB alongside SKILL.md, 1 of them executable
scripts/
- ping-overcast.shruns1.4 KB
templates/
- generate-feed.ts.example1.5 KB
- README.md1.8 KB
Gives 0 of the 12 instructions most video audio skills give in 831 tokens
Counted across 619 of the 725 authors here whose files we hold, read 2026-09-06
- Read product marketing context firstin 13 of 619, across 7 files
- Define the core visual thesis in one sentencein 11 of 619, across 3 files
- Break the concept into 3 to 6 scenesin 11 of 619, across 3 files
- Render the smallest working version firstin 11 of 619, across 3 files
- Start with a low-quality smoke test renderin 11 of 619, across 3 files
- Add captions for accessibility and engagementin 11 of 619, across 5 files
- Write the scene outline before writing codein 11 of 619, across 3 files
- Specify subject, action, camera, style, and moodin 11 of 619, across 5 files
- Decide what each scene provesin 10 of 619, across 2 files
- Export one clean thumbnail framein 10 of 619, across 2 files
- Pick the right tool for the jobin 10 of 619, across 4 files
- Run the test suite before proposing a fixin 8 of 619, across 7 files
Said here and by no other author read
- Use the named export for podcast
- Set itunes block via custom elements
- Serve the feed at token prefixed URL
- Inject chapters post ffmpeg via mutagen
- Ensure chapters are strictly increasing
- Ensure static host returns correct content types
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.