Skip to content

/blog-notebooklm

Query a user's Gemini Notebook (formerly NotebookLM) for source-grounded answers through a logged-in browser session on their Google account. Uses the account's usage limits and writes browser state. Runs only on an explicit request: /blog notebooklm, "ask my Gemini Notebook",

From plugin
claude-blog
2.6k32 skills20 agents

Claude Code

$ npx -y skills add AgriciDaniel/claude-blog --skill blog-notebooklm --agent claude-code

SKILL.md

blog-notebooklm.SKILL.md
name: blog-notebooklm
description: >
  Query a user's Gemini Notebook (formerly NotebookLM) for source-grounded
  answers through a logged-in browser session on their Google account. Uses
  the account's usage limits and writes browser state. Runs only on an
  explicit request: /blog notebooklm, "ask my Gemini Notebook", "ask my
  NotebookLM notebook", or "query my notebook library". Also used by
  blog-write when the user named a notebook for research. Not for generic
  research or note-taking.
user-invocable: true
argument-hint: "[ask|discover|library|setup|status|cleanup] [question-or-url]"
license: MIT
metadata:
  author: AgriciDaniel
  version: "2.3.2"
  source: "https://github.com/PleasePrompto/notebooklm-skill"

Blog NotebookLM: Source-Grounded Research from Your Documents

> Google renamed NotebookLM to Gemini Notebook on 2026-07-16 ([announcement](https://blog.google/innovation-and-ai/products/gemini-notebook/notebooklm-gemini-notebook/)). This skill keeps the `notebooklm` command and script names. The scripts accept notebook URLs on `notebooklm.google.com` (which redirected with a 301 to `notebook.google.com` on 2026-10-12) and on `notebook.google.com`. Help: https://support.google.com/gemininotebook/.

Bundled paths below use host Markdown substitution of `${CLAUDE_SKILL_DIR}`; it is not an exported shell variable. Resolve them before execution, quote paths, and refuse nonabsolute overrides. Pass `blog_reference_root` resolved from `${CLAUDE_SKILL_DIR}/../blog/references`, `blog_template_root` from `${CLAUDE_SKILL_DIR}/../blog/templates`, and needed sibling roots to agents. Read the main reference `orchestration-details.md` before loading project context; pass only its helper-fenced output to downstream agents.

Query Gemini Notebook (formerly 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.

Cost and consent gate (mandatory, read first)

This skill drives the user's real Google account in a browser.

  • **What it spends:** each question is one query against the account's

Gemini Notebook usage limits (and any paid plan behind them). It costs no API money, but a loop can exhaust the user's allowance. Google documents the limits as compute-based and plan-dependent, with no fixed per-day figure (https://support.google.com/gemininotebook/answer/17670842, read 2026-10-12).

  • **What it writes:** `data/library.json`, `data/auth_info.json`, and the

browser profile under the managed runtime root; setup also installs a virtual environment and Chrome.

  • **Consent:** before the FIRST query or write in a session, name the notebook,

the question count, and what is written, and wait for an explicit yes. Setup, reauth, clear, and cleanup each need their own yes.

  • **No uncapped loops:** at most 3 follow-up questions per question session

(see Step 4), and at most 5 queries for one user request unless the user raises the cap. Stop at the first usage-limit error.

  • **Skips:** if the user declines, auth is missing, or setup is absent, skip

and return ONE line for the orchestrator's "Fallbacks and skips" summary, such as "NotebookLM: not authenticated, used WebSearch".

Quick Reference

| 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) |

Persistent runtime directory

`CLAUDE_BLOG_RUNTIME_DIR` optionally selects one trusted absolute persistent root. This integration uses `<root>/blog-notebooklm/.venv`; NotebookLM also uses `<root>/blog-notebooklm/data` for its library, authentication and browser state. Without this override, the existing skill-local defaults stay in use. Google's shared credential config/token paths stay unchanged. No state is copied or migrated automatically, and ordinary runs never perform setup.

Preserve an existing validated operator override. For a plugin without one, explicitly pass the host-substituted `${CLAUDE_PLUGIN_DATA}/claude-blog-runtime` path on both setup and every later runner call. This is Markdown substitution, not an exported shell variable. Execute only once it is an absolute resolved path. Single quotes keep an unresolved placeholder literal so validation rejects it instead of expanding it to a different shell path:

CLAUDE_BLOG_RUNTIME_DIR='${CLAUDE_PLUGIN_DATA}/claude-blog-runtime' python3 "${CLAUDE_SKILL_DIR}/scripts/setup_environment.py" --check --json
CLAUDE_BLOG_RUNTIME_DIR='${CLAUDE_PLUGIN_DATA}/claude-blog-runtime' python3 "${CLAUDE_SKILL_DIR}/scripts/run.py" notebook_manager.py list --json

Only explicit setup without `--check` installs dependencies. Standalone users keep the default unless they explicitly choose an absolute runtime root. Relative, unresol

Read more
@agricidaniel
Ships withclaude-blog

claude-blog is a Claude Code skill suite that writes, optimizes, audits, localizes, and refreshes blog content at scale. Every article is evaluated for Google-aligned usefulness and internal AI citation readiness heuristics.

Stars on GitHub

Momentum

stars in total
2.6k
Star history of AgriciDaniel/claude-blog on GitHub, a chart by star-history.com

Other skills on claude-blog.

blog-analyze
Auto-invoked

blog-analyze

Score one blog post (or a folder of posts) on a 5-category 100-point scale covering content quality, SEO, E-E-A-T, technical…

blog-audio
Auto-invoked

blog-audio

Paid Gemini TTS audio for a finished blog post: summary, full read-aloud, or two-speaker dialogue, with an MP3 and an HTML5…

blog-audit
Auto-invoked

blog-audit

Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content,…

blog-brand
Auto-invoked

blog-brand

Establish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't…

blog-brief
Auto-invoked

blog-brief

Create a content brief for ONE planned post: target and secondary keywords, search intent, template choice, competitor gaps from…

blog-calendar
Auto-invoked

blog-calendar

Build a dated monthly or quarterly editorial calendar: which posts to publish or review when, content mix, templates,…

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

officecli12d33k
@iofficeai@iofficeaiInstall Skill

Questions about blog-notebooklm.

Which coding agents can use blog-notebooklm?
blog-notebooklm installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.