// 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