Turn any YouTube channel into an AI assistant skill that answers questions with verbatim quotes and timestamped video links.
Project description
youtube-advisor
Turn any YouTube channel into an AI assistant skill that answers questions with verbatim quotes and timestamped video links.
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. The repo is https://github.com/AlexanderAbramovPav/youtube-advisor.
The AI clones, runs scripts/install.sh, checks ffmpeg and uv, sets up the venv. You walk away.
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 … |
Advanced — for CI and scripting
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file youtube_advisor-0.1.0.tar.gz.
File metadata
- Download URL: youtube_advisor-0.1.0.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c41a6d6df08a662d092afec410903a14567e80d20871ef64ab43df2865420a43
|
|
| MD5 |
555c6fd5aa2c79c3c725090004f818e6
|
|
| BLAKE2b-256 |
0482d6050f334caa68d39820358530c30b9cdcd5eeafcdcd9877e25edd740c2c
|
File details
Details for the file youtube_advisor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: youtube_advisor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 54.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f331a1b1654c94fc0dd4eb750d5c76f518c10736dc2fdbdb6dd6cff02a9359fa
|
|
| MD5 |
6354d141202022f3e92ecba0a06251c8
|
|
| BLAKE2b-256 |
7f3be3cae7658905478c5d9f3857790613dbd8974a6c1dcd7a8e5456ff5a57f9
|