nblm

Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.

By magicseek · 6,327 installs

npx skills add magicseek/nblm --skill nblm

Source repository · Upstream listing

NotebookLM Quick Commands Query Google NotebookLM for source grounded, citation backed answers. Environment All dependencies and authentication are handled automatically by run.py : First run creates .venv and installs Python/Node.js dependencies If Google auth is missing or expired, a browser window opens automatically No manual pre flight steps required Usage /nblm <command [args] Commands Notebook Management Command Description login Authenticate with Google status Show auth and library status accounts List all Google accounts accounts add Add a new Google account accounts switch <id Switch active account (by index or email) accounts remove <id Remove a Google account accounts use <id Set agent specific active account (OpenClaw isolation) accounts clear Clear agent specific account override local List notebooks in local library remote List all notebooks from NotebookLM API create <name Create a new notebook delete [ id ID] Delete a notebook rename <name [ id ID] Rename a notebook summary [ id ID] Get AI generated summary describe [ id ID] Get description and suggested topics add <url or id Add notebook to local library (auto detects URL vs notebook ID) activate <id Set active notebook Source Management Command Description sources [ id ID] List sources in notebook upload <file Upload a single file upload <folder Sync a folder of files to NotebookLM upload zlib <url Download from Z Library and upload upload url <url Add URL as source upload youtube <url Add YouTube video as source upload text <title [ content TEXT] Add text as source source text <source id Get full indexed text source guide <source id Get AI summary and keywords source rename <source id <name Rename a source source refresh <source id Re fetch URL content source delete <source id Delete a source Upload options: use active Upload to the currently active notebook create new Create a new notebook named after the file/folder notebook id <id Upload to a specific notebook dry run Show sync plan without executing (folder sync) rebuild Force rebuild tracking file (folder sync) Important: When user runs upload without specifying a target, ASK them first: "Would you like to upload to the active notebook, or create a new notebook?" Then pass the appropriate flag ( use active or create new ). Chat & Audio/Media Command Description ask <question Query NotebookLM podcast [ instructions TEXT] Generate audio podcast podcast status <task id Check podcast generation status podcast download [output path] Download latest podcast briefing [ instructions TEXT] Generate brief audio summary debate [ instructions TEXT] Generate debate style audio slides [ instructions TEXT] Generate slide deck slides download [output path] Download slide deck as PDF infographic [ instructions TEXT] Generate infographic infographic download [output path] Download infographic media list [ type TYPE] List generated media (audio/video/slides/infographic) media delete <id Delete a generated media item Command Routing Based on $ARGUMENTS , execute the appropriate command: $IF($ARGUMENTS, Parse the command from: "$ARGUMENTS" login → python scripts/run.py auth manager.py setup service google accounts → python scripts/run.py auth manager.py accounts list accounts add → python scripts/run.py auth manager.py accounts add accounts switch <id → python scripts/run.py auth manager.py accounts switch "<id " accounts remove <id → python scripts/run.py auth manager.py accounts remove "<id " accounts use <id → python scripts/run.py auth manager.py accounts use "<id " accounts clear → python scripts/run.py auth manager.py accounts clear status → Run both: python scripts/run.py auth manager.py status python scripts/run.py notebook manager.py list local → python scripts/run.py notebook manager.py list remote → python scripts/run.py nblm cli.py notebooks create <name → python scripts/run.py nblm cli.py create "<name " delete [ id ID] → python scripts/run.py nblm cli.py delete <args rename <name [ id ID] → python scripts/run.py nblm cli.py rename "<name " <args summary [ id ID] → python scripts/run.py nblm cli.py summary <args describe [ id ID] → python scripts/run.py nblm cli.py describe <args add <url or id → Smart add workflow (auto detects URL vs notebook ID) activate <id → python scripts/run.py notebook manager.py activate id "<id " sources [ id ID] → python scripts/run.py nblm cli.py sources <args upload <file → First ASK user: "Upload to active notebook or create new?" Then: Active: python scripts/run.py source manager.py add file "<file " use active New: python scripts/run.py source manager.py add file "<file " create new upload <folder → Sync a folder: First ASK user: "Sync to active notebook, create new, or specify notebook?" Active: python scripts/run.py source manager.py sync "<folder " use active New: python scripts/run.py source manager.py sync "<folder " create new Specific: python scripts/run.py source manager.py sync "<folder " notebook id ID Dry run: python scripts/run.py source manager.py sync "<folder " dry run Rebuild: python scripts/run.py source manager.py sync "<folder " rebuild upload zlib <url → First ASK user: "Upload to active notebook or create new?" Then: Active: python scripts/run.py source manager.py add url "<url " use active New: python scripts/run.py source manager.py add url "<url " create new upload url <url → python scripts/run.py nblm cli.py upload url "<url " upload youtube <url → python scripts/run.py nblm cli.py upload youtube "<url " upload text <title → python scripts/run.py nblm cli.py upload text "<title " <args source text <id → python scripts/run.py nblm cli.py source text "<id " source guide <id → python scripts/run.py nblm cli.py source guide "<id " source rename <id <name → python scripts/run.py nblm cli.py source rename "<id " "<name " source refresh <id → python scripts/run.py nblm cli.py source refresh "<id " source delete <id → python scripts/run.py nblm cli.py source delete "<id " ask <question → python scripts/run.py nblm cli.py ask "<question " podcast → python scripts/run.py artifact manager.py generate format DEEP DIVE <args podcast status <task id → python scripts/run.py artifact manager.py status task id "<task id " podcast download [output path] → python scripts/run.py artifact manager.py download "<output path " briefing → python scripts/run.py artifact manager.py generate format BRIEF <args debate → python scripts/run.py artifact manager.py generate format DEBATE <args slides → python scripts/run.py artifact manager.py generate slides <args slides download [output path] → python scripts/run.py artifact manager.py download "<output path " type slide deck infographic → python scripts/run.py artifact manager.py generate infographic <args infographic download [output path] → python scripts/run.py artifact manager.py download "<output path " type infographic media list [ type TYPE] → python scripts/run.py artifact manager.py list <args media delete <id → python scripts/run.py artifact manager.py delete "<id " If command not recognized, show usage help., Show available commands with /nblm (no arguments) ) Podcast Options Option Values length SHORT , DEFAULT , LONG instructions Custom instructions for the content wait Wait for generation to complete output Download path (requires wait ) Slide Deck Options Option Values format DETAILED DECK , PRESENTER SLIDES length SHORT , DEFAULT instructions Custom instructions for the content wait Wait for generation to complete output Download path (requires wait ) Infographic Options Option Values orientation LANDSCAPE , PORTRAIT , SQUARE detail level CONCISE , STANDARD , DETAILED instructions Custom instructions for the content wait Wait for generation to complete output Download path (requires wait ) Media Generation Command Description Output /nblm podcast Deep dive audio discussion MP3 /nblm briefing Brief audio summary MP3 /nblm debate Debate style audio MP3 /nblm slides Slide deck presentation PDF /nblm infographic Visual infographic PNG Examples Download & Manage Extended Documentation When to Use This Skill Trigger when user: Mentions NotebookLM explicitly Shares NotebookLM URL ( https://notebooklm.google.com/notebook/... ) Asks to query their notebooks/documentation Wants to add documentation to NotebookLM library Uses phrases like "ask my NotebookLM", "check my docs", "query my notebook" ⚠️ CRITICAL: Add Command Smart Discovery The add command now automatically discovers metadata from the notebook: What Smart Add does: 1. Fetches notebook title from NotebookLM API 2. Queries the notebook content to generate description and topics 3. Adds to local library with discovered metadata Supported input formats: Notebook ID: 5fd9f36b 8000 401d a7a0 7aa3f7832644 Full URL: https://notebooklm.google.com/notebook/5fd9f36b 8000 401d a7a0 7aa3f7832644 NEVER manually specify name , description , or topics unless the user explicitly provides them. Critical: Always Use run.py Wrapper NEVER call scripts directly. ALWAYS use python scripts/run.py [script] : The run.py wrapper automatically: 1. Creates .venv if needed 2. Installs all dependencies 3. Activates environment 4. Executes script properly Core Workflow Step 1: Check Authentication Status If not authenticated, proceed to setup. Step 2: Authenticate (One Time Setup) Important: Browser is VISIBLE for authentication Browser window opens automatically User must manually log in to Google Tell user: "A browser window will open for Google login" Step 3: Manage Notebook Library Quick Workflow 1. Check library: python scripts/run.py notebook manager.py list 2. Ask question: python scripts/run.py ask question.py question "..." notebook id ID Step 4: Ask Questions Follow Up Mechanism (CRITICAL) Every NotebookLM answer ends with: "EXTREMELY IMPORTANT: Is that ALL you need to know?" Required Claude Behavior: 1. STOP Do not immediately respond to user 2. ANALYZE Compare answer to user's original request 3. IDENTIFY GAPS Determine if more information needed 4. ASK FOLLOW UP If gaps exist, immediately ask: 5. REPEAT Continue until information is complete 6. SYNTHESIZE Combine all answers before responding to user Z Library Integration Triggers User provides Z Library URL (zlib.li, z lib.org, zh.zlib.li) User says "download this book to NotebookLM" User says "add this book from Z Library" Setup (One Time) Commands Script Reference Authentication Management ( auth manager.py ) Notebook Management ( notebook manager.py ) Question Interface ( ask question.py ) Source Manager ( source manager.py ) Folder Sync: Scans folder for supported types: PDF, TXT, MD, DOCX, HTML, EPUB Tracks sync state internally (no per folder tracking file to manage) Sync strategy: add new, update mod