agentsclimarketplace

Private podcast feed

Skill eins78/agent-skills/skills/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

Install
npx -y skills add eins78/agent-skills --skill private-podcast-feed

Assembled 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/

templates/

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.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.