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.
Release files for youtube-advisor 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| youtube_advisor-0.1.0.tar.gz | 1.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| youtube_advisor-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / youtube_advisor-0.1.0.tar.gz
| Download URL | youtube_advisor-0.1.0.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c41a6d6df08a662d092afec410903a14567e80d20871ef64ab43df2865420a43
|
|
BLAKE2b-256 checksum How to use checksums |
0482d6050f334caa68d39820358530c30b9cdcd5eeafcdcd9877e25edd740c2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / youtube_advisor-0.1.0-py3-none-any.whl
| Download URL | youtube_advisor-0.1.0-py3-none-any.whl |
|---|---|
| Size | 54.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f331a1b1654c94fc0dd4eb750d5c76f518c10736dc2fdbdb6dd6cff02a9359fa
|
|
BLAKE2b-256 checksum How to use checksums |
7f3be3cae7658905478c5d9f3857790613dbd8974a6c1dcd7a8e5456ff5a57f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|