NotebookLM Research Assistant
PleasePrompto/notebooklm-skill
Lets Claude Code ask questions of your Google NotebookLM notebooks through browser automation and return answers grounded in your uploaded sources.
Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-notebooklm --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/blog-notebooklm .claude/skills/blog-notebooklm && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "blog-notebooklm" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklm into .claude/skills/blog-notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-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.
$skill-installer install https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklmType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-notebooklm --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/blog-notebooklm .agents/skills/blog-notebooklm && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "blog-notebooklm" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklm into .agents/skills/blog-notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-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 AgriciDaniel/claude-blog --skill blog-notebooklm -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-notebooklm --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/blog-notebooklm .cursor/skills/blog-notebooklm && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "blog-notebooklm" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklm into .cursor/skills/blog-notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-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.
$ gemini skills install https://github.com/AgriciDaniel/claude-blog.git --path skills/blog-notebooklm--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-notebooklm --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/blog-notebooklm .gemini/skills/blog-notebooklm && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "blog-notebooklm" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklm into .gemini/skills/blog-notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-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 AgriciDaniel/claude-blog blog-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 AgriciDaniel/claude-blog --skill blog-notebooklm -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/blog-notebooklm .github/skills/blog-notebooklm && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "blog-notebooklm" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklm into .github/skills/blog-notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-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 AgriciDaniel/claude-blog --skill blog-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 AgriciDaniel/claude-blog blog-notebooklm --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/blog-notebooklm .opencode/skills/blog-notebooklm && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "blog-notebooklm" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-notebooklm into .opencode/skills/blog-notebooklm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-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.
blog-notebooklmQuery Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.
Blog Notebooklm is an agent skill from AgriciDaniel/claude-blog. Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents. Manages notebook library, handles Google authentication, and supports smart discovery. Works standalone via /blog notebooklm or internally from blog-write and blog-researcher for source-grounded research context. Falls back gracefully when not configured. Use when user says "notebooklm", "notebook", "query notebook", "ask notebook", "notebook research", "source grounded research", "document query"…
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 16 other files, including scripts and reference files (for example `references/commands.md`, `references/troubleshooting.md` and `scripts/__init__.py`).
It sits in Knowledge Management, covering Source-grounded notebooks. It works with NotebookLM. The repository describes itself as: Claude Code blog skill suite: 30 sub-skills, 5 agents, 5-gate v1.9.0 Blog Delivery Contract, dual-optimized for Google rankings and AI citations. Active development at… The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2500d4c. 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 12 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From 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.
Blog Notebooklm loads about 2.5k tokens when it runs, and up to ~5.2k if it reads all its reference files. Until then it costs about 137 tokens; SKILL.md has 820 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 found patterns that need a careful read before installing.
- `data/browser_state/`: Chrome profile with cookiesAutomated 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 AgriciDaniel/claude-blog at commit 2500d4c, republished under its MIT licence (© AgriciDaniel). 820 words, ~2,459 tokens.
.claude/skills/blog-notebooklm/SKILL.md (or your agent's skills folder). This skill also uses 14 other files; get the full folder from GitHub.Query Google NotebookLM notebooks directly from Claude Code for citation-backed answers from Gemini. Each question opens a headless browser session, retrieves the answer from your uploaded documents, and closes. Responses are source-grounded model answers, not proof of truth: uploaded documents may be primary or secondary, and the answer can still omit context.
Answers provide usable provenance only when the returned citation identifies a verifiable underlying source. Record a stable source URL and a publication, study-period, or retrieval date when that detail affects verification or interpretation. Use the underlying source title as the inline citation. Do not cite the private NotebookLM URL as the bibliography entry for public content.
| Command | What it does |
|---|---|
/blog notebooklm ask <question> | Query a notebook for source-grounded answers |
/blog notebooklm discover <url> | Smart-discover notebook content before cataloging |
/blog notebooklm library list | List all notebooks in library |
/blog notebooklm library add <url> | Add a notebook to library |
/blog notebooklm library search <query> | Search notebooks by keyword |
/blog notebooklm library remove <id> | Remove a notebook from library |
/blog notebooklm setup | One-time Google authentication (browser visible) |
/blog notebooklm status | Check authentication status |
/blog notebooklm cleanup | Clean browser state (preserves library) |
run.py)Call scripts only through the run.py wrapper: python3 scripts/run.py [script]:
# CORRECT:
python3 scripts/run.py auth_manager.py status
python3 scripts/run.py ask_question.py --question "..."
# Do not call files under scripts/ directly. The wrapper owns venv setup.The run.py wrapper automatically creates .venv, installs dependencies,
sets up Chrome, and executes the target script.
Before any query operation, check authentication:
python3 scripts/run.py auth_manager.py status/blog notebooklm setup to authenticate."For /blog notebooklm setup:
# Opens a visible browser for manual Google login (one-time)
python3 scripts/run.py auth_manager.py setupTell the user: "A browser window will open. Please log in to your Google account." Authentication persists via browser profile + cookie injection (hybrid approach).
Other auth commands:
python3 scripts/run.py auth_manager.py status # Check auth
python3 scripts/run.py auth_manager.py reauth # Re-authenticate
python3 scripts/run.py auth_manager.py clear # Clear all auth dataFor /blog notebooklm ask <question>:
Run auth check (see gate pattern above). If not authenticated, guide to setup.
Determine which notebook to query:
--notebook-url provided: validate it is a NotebookLM notebook URL, then use it--notebook-id provided: look up in library# Basic query (uses active notebook)
python3 scripts/run.py ask_question.py --question "Your question here"
# Query specific notebook by ID
python3 scripts/run.py ask_question.py --question "..." --notebook-id notebook-id
# Query by URL directly
python3 scripts/run.py ask_question.py --question "..." --notebook-url "https://..."
# JSON output (for internal/programmatic use)
python3 scripts/run.py ask_question.py --question "..." --json
# Show browser for debugging
python3 scripts/run.py ask_question.py --question "..." --show-browserEvery response ends with a follow-up prompt. Required behavior:
For /blog notebooklm discover <url>:
When adding a notebook without knowing its content, query it first:
# Step 1: Discover content
python3 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: Add with discovered metadata
python3 scripts/run.py notebook_manager.py add \
--url "<URL>" \
--name "<Based on content>" \
--description "<Based on content>" \
--topics "<Extracted topics>"Do not guess descriptions; discover or ask the user.
# List all notebooks
python3 scripts/run.py notebook_manager.py list
# Add notebook (all params required -- discover or ask user!)
python3 scripts/run.py notebook_manager.py add \
--url "https://notebooklm.google.com/notebook/..." \
--name "Descriptive Name" \
--description "What this notebook contains" \
--topics "topic1,topic2,topic3"
# Search by keyword
python3 scripts/run.py notebook_manager.py search --query "keyword"
# Set active notebook
python3 scripts/run.py notebook_manager.py activate --id notebook-id
# Remove notebook
python3 scripts/run.py notebook_manager.py remove --id notebook-id
# Library statistics
python3 scripts/run.py notebook_manager.py statsWhen invoked as a Task subagent from blog-write or blog-researcher:
Input (provided by calling skill):
question: Research question relevant to the blog topicnotebook_id or notebook_url: Which notebook to querycontext: "internal" (signals graceful fallback mode)Process:
Output (returned to calling skill):
### NotebookLM Research
- **Source:** [Notebook name]
- **Question:** [What was asked]
- **Answer:** [Source-grounded response from user's documents]
- **Underlying Source:** [Public source URL or document identifier]
- **Underlying Source Date:** [Publication date or retrieval date]
- **Source Quality:** [Tier 1-3 after classifying the underlying document]Graceful fallback: If auth is missing or query fails, return immediately with no error. The calling workflow continues with WebSearch-based research. Never block blog-write or blog-rewrite because NotebookLM is unavailable.
All data stored inside the skill directory:
data/library.json: Notebook metadata and librarydata/auth_info.json: Authentication statusdata/browser_state/: Chrome profile with cookiesSecurity: All data directories are gitignored. Never commit auth or browser state.
Browser lifecycle and authenticated-context isolation are centralized in
scripts/browser_session.py. Command scripts must use that helper instead of
opening an additional persistent profile or copying cookies into another file.
| Error | Resolution |
|---|---|
| Not authenticated | Run /blog notebooklm setup |
| ModuleNotFoundError | Always use run.py wrapper |
| Browser crash | cleanup_manager.py --confirm --preserve-library, then re-auth |
| Rate limit (50/day) | Wait until midnight PST or switch Google account |
| Notebook not found | Check with notebook_manager.py list |
| Query timeout (120s) | Retry with simpler question or --show-browser to debug |
| MCP unavailable (internal) | Return silently: writing workflow uses WebSearch |
Load on-demand: do NOT load all at startup:
references/commands.md: Full CLI commands, parameters, and workflow patternsreferences/troubleshooting.md: Error solutions, recovery procedures, debugging© AgriciDaniel, 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 14 other files (scripts, references) in skills/blog-notebooklm of AgriciDaniel/claude-blog.
Open the folder on GitHubat commit 2500d4c
We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in AgriciDaniel/claude-blog, which our catalogue first saw on October 7, 2026.
Blog Notebooklm 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 |
|---|---|---|---|---|---|---|
| Blog Notebooklm this skillAgriciDaniel/claude-blog | 2.3k | 1 repos | ~2.5k | Automated safety check: Warn | MIT | |
| NotebookLM Research AssistantPleasePrompto/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 | |
| Zlibrary To Notebooklmzstmfhy/zlibrary-to-notebooklm | 1.7k | 1 repos | ~968 | Automated safety check: Pass | MIT | |
| Multi-Source to NotebookLM Processorjoeseesun/qiaomu-anything-to-notebooklm | 6.2k | — | ~3.6k | Automated safety check: Pass | MIT | |
| NotebookLM Research Workflowclaude-world/notebooklm-skill | 467 | — | ~1.8k | Automated safety check: Pass | MIT |
PleasePrompto/notebooklm-skill
Lets Claude Code ask questions of your Google NotebookLM notebooks through browser automation and return answers grounded in your uploaded sources.
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.
zstmfhy/zlibrary-to-notebooklm
自动从 Z-Library 下载书籍并上传到 Google NotebookLM。支持 PDF/EPUB 格式,自动转换,一键创建知识库。
joeseesun/qiaomu-anything-to-notebooklm
Collects content from WeChat articles, web pages, YouTube, podcasts, documents and more, uploads it to NotebookLM and generates podcasts, slides or mind maps.
claude-world/notebooklm-skill
Creates NotebookLM notebooks from URLs, text and files, asks cited questions, runs web research and generates audio, slides, quizzes and other artifacts.
tmc/nlm
Manages Google NotebookLM notebooks via the nlm CLI. An agent skill from tmc/nlm.
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
AgriciDaniel/claude-blog
Generate audio narration of blog posts using Google Gemini TTS.
AgriciDaniel/claude-blog
FLOW framework integration for bloggers. An agent skill from AgriciDaniel/claude-blog.
AgriciDaniel/claude-blog
AI image generation and editing for blog content powered by Gemini via MCP.
AgriciDaniel/claude-blog
Semantic topic cluster planning and automated execution engine for claude-blog.
AgriciDaniel/claude-blog
Research what people are actually saying about a topic in the last 30 days across Reddit, X / Twitter, YouTube, Hacker News, dev.to, Medium, and other public discourse platforms.
Works with
Categories
Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents. Blog Notebooklm is an agent skill from AgriciDaniel/claude-blog. Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.
Blog Notebooklm fits situations like: user says notebooklm; notebook research; source grounded research; notebook library.
Run `npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a claude-code`. Or copy the skill folder (skills/blog-notebooklm in AgriciDaniel/claude-blog) into .claude/skills/blog-notebooklm in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a codex`. Or copy the skill folder (skills/blog-notebooklm in AgriciDaniel/claude-blog) into .agents/skills/blog-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 AgriciDaniel/claude-blog --skill blog-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/blog-notebooklm, .gemini/skills/blog-notebooklm, .github/skills/blog-notebooklm and .opencode/skills/blog-notebooklm in your project.
Going by SKILL.md and its folder, Blog Notebooklm needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
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 flagged 1 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Blog Notebooklm is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 9.8k 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 2.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Blog Notebooklm: NotebookLM Research Assistant (PleasePrompto/notebooklm-skill, 7.8k stars), NotebookLM Automation (teng-lin/notebooklm-py, 20k stars), Zlibrary To Notebooklm (zstmfhy/zlibrary-to-notebooklm, 1.7k stars) and Multi-Source to NotebookLM Processor (joeseesun/qiaomu-anything-to-notebooklm, 6.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-blog, which has 2,348 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 9, 2026.
Source: AgriciDaniel/claude-blog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.