NotebookLM Automation
teng-lin/notebooklm-py
Installs, authenticates and operates Gemini Notebook (NotebookLM) through the notebooklm-py CLI or its typed async Python API, for notebooks, sources, grounded chat and generated artifacts.
Lets Claude Code ask questions of your Google NotebookLM notebooks through browser automation and return answers grounded in your uploaded sources.
$ npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install PleasePrompto/notebooklm-skill notebooklm --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "notebooklm" agent skill from https://github.com/PleasePrompto/notebooklm-skill/tree/master into .claude/skills/notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooklm", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install PleasePrompto/notebooklm-skill notebooklm --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "notebooklm" agent skill from https://github.com/PleasePrompto/notebooklm-skill/tree/master into .agents/skills/notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooklm", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install PleasePrompto/notebooklm-skill notebooklm --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "notebooklm" agent skill from https://github.com/PleasePrompto/notebooklm-skill/tree/master into .cursor/skills/notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooklm", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install PleasePrompto/notebooklm-skill notebooklm --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "notebooklm" agent skill from https://github.com/PleasePrompto/notebooklm-skill/tree/master into .gemini/skills/notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooklm", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install PleasePrompto/notebooklm-skill notebooklmInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "notebooklm" agent skill from https://github.com/PleasePrompto/notebooklm-skill/tree/master into .github/skills/notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooklm", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install PleasePrompto/notebooklm-skill notebooklm --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "notebooklm" agent skill from https://github.com/PleasePrompto/notebooklm-skill/tree/master into .opencode/skills/notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooklm", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
notebooklmLets Claude Code ask questions of your Google NotebookLM notebooks through browser automation and return answers grounded in your uploaded sources.
This skill connects the agent to NotebookLM. Each question opens a fresh browser session, asks the chosen notebook, collects Gemini's answer drawn only from the documents you uploaded there, and closes again. A local library keeps track of your notebooks; when you add one without details, the skill first asks the notebook to describe its own contents instead of making up a description.
Everything runs through a wrapper, scripts/run.py, which creates a virtual environment and installs dependencies on first use. Authentication is a one-time manual Google login in a visible browser window, after which the session persists. Reference files cover the API, usage patterns and troubleshooting.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c80722d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 7 files in scripts/ (Python, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
pythonpipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
notebooklm.google.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
NotebookLM Research Assistant loads about 2.4k tokens when it runs, and up to ~8.9k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 563 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
Optional `.env` file in skill directory:Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from PleasePrompto/notebooklm-skill at commit c80722d, republished under its MIT licence (© PleasePrompto). 563 words, ~2,352 tokens.
.claude/skills/notebooklm/SKILL.md (or your agent's skills folder). This skill also uses 20 other files; get the full folder from GitHub.Interact with Google NotebookLM to query documentation with Gemini's source-grounded answers. Each question opens a fresh browser session, retrieves the answer exclusively from your uploaded documents, and closes.
Trigger when user:
https://notebooklm.google.com/notebook/...)When user wants to add a notebook without providing details:
SMART ADD (Recommended): Query the notebook first to discover its content:
# Step 1: Query the notebook about its content
python scripts/run.py ask_question.py --question "What is the content of this notebook? What topics are covered? Provide a complete overview briefly and concisely" --notebook-url "[URL]"
# Step 2: Use the discovered information to add it
python scripts/run.py notebook_manager.py add --url "[URL]" --name "[Based on content]" --description "[Based on content]" --topics "[Based on content]"MANUAL ADD: If user provides all details:
--url - The NotebookLM URL--name - A descriptive name--description - What the notebook contains (REQUIRED!)--topics - Comma-separated topics (REQUIRED!)NEVER guess or use generic descriptions! If details missing, use Smart Add to discover 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 statusIf not authenticated, proceed to setup.
# Browser MUST be visible for manual Google login
python scripts/run.py auth_manager.py setupImportant:
# 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-idpython 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-browserEvery 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..."auth_manager.py)python scripts/run.py auth_manager.py setup # Initial setup (browser visible)
python scripts/run.py auth_manager.py status # Check authentication
python scripts/run.py auth_manager.py reauth # Re-authenticate (browser visible)
python scripts/run.py auth_manager.py clear # Clear authenticationnotebook_manager.py)python scripts/run.py notebook_manager.py add --url URL --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 statsask_question.py)python scripts/run.py ask_question.py --question "..." [--notebook-id ID] [--notebook-url URL] [--show-browser]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 notebooksThe virtual environment is automatically managed:
.venv automaticallyManual setup (only if automatic fails):
python -m venv .venv
source .venv/bin/activate # Linux/Mac
pip install -r requirements.txt
python -m patchright install chromiumAll data stored in ~/.claude/skills/notebooklm/data/:
library.json - Notebook metadataauth_info.json - Authentication statusbrowser_state/ - Browser cookies and sessionSecurity: 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 notebookUser 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 |
| Rate limit (50/day) | Wait or switch Google account |
| 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 committed© PleasePrompto, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 20 other files (scripts, references) in the repository root of PleasePrompto/notebooklm-skill.
Open the folder on GitHubat commit c80722d
We found 17 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 14 other GitHub owners. This page covers the copy in PleasePrompto/notebooklm-skill, which our catalogue first saw on October 7, 2026.
NotebookLM Research Assistant next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| NotebookLM Research Assistant this skillPleasePrompto/notebooklm-skill | 7.8k | 14 repos | ~2.4k | Automated safety check: Notes | MIT | |
| NotebookLM Automationteng-lin/notebooklm-py | 20k | — | ~4.1k | Automated safety check: Pass | MIT | |
| NblmLeoYeAI/openclaw-master-skills | 2.2k | — | ~5.9k | Automated safety check: Notes | MIT | |
| Cninfo To Notebooklmjarodise/CNinfo2Notebookllm | 363 | — | ~1.1k | Automated safety check: Pass | None | |
| Notebooklmroomi-fields/notebooklm-mcp | 189 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Notebooklmsanjay3290/ai-skills | 431 | — | ~655 | Automated safety check: Pass | Apache-2.0 |
teng-lin/notebooklm-py
Installs, authenticates and operates Gemini Notebook (NotebookLM) through the notebooklm-py CLI or its typed async Python API, for notebooks, sources, grounded chat and generated artifacts.
LeoYeAI/openclaw-master-skills
A skill your agent uses to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini.
jarodise/CNinfo2Notebookllm
A skill your agent uses when user wants to analyze China stock reports (A-share or Hong Kong), upload annual/quarterly reports to NotebookLM, or research a Chinese listed company's financials
roomi-fields/notebooklm-mcp
This skill should be used when the user wants to query their Google NotebookLM notebooks for citation-backed, source-grounded answers, or manage notebooks, sources, and Studio content (audio…
sanjay3290/ai-skills
Query and manage Google NotebookLM notebooks with persistent profile auth, source sync, batch/multi queries, and structured exports.
alirezarezvani/claude-skills
Browser automation skill for controlling Google's NotebookLM.
Works with
Categories
Lets Claude Code ask questions of your Google NotebookLM notebooks through browser automation and return answers grounded in your uploaded sources. This skill connects the agent to NotebookLM. Each question opens a fresh browser session, asks the chosen notebook, collects Gemini's answer drawn only from the documents you uploaded there, and closes again.
NotebookLM Research Assistant fits situations like: asking questions about documentation you keep in NotebookLM; getting cited answers limited to your own sources; adding a NotebookLM notebook to the agent's library.
Run `npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a claude-code`. Or copy the skill folder (the PleasePrompto/notebooklm-skill repository) into .claude/skills/notebooklm in your project. Claude Code loads it when a task matches its description.
Run `npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a codex`. Or copy the skill folder (the PleasePrompto/notebooklm-skill repository) into .agents/skills/notebooklm in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PleasePrompto/notebooklm-skill --skill notebooklm -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/notebooklm, .gemini/skills/notebooklm, .github/skills/notebooklm and .opencode/skills/notebooklm in your project.
Going by SKILL.md and its folder, NotebookLM Research Assistant needs Python for the scripts in its folder and the command-line tools its instructions call (python and pip). Our summary lists: Python; A Google account with NotebookLM notebooks; A visible browser for the first login.
SKILL.md names 1 domain. In commands or code: notebooklm.google.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
NotebookLM Research Assistant is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with NotebookLM Research Assistant: NotebookLM Automation (teng-lin/notebooklm-py, 20k stars), Nblm (LeoYeAI/openclaw-master-skills, 2.2k stars), Cninfo To Notebooklm (jarodise/CNinfo2Notebookllm, 363 stars) and Notebooklm (roomi-fields/notebooklm-mcp, 189 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
PleasePrompto (a GitHub user) maintains it in PleasePrompto/notebooklm-skill, which has 7,782 GitHub stars. The repository was last updated on September 10, 2026.
Source: PleasePrompto/notebooklm-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.