YouTube Skillbox
13 free YouTube skills for AI agents — research, transcripts, and the full creator workflow.
No user-supplied YouTube Data API key · no credits · no expiry — $0 forever
Table of Contents · Demo · Research · Transcripts · Gap-fill engine · Creator tools · Install · Agent prompt
⚠️ Important Disclaimer
This tool accesses public YouTube data for research purposes only.
- Respect YouTube's Terms of Service and Community Guidelines
- Respect rate limits — add delays between bulk requests
- Not affiliated with YouTube or Google
- For research/educational use only
📺 Demo
Watch the agent in action — one prompt, "why isn't this channel growing?" OpenCode researches the videos, Shorts and transcripts, then surfaces the hooks, scripts and what to fix (why one Short hit 8K views while the rest couldn't pass 1K):
📋 Table of Contents
| Section | Description |
|---|---|
| 📺 Demo | Video walkthrough of the agent using the skills |
| What is this? | Overview of the two-layer architecture |
📺 The youtube research skill |
17 subcommands — search, keywords, compete, trends, track, scorecard, outliers, gap, channels, posts, shows |
📜 The transcript skill |
Free transcripts via yt-dlp |
| 🛠 Gap-fill engine | How we fill yt-dlp's gaps with raw scrapers |
| ✂️ The 10 creator skills | Scripts, SEO, chapters, Shorts, and more |
| 📦 Install | Quick setup for any agent harness |
| 🤖 Have your agent set it up for you | Copy-paste prompt for any coding agent |
| 📝 Notes & limits | Rate limits, pagination, edge cases |
| ⚖️ Responsible use | Personal vs commercial use, risk notes |
| 📄 License | MIT License |
| 🙏 Credits | yt-dlp, upstream skill sources |
What is this?
A drop-in set of SKILL.md skills for agent harnesses like OpenCode (works anywhere skills are discovered from a folder). Each skill in skills/ is self-contained: a SKILL.md the agent reads, plus small Python tools it runs.
Two layers:
| Layer | Skills | Powered by |
|---|---|---|
| Data (research) | youtube, transcript |
yt-dlp + custom raw YouTube scrapers |
| Creator workflow | 10 × yt-* |
local Python scripts, zero network deps for logic |
Everything is free. There is no paid tier, no user-supplied YouTube Data API key, and no account anywhere in the stack.
🔗 How the Skills Chain Together (The Pipeline)
The skills aren't isolated — they form an 7-phase analysis pipeline that agents can run end-to-end:
graph TD
A["User: Channel Analysis"] --> B["Phase 1: youtube"]
B --> C["Phase 2: transcript"]
C --> D["Phase 3: yt-script"]
D --> E["Phase 4: yt-package"]
E --> F["Phase 5: youtube (SEO/keywords)"]
F --> G["Phase 6: youtube (outliers/gaps)"]
G --> H["Phase 7: yt-retention*"]
B --> J["Data: sections, videos, home, profile"]
C --> K["Transcripts for top 3 videos"]
D --> L["Hook scores 0-100"]
E --> M["Title/thumbnail scores"]
F --> N["Keywords, competition, scorecards"]
G --> O["Outliers, competitor gaps"]
H --> P["ONE fix + 3 working + don't-do"]
*Phase 7 (yt-retention) optional — requires YouTube Studio CSV export.
| Phase | Skill | Input | Output | Purpose |
|---|---|---|---|---|
| 1 | youtube |
@handle | Channel data (sections, videos, home, profile) | Data foundation |
| 2 | transcript |
Top 3 video IDs | Full transcripts (JSON + timestamps) | Raw content |
| 3 | yt-script |
Transcripts | Hook scores (0-100) per video | Retention hooks |
| 4 | yt-package |
Titles + hook scores | Title/thumbnail scores + briefs | CTR optimization |
| 5 | youtube |
Niche + target video | Keywords, competition, scorecards | Search visibility |
| 6 | youtube |
Channel + niche | Outliers, competitor gaps | Growth levers |
| 7 | yt-retention |
Studio CSV (optional) | Drop-off points, curves | Pacing fixes |
Each skill declares its pipeline position in its SKILL.md — agents read this to know what comes before/after.
Final synthesis: After running all phases, the agent synthesizes: ONE biggest fix + 3 things working + what NOT to do.
📺 The youtube research skill
Thirteen subcommands behind one script — skills/youtube/scripts/ytdata.py:
python skills/youtube/scripts/ytdata.py search "query" --limit 10 # find videos on a topic
python skills/youtube/scripts/ytdata.py keywords "seed idea" --patterns # keyword ideas (2 engines), scored
python skills/youtube/scripts/ytdata.py track "keyword" --video <url> # where your video ranks (+ history)
python skills/youtube/scripts/ytdata.py profile "@handle" # About: subs, description, keywords
python skills/youtube/scripts/ytdata.py sections "@handle" # count EVERY tab at once
python skills/youtube/scripts/ytdata.py home "@handle" # home shelves + Featured Channels
python skills/youtube/scripts/ytdata.py channel "@handle" --tab shorts
python skills/youtube/scripts/ytdata.py latest "@handle" --limit 10
python skills/youtube/scripts/ytdata.py posts "@handle" --limit 30 # community posts, paginated
python skills/youtube/scripts/ytdata.py shows "@handle" # Shows tab (episode collections)
python skills/youtube/scripts/ytdata.py playlist "<playlist-url>"
python skills/youtube/scripts/ytdata.py info "<video-url-or-id>" # views, likes, tags, date
search, keywords, track and compete take --gl / --hl (default US / en) to pin a
region and language, so a rank position means the same thing on every machine.
keywords merges two engines by default — YouTube's suggest plus DuckDuckGo's
(--sources yt or --sources ddg to use one).
Add --json to any command for structured output. Example:
$ python skills/youtube/scripts/ytdata.py sections "@MrBeast"
Channel: https://www.youtube.com/@MrBeast
videos : 805
shorts : 205
streams : no tab
shows : 5
playlists: no tab
community: 20+ posts (use `posts` to read them)
| Command | Returns |
|---|---|
search |
Videos matching a query — title, duration, views, channel, URL (--gl / --hl locale) |
keywords |
Keyword ideas from YouTube suggest + DuckDuckGo — a–z + pattern expansion, scored by cross-engine demand, Y = trending this year |
compete |
Competition score (0–100) for a keyword — views, authority, title density, entrenchment, velocity |
trends |
Historical trend for a seed keyword — score trajectory, velocity, sparklines (from keywords runs) |
track |
Where a video ranks for a keyword — with ↑↓ history across runs, kept per locale |
scorecard |
SEO checklist for a video — title/desc/tags/keyword fit, 0–100 score with actionable fixes |
outliers |
Videos overperforming their channel — views/subscriber ratio, finds breakout content |
gap |
Content gap analysis — my seed keywords vs competitor's profile keywords |
profile |
Channel About section — name, handle, subs, description, all keywords |
sections |
One-call counts of every tab: videos / shorts / streams / shows / playlists / posts |
home |
Home-tab shelves — featured video, Shorts, playlists, posts, Featured Channels (names + URLs) |
channel |
Channel uploads (--tab videos | shorts | streams) |
latest |
Most recent uploads, reverse-chronological |
posts |
Community posts — text, author, date, like count, URL. Paginated (~10/page) |
shows |
Shows tab — title, episode count, URL |
playlist |
Every video in a playlist |
info |
One video's exact stats — views, likes, subs, date, tags, categories, description |
📜 The transcript skill
Spoken text of any video, free via yt-dlp:
python scripts/gettranscript.py "<url-or-id>" # clean text
python scripts/gettranscript.py "<url-or-id>" --format stamped # [MM:SS] per line
python scripts/gettranscript.py "<url-or-id>" --format json # segments + metadata
python scripts/gettranscript.py "<url-or-id>" --lang es,es-419 # language priority list
Prefers human captions, falls back to auto-generated. The JSON form carries start/duration per cue — ready for chapters, quotes, or edit lists.
🛠 When yt-dlp can't do it, we build it
yt-dlp is the data engine for channels, playlists, metadata and transcripts — but it explicitly refuses a few things (returns 0 entries, says "no home tab", or quietly localizes results to your own IP). Rather than pay an API, each gap is filled with a small pure-Python scraper (urllib + JSON parsing of YouTube's own page data / Innertube endpoints):
| Gap | What yt-dlp does | Our fill |
|---|---|---|
| Community posts | /community → 0 entries (wontfix) |
Raw ytInitialData scrape of /posts (with /community fallback) |
| Post pagination | — | Innertube browse continuation POSTs — the exact request infinite-scroll fires when you scroll. --limit 30 reaches ~3 pages / months back |
| Home sections | "This channel does not have a home tab" |
Home-tab shelf parser: featured video, Shorts, playlists, posts, and Featured Channels with URLs |
| Shows tab | 0 entries (can't parse gridShowRenderer) |
Direct renderer parser → title, episode count, show URL |
| Tab counts | one tab per invocation | sections probes every tab and merges yt-dlp + raw results |
| Locale-pinned search | search follows your IP — gl is silently set to whatever country you're in, and no flag exists to change it |
Raw Innertube search POSTs with client.gl / client.hl pinned explicitly: same rank in New York and New Delhi. Works for search, keywords, track, compete, trends. |
| Keyword competition score | not available | Live SERP analysis: median views (log), verified %, title match density, median age, velocity (views/day) → 0–100 score + band (EASY/MEDIUM/HARD/SATURATED) + actionable advice |
| Historical keyword trends | not available | keywords auto-logs score snapshots to ~/.ytdata-trendlog.json; trends shows sparklines, velocity (↑/↓/→), Δ over time |
| Video SEO scorecard | not available | scorecard audits title/desc/tags/chapters/freshness vs target keyword → 0–100 with weighted checks & fixes |
| Channel outliers | not available | outliers finds videos where views/subs ratio exceeds threshold — breakout content regardless of channel size |
| Content gap analysis | not available | gap compares your seed keywords vs competitor's profile keywords → unique/shared opportunities |
All of it is dependency-free Python — no API key, no credits, no tokens to manage.
$ python scripts/ytdata.py home "@MKBHD" --limit 3
1. [featured video] Macbook PROLED XDR Impressions: ... (1 item)
2. [videos] Videos (12 items)
3. [featured channels] 🔥 MKBHD Approved 🔥 (6 items)
- The Studio https://www.youtube.com/channel/UCG7J20...
- Auto Focus https://www.youtube.com/channel/UC2J-0g...
- WVFRM Podcast https://www.youtube.com/channel/UCEcrRX...
✂️ The 10 creator skills
Local tools that turn raw transcripts/data into publishing artifacts:
| Skill | Does |
|---|---|
yt-script |
Full video script from a raw idea — 21 hook formulas, scored |
yt-package |
Title + thumbnail text written and linted as one pairing |
yt-seo |
Description, tags and search-facing text aimed at real queries |
yt-chapters |
Validated YouTube chapters straight from a transcript |
yt-shorts |
Finds the self-contained Shorts hiding inside a long video |
yt-edit |
Transcript → edit decision list (dead air, fillers, retakes) |
yt-retention |
Reads a Studio retention export, says where viewers leave |
yt-viral |
What's actually working in a niche, ranked by channel-beat |
yt-plan |
A week/month content calendar sized to real capacity |
yt-comment |
Drafts comment replies in the creator's voice, triaged |
They pair naturally with the data layer: youtube finds the videos → transcript pulls the text → yt-* does the work.
📦 Install
Requirements: Python 3.10+ and yt-dlp:
python -m pip install --user -U yt-dlp
posts,home,shows,search,keywordsandtrackwork even without yt-dlp (pure HTTP). Everything else runs through it. Run it as a module (python -m yt_dlp) if the exe isn't on PATH.
Option 1: Install from PyPI (Recommended)
pip install youtube-skillbox
This installs the ytdata CLI globally and all skills for your agent.
Option 2: Install from Source (Development)
git clone https://github.com/hackers-reality/youtube-skillbox.git
cd youtube-skillbox
pip install -e .
Option 3: Manual Skill Installation (for agents)
Point the installer at your agent's skills directory (where it discovers SKILL.md files):
./install.sh "/path/to/your/agents/skills" # Linux / macOS — e.g. ~/.config/opencode/skills
.\install.ps1 "C:\path\to\your\agents\skills" # Windows — e.g. %USERPROFILE%\.config\opencode\skills
…or by hand — copy any folder from skills/ there yourself:
cp -r skills/* ~/.config/opencode/skills/ # example: OpenCode
Restart the agent session; the skills are auto-discovered by their description frontmatter.
🤖 Have your agent set it up for you
Don't want to install by hand? Paste this into any coding agent that can read files — Claude Code, OpenCode, Cursor, or any agent with skill discovery:
Set up my YouTube skills from https://github.com/hackers-reality/youtube-skillbox
1. Get the repo: git clone https://github.com/hackers-reality/youtube-skillbox.git
(or fetch files from GitHub if you can't clone)
2. Install the data engine: python -m pip install --user -U yt-dlp
(This is the ONLY runtime dependency — all skills share this one ytdata.py module)
3. Copy the data module to your agent's global skills directory (REQUIRED):
- Linux/macOS: cp -r skills/youtube/scripts ~/.config/opencode/skills/youtube/
- Linux/macOS: cp -r skills/transcript/scripts ~/.config/opencode/skills/transcript/
- Windows: xcopy skills\youtube\scripts %USERPROFILE%\.config\opencode\skills\youtube\ /E /I
- Windows: xcopy skills\transcript\scripts %USERPROFILE%\.config\opencode\skills\transcript\ /E /I
(The SKILL.md files reference `scripts/ytdata.py` and `scripts/gettranscript.py`
relative to their SKILL.md location. The scripts MUST be in the same folder structure.)
4. Point your agent at the skills:
- **OpenCode / Cursor / local agents**: skills auto-discovered from
.opencode/skills/ (project) and ~/.config/opencode/skills/ (global)
- **Claude Code / web agents**: Add the skills/ folder path in settings,
or copy skills/*/ to your agent's skills directory
- **Any agent with "add skill" UI**: Point to skills/ folder or paste SKILL.md files
5. Smoke-test: run
python ~/.config/opencode/skills/youtube/scripts/ytdata.py search "rick astley" --limit 1
(should return 1 video with title, views, channel, URL)
6. Ask your agent: "List all 13 YouTube skills and when to use each"
It should read each skills/*/SKILL.md and answer from there.
Important: All 13 skills (youtube, transcript, 10 yt-*) share one data module: skills/youtube/scripts/ytdata.py. The skills reference it via relative paths (scripts/ytdata.py from SKILL.md). You must copy the scripts/ folder alongside each skill's SKILL.md in your agent's skills directory (step 3 above). Or install globally with pip install -e . (then ytdata works from anywhere).
📝 Notes & limits
- YouTube may throttle (HTTP 429) if you hammer it — a small delay between bulk calls is enough.
postscosts one HTTP request per ~10 posts; keep--limit≤ 100 per invocation.sectionsshowsN+for community counts when more pages exist (exact when they fit on page 1).- Flat list view counts can show
?occasionally — useinfoon a specific video for exact numbers. - Private / age-restricted / deleted targets fail with a clear message instead of silence.
⚖️ Responsible use
This project reads publicly available YouTube data directly from the web rather than through the official API — strictly outside what YouTube's Terms of Service permit, even though that's common practice for personal tools like this.
- Personal use — read-only public data, no login, low volume: low risk. Keep it that way.
- Commercial or high-volume use — not recommended. Scaling it up, reselling data, or hammering YouTube meaningfully raises the risk of rate-limits, IP blocks, or takedown requests.
- Never point it at private, age-restricted, or members-only content — the tools intentionally fail instead of bypassing.
- No user-supplied YouTube Data API key is required — the project dynamically extracts YouTube's
INNERTUBE_API_KEYfrom YouTube's public page configuration. This does not imply unlimited access, guaranteed uptime, unlimited requests, or immunity from YouTube rate limits.
Use it at your own risk; this project is not affiliated with YouTube or Google. The code itself stays MIT-licensed — this section is guidance about how you use it against YouTube, not a restriction on the code.
📄 Third-Party Licenses
This project includes third-party code under the following licenses:
| Component | License | Copyright | Source |
|---|---|---|---|
youtube-agent-skill (10 creator skills) |
MIT | Copyright (c) 2026 Jake Schincariol | Jakeschincariol/youtube-agent-skill |
yt-dlp |
Unlicense | — | yt-dlp/yt-dlp |
Full license texts are available in THIRD_PARTY_LICENSES/.
📄 License
Released under the MIT License — free to use, modify, and redistribute.
🙏 Credits
- yt-dlp — the extraction engine underneath the data layer.
- The 10 creator (
yt-*) skills come from the community GitHub collectionyoutube-agent-skill— installed here nearly as-is (deduplicated only), not rewritten from scratch. - The
youtubeandtranscriptskills (scripts and docs, including every gap-fill in this README) were built and rewritten in this project. - This project reads publicly available YouTube data; use it responsibly and respect YouTube's Terms of Service.
Made so nobody has to pay for a YouTube API key again 🎉
Metadata
Release files for youtube-skillbox 0.4.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| youtube_skillbox-0.4.4.tar.gz | 103.5 kB | With provenance | Details for youtube_skillbox-0.4.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| youtube_skillbox-0.4.4-py3-none-any.whl | Python 3 | none | any | Details for youtube_skillbox-0.4.4-py3-none-any.whl |
Total release size: 215.3 kB
Release files / youtube_skillbox-0.4.4.tar.gz
| Download URL | youtube_skillbox-0.4.4.tar.gz |
|---|---|
| Size | 103.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
561f451597ebf2959f1a6c6e2b2c47165536b95af6e68884d060232fd47ee1ee
|
|
BLAKE2b-256 checksum How to use checksums |
848d8054471c5426f5ea02c0f7f40f575f0d3470c796d317d078fc77cf046aee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / youtube_skillbox-0.4.4-py3-none-any.whl
| Download URL | youtube_skillbox-0.4.4-py3-none-any.whl |
|---|---|
| Size | 111.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
51e6abbafc9303dd8caaa206832937fc47f4c1834e55fa83a946f7ee5df81993
|
|
BLAKE2b-256 checksum How to use checksums |
d625c300ac076ff8a69d4b7e7a042c01f8ea10fe91ebab0428f269741bc6a477
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logSecurity for youtube-skillbox 0.4.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for youtube_skillbox-0.4.4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.