What it feels like
You: build an advisor on @ycombinator,
last 200 videos, hiring + fundraising
AI: ✓ Resolving @ycombinator (200 videos)
✓ Fetching transcripts (3 min)
✓ Indexing + embedding
✓ Advisor ready: /yc-advisor
You: /yc-advisor how should I think about hiring my first engineer?
AI: → answer with quoted videos and timestamps
Install
Paste this in your AI chat (Claude Code, Cursor, Codex CLI, etc.):
Install youtube-advisor for me. PyPI:
pip install youtube-advisor. For Claude Code skill discovery, also clone https://github.com/AlexanderAbramovPav/youtube-advisor into~/.claude/skills/youtube-advisor/.
The AI installs the CLI from PyPI, makes the skill discoverable in ~/.claude/skills/, checks ffmpeg and uv. You walk away.
Or just install the CLI for scripting (no AI integration):
pip install youtube-advisor
You get the youtube-advisor command. See Advanced for CLI usage.
Use it
Create an advisor. Drop a channel URL or handle in chat with a one-sentence intent:
build an advisor on @ycombinator from the last 200 videos,
focused on hiring and fundraising
make an advisor on @lexfridman, interviews from 2024 onwards
The assistant resolves the channel, fetches transcripts, builds indices, drafts the advisor's voice, and runs a self-check. No flags, no paths, no shell. You get a new slash command like /yc-advisor.
Ask the advisor.
/yc-advisor how should I think about hiring my first engineer?
Every answer comes back with verbatim quotes and clickable timestamps linking to the exact second of the source.
Refresh later. One sentence:
refresh @ycombinator — check for new videos this week
The assistant replays your original selection filter, fetches only what's new, re-indexes the delta, and tells you what changed.
Why
- Local-first. Transcripts and indices live on your disk. No SaaS account, no per-query fees, no vendor that can take your corpus offline.
- Verbatim quotes with timestamps. Every answer is grounded in real transcript text and links to
youtube.com/watch?v=ID&t=SECONDS— click and the video opens at that exact second. - Uses your AI's brain. Skill drafting and answering run through whatever assistant you're already using — nothing extra to configure.
- Free captions when available; local Whisper when not. A three-tier cascade keeps cost near zero and falls back to on-device transcription only when YouTube has none.
- Incremental updates that respect your filter. Your original selection (channel + date range + title filters + max count) is saved and replayed on every refresh.
What an answer looks like
"The scariest fundraising stories are the ones where the founder spends six months on an 'almost-yes' from an investor who eventually just ghosts."
— Dalton & Michael: Fundraising Mistakes (2024-03-12), 14:22
Each citation is a real line from a real video, anchored to the second. Click through and verify.
Limitations
- One channel per advisor. Multi-channel rollups ("YC + Naval + a16z combined") are planned for v0.2.
- Whisper fallback is CPU-bound. Videos without YT captions fall back to local Whisper — roughly 1 hour of compute per 1 hour of audio on Apple Silicon. The assistant warns you and asks before going that route.
- YouTube anti-bot. Defaults (1–5s randomized sleep, exponential-backoff retries on 429) handle most cases. On persistent blocks the assistant will offer to use cookies from your logged-in browser.
Works with other AI tools
AGENTS.md is a tool-agnostic mirror of SKILL.md. Wire it into whichever tool you use:
| Your tool | Where to point it | How to invoke |
|---|---|---|
| Claude Code | clone into ~/.claude/skills/youtube-advisor/ |
/youtube-advisor <request> |
| OpenAI Codex CLI | clone anywhere, place AGENTS.md at ~/.codex/AGENTS.md (or project root) |
"build me an advisor on <channel>" |
| Cursor | clone anywhere, copy AGENTS.md to .cursor/rules/youtube-advisor.md |
@youtube-advisor or natural language |
| Continue.dev | clone anywhere, register youtube-advisor as a custom slash command |
/youtube-advisor <request> |
| Aider | clone anywhere, aider --read <install-dir>/AGENTS.md |
natural language in chat |
| Goose (Block) | clone anywhere, add as a shell-command extension | mention youtube-advisor in chat |
| No AI at all | clone anywhere | youtube-advisor bootstrap --channel @… --out … |
Everything below is for power users running outside an AI chat (CI, cron, scripts). You almost never need this.
Manual install
git clone https://github.com/AlexanderAbramovPav/youtube-advisor ~/.claude/skills/youtube-advisor
cd ~/.claude/skills/youtube-advisor && bash scripts/install.sh
CLI
# Bootstrap
youtube-advisor bootstrap \
--channel @ycombinator \
--since 2022-01-01 \
--max 200 \
--title-include "Founder Stories|How to" \
--title-exclude "shorts|#shorts" \
--out ~/.claude/skills/yc-advisor \
--yes
# Update (replays the saved selection filter)
youtube-advisor update --advisor ~/.claude/skills/yc-advisor --yes
# Update — override date, reindex only, or run regression evals
youtube-advisor update --advisor ~/.claude/skills/yc-advisor --since 2026-01-01 --yes
youtube-advisor update --advisor ~/.claude/skills/yc-advisor --reindex-only
youtube-advisor update --advisor ~/.claude/skills/yc-advisor --run-evals --yes
youtube-advisor bootstrap --help and youtube-advisor update --help print the full flag list.
Bypassing YT anti-bot with browser cookies
When unauthenticated channel-resolution gets 429-blocked, pass cookies from a logged-in browser. yt-dlp reads them straight from the browser profile — no copy-paste:
youtube-advisor bootstrap --channel @ycombinator --out ~/.claude/skills/yc-advisor \
--cookies-from-browser chrome --yes
# Or a Netscape-format cookies.txt:
youtube-advisor bootstrap --channel @ycombinator --out ~/.claude/skills/yc-advisor \
--cookies ~/secrets/yt-cookies.txt --yes
Resolution order: explicit flag → YOUTUBE_ADVISOR_COOKIES_BROWSER / YOUTUBE_ADVISOR_COOKIES_FILE env → ~/.config/youtube-advisor/cookies.txt if present → none. With cookies set the captions pool stays at concurrency 8; without them it drops to 2 + per-call jitter so YT is less likely to block you.
Vendoring _lib
youtube-advisor bootstrap --vendor copies the youtube_advisor Python package into the emitted advisor's scripts/_lib/. Useful if you want the advisor directory to be fully portable (pushed to a separate Git repo and cloned elsewhere without a Python install of youtube-advisor).
Eval-driven regression detection
youtube-advisor update --advisor <path> --run-evals reruns the channel's generated benchmark after sync and prompts to roll back if pass rate dropped.
License
MIT — © 2026 Alexander Abramov.
Runtime dependencies (yt-dlp, youtube-transcript-api, fastembed, faster-whisper, rank-bm25, ffmpeg, scriba) are installed locally, not vendored. Their licenses are catalogued in THIRD_PARTY_LICENSES.md.
Acknowledgments
This tool is glue around several excellent OSS projects:
- yt-dlp — channel resolution, caption download, audio extraction.
- youtube-transcript-api — Jonas Depoix — Tier 1 captions fetcher.
- fastembed — Qdrant — local embedding inference with
bge-small-en-v1.5(BAAI). - rank-bm25 — Dorian Brown — BM25 ranking.
- faster-whisper — SYSTRAN — local ASR fallback.
- scriba — sibling skill — alternative Whisper transcription backend.
- uv (Astral) for env setup, and
ffmpegfor audio extraction. - Conceptual lineage: yc-avisor — the hand-rolled YC-channel-specific predecessor.
No comments yet
Be the first to share your take.