skills/youtube-ai-interview-finder/SKILL.md
Find one fresh YouTube AI interview/podcast video matching strict editorial criteria, intended as the source for a blog post (substack-writer Step 1). Use when the user says "find a YouTube video for today's blog", "find an AI interview video", "auto-pick a video for substack-writer", or runs the daily content cron. Filters by duration, upload month, dedup against previously used videos, then the agent picks one with reasoning.
npx skillsauth add shanezhong/skills youtube-ai-interview-finderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Automates the source-discovery step of the substack-writer content pipeline. Hand-curates one YouTube video per run, matching editorial criteria for a blog post.
A candidate passes ONLY if all are true:
used_videos.json.A video is added to used_videos.json ONLY after the full downstream pipeline (blog written + Substack published) completes successfully. Picking a video as the day's candidate does NOT mark it used. This means a runner-up from yesterday is still eligible today.
When this skill loads, the system tells you the base directory (e.g. Base directory for this skill: /Users/shane/.claude/skills/youtube-ai-interview-finder). Use that to construct the script path. The env vars $CLAUDE_PLUGIN_ROOT and $CLAUDE_SKILL_DIR are not reliably set for locally-installed skills — always derive from the base directory.
/Users/shane/Documents/playground/.venv/bin/python \
<base_directory>/scripts/find_video.py
For example, when locally installed:
/Users/shane/Documents/playground/.venv/bin/python \
/Users/shane/.claude/skills/youtube-ai-interview-finder/scripts/find_video.py
This:
APIFY_TOKEN from /Users/shane/Documents/playground/.envstreamers/youtube-scraper with 3 search queries: "AI interview", "AI podcast", "interview AI founder"used_videos.jsonai_writing/auto_youtube_finder/candidates_raw_{YYYY-MM-DD}.json — full Apify dumpai_writing/auto_youtube_finder/candidates_{YYYY-MM-DD}.json — deduped + duration-filtered shortlistApify's uploadDate=month filter is loose — it returns videos older than a month too. The agent must filter strictly to the current month in Step 2.
Read candidates_{YYYY-MM-DD}.json. Apply the editorial criteria above. For each candidate, evaluate the title + description + channel to judge:
date field strictly.)Pick one winner. Pick one runner-up (in case the winner fails downstream). Write a JSON file with explicit reasoning:
{
"date": "YYYY-MM-DD",
"pick": {
"id": "...",
"title": "...",
"url": "...",
"channel": "...",
"guest": "...",
"duration": "HH:MM:SS",
"viewCount": 0,
"date": "YYYY-MM-DD"
},
"reasoning": "Why this video — must be specific, citing the channel's reputation, the guest's track record, and the actionable value. No filler.",
"criteria_check": {
"human_to_human": true,
"is_interview_or_podcast": true,
"duration_over_10min": true,
"this_month": true,
"actionable_advice": true,
"not_generic_ai_explainer": true,
"not_used_before": true
},
"runner_up": { "id": "...", "title": "...", "why_runner_up": "..." },
"rejected_with_reasons": { "<video_id>": "<one-line reason>", ... },
"stats": { "raw_apify_results": 0, "this_month_only": 0, "passing_all_criteria": 0 }
}
Save as ai_writing/auto_youtube_finder/pick_{YYYY-MM-DD}.json.
If invoked as part of the daily content cron, emit the picked video URL to stdout / Discord, then trigger substack-writer with that URL as input.
After substack-writer finishes successfully (Substack post published), append the video ID to used_videos.json:
{ "video_ids": ["wc8FBhQtdsA", "..."], "_doc": "..." }
If substack-writer fails, do NOT append — the video is still eligible tomorrow.
| Path | Purpose |
|------|---------|
| <skill_base_dir>/scripts/find_video.py | Apify caller (skill_base_dir given on skill load) |
| ~/Documents/playground/.env (APIFY_TOKEN) | Auth |
| ~/Documents/playground/ai_writing/auto_youtube_finder/used_videos.json | Dedup ledger (append after publish) |
| ~/Documents/playground/ai_writing/auto_youtube_finder/candidates_raw_{date}.json | Raw Apify dump |
| ~/Documents/playground/ai_writing/auto_youtube_finder/candidates_{date}.json | Deduped shortlist |
| ~/Documents/playground/ai_writing/auto_youtube_finder/pick_{date}.json | Picked video + reasoning |
/Users/shane/Documents/playground/.venvapify-client, python-dotenvAPIFY_TOKEN in .envInstall if missing:
/Users/shane/Documents/playground/.venv/bin/pip install apify-client python-dotenv
| Title pattern | Reason to reject | |---------------|------------------| | "I Let AI Interview Me for X" | AI is the interviewer, not the topic | | "AI Job Interview Questions & Answers" | Job-prep niche, not editorial content | | "Godfather of AI Warns / Doom / We've Lost" | Doom without actionable value | | "Why AI CEOs Are Building Bunkers" | Pundit doom, not practitioner | | "What is AI / Beginner's Guide to LLMs" | Generic explainer | | Channel: news outlet (CBS / BBC / Bloomberg short clips < 20 min) | Not enough depth for blog |
| Pattern | Why | |---------|-----| | Lenny's Podcast / Dwarkesh Patel / a16z / Latent Space | Practitioner-focused, deep | | Guest is a builder/founder talking about HOW they build | Actionable | | 60-120 min long-form interview | Enough material for a blog | | Title hints at concrete claim (numbers, playbook, specific company) | Substantive |
tools
Replace with description of the skill and when Claude should use it.
development
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
tools
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
tools
Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.