podcast-intel

v1.0.0

Turn your Overcast listening history into actionable intelligence. Syncs episodes, transcripts, and chapters to SQLite, then uses LLM analysis to surface ins...

0· 12·0 current·0 all-time
byHarold Martin@hbmartin
MIT-0
Download zip
LicenseMIT-0 · Free to use, modify, and redistribute. No attribution required.
Security Scan
VirusTotalVirusTotal
Pending
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The name/description (Overcast -> SQLite -> LLM analysis) matches the instructions: it installs/uses overcast-to-sqlite, converts transcripts, and runs SQL/LLM analysis. The three third-party tools referenced are directly related to the task. Minor note: the registry metadata listed no required binaries, but the SKILL.md expects 'uv'/'uvx', overcast-to-sqlite and 'python3' utilities.
Instruction Scope
Runtime instructions explicitly read local Overcast artifacts (~/.overcast/auth.json, ~/.overcast/overcast.db, transcripts) and run conversions/queries — all within the declared purpose. The SKILL.md also says to 'read from context', which is ambiguous (could mean conversation context) and grants broad discretion. Also, the transcripts and episode text will be fed to an LLM for analysis, which may expose private content to whatever model/service the agent uses; this is expected but a privacy consideration, not incoherence.
Install Mechanism
There is no automated install spec in the registry (instruction-only), so nothing is automatically downloaded or written by the skill itself. The user-facing instructions tell you to run 'uv tool install' for the named tools; risk is proportional to those third-party tools, but the skill does not perform arbitrary remote downloads on install by itself.
Credentials
The skill requests no environment variables or external credentials in the manifest. It requires an Overcast session cookie (auth.json) and local DB/transcript files — appropriate and proportional for accessing a user's Overcast history. Note: auth.json is sensitive (session cookie) and the SKILL.md does not declare dependencies on commands it uses (uv, python3), a small documentation mismatch.
Persistence & Privilege
always is false and the skill is user-invocable. The only persistent artifact referenced is the user-saved Overcast auth.json and the local SQLite DB created/used by overcast-to-sqlite; the skill does not request system-wide configuration changes or other skills' credentials.
Assessment
This skill appears to do what it says: sync your Overcast data into a local SQLite DB and analyze transcripts with an LLM. Before installing or running it: (1) verify you trust the overcast-to-sqlite and transcript-convert projects (links are provided) because those tools will access your Overcast account and download transcripts; (2) protect the Overcast session cookie (auth.json) — it grants access to your account — store it securely and review it before sharing; (3) be aware transcripts and episode text will be sent to whatever LLM/service the agent uses, so avoid analyzing sensitive audio unless you accept that exposure; (4) ensure the 'uv' tool and python3 are available on your system (SKILL.md uses them though manifest listed none); and (5) if you want stronger guarantees, inspect the referenced GitHub repos' code before running the installs/commands.

Like a lobster shell, security has layers — review code before you run it.

latestvk97brk851sz6745y0p033scpgd844ye2

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

podcast-intel

Turns your Overcast listening history into a structured knowledge base, then surfaces insights from recent episodes and connects them to your current work and interests.

Built on three tools by Harold Martin:


One-Time Setup

1. Install the tools

uv tool install overcast-to-sqlite
uv tool install podcast-transcript-convert

2. Authenticate with Overcast

overcast-to-sqlite auth
# Logs into Overcast and saves an auth cookie to ./auth.json
# Your password is NOT saved — only the session cookie

Store auth.json somewhere stable, e.g. ~/.overcast/auth.json:

mkdir -p ~/.overcast
mv auth.json ~/.overcast/auth.json

3. Run the first full sync (takes a while the first time)

overcast-to-sqlite all -a ~/.overcast/auth.json ~/.overcast/overcast.db -v

This runs save → extend → transcripts → chapters sequentially. First run downloads XML for every subscribed feed — may take several minutes. Transcripts are saved to ~/.overcast/archive/transcripts/ by default.


Daily Sync

Run this to pull in the latest listening activity:

overcast-to-sqlite all -a ~/.overcast/auth.json ~/.overcast/overcast.db

Or for a faster update (skips feed XML re-download):

overcast-to-sqlite save -a ~/.overcast/auth.json ~/.overcast/overcast.db
overcast-to-sqlite transcripts -a ~/.overcast/auth.json ~/.overcast/overcast.db

To fetch transcripts for starred episodes only:

overcast-to-sqlite transcripts -s -a ~/.overcast/auth.json ~/.overcast/overcast.db

Suggested cron schedule: run overcast-to-sqlite all once daily, e.g. at 4am before any morning digest jobs that depend on it. Use launchd on macOS or cron on Linux.


