notebooklm-skill: When Claude Code Stops Retrieving and Starts Asking

A browser-automated bridge that lets Claude use NotebookLM as a source-grounded research layer, with smart notebook routing, recursive metadata discovery, and zero vector-database plumbing.

8 min read • View on GitHub • More from PleasePrompto

A wide editorial scene shows a laptop marked Claude Code on one side of a narrow gap and a filing cabinet marked NotebookLM on the other. A paper bridge crosses the space with slips labeled query, synthesis, and citations, showing how the skill routes questions to a grounded knowledge engine instead of rebuilding retrieval locally.
The shortcut is the point. Claude Code stays in the CLI while NotebookLM does the retrieval and synthesis work in the browser.
Key Takeaways

The easiest way to understand this repo is to flip the usual RAG story. Claude Code is not doing the heavy lifting here. It is acting like a control plane that hands questions to NotebookLM, then uses the answer as if it came from a private, source-grounded expert.

That inversion matters because it sidesteps chunking, embeddings, and the context-window tax. The project does not try to outbuild a retrieval system. It borrows Google’s and focuses on the last mile: asking the right notebook at the right time.

Why this beats rebuilding RAG

NotebookLM is the differentiator. It is not just a place to store documents. It is already a synthesis layer, which means the skill can lean on Gemini’s source-grounded response path instead of reconstructing that logic locally.

ApproachWhat you manageWhere the synthesis happensMain trade-off
Claude reads raw docsChunking, prompts, token budgetInside ClaudeFast to start, weak on scale
Local RAGEmbeddings, vector DB, retrieval tuningInside your stackFlexible, but heavy to maintain
notebooklm-skillNotebook selection and browser automationInside NotebookLMLeverages Google, but depends on UI stability
NotebookLM MCP serverProtocol integration and persistent sessionsInside NotebookLMBroader tool support, more moving parts

Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini.

PleasePrompto, Project Creator/Maintainer · SKILL.md at master · PleasePrompto/notebooklm-skill
A close-up scene shows two hands assembling a local index card from a notebook transcript. One hand holds a magnifying glass over a page, while the other writes name, tags, and summary into a file drawer, illustrating how the skill learns notebook metadata before storing it locally.
Smart Add is the hidden gem. The notebook can describe itself before the library files it away.

The agent loop inside the skill

The repo is organized like a small, opinionated control system. SKILL.md tells Claude when to use the scripts. run.py bootstraps a local virtual environment. ask_question.py opens the browser, types the question, waits for the answer to stabilize, and returns the response.

# Simplified data path
user_question -> SKILL.md routing -> scripts/run.py -> scripts/ask_question.py
-> browser session -> NotebookLM query -> Gemini answer -> Claude response

# The point is not parsing documents locally.
# The point is selecting the right notebook and asking it well.

Smart Add turns notebook curation into a loop. The system can discover what a notebook contains, store that metadata locally, then use it to route the next question faster.

This is the part that makes the project feel bigger than a connector script. The notebook is not just added to a list. It is interviewed first, and the answer becomes part of the routing layer.

How it survives Google’s UI

The reliability story is browser choreography, not API elegance. The project leans on persistent authentication, Chrome profile state, and human-like typing and mouse movement to keep NotebookLM usable across sessions.

That makes the system practical, but it also defines the ceiling. The skill depends on selectors, DOM behavior, and a web app that was never designed as a public automation surface. If the UI shifts, the bridge needs repairs.

LayerWhat it doesWhy it exists
Persistent browser profileKeeps login state aliveAvoids repeating Google auth
State fileStores cookies and session dataMakes the browser context reusable
Human-like inputTyping and movement heuristicsReduces bot-like behavior
Selector pollingWaits for NotebookLM output to settlePrevents scraping partial answers

What breaks, and why that matters

The fragility is not a bug in the thesis. It is part of it. This repo chooses a working product surface over architectural purity, which is exactly why it is interesting to people building agents today.

Compared with local RAG, the setup burden drops sharply. Compared with a protocol-native integration like an MCP server, the scope narrows. In return, you get a direct path into a knowledge product that already knows how to synthesize documents into answers.

QuestionRaw docsLocal RAGnotebooklm-skill
Need embeddings?NoYesNo
Need vector DB?NoYesNo
Need browser automation?NoSometimesYes
Need UI stability?NoNoYes
Need source-grounded synthesis?Not by defaultMaybeYes

That is the larger bet. Browser automation is becoming a shadow API for tools that expose power through interfaces instead of clean endpoints. This repo is a crisp example of that shift, and it does so with unusually little ceremony.