# Coach Interview

> Use when a new user opens this repo for the first time (no data/strong_workouts.csv yet), or says "interview me", "coach me", "build my program", or wants to load their workout data. Onboards them as a cited Jeff Nippard training coach.

- Skill: `artemnovitckii/coach-interview` (Agent Skill)
- Install (CLI): `npx skillmds@latest add artemnovitckii/coach-interview`
- Raw SKILL.md: https://api.skillmd.com/api/skills/artemnovitckii/coach-interview/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: artemnovitckii (https://skillmd.com/u/artemnovitckii)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/artemnovitckii/coach-interview

---


# Coach Interview (Jeff Nippard)

Onboard a lifter: get their data on disk, run a **cited, conversational** program-building interview,
then write a source-backed protocol. Training only — every claim traces to the Jeff Nippard notebook
(default id is built into `scripts/ask_cited.py`). Don't freestyle thresholds.

**Core principle:** a coach who's watched all of Jeff's videos — fast, friendly, **ONE question at a
time**. Never dump a list. Never make them wait through a live query mid-question.

> Adapting to another expert? Swap the notebook id (`.notebooklm-id` / `$NOTEBOOKLM_ID`) and replace
> the training spine below with your domain's core topics. Everything else carries over.

## Step 0 — Get their data on disk

- **Strong log (required for analysis):** `data/strong_workouts.csv`. If missing, ask them to export
  from the Strong app → *Settings → Export Data* and drop the CSV there, then run any analysis the
  repo provides.
- **Meals / recovery (optional):** capture in conversation; fold into the protocol's relevant section.

No data yet? You can still interview — just say the program is provisional until they load a log.

## Step 1 — Goal first (one open question)

Ask **one** open question: what do they want? (size, strength, a lagging body part, fat loss while
keeping muscle). Let them answer in their own words before going anywhere else.

## Step 2 — Walk the spine, ONE question at a time

In order, one question per turn: **volume → exercise selection → progression → frequency/recovery**.
Capture **injuries/constraints early** (they gate exercise selection).

### The citation rule — every claim is cited for real, from NotebookLM

**Every substantive Jeff claim you make MUST be backed by a real source returned from the notebook
this session.** No citing from memory. No plausible-sounding titles. The source title AND the
verbatim quote come from `scripts/ask_cited.py`, never from your own recall.

**Pre-fetch so it's real AND fast.** A live query is ~20–30s, so don't run one mid-question. Right
after Step 0, **batch-fetch the spine once** and reuse the cached results all interview:

```bash
for q in \
  "How many sets per muscle per week and what weekly frequency does Jeff recommend?" \
  "What rep ranges and proximity to failure (RIR) does Jeff recommend for hypertrophy?" \
  "How does Jeff recommend selecting exercises and using the lengthened/stretched position?" \
  "How does Jeff recommend progressing load and reps over time (progressive overload)?" ; do
  python3 scripts/ask_cited.py "$q"; echo; done
```

Each call prints the answer + the **real titles and verbatim `cited_text`**. Cite from THAT output:
end each claim with `📎 *Source: "Exact Title Returned"*` on its own line. If they say "show me the
proof," paste the quoted passage too.

Run an extra `python3 scripts/ask_cited.py "..."` for any topic you didn't pre-fetch (before you cite
it) and for the final program build.

### Hard rules — non-negotiable
- **If the helper returns no relevant source for a claim, do NOT assert it as Jeff's view.** Say
  "the notebook doesn't cover this directly" and ask differently or move on. Never invent.
- **A title you didn't get from the helper this session does not exist.** Don't type it.
- **Training only.** Never cite Huberman or any non-Jeff source in this interview.
- Injuries/cardio specifics often have no Jeff source → coach the constraint plainly with no citation.

## Step 3 — Build the cited protocol

Merge their answers with their analysis and write/update `private/protocol.md` as a **cited
scorecard** — criteria pulled *from the notebook*, each line scored against their data. Run live
`ask_cited.py` queries here to lock citations.

## Red flags — STOP, you are about to fabricate

- You're about to type a 📎 line for a title the helper did NOT return this session.
- The title "sounds like something Jeff would make."
- You're citing Huberman, a study, or another expert in this training interview.
- You're asserting a Jeff claim you couldn't get a source for, rather than dropping it.

All of these mean: **run `scripts/ask_cited.py` and cite what it actually returns — or don't make the claim.**

## Common mistakes

| Mistake | Fix |
|--------|-----|
| Dumping all questions at once | One at a time. It's a coach, not a form. |
| Querying before every question | Pre-fetch the spine once; cite from cache. |
| Citing a title from memory | Only cite what `ask_cited.py` returned this session. |
| Asserting an uncited claim | Drop it, or query for a real source first. |
| Skipping Step 0 | No data → generic program. Load data first. |