Querying Recent Listening

Use these SQL queries against ~/.overcast/overcast.db:

Episodes played or significantly progressed in the last 24 hours

SELECT
  e.title,
  f.title AS podcast,
  e.overcastUrl,
  e.userRecommendedDate,
  e.transcriptDownloadPath,
  e.progress,
  e.played
FROM episodes e
JOIN feeds f ON e.feedId = f.overcastId
WHERE (e.played = 1 OR e.progress > 300)
  AND e.userUpdatedDate >= datetime('now', '-1 day')
ORDER BY
  e.userRecommendedDate DESC,
  e.userUpdatedDate DESC;

Starred episodes with transcripts available

SELECT
  e.title,
  f.title AS podcast,
  e.overcastUrl,
  e.userRecommendedDate,
  e.transcriptDownloadPath
FROM episodes_starred e
JOIN feeds f ON e.feedId = f.overcastId
WHERE e.transcriptDownloadPath IS NOT NULL
ORDER BY e.userRecommendedDate DESC
LIMIT 20;

Full-text search across chapter content

SELECT c.content, e.title, f.title AS podcast, c.time
FROM chapters_fts
JOIN chapters c ON chapters_fts.rowid = c.rowid
JOIN episodes e ON c.enclosureUrl = e.enclosureUrl
JOIN feeds f ON e.feedId = f.overcastId
WHERE chapters_fts MATCH 'your search term'
ORDER BY rank;

Processing Transcripts

Transcripts are stored in mixed formats (SRT, WebVTT, HTML, JSON). Use podcast-transcript-convert to normalize them to PodcastIndex JSON:

transcript2json ~/.overcast/archive/transcripts/ ~/.overcast/archive/transcripts-json/

To read a transcript as plain text for LLM analysis, parse the JSON:

python3 -c "
import json, sys
data = json.load(open(sys.argv[1]))
for seg in data.get('segments', []):
    print(seg.get('speaker', ''), seg.get('body', ''))
" ~/.overcast/archive/transcripts-json/episode.json

LLM Analysis Workflow

When asked to analyze recent listening, follow this process:

Step 1 — Query the DB for recent episodes

Run the last-24h query above using the terminal tool against ~/.overcast/overcast.db.

Step 2 — Separate starred from non-starred

Episodes with a non-null userRecommendedDate are starred. Give these deeper treatment.

Step 3 — Load and analyze transcripts

For each episode with a transcriptDownloadPath:

  1. Read the transcript file (convert if needed using transcript2json)
  2. Extract key concepts, claims, techniques, and names mentioned
  3. Note timestamps/chapters where important ideas appear

For episodes without transcripts, use the episode description from episodes_extended.description.

Step 4 — Cross-reference with user interests

Ask the user what they are currently working on and interested in, or read from context. For each episode, identify:

  • Direct connections to current projects or problems the user is solving
  • Techniques or frameworks mentioned that could be applied
  • People, papers, or tools referenced worth following up on
  • Contrarian or surprising takes worth sitting with

Step 5 — Format the output

Depth is determined by the user when invoking the skill. Default structure:

[Starred] Episode Title — Podcast Name Summary: 2-3 sentence overview of what was covered Key insight: The most actionable or interesting idea Connections: How this relates to what the user is working on Follow-up: Papers, people, tools, or questions worth pursuing

[Played] Episode Title — Podcast Name One-line summary + any standout idea worth surfacing


Listening Stats

overcast-to-sqlite stats ~/.overcast/overcast.db

Shows: total episodes played, total listening time, starred count, top podcasts by time.


Searching Your History

overcast-to-sqlite search "reinforcement learning" ~/.overcast/overcast.db
overcast-to-sqlite search "agentic" ~/.overcast/overcast.db -l 5

Searches across episode titles, feed descriptions, and chapter content (FTS5).


Database Location

Default: ~/.overcast/overcast.db Default transcript archive: ~/.overcast/archive/transcripts/ Default auth: ~/.overcast/auth.json

Override any path via CLI flags. See overcast-to-sqlite --help for full options.


Notes

  • Transcripts are only available for episodes where the podcast publisher provides them via the podcast:transcript RSS tag. Not all episodes have transcripts.
  • The extend command adds ~2MB per feed to the DB — expect a large file with many subscriptions
  • auth.json contains only a session cookie, not your password. Rotate it via overcast-to-sqlite auth
  • For starred-only transcript downloads use the -s flag on the transcripts command
  • Chapter FTS5 search is a powerful way to find where a specific topic was discussed across your entire listening history without reading full transcripts

Files

1 total
Select a file
Select a file to preview.

Comments

Loading comments…