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.
- Skill ID
- magicseek/nblm/nblm
- Publisher
- magicseek
- Repository
- nblm
- Installs
- 0
- Files
- 59
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
magicseek/nblm/nblmInstalls these files- .gitignore
- AGENTS.md
- AUTHENTICATION.md
- CHANGELOG.md
- CLAUDE.md
- LICENSE
- README.md
- README.zh-CN.md
- SKILL.md
- commands/nblm-accounts.md
- commands/nblm-activate.md
- commands/nblm-add.md
- commands/nblm-ask.md
- commands/nblm-list.md
- commands/nblm-login.md
- commands/nblm-status.md
- commands/nblm-upload.md
- docs/plans/2025-01-30-folder-sync-design.md
- package-lock.json
- package.json
- references/api_reference.md
- references/troubleshooting.md
- references/usage_patterns.md
- requirements.txt
- scripts/__init__.py
- scripts/account_manager.py
- scripts/agent_browser_client.py
- scripts/artifact_manager.py
- scripts/ask_question.py
- scripts/auth_manager.py
- scripts/cleanup_manager.py
- scripts/config.py
- scripts/daemon_watchdog.py
- scripts/init_platform.py
- scripts/nblm_cli.py
- scripts/notebook_manager.py
- scripts/notebooklm_wrapper.py
- scripts/patchright_auth.py
- scripts/run.py
- scripts/setup_environment.py
- scripts/source_manager.py
- scripts/sync_manager.py
- scripts/zlibrary/__init__.py
- scripts/zlibrary/downloader.py
- scripts/zlibrary/epub_converter.py
- tests/test_agent_browser_client.py
- tests/test_agent_browser_state.py
- tests/test_ask_question_fallback.py
- tests/test_auth_manager_services.py
- tests/test_idle_watchdog.py
- tests/test_navigate_wait_until.py
- tests/test_notebooklm_credentials.py
- tests/test_run_env.py
- tests/test_source_manager.py
- tests/test_sync_manager.py
- tests/test_wait_for_answer.py
- tests/test_watchdog_status.py
- tests/test_zlibrary_downloader.py
- tests/test_zlibrary_epub_converter.py
What this skill tells the agent
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 <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 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 <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
Use this skill in a project
Open any RiverX project, search the Skills panel for magicseek/nblm/nblm, and install it in one click.
