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