blog-notebooklm

Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents. Manages notebook library, handles Google authentication, and supports smart discovery. Works standalone via /blog notebooklm or internally from blog-write and blog-researcher for source-groun

By agricidaniel · 2,034 installs

npx skills add agricidaniel/claude-blog --skill blog-notebooklm

Source repository · Upstream listing

Blog NotebookLM: Source Grounded Research from Your Documents Query Google NotebookLM notebooks directly from Claude Code for citation backed answers from Gemini. Each question opens a headless browser session, retrieves the answer from your uploaded documents, and closes. Responses are source grounded model answers, not proof of truth: uploaded documents may be primary or secondary, and the answer can still omit context. Answers provide usable provenance only when the returned citation identifies a verifiable underlying source. Record a stable source URL and a publication, study period, or retrieval date when that detail affects verification or interpretation. Use the underlying source title as the inline citation. Do not cite the private NotebookLM URL as the bibliography entry for public content. Quick Reference Command What it does /blog notebooklm ask <question Query a notebook for source grounded answers /blog notebooklm discover <url Smart discover notebook content before cataloging /blog notebooklm library list List all notebooks in library /blog notebooklm library add <url Add a notebook to library /blog notebooklm library search <query Search notebooks by keyword /blog notebooklm library remove <id Remove a notebook from library /blog notebooklm setup One time Google authentication (browser visible) /blog notebooklm status Check authentication status /blog notebooklm cleanup Clean browser state (preserves library) Prerequisites Google account with NotebookLM access Python 3.11+ (venv managed automatically by run.py ) Google Chrome (installed automatically on first run via Patchright) One time authentication setup (interactive Google login in visible browser) Use the run.py Wrapper Call scripts only through the run.py wrapper: python3 scripts/run.py [script] : The run.py wrapper automatically creates .venv , installs dependencies, sets up Chrome, and executes the target script. Auth Check (Gate Pattern) Before any query operation, check authentication: If authenticated: proceed with the query If not authenticated: inform user and guide to setup: "NotebookLM requires Google login. Run /blog notebooklm setup to authenticate." When called internally (from blog write or blog researcher): return silently with no error if not authenticated. Never block the writing workflow. Setup Workflow For /blog notebooklm setup : Tell the user: "A browser window will open. Please log in to your Google account." Authentication persists via browser profile + cookie injection (hybrid approach). Other auth commands: Query Workflow For /blog notebooklm ask <question : Step 1: Check Auth Run auth check (see gate pattern above). If not authenticated, guide to setup. Step 2: Resolve Notebook Determine which notebook to query: If notebook url provided: validate it is a NotebookLM notebook URL, then use it If notebook id provided: look up in library If neither: use active notebook from library If no active notebook: show library and ask user to select Step 3: Ask the Question Step 4: Analyze and Follow Up Every response ends with a follow up prompt. Required behavior: 1. STOP : do not immediately respond to the user 2. ANALYZE : compare the answer to the user's original request 3. IDENTIFY GAPS : determine if more information is needed 4. ASK FOLLOW UP : if gaps exist, immediately ask a follow up question 5. REPEAT : continue until information is complete 6. SYNTHESIZE : combine all answers before responding to the user Smart Discovery Workflow For /blog notebooklm discover <url : When adding a notebook without knowing its content, query it first: Do not guess descriptions; discover or ask the user. Library Management Internal API (for blog write / blog researcher) When invoked as a Task subagent from blog write or blog researcher: Input (provided by calling skill): question : Research question relevant to the blog topic notebook id or notebook url : Which notebook to query context : "internal" (signals graceful fallback mode) Process: 1. Check auth status: if not authenticated, return empty result silently 2. Query the notebook with the research question 3. Parse and return structured response Output (returned to calling skill): Graceful fallback: If auth is missing or query fails, return immediately with no error. The calling workflow continues with WebSearch based research. Never block blog write or blog rewrite because NotebookLM is unavailable. Data Storage All data stored inside the skill directory: data/library.json : Notebook metadata and library data/auth info.json : Authentication status data/browser state/ : Chrome profile with cookies Security: All data directories are gitignored. Never commit auth or browser state. Browser lifecycle and authenticated context isolation are centralized in scripts/browser session.py . Command scripts must use that helper instead of opening an additional persistent profile or copying cookies into another file. Error Handling Error Resolution Not authenticated Run /blog notebooklm setup ModuleNotFoundError Always use run.py wrapper Browser crash cleanup manager.py confirm preserve library , then re auth Rate limit (50/day) Wait until midnight PST or switch Google account Notebook not found Check with notebook manager.py list Query timeout (120s) Retry with simpler question or show browser to debug MCP unavailable (internal) Return silently: writing workflow uses WebSearch Limitations No session persistence (each question = new browser session) Rate limits on free Google accounts (50 queries/day) Manual upload required (user must add docs to NotebookLM web UI) Browser overhead (few seconds per question for launch + teardown) Local Claude Code only (not available in web UI) Reference Documentation Load on demand: do NOT load all at startup: references/commands.md : Full CLI commands, parameters, and workflow patterns references/troubleshooting.md : Error solutions, recovery procedures, debugging