GitHub skill · install in Claude Code
Turn Jeff Nippard into your AI trainer.
Most AI fitness advice sounds confident but you have no idea where it came from — real sports science, a bro-science thread, or thin air. This build fixes that. It's a Jeff Nippard training coach running in Claude Code on 285 of his videos, with one unbreakable rule: every claim is backed by a real video, quoted verbatim, or it doesn't get made. If Jeff never covered something, the coach says so instead of fabricating a source.
The full build
🔒 Drop your email to reveal the build
Get the full install, free.
Drop your email and the complete build — both install paths, every command, and the troubleshooting — unlocks instantly, plus every other guide and resource in the library. One email a week, unsubscribe anytime.
What makes it trustworthy
285 Jeff Nippard videos → NotebookLM (a searchable, citable knowledge base) → a script that forces real citations → the coach in Claude Code that interviews you and writes your program. Three things make it work:
NotebookLM does the remembering
Google's NotebookLM ingests hundreds of YouTube transcripts and answers questions with citations back to the exact spoken passage. It's the source of truth — not the model's memory.
A small script forces real citations
ask_cited.py asks NotebookLM a question and prints the answer alongside the actual video titles and the verbatim quotes. Never paraphrased, never invented — pulled straight from the notebook this session.
The coach refuses to freestyle
The interview is wired so a claim is either backed by a title and quote the notebook returned, or it doesn't get made. Here's what a moment of the conversation actually looks like — that source line is real, you could open the video and hear Jeff say it:
What you'll need
A free Google account is enough to start.
| Role | Tool | Why |
|---|---|---|
| Agent | Claude Code | The app you chat with. Runs the interview, queries the notebook, writes your program. |
| Notebook | NotebookLM | Stores the 285 videos and answers with citations. Free Google account works (50-source cap). |
| Plan | Plus / Pro | Optional. Raises the cap to 300 sources per notebook for full channel coverage. |
| Bonus | Strong app | Optional. Drop your lifting log in and the coach scores your real volume vs. Jeff's criteria. |
The fast path · one command
The repo ships a setup script that does almost everything. Two equivalent ways to run it — both do exactly what the manual steps below do, so if anything hiccups you can fall back to those.
Option A · easiest — let Claude do it
Download the coach from github.com/artemnovitckii/jeffnippard-coach (Code → Download ZIP, then unzip), open the folder in Claude Code, and type:
Claude installs the tools, hands you the two Google logins, loads the videos, and verifies it all works.
Option B · one command — run it in a terminal
From inside the unzipped folder:
Press Enter to accept the defaults. It walks through the same steps automatically.
The manual path · every step explained
NotebookLM has no official API, so two small community tools drive it for you. Here's the whole thing, step by step.
01 · Install the tooling
Install uv (a clean Python tool installer), then the two NotebookLM CLIs:
On Windows PowerShell, install uv with irm https://astral.sh/uv/install.ps1 | iex instead.
If a command says "not found" right after installing, close the terminal and open a new one — your PATH just needs a refresh.
02 · Log into NotebookLM (twice)
The read tool and the write tool are separate projects with separate logins. Run each and complete the Google window — use the same account for both:
Burn this in: the nlm (read) login only lasts ~20 minutes. When the coach later says "authentication expired," that's not a bug — just run nlm login again.
03 · Load the videos into a notebook
This builds your own copy of Jeff's content (you can only query notebooks your account owns). From inside the coach folder:
Free caps at 50, Plus/Pro at 300. On free, change --count 300 to --count 50. Keep --concurrency 1 — loading too fast makes videos fail as empty red rows. Let it finish indexing before you query.
04 · Point the coach at your notebook
Save your notebook id so the coach uses it automatically:
Open .notebooklm-id in any editor and replace the first line with just your notebook id. Save. (Or export NOTEBOOKLM_ID=<your-id>.)
05 · Prove the citations are real
The moment of truth:
You'll get an answer followed by real Jeff video titles and the exact passages he said. If you see that, the engine works.
06 · Use your coach
Open the folder in Claude Code and say:
It runs a real consultation — one question at a time, conversational, not a form. It walks through training volume, exercise selection, progression, and frequency, citing a real Jeff video for every principle, then writes you a program.
Want it built on your lifting history? Export your log from the Strong app and drop it at data/strong_workouts.csv — it's private and never leaves your machine. The coach scores your actual volume, frequency, and rep ranges against Jeff's criteria instead of guessing. (Open the folder with no data loaded and it starts the interview on its own.)
Why "no fabrication" is the whole point
An honest "I can't source that" beats a confident fake. LLMs are extremely good at plausible-sounding nonsense — ask one for a Jeff Nippard video and it'll happily cite a title that sounds completely real and does not exist. The moment your coach does that once, every other citation becomes suspect and the trust is gone.
So the rule is absolute: a claim is either backed by a title and quote the notebook returned this session, or the claim isn't made. The coach pre-fetches the core training topics once (so it stays fast), runs a live query for anything off-topic, and when the notebook genuinely has nothing on a subject it says so. That last behavior is a feature, not a limitation.
FAQ & troubleshooting
"authentication expired" — is that a bug?
No, it's expected. The nlm (read) login only lasts about 20 minutes. When the coach says authentication expired, just run nlm login again and keep going.
Do I need NotebookLM Plus?
Not to start. Free Google accounts cap at 50 videos per notebook — enough for Jeff's top content. Plus/Pro raises it to 300. On free, change --count 300 to --count 50, otherwise the extra videos show up as failed red rows (that's the tier limit, not a bug).
What if the coach says "the notebook doesn't cover this"?
Working as intended. It won't invent a source Jeff never gave. An honest "I can't source that" beats a confident fake every time — that's the whole point of the project. (Deep cardio / VO2-max science isn't really Jeff's lane, for example, so it'll say so.)
Why not just ask ChatGPT for a Jeff Nippard program?
Because a chatbot will happily cite a video like "How To Design The Perfect Workout Program" — a title that sounds real and does not exist. The moment that happens once, every other citation is suspect. This build makes fabrication structurally impossible: no real title + quote, no claim.
Videos show up as red / empty rows. What happened?
You either exceeded your tier (use --count 50 on free) or loaded too fast. Keep --concurrency 1 so NotebookLM can index each transcript cleanly, then delete the red rows and re-add them.
Can I build this for someone other than Jeff?
Yes — nothing is hardwired except the content. Load a different YouTube channel into a new notebook, put its id in .notebooklm-id, copy CLAUDE.md.template to CLAUDE.md and rewrite the persona. The citation discipline and interview flow carry over unchanged. Nutritionist, product thinker, any podcaster.
Build it, point it at your favorite expert, and never wonder where the advice came from again. Everything is open source (MIT) — the coach repo and the base skill it's built on.
Original guide by Artem Novitckii. If a workflow breaks or you want a feature added, ping him on Instagram, join the weekly call on Skool, or browse his resource library.