nblm
这是一个专为AI工程设计的工具,作为NotebookLM的驱动程序,能有效集成并利用Claude Code和Codex等模型进行开发。
npx skills add https://github.com/magicseek/nblm --skill nblmBefore / After 效果对比
1 组在不同AI开发平台(如Claude Code, Codex)使用NotebookLM时,集成复杂,效率低下。
技能提供NotebookLM驱动集成,简化多平台AI开发流程,提升开发效率和项目兼容性。
nblm
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
.venvand 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 ** → python scripts/run.py auth_manager.py accounts switch "<id>"
**accounts remove ** → python scripts/run.py auth_manager.py accounts remove "<id>"
**accounts use ** → 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 ** → python scripts/run.py nblm_cli.py create "<name>"
delete [--id ID] → python scripts/run.py nblm_cli.py delete <args>
rename [--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 ** → Smart add workflow (auto-detects URL vs notebook ID)
**activate ** → python scripts/run.py notebook_manager.py activate --id "<id>"
sources [--id ID] → python scripts/run.py nblm_cli.py sources <args>
**upload ** → 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 ** → 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 ** → 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 ** → python scripts/run.py nblm_cli.py upload-url "<url>"
**upload-youtube ** → python scripts/run.py nblm_cli.py upload-youtube "<url>"
**upload-text ** → python scripts/run.py nblm_cli.py upload-text "<title>" <args>
**source-text ** → python scripts/run.py nblm_cli.py source-text "<id>"
**source-guide ** → python scripts/run.py nblm_cli.py source-guide "<id>"
**source-rename ** → python scripts/run.py nblm_cli.py source-rename "<id>" "<name>"
**source-refresh ** → python scripts/run.py nblm_cli.py source-refresh "<id>"
**source-delete ** → python scripts/run.py nblm_cli.py source-delete "<id>"
**ask ** → python scripts/run.py nblm_cli.py ask "<question>"
podcast → python scripts/run.py artifact_manager.py generate --format DEEP_DIVE <args>
**podcast-status ** → 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 ** → 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"
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
/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)
Infographic Options
/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)
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
/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
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:
# 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
.venvif needed -
Installs all dependencies
-
Activates environment
-
Executes script properly
Core Workflow
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
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)
# 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
Script Reference
Authentication Management (auth_manager.py)
python scripts/run.py auth_manager.py setup
...
用户评价 (0)
发表评价
暂无评价
统计数据
用户评分
为此 Skill 评分