research/notebooklm/skills/notebooklm/SKILL.md
Browser automation skill for controlling Google's NotebookLM. Use when the user wants anything done in NotebookLM (e.g., 'open NotebookLM', 'check my [name] notebook', 'ask my notebook about X', 'add [source] to NotebookLM', 'generate a Video Overview from my notebook', 'use NotebookLM Studio'). Handles reading and querying notebooks, adding sources (URLs, text, files, YouTube links, synthesized content), generating Studio outputs (Audio/Video Overviews, Mind Maps, Reports incl. Briefing Doc/Study Guide/FAQ, Flashcards, Quiz, slide decks, infographics — discover the exact set from the live Studio panel; the UI evolves fast), and creating new notebooks. Requires browser automation environment — fails gracefully when unavailable.
npx skillsauth add alirezarezvani/claude-skills notebooklmInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Requires: A browser automation environment (Claude Code CLI with computer-use, Claude Chrome Extension, or equivalent). Skill will gracefully fail in non-automation contexts with a clear "not supported" message.
Critical: This skill is the only browser-automation skill in the v2 collection. It does NOT follow the research-pack Agent Integrity Rules convention. Different constraints apply (UI dynamics, async generation, login walls).
Before any other action, verify browser automation is available:
Up to 4 forcing questions, one at a time, dependency-ordered. Most invocations stop at Q3.
What do you want me to do? Pick one:
- Read / extract — ask a question of an existing notebook
- Add a source — push content (URL, text, file, Google Doc, or synthesized content) into a notebook
- Generate a Studio output — Audio/Video Overview, Mind Map, Report (Briefing Doc, Study Guide, FAQ, Timeline), Flashcards, Quiz, Infographic, or Slides — the exact set comes from the live Studio panel
- Create a new notebook — initialize with title + initial sources
Why I'm asking: Each action takes a different path through the UI and requires different parameters. Naming the action upfront prevents wasted screenshots and lets me ask only the follow-up questions that apply.
Forcing choice. If the user says "open NotebookLM" without specifying an action, refuse to start and re-ask Q1.
Which notebook? (asked for actions 1, 2, 3 — not for "create new")
Why I'm asking: If you give me a name, I'll search the homepage; if you give me a URL, I'll navigate directly. Names that are ambiguous will get a disambiguation prompt with screenshots.
For action 4 (create new): replace with "What's the title for the new notebook?"
Action 1 (read/extract):
"What's the question to ask the notebook? Use natural phrasing — the notebook's chat handles it best."
Action 2 (add source):
"What source type? Pick one:
- URL / website / YouTube link
- Copied text (paste here or point at content)
- File upload (provide absolute path)
- Google Doc (link)
- Synthesized content (I'll pre-process and add as 'Copied text')
Why I'm asking: Each source type goes through a different sub-flow in the Add Source dialog. Picking upfront saves a step."
Action 3 (Studio output):
"Which Studio output? As of 2026-06 the Studio panel offers Audio Overview, Video Overview, Mind Map, Reports (Briefing Doc / Study Guide / FAQ / Timeline / custom), Flashcards, Quiz, Infographic, and Slides — I'll screenshot the live panel and confirm what your account actually shows before clicking. And: any custom-prompt direction? Default prompts produce mediocre output — I always open the customization menu and write a detailed prompt. Tell me the angle or audience.
Why I'm asking: The output type sets the UI button to find. The custom prompt is mandatory for quality."
Action 4 (create new):
"Initial sources? Provide URLs, file paths, or 'I'll add later'."
Tell me the angle, audience, and length for the Studio output. Examples:
- Audio Overview: "Two-host conversation for a non-technical executive, 8–10 min, focus on business implications not technical depth"
- Infographic: "Decision-tree style, action-oriented, 6 panels max, monochrome navy"
- Study Guide: "Undergrad-level, definitions + 3 practice questions per concept"
Why I'm asking: This becomes the custom prompt. Default Studio prompts produce mediocre output — specific direction produces sharp output.
Asked only for Studio output generation (Q1=3). Skip otherwise.
Stop condition: After Q4 (or earlier with dependency skips), commit and start the action sequence.
See references/studio_output_custom_prompts.md for the canon.
For actions 1-3 (require existing notebook):
For action 4 (create new):
Sub-flows per source type:
| Type | UI flow | |---|---| | URL / Website / YouTube | Add Source → Link → paste URL | | Copied Text | Add Source → Copied text → paste content | | File Upload | Use file-upload tool with absolute path + input ref (never click native file picker) | | Google Doc | Add Source → Google Docs → Drive picker | | Synthesized content | Pre-process content elsewhere, then add as Copied text |
After every add: wait for ingestion spinner, screenshot to confirm success.
Synthesized content pattern (powerful): instead of asking NotebookLM to ingest a raw URL with potentially noisy content, pre-process the content (extract main article, strip nav/ads/comments), then add as "Copied text". Produces dramatically better summarization.
Discover, don't assume. NotebookLM's Studio inventory changes between rollouts and account tiers. As of the last verification (2026-06) the panel offers: Audio Overview, Video Overview, Mind Map, Reports (Briefing Doc, Study Guide, FAQ, Timeline, custom report formats), Flashcards, Quiz, Infographic, Slides. Treat this list as a hint, not ground truth — the screenshot of the live Studio panel is the authority. NotebookLM's UI evolves quickly; verify against the live product and update this section when it drifts (Studio inventory last verified 2026-06).
Mandatory workflow:
Audio Overview:
"Two-host conversation between a researcher and an experienced practitioner. Audience: non-technical executive making a budget decision. Length: 8-10 minutes. Focus on business implications, not technical depth. Include one concrete example per major point. Acknowledge counter-arguments briefly."
Infographic:
"Decision-tree style. Action-oriented (each panel ends with a decision or action). 6 panels max. Monochrome navy + amber highlight. Each panel has: title (4-6 words), 1-2 sentence body, decision/action line. No filler panels."
Study Guide:
"Undergraduate-level (define every technical term). Structure: 6 concepts × 4 elements each (definition / why it matters / one worked example / 3 practice questions). Practice questions Bloom-higher-order (apply/analyze), not recall."
Slides (slide deck):
"12 slides max. 1-2 sentences per slide body. Presenter notes per slide with: one concrete example + one likely audience objection + how to address it. No bullet points in slide bodies — prose only. End with one-slide call-to-action."
See references/studio_output_custom_prompts.md for more.
Async output rule: For Studio generations (especially Audio Overview — 5-10 min), DO NOT wait for completion. The user's session will time out.
Workflow: Click Generate → confirm generation has started via screenshot → tell the user "Generation in progress — NotebookLM will notify you when ready" → end the task.
This is the fire-and-notify pattern. Different from add-source and auto-summary (which are fast enough to wait).
Use scripts/async_action_classifier.py to determine wait-or-notify per action:
| Action | Wait? | |---|---| | Add Source (URL/text/file) | Yes — wait for ingestion spinner (~5-30s) | | Read/Extract (chat) | Yes — wait 3-5s for response | | Studio: Audio Overview | No — fire and notify (5-10 min) | | Studio: Video Overview | No — fire and notify (5-15 min) | | Studio: Infographic / Slides / Mind Map | No — fire and notify (2-5 min) | | Studio: Study Guide / Briefing Doc / FAQ / Flashcards / Quiz | Yes — wait ~30-60s | | Create New Notebook | Yes — wait for auto-summary (<30s) |
# Verdict + paste-ready notify message for any action
python3 scripts/async_action_classifier.py --action "video overview"
# -> Verdict: FIRE_AND_NOTIFY, estimated 5-15 minutes, with the exact
# "NOT waiting in this session" message to relay to the user
See references/async_action_discipline.md for the canon.
NotebookLM is a dynamic SPA where UI varies by:
Every UI action must be preceded by a screenshot. Reasons:
Use screenshot() (or equivalent in your browser-automation tool) before every meaningful UI interaction.
See references/browser_automation_canon.md for the discipline.
Use semantic element finders before pixel coordinates wherever possible:
find(text="Audio Overview") → returns element regardless of positionclick(x=420, y=380) → breaks when UI rearrangesSemantic finders survive minor UI changes. Pixel coordinates do not.
Only fall back to coordinates when:
For Read/Extract actions producing useful information:
${WORKSPACE}/notebooklm/<notebook-slug>-<action>-<date>.md)For Studio outputs:
After completing any action:
| Failure | Behavior | |---|---| | Browser automation unavailable | Fail fast with "this skill requires browser automation" message (Step 0 halt) | | Login wall detected | Stop. Tell user to log in. Don't attempt auto-login. | | Multiple notebooks match name | Screenshot homepage, list options, ask user to specify | | Source ingestion spinner stuck > 60s | Note timeout, ask user if they want to retry | | Studio button not found in panel | Scroll down or look for "Discover more"; if still missing, note feature may not be enabled for this account | | Chat response doesn't appear in 10s | Screenshot, check for error state, retry once | | Page layout changed unexpectedly | Screenshot, describe what's visible, ask user for guidance |
| Script | Role |
|---|---|
| scripts/action_router.py | Q1-Q4 answers → action plan + UI flow + required parameters |
| scripts/custom_prompt_template_generator.py | Studio output type + audience + length → starter custom prompt |
| scripts/async_action_classifier.py | Action name → wait-or-notify pattern (fire-and-notify for slow generations) |
references/browser_automation_canon.md — screenshot-first + find-before-click + tool-agnostic patterns (7+ sources)references/studio_output_custom_prompts.md — why defaults are mediocre + per-output-type templates (7+ sources)references/async_action_discipline.md — fire-and-notify pattern for slow UI ops (7+ sources)Version: 1.0.0
Source spec: megaprompts/03-notebooklm-megaprompt.md
Build pattern: Path B (direct conversion). Browser-automation shape — distinct from research-pack convention.
development
Use when someone wants to run a weekly review, close open loops, audit stalled projects and commitments, get their system back to trusted, restart a lapsed review habit, or says "/cs:weekly-review". Walks David Allen's three-phase loop — GET CLEAR, GET CURRENT, GET CREATIVE — with deterministic scripts that inventory open loops, gate the checklist with named gaps, and score commitment health 0-100.
development
Use when someone wants to decide whether a meeting is worth calling, price a meeting in dollars, build a timeboxed agenda with desired outcomes, or turn messy meeting notes into owned action items — or says "should this be a meeting", "/cs:meeting-prep", or "/cs:meeting-actions". Runs a cost gate (ASYNC / NOT-READY / MEET), builds a decision-first agenda, and extracts an owner + due-date checklist that flags every orphan.
development
Convert a rambling description of a desired outcome into one polished, autonomous /goal prompt ready to paste into a fresh session. Use when the user says "/fable-goal", "turn this into a goal prompt", "write me a fable prompt", "write the prompt that builds X", or rambles about something they want made and asks for the prompt that makes it happen. The output is a single copy-paste prompt, never the build itself. Do NOT use when the user wants the thing built right now in this session — only when they want the PROMPT that will make it happen in a fresh session.
development
Use when someone wants to plan a deep work day, time-block their calendar or task list, budget or cut shallow work, protect focus hours, track deep-work sessions and streaks, run an end-of-day shutdown ritual, or says "/deep-work" or "/time-block". Classifies tasks deep vs shallow, builds an energy-first time-blocked schedule that refuses deep demand past the 4-hour ceiling, batches shallow work into at most two windows, and logs focus sessions against a weekly target.