nblmUse this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automati...
Install via ClawdBot CLI:
clawdbot install magicseek/nblmQuery Google NotebookLM for source-grounded, citation-backed answers.
All dependencies and authentication are handled automatically by run.py:
.venv and installs Python/Node.js dependencies/nblm
| 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 | Switch active account (by index or email) |
| accounts remove | Remove an account |
| local | List notebooks in local library |
| remote | List all notebooks from NotebookLM API |
| create | Create a new notebook |
| delete [--id ID] | Delete a notebook |
| rename | Rename a notebook |
| summary [--id ID] | Get AI-generated summary |
| describe [--id ID] | Get description and suggested topics |
| add | Add notebook to local library (auto-detects URL vs notebook ID) |
| activate | Set active notebook |
| Command | Description |
|---------|-------------|
| sources [--id ID] | List sources in notebook |
| upload | Upload a single file |
| upload | Sync a folder of files to NotebookLM |
| upload-zlib | Download from Z-Library and upload |
| upload-url | Add URL as source |
| upload-youtube | Add YouTube video as source |
| upload-text | Add text as source |
| source-text | Get full indexed text |
| source-guide | Get AI summary and keywords |
| source-rename | Rename a source |
| source-refresh | Re-fetch URL content |
| source-delete | 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 - 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).
| Command | Description |
|---------|-------------|
| ask | Query NotebookLM |
| podcast [--instructions TEXT] | Generate audio podcast |
| podcast-status | 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 | Delete a generated media item |
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 python scripts/run.py auth_manager.py accounts switch "
accounts remove python scripts/run.py auth_manager.py accounts remove "
status â Run both:
python scripts/run.py auth_manager.py statuspython 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 python scripts/run.py nblm_cli.py create "
delete [--id ID] â python scripts/run.py nblm_cli.py delete
rename python scripts/run.py nblm_cli.py rename "
summary [--id ID] â python scripts/run.py nblm_cli.py summary
describe [--id ID] â python scripts/run.py nblm_cli.py describe
add
activate python scripts/run.py notebook_manager.py activate --id "
sources [--id ID] â python scripts/run.py nblm_cli.py sources
upload
python scripts/run.py source_manager.py add --file "" --use-active python scripts/run.py source_manager.py add --file "" --create-new upload
python scripts/run.py source_manager.py sync "" --use-active python scripts/run.py source_manager.py sync "" --create-new python scripts/run.py source_manager.py sync "" --notebook-id ID python scripts/run.py source_manager.py sync "" --dry-run python scripts/run.py source_manager.py sync "" --rebuild upload-zlib
python scripts/run.py source_manager.py add --url "" --use-active python scripts/run.py source_manager.py add --url "" --create-new upload-url python scripts/run.py nblm_cli.py upload-url "
upload-youtube python scripts/run.py nblm_cli.py upload-youtube "
upload-text python scripts/run.py nblm_cli.py upload-text "
source-text python scripts/run.py nblm_cli.py source-text "
source-guide python scripts/run.py nblm_cli.py source-guide "
source-rename python scripts/run.py nblm_cli.py source-rename "
source-refresh python scripts/run.py nblm_cli.py source-refresh "
source-delete python scripts/run.py nblm_cli.py source-delete "
ask python scripts/run.py nblm_cli.py ask "
podcast â python scripts/run.py artifact_manager.py generate --format DEEP_DIVE
podcast-status python scripts/run.py artifact_manager.py status --task-id "
podcast-download [output-path] â python scripts/run.py artifact_manager.py download "
briefing â python scripts/run.py artifact_manager.py generate --format BRIEF
debate â python scripts/run.py artifact_manager.py generate --format DEBATE
slides â python scripts/run.py artifact_manager.py generate-slides
slides-download [output-path] â python scripts/run.py artifact_manager.py download "
infographic â python scripts/run.py artifact_manager.py generate-infographic
infographic-download [output-path] â python scripts/run.py artifact_manager.py download "
media-list [--type TYPE] â python scripts/run.py artifact_manager.py list
media-delete python scripts/run.py artifact_manager.py delete "
If command not recognized, show usage help.,
Show available commands with /nblm (no arguments)
)
/nblm podcast --length DEFAULT --wait --output ./podcast.mp3
/nblm podcast --instructions "Focus on the key findings"
/nblm briefing --wait --output ./summary.mp3
/nblm debate --instructions "Compare the two approaches"
| Option | Values |
|--------|--------|
| --length | SHORT, DEFAULT, LONG |
| --instructions | Custom instructions for the content |
| --wait | Wait for generation to complete |
| --output | Download path (requires --wait) |
/nblm slides --format DETAILED_DECK --wait --output ./presentation.pdf
/nblm slides --instructions "Focus on key diagrams" --format PRESENTER_SLIDES
| 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) |
/nblm infographic --orientation LANDSCAPE --wait --output ./visual.png
/nblm infographic --instructions "Highlight comparison" --detail-level DETAILED
| 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) |
| 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 |
/nblm podcast --wait --output ./deep-dive.mp3
/nblm briefing --instructions "Focus on chapter 3" --wait
/nblm debate --length LONG --wait --output ./debate.mp3
/nblm slides --instructions "Include key diagrams" --format DETAILED_DECK --wait --output ./presentation.pdf
/nblm infographic --orientation LANDSCAPE --detail-level DETAILED --wait --output ./summary.png
/nblm podcast-download ./my-podcast.mp3
/nblm slides-download ./presentation.pdf
/nblm infographic-download ./visual.png
/nblm media-list # List all generated media
/nblm media-list --type audio # List only audio
/nblm media-delete <id> # Delete a media item
Trigger when user:
https://notebooklm.google.com/notebook/...)The add command now automatically discovers metadata from the notebook:
# Smart Add (auto-discovers name, description, topics)
python scripts/run.py notebook_manager.py add <notebook-id-or-url>
# With optional overrides
python scripts/run.py notebook_manager.py add <id> --name "Custom Name" --topics "custom,topics"
What Smart Add does:
Supported input formats:
5fd9f36b-8000-401d-a7a0-7aa3f7832644https://notebooklm.google.com/notebook/5fd9f36b-8000-401d-a7a0-7aa3f7832644NEVER manually specify --name, --description, or --topics unless the user explicitly provides them.
NEVER call scripts directly. ALWAYS use python scripts/run.py [script]:
# â
CORRECT - Always use run.py:
python scripts/run.py auth_manager.py status
python scripts/run.py notebook_manager.py list
python scripts/run.py ask_question.py --question "..."
# â WRONG - Never call directly:
python scripts/auth_manager.py status # Fails without venv!
The run.py wrapper automatically:
.venv if neededpython scripts/run.py auth_manager.py status
If not authenticated, proceed to setup.
# Browser MUST be visible for manual Google login
python scripts/run.py auth_manager.py setup
Important:
# List all notebooks
python scripts/run.py notebook_manager.py list
# BEFORE ADDING: Ask user for metadata if unknown!
# "What does this notebook contain?"
# "What topics should I tag it with?"
# Add notebook to library (ALL parameters are REQUIRED!)
python scripts/run.py notebook_manager.py add \
--url "https://notebooklm.google.com/notebook/..." \
--name "Descriptive Name" \
--description "What this notebook contains" \ # REQUIRED - ASK USER IF UNKNOWN!
--topics "topic1,topic2,topic3" # REQUIRED - ASK USER IF UNKNOWN!
# Search notebooks by topic
python scripts/run.py notebook_manager.py search --query "keyword"
# Set active notebook
python scripts/run.py notebook_manager.py activate --id notebook-id
# Remove notebook
python scripts/run.py notebook_manager.py remove --id notebook-id
python scripts/run.py notebook_manager.py listpython scripts/run.py ask_question.py --question "..." --notebook-id ID# Basic query (uses active notebook if set)
python scripts/run.py ask_question.py --question "Your question here"
# Query specific notebook
python scripts/run.py ask_question.py --question "..." --notebook-id notebook-id
# Query with notebook URL directly
python scripts/run.py ask_question.py --question "..." --notebook-url "https://..."
# Show browser for debugging
python scripts/run.py ask_question.py --question "..." --show-browser
Every NotebookLM answer ends with: "EXTREMELY IMPORTANT: Is that ALL you need to know?"
Required Claude Behavior:
python scripts/run.py ask_question.py --question "Follow-up with context..."
# Authenticate with Z-Library
python scripts/run.py auth_manager.py setup --service zlibrary
# Add book from Z-Library
python scripts/run.py source_manager.py add --url "https://zh.zlib.li/book/..."
# Check Z-Library auth status
python scripts/run.py auth_manager.py status --service zlibrary
auth_manager.py)python scripts/run.py auth_manager.py setup # Default: Google
python scripts/run.py auth_manager.py setup --service google
python scripts/run.py auth_manager.py setup --service zlibrary
python scripts/run.py auth_manager.py status # Show all services
python scripts/run.py auth_manager.py status --service zlibrary
python scripts/run.py auth_manager.py clear --service zlibrary # Clear auth
# Multi-Account Management (Google)
python scripts/run.py auth_manager.py accounts list # List all accounts
python scripts/run.py auth_manager.py accounts add # Add new account
python scripts/run.py auth_manager.py accounts switch 1 # Switch by index
python scripts/run.py auth_manager.py accounts switch user@gmail.com # Switch by email
python scripts/run.py auth_manager.py accounts remove 2 # Remove account
notebook_manager.py)python scripts/run.py notebook_manager.py add --url URL --name NAME --description DESC --topics TOPICS
# OR use notebook ID directly:
python scripts/run.py notebook_manager.py add --notebook-id ID --name NAME --description DESC --topics TOPICS
python scripts/run.py notebook_manager.py list
python scripts/run.py notebook_manager.py search --query QUERY
python scripts/run.py notebook_manager.py activate --id ID
python scripts/run.py notebook_manager.py remove --id ID
python scripts/run.py notebook_manager.py stats
ask_question.py)python scripts/run.py ask_question.py --question "..." [--notebook-id ID] [--notebook-url URL] [--show-browser]
source_manager.py)# Upload to active notebook
python scripts/run.py source_manager.py add --file "/path/to/book.pdf" --use-active
# Create new notebook for upload
python scripts/run.py source_manager.py add --file "/path/to/book.pdf" --create-new
# Upload to specific notebook
python scripts/run.py source_manager.py add --file "/path/to/book.pdf" --notebook-id NOTEBOOK_ID
# Z-Library download and upload
python scripts/run.py source_manager.py add --url "https://zh.zlib.li/book/..." --use-active
python scripts/run.py source_manager.py add --url "https://zh.zlib.li/book/..." --create-new
# Sync a folder (new!)
python scripts/run.py source_manager.py sync "/path/to/docs" --use-active
python scripts/run.py source_manager.py sync "/path/to/docs" --create-new
python scripts/run.py source_manager.py sync "/path/to/docs" --notebook-id NOTEBOOK_ID
# Sync options (new!)
python scripts/run.py source_manager.py sync "/path/to/docs" --dry-run # Preview only
python scripts/run.py source_manager.py sync "/path/to/docs" --rebuild # Force re-hash all files
Folder Sync:
Note: One of --use-active, --create-new, or --notebook-id is REQUIRED.
Uploads wait for NotebookLM processing and print progress as Ready: N/T. Press Ctrl+C to stop waiting.
Local file uploads use browser automation and require Google authentication.
If browser automation is unavailable, set NOTEBOOKLM_UPLOAD_MODE=text to upload extracted text instead (PDFs require pypdf).
cleanup_manager.py)python scripts/run.py cleanup_manager.py # Preview cleanup
python scripts/run.py cleanup_manager.py --confirm # Execute cleanup
python scripts/run.py cleanup_manager.py --preserve-library # Keep notebooks
auth_manager.py)python scripts/run.py auth_manager.py watchdog-status
The virtual environment is automatically managed:
.venv automaticallyAGENT_BROWSER_OWNER_PID to auto-stop when the agent process exitsscripts/run.py sets AGENT_BROWSER_OWNER_PID to its parent PID by defaultManual setup (only if automatic fails):
python -m venv .venv
source .venv/bin/activate # Linux/Mac
pip install -r requirements.txt
npm install
npm run install-browsers
All data stored in ~/.claude/skills/notebooklm/data/:
library.json - Notebook metadata (with account associations)auth/google/ - Multi-account Google authindex.json - Account index (active account, list)-.json - Per-account credentialsauth/zlibrary.json - Z-Library auth stateagent_browser/session_id - Current daemon session IDagent_browser/last_activity.json - Last activity timestamp for idle shutdownagent_browser/watchdog.pid - Idle watchdog process IDSecurity: Protected by .gitignore, never commit to git.
Optional .env file in skill directory:
HEADLESS=false # Browser visibility
SHOW_BROWSER=false # Default browser display
STEALTH_ENABLED=true # Human-like behavior
TYPING_WPM_MIN=160 # Typing speed
TYPING_WPM_MAX=240
DEFAULT_NOTEBOOK_ID= # Default notebook
User mentions NotebookLM
â
Check auth â python scripts/run.py auth_manager.py status
â
If not authenticated â python scripts/run.py auth_manager.py setup
â
Check/Add notebook â python scripts/run.py notebook_manager.py list/add (with --description)
â
Activate notebook â python scripts/run.py notebook_manager.py activate --id ID
â
Ask question â python scripts/run.py ask_question.py --question "..."
â
See "Is that ALL you need?" â Ask follow-ups until complete
â
Synthesize and respond to user
| Problem | Solution |
|---------|----------|
| ModuleNotFoundError | Use run.py wrapper |
| Authentication fails | Browser must be visible for setup! --show-browser |
| DAEMON_UNAVAILABLE | Ensure Node.js/npm installed, run npm install, retry |
| AUTH_REQUIRED | Run python scripts/run.py auth_manager.py setup |
| ELEMENT_NOT_FOUND | Verify notebook URL and re-run with fresh page load |
| Rate limit (50/day) | Wait or add another Google account with accounts add |
| Browser crashes | python scripts/run.py cleanup_manager.py --preserve-library |
| Notebook not found | Check with notebook_manager.py list |
Important directories and files:
scripts/ - All automation scripts (ask_question.py, notebook_manager.py, etc.)data/ - Local storage for authentication and notebook libraryreferences/ - Extended documentation:api_reference.md - Detailed API documentation for all scriptstroubleshooting.md - Common issues and solutionsusage_patterns.md - Best practices and workflow examples.venv/ - Isolated Python environment (auto-created on first run).gitignore - Protects sensitive data from being committedGenerated Mar 1, 2026
Researchers can use the skill to query NotebookLM for source-grounded answers from uploaded papers and documents, reducing hallucinations. They can manage multiple notebooks for different projects, upload sources via URLs or files, and generate summaries or podcasts for presentations.
Content creators can upload articles, videos, or text to NotebookLM and use the skill to generate audio podcasts, slide decks, or infographics based on the content. This streamlines production workflows by automating media generation from curated sources.
Businesses can centralize internal documents, reports, and training materials in NotebookLM notebooks. Employees can query for citation-backed answers, manage sources, and generate briefings or debates to support decision-making and onboarding processes.
Legal professionals can upload case files, statutes, or contracts to NotebookLM and use the skill to ask specific questions with source citations. They can manage multiple notebooks for different cases, upload text or URLs, and generate summaries to aid in research and case preparation.
Healthcare providers can compile medical literature, guidelines, and patient data into NotebookLM notebooks. They can query for evidence-based answers, upload sources from journals or URLs, and generate audio summaries or slides for training and patient education.
Offer basic NotebookLM integration for free with limited queries or notebooks, then charge for premium features like advanced media generation, higher upload limits, or team collaboration tools. Revenue comes from monthly subscriptions tailored to individual users or enterprises.
Sell customized licenses to businesses for integrating the skill into their internal workflows, with added support for security compliance, API access, and dedicated training. Revenue is generated through annual contracts based on user count or usage volume.
Provide managed services where agencies use the skill to create and manage NotebookLM content for clients, such as generating podcasts or infographics from client materials. Revenue comes from project-based fees or retainer models for ongoing content management.
đŹ Integration Tip
Ensure users authenticate with Google first via the login command, and always prompt for upload targets to avoid errors in notebook selection.
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Humanize AI-generated text to bypass detection. This humanizer rewrites ChatGPT, Claude, and GPT content to sound natural and pass AI detectors like GPTZero,...
Collaborative thinking partner for exploring complex problems through questioning
Humanize AI-generated text by detecting and removing patterns typical of LLM output. Rewrites text to sound natural, specific, and human. Uses 24 pattern detectors, 500+ AI vocabulary terms across 3 tiers, and statistical analysis (burstiness, type-token ratio, readability) for comprehensive detection. Use when asked to humanize text, de-AI writing, make content sound more natural/human, review writing for AI patterns, score text for AI detection, or improve AI-generated drafts. Covers content, language, style, communication, and filler categories.
ć šćŽç¨ćˇçĺč˝éćąďźĺŽćä¸ VeADK ç¸ĺ łçĺč˝ă
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.