← All skills
Tencent SkillHub Β· AI

NotebookLM Skill

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

skill openclawclawhub Free
0 Downloads
0 Stars
0 Installs
0 Score
High Signal

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

⬇ 0 downloads β˜… 0 stars Unverified but indexed

Install for OpenClaw

Quick setup
  1. Download the package from Yavira.
  2. Extract the archive and review SKILL.md first.
  3. Import or place the package into your OpenClaw setup.

Requirements

Target platform
OpenClaw
Install method
Manual import
Extraction
Extract archive
Prerequisites
OpenClaw
Primary doc
SKILL.md

Package facts

Download mode
Yavira redirect
Package format
ZIP package
Source platform
Tencent SkillHub
What's included
AUTHENTICATION.md, CHANGELOG.md, README.md, README.zh-CN.md, SKILL.md, references/api_reference.md

Validation

  • Use the Yavira download entry.
  • Review SKILL.md after the package is downloaded.
  • Confirm the extracted package contains the expected setup assets.

Install with your agent

Agent handoff

Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.

  1. Download the package from Yavira.
  2. Extract it into a folder your agent can access.
  3. Paste one of the prompts below and point your agent at the extracted folder.
New install

I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.

Upgrade existing

I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.

Trust & source

Release facts

Source
Tencent SkillHub
Verification
Indexed source record
Version
1.0.1

Documentation

ClawHub primary doc Primary doc: SKILL.md 39 sections Open source page

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]

Notebook Management

CommandDescriptionloginAuthenticate with GooglestatusShow auth and library statusaccountsList all Google accountsaccounts addAdd a new Google accountaccounts switch <id>Switch active account (by index or email)accounts remove <id>Remove an accountlocalList notebooks in local libraryremoteList all notebooks from NotebookLM APIcreate <name>Create a new notebookdelete [--id ID]Delete a notebookrename <name> [--id ID]Rename a notebooksummary [--id ID]Get AI-generated summarydescribe [--id ID]Get description and suggested topicsadd <url-or-id>Add notebook to local library (auto-detects URL vs notebook ID)activate <id>Set active notebook

Source Management

CommandDescriptionsources [--id ID]List sources in notebookupload <file>Upload a single fileupload <folder>Sync a folder of files to NotebookLMupload-zlib <url>Download from Z-Library and uploadupload-url <url>Add URL as sourceupload-youtube <url>Add YouTube video as sourceupload-text <title> [--content TEXT]Add text as sourcesource-text <source-id>Get full indexed textsource-guide <source-id>Get AI summary and keywordssource-rename <source-id> <name>Rename a sourcesource-refresh <source-id>Re-fetch URL contentsource-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

CommandDescriptionask <question>Query NotebookLMpodcast [--instructions TEXT]Generate audio podcastpodcast-status <task-id>Check podcast generation statuspodcast-download [output-path]Download latest podcastbriefing [--instructions TEXT]Generate brief audio summarydebate [--instructions TEXT]Generate debate-style audioslides [--instructions TEXT]Generate slide deckslides-download [output-path]Download slide deck as PDFinfographic [--instructions TEXT]Generate infographicinfographic-download [output-path]Download infographicmedia-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>"
  • 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

/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" OptionValues--lengthSHORT, DEFAULT, LONG--instructionsCustom instructions for the content--waitWait for generation to complete--outputDownload path (requires --wait)

Slide Deck Options

/nblm slides --format DETAILED_DECK --wait --output ./presentation.pdf /nblm slides --instructions "Focus on key diagrams" --format PRESENTER_SLIDES OptionValues--formatDETAILED_DECK, PRESENTER_SLIDES--lengthSHORT, DEFAULT--instructionsCustom instructions for the content--waitWait for generation to complete--outputDownload path (requires --wait)

Infographic Options

/nblm infographic --orientation LANDSCAPE --wait --output ./visual.png /nblm infographic --instructions "Highlight comparison" --detail-level DETAILED OptionValues--orientationLANDSCAPE, PORTRAIT, SQUARE--detail-levelCONCISE, STANDARD, DETAILED--instructionsCustom instructions for the content--waitWait for generation to complete--outputDownload path (requires --wait)

Media Generation

CommandDescriptionOutput/nblm podcastDeep-dive audio discussionMP3/nblm briefingBrief audio summaryMP3/nblm debateDebate-style audioMP3/nblm slidesSlide deck presentationPDF/nblm infographicVisual infographicPNG

Examples

/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

Download & Manage

/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

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: # 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: Fetches notebook title from NotebookLM API Queries the notebook content to generate description and topics 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]: # βœ… 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: Creates .venv if needed Installs all dependencies Activates environment Executes script properly

Step 1: Check Authentication Status

python scripts/run.py auth_manager.py status If not authenticated, proceed to setup.

Step 2: Authenticate (One-Time Setup)

# Browser MUST be visible for manual Google login python scripts/run.py auth_manager.py 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

# 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

Quick Workflow

Check library: python scripts/run.py notebook_manager.py list Ask question: python scripts/run.py ask_question.py --question "..." --notebook-id ID

Step 4: Ask Questions

# 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

Follow-Up Mechanism (CRITICAL)

Every NotebookLM answer ends with: "EXTREMELY IMPORTANT: Is that ALL you need to know?" Required Claude Behavior: STOP - Do not immediately respond to user ANALYZE - Compare answer to user's original request IDENTIFY GAPS - Determine if more information needed ASK FOLLOW-UP - If gaps exist, immediately ask: python scripts/run.py ask_question.py --question "Follow-up with context..." REPEAT - Continue until information is complete SYNTHESIZE - Combine all answers before responding to user

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)

# Authenticate with Z-Library python scripts/run.py auth_manager.py setup --service zlibrary

Commands

# 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

Authentication Management (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 Management (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

Question Interface (ask_question.py)

python scripts/run.py ask_question.py --question "..." [--notebook-id ID] [--notebook-url URL] [--show-browser]

Source Manager (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: 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 modified (delete + re-upload), skip unchanged Multi-account aware (tracks which Google account was used) 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).

Data Cleanup (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

Watchdog Status (auth_manager.py)

python scripts/run.py auth_manager.py watchdog-status

Environment Management

The virtual environment is automatically managed: First run creates .venv automatically Dependencies install automatically Node.js dependencies install automatically agent-browser daemon starts on demand and keeps browser state in memory daemon stops after 10 minutes of inactivity (any agent-browser command resets the timer) set AGENT_BROWSER_OWNER_PID to auto-stop when the agent process exits scripts/run.py sets AGENT_BROWSER_OWNER_PID to its parent PID by default Everything isolated in skill directory Manual 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

Data Storage

All data stored in ~/.claude/skills/notebooklm/data/: library.json - Notebook metadata (with account associations) auth/google/ - Multi-account Google auth index.json - Account index (active account, list) <n>-<email>.json - Per-account credentials auth/zlibrary.json - Z-Library auth state agent_browser/session_id - Current daemon session ID agent_browser/last_activity.json - Last activity timestamp for idle shutdown agent_browser/watchdog.pid - Idle watchdog process ID Security: Protected by .gitignore, never commit to git.

Configuration

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

Decision Flow

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

Troubleshooting

ProblemSolutionModuleNotFoundErrorUse run.py wrapperAuthentication failsBrowser must be visible for setup! --show-browserDAEMON_UNAVAILABLEEnsure Node.js/npm installed, run npm install, retryAUTH_REQUIREDRun python scripts/run.py auth_manager.py setupELEMENT_NOT_FOUNDVerify notebook URL and re-run with fresh page loadRate limit (50/day)Wait or add another Google account with accounts addBrowser crashespython scripts/run.py cleanup_manager.py --preserve-libraryNotebook not foundCheck with notebook_manager.py list

Best Practices

Always use run.py - Handles environment automatically Check auth first - Before any operations Follow-up questions - Don't stop at first answer Browser visible for auth - Required for manual login Include context - Each question is independent Synthesize answers - Combine multiple responses

Limitations

No session persistence (each question = new browser) Rate limits on free Google accounts (50 queries/day per account; use multiple accounts to increase) Manual upload required (user must add docs to NotebookLM) Browser overhead (few seconds per question)

Resources (Skill Structure)

Important directories and files: scripts/ - All automation scripts (ask_question.py, notebook_manager.py, etc.) data/ - Local storage for authentication and notebook library references/ - Extended documentation: api_reference.md - Detailed API documentation for all scripts troubleshooting.md - Common issues and solutions usage_patterns.md - Best practices and workflow examples .venv/ - Isolated Python environment (auto-created on first run) .gitignore - Protects sensitive data from being committed

Category context

Agent frameworks, memory systems, reasoning layers, and model-native orchestration.

Source: Tencent SkillHub

Largest current source with strong distribution and engagement signals.

Package contents

Included in package
6 Docs
  • SKILL.md Primary doc
  • AUTHENTICATION.md Docs
  • CHANGELOG.md Docs
  • README.md Docs
  • README.zh-CN.md Docs
  • references/api_reference.md Docs