// 2026-04-24 · 5 min

NotebookLM + Claude Code: deep research bez klikania

NotebookLM + Claude Code: deep research bez klikania

TL;DR

notebooklm-py
to nieoficjalna biblioteka Pythona, która daje programatyczny dostęp do
NotebookLM — razem z gotowym skillem dla Claude Code. Instalujesz raz,
logujesz się przez przeglądarkę, i potem: „zrób mi deep research o X,
raport briefing-doc i mind-mapę” — wszystko z terminala, bez
klikania.

Nieoficjalne = Google może to jutro popsuć. Do researchu i
prototypów: super. Do produkcji klienckiej: nie.

Problem

NotebookLM jest świetny do researchu: wrzucasz 20 URL-i, on to
indeksuje, zadajesz pytania z cytowaniami, generujesz audio overview,
mind-mapę, raport. Tylko że cały workflow jest w
przeglądarce
:

  1. Otwórz NotebookLM.
  2. Nowy notebook.
  3. Wklej URL. Czekaj.
  4. Wklej kolejny. Czekaj.
  5. „Generate audio overview”. Czekaj 15 minut.
  6. Pobierz MP3, gdzieś go sobie zapisz.
  7. Gdy chcesz mieć to w swoim projekcie — kopiuj-wklej.

Przy jednym notebooku to jeszcze OK. Przy dziesięciu research
threadach tygodniowo — zgrzyta.

Rozwiązanie:
notebooklm-py + skill do Claude Code

Biblioteka notebooklm-py
(autor: teng-lin, MIT) robi dwie rzeczy:

  1. CLI i Python API do wszystkiego co NotebookLM
    potrafi — tworzenie notebooków, dodawanie źródeł (URL, PDF, YouTube,
    Drive), chat z cytowaniami, generowanie
    audio/video/raportów/mind-map/quizów/fiszek/infografik, pobieranie
    artefaktów.
  2. Skill dla Claude Code — instalowany jedną komendą,
    aktywuje się gdy piszesz „zrób mi podcast o X” albo
    /notebooklm.

Jako bonus: część rzeczy, których web UI nie oferuje
— batch download, export quizów/fiszek do JSON/Markdown, mind-mapy jako
JSON, slide decki jako PPTX.

Instalacja

# Biblioteka + playwright (do pierwszego logowania)
uv tool install "notebooklm-py[browser]"
uv tool run --from playwright playwright install chromium

# Login (otwiera Chromium, zalogujesz się przez Google)
notebooklm login

# Skill do Claude Code
notebooklm skill install

Skill ląduje w ~/.claude/skills/notebooklm/SKILL.md.
Cookies trafiają do ~/.notebooklm/storage_state.json (perm
600).

Jak wygląda workflow

Scenariusz z tego tygodnia — robię research „jak zrobić aplikację na
CarPlay żeby nie zagryzać zębów”:

Ja: ok utwórz nowy notebook i znajdź mi jak zrobić
    aplikację na CarPlay żeby nie zagryzać zębów

Claude Code:
1. notebooklm create "CarPlay bez bólu" --json
   → notebook ID
2. notebooklm source add-research "Jak stworzyć aplikację
   na CarPlay..." --mode deep --no-wait --notebook <id>
3. notebooklm research wait -n <id> --import-all --timeout 1800
   → 77 źródeł znalezione
4. notebooklm generate report --format briefing-doc --append
   "Grupa docelowa: developer iOS... priorytety: (1) entitlements,
   (2) co nie jest dozwolone, (3) template'y CPListTemplate/CPMapTemplate,
   (4) checklist, (5) przykłady..." --json
5. notebooklm artifact wait <id>
6. notebooklm download report ./raport.md -a <id>
7. notebooklm generate mind-map; notebooklm download mind-map ./mindmap.json

Efekt: dwa pliki w ~/Research/carplay-bez-bolu/. Raport
ma TL;DR „zrób tak, żeby nie zagryzać zębów”, konkretne entitlement keys
(com.apple.developer.carplay-audio etc.), realne estymaty
(„~1 miesiąc na entitlement”, „4–8 tygodni dev”), listę zakazów App
Review. 93 linie konkretu, nie „introduction to CarPlay”.

Czas: ~25 minut research, ~8 minut raport. Zero klikania.

Pułapki (uczciwie)

Nic nie działa od razu idealnie. Rzeczy, na które trafiłem:

1.
research wait --import-all pada przy >30 źródłach

Deep research znalazł 77 źródeł. RPC IMPORT_RESEARCH ma
30-sekundowy timeout, retry z backoffem próbuje 5 razy — i każdy retry
duplikuje importowane źródła. Skończyłem z 385 źródłami
w notebooku (292 ready, 93 error), gdzie powinno być 77.

Obejście: wywołuj research wait bez
--import-all, potem importuj selektywnie.

2.
Subagenty Claude Code nie mają dostępu do notebooklm

Skill zachęca do spawnowania subagentów Task dla długich operacji — w
moim setupie subagent dostał Bash permission denied na
pierwszym notebooklm research wait. Musiałem puścić to z
głównej konwersacji jako Bash run_in_background=true.

To jest konfiguracja permissionów Claude Code, nie bug biblioteki —
ale warto wiedzieć zanim zaplanujesz pipeline na subagentach.

3. Rate limity Google

Audio, video, quiz, flashcards, infographic i slide deck — to
może failować z powodu rate limitów Google (skill to
otwarcie mówi). Retry po 5–10 minutach zwykle pomaga. Raport, mind-map,
data-table — zwykle działają bez problemu.

4. Cookies Google w plain JSON

~/.notebooklm/storage_state.json zawiera Twoje cookies
do .google.com. Plik ma -rw-------, więc OS
Cię chroni, ale kto wejdzie na Twojego usera ma pełny dostęp do
Twojego Google
(nie tylko NotebookLM). Nie trzymaj tego na
współdzielonej maszynie.

5. To nieoficjalne API

Google może zmienić endpointy z dnia na dzień i biblioteka przestanie
działać. Do researchu, prototypów, personal automation — fine. Do
czegoś, co klient będzie używał co dzień — nie.

Audyt bezpieczeństwa
skilla i biblioteki

Przed instalacją przeskanowałem oba:

  • SKILL.md (565 linii, 25 KB): 0 ukrytych znaków
    unicode, 0 wzorców prompt-injection, żadnych podejrzanych URL-i. Jedyny
    curl to instrukcja instalacji z
    api.github.com.
  • Biblioteka (42 pliki .py, 1.4 MB): brak
    eval/exec/pickle.loads/shell=True/base64-obfuskacji.
    Jedyne subprocess.run (2 wywołania) to
    playwright install chromium. Sieciowo gada tylko z
    accounts.google.com, notebooklm.google.com,
    youtube.com, github.com.

Wygląda uczciwie. Nie znaczy że nie zepsują tego w v0.5.0 — przy
update warto zerknąć w CHANGELOG.

Dla kogo to jest

  • Dla Ciebie: jeśli robisz research tygodniowo,
    lubisz terminal i nie masz zabronione wysyłanie URL-i do Google.
  • Nie dla Ciebie: jeśli pracujesz z materiałami,
    których nie możesz wrzucić do NotebookLM (NDA, dane klientów, cokolwiek
    regulowanego). NotebookLM to nadal Google, a nieoficjalna biblioteka nie
    zmienia tego, gdzie trafiają dane.

Linki