novitckii
← All resources
Gated resource · Claude skillClaude CodeNotebookLMMIT

Turn Jeff Nippard into your own personal AI trainer.

Most AI fitness advice sounds confident but you have no idea where it came from — sports science, a bro-science Reddit 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.

~30–45 min, mostly hands-off · every recommendation cites the exact video + timestamp · free & MIT-licensed · works for any other fitness coach (or any expert) with a YouTube channel.

What you're building

Three things make 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.

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. If Jeff never covered something, the coach says so instead of fabricating a source.

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:

You: interview me to get jacked

Coach: For most muscles, the growth sweet spot is about
      10–20 hard sets per week. Past that you hit "junk
      volume" that just costs you recovery.

      📺 Source: "How Much Training Volume Do You Really Need?"
         "…once you get into the 20 to 30 sets per week zone
          you start running into overtraining issues…"

      So, one question: how many days a week can you
      realistically train?
What you'll need

A free Google account is enough to start.

AgentClaude Code

The app you chat with. Runs the interview, queries the notebook, writes your program.

NotebookNotebookLM

Stores the 285 videos and answers with citations. Free Google account works (50-source cap).

PlanPlus / Pro

Optional. Raises the cap to 300 sources per notebook for full channel coverage.

BonusStrong app

Optional. Drop your lifting log in and the coach scores your real volume vs. Jeff's criteria.

The fast path · one command

Let Claude do it, or run one line.

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:

 set me up

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:

bash setup.sh

Press Enter to accept the defaults. It walks through the same steps automatically.

The manual path · every step explained

By hand, so troubleshooting is trivial.

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:

# Install uv (Mac/Linux)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Then the two NotebookLM tools
uv tool install notebooklm-mcp-cli
uv tool install "notebooklm-py[browser]"
uvx --from "notebooklm-py[browser]" playwright install chromium

On Windows PowerShell, install uv with irm https://astral.sh/uv/install.ps1 | iex instead.

iIf 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:

nlm login          # read side. Lasts ~20 minutes.
notebooklm login   # write side. Lasts weeks.
nlm notebook list  # [] means "logged in, no notebooks yet"
!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:

# a) Scrape the channel's video list
python3 scripts/load_channel.py scrape \
  --channel "https://www.youtube.com/@JeffNippard" \
  --output /tmp/jeff-videos.json

# b) Create the notebook — it prints an id. COPY IT.
notebooklm create "Jeff Nippard - Training Coach"

# c) Load the videos (paste the id below)
uv run --with "notebooklm-py[browser]" python3 \
  scripts/load_channel.py load \
  --videos /tmp/jeff-videos.json \
  --notebook <notebook-id> \
  --count 300 --concurrency 1
!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:

cp .notebooklm-id.example .notebooklm-id

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:

python3 scripts/ask_cited.py \
  "How much training volume does Jeff recommend per muscle per week?"

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:

 interview me to get jacked

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

Things that come up first.

"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.

Run it, break it, ping me

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. If a workflow breaks or you want a feature added, ping me on Instagram or join the weekly call on Skool.

Get the AI trainer — free

Drop your email and the full build unlocks instantly — the coach repo, the setup, and every step. Plus every other resource in the library. One email a week, unsubscribe anytime.

Make it your expert

Any expert. Real citations. No fabrication.

Same machine, any YouTube channel — a nutritionist, a product thinker, a podcaster you love. Load the channel, swap the persona, keep the citation discipline.