NotebookLM — Browser Automation
Browser automation skill for controlling Google's NotebookLM.
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/notebooklm. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit alirezarezvani/claude-skills/research/notebooklm/skills/notebooklm#main ~/.claude/skills/notebooklmFor one project only, change the path to .claude/skills/notebooklm.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Source of NotebookLM — Browser Automation
Show the full text299 lines
| name | description | license | metadata |
|---|---|---|---|
| notebooklm | 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. | MIT | source_spec: "megaprompts/03-notebooklm-megaprompt.md build_pattern: "Path B (direct conversion) shape: "browser-automation (distinct from research-pack convention) version: 1.0.0 |
NotebookLM — Browser Automation
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).
Step 0: Browser Context Setup (Mandatory)
Before any other action, verify browser automation is available:
- Check whether browser-control tools are loaded in the harness (screenshot, click, find-element, navigate)
- If unavailable → halt with clear message: "This skill requires browser automation. Currently in {context}. Cannot proceed. Use Claude Code CLI with computer-use, Claude Chrome Extension, or equivalent."
- If available → take initial screenshot, navigate to https://notebooklm.google.com
- Detect login wall via screenshot. If login screen detected: halt with "Please log in to NotebookLM in the browser, then re-invoke this skill." Never attempt to handle login automatically.
Phase 0: Grill-Me Intake (Action-Routing)
Up to 4 forcing questions, one at a time, dependency-ordered. Most invocations stop at Q3.
Q1 (root) — Action
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.
Q2 (depends on Q1) — Notebook identity
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?"
Q3 (depends on Q1) — Action-specific parameter
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'."
Q4 (depends on Q1 = action 3) — Studio custom prompt detail
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.
Notebook Discovery
For actions 1-3 (require existing notebook):
- Navigate to homepage → screenshot
- If user provided URL → navigate directly
- If user provided name:
- Use semantic find() to locate notebook card by visible title text
- If multiple matches → screenshot homepage, list options, ask user to specify
- If no match → ask user to provide URL or confirm spelling
For action 4 (create new):
- Locate "New notebook" button on homepage
- Click → set title from Q2
- Add initial sources per Q3
Action 1: Read / Extract
- Open the notebook (notebook discovery above)
- Locate chat input (semantic find or screenshot coordinates)
- Type the question (use the user's natural phrasing from Q3)
- Submit (Enter or send button)
- Wait 3–5 seconds
- Screenshot the response area
- Extract and present in clean format (not raw chat dump)
Action 2: Add Sources
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.
Action 3: Studio Outputs
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:
- Locate Studio panel (right side; may need toggle) and screenshot it — the tiles you see are the real output types for this account
- Find the specific output button for the requested type (if it isn't visible, check "Discover more"/overflow before declaring it unavailable)
- Open customization menu (chevron/arrow next to button) — NOT the main button
- Write detailed custom prompt (from Q4)
- Confirm and submit
- Do NOT wait for completion — confirm generation started, notify user, return
Custom prompt examples (4 output types)
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.
Action 4: Create New Notebook
- Navigate to homepage
- Click "New notebook"
- Set title from Q2
- Add initial sources from Q3 (use Action 2 sub-flows per source type)
- Wait for auto-summary generation (this one IS synchronous — usually completes in <30 sec)
- Screenshot final state
Critical Async Behavior
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.
Screenshot-First Discipline
NotebookLM is a dynamic SPA where UI varies by:
- Account tier (free vs Plus vs Enterprise)
- Feature rollout (some Studio types not yet available to all users)
- Recent UI changes (Google iterates the product frequently)
Every UI action must be preceded by a screenshot. Reasons:
- Verify the UI matches expectations before acting
- Catch login walls early
- Detect unexpected layout changes
- Audit trail for debugging
Use screenshot() (or equivalent in your browser-automation tool) before every meaningful UI interaction.
See references/browser_automation_canon.md for the discipline.
find()-Before-Click
Use semantic element finders before pixel coordinates wherever possible:
- ✅
find(text="Audio Overview")→ returns element regardless of position - ❌
click(x=420, y=380)→ breaks when UI rearranges
Semantic finders survive minor UI changes. Pixel coordinates do not.
Only fall back to coordinates when:
- Semantic find() returns nothing
- Element has no stable text/aria-label/data-attribute
- Visual position is the only reliable signal
Saving Outputs to Workspace
For Read/Extract actions producing useful information:
- Extract chat response cleanly (strip UI chrome)
- Format readably (paragraphs, lists, code blocks as appropriate)
- If user requested → save to file (
${WORKSPACE}/notebooklm/<notebook-slug>-<action>-<date>.md) - Otherwise → return in chat as final summary
For Studio outputs:
- NotebookLM hosts the output (Audio Overview is in-app, Infographic downloadable, etc.)
- Report the location (URL or in-app navigation path) to user
- Don't try to download/save Studio outputs to local workspace — that's NotebookLM's job
Reporting Back Format
After completing any action:
- Take final screenshot if visually relevant
- Give clean summary (not raw chat dump):
- Notebook used (name)
- Action taken (specific)
- Result (1-2 sentences)
- For generated outputs: what was created + where it is + when ready
- For fire-and-notify actions: explicit "NotebookLM will notify you when ready"
Error Handling
| 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 |
Tooling
| 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
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)
Anti-Patterns To Reject
- Tool-specific tool names without abstraction (e.g., hardcoding "Claude Chrome Extension")
- Synchronous waiting on Studio generations (especially Audio Overview)
- Skipping screenshots between actions
- Using pixel coordinates when semantic find() is available
- Attempting to handle login flows automatically
- Generating Studio outputs without opening customization menu
- Using default Studio prompts (always write custom)
Version: 1.0.0
Source spec: megaprompts/03-notebooklm-megaprompt.md (maintainer-local draft spec — gitignored, not present in the public repository)
Build pattern: Path B (direct conversion). Browser-automation shape — distinct from research-pack convention.
| 1 | |
| 2 | name notebooklm |
| 3 | description "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." |
| 4 | license MIT |
| 5 | metadata |
| 6 | source_spec "megaprompts/03-notebooklm-megaprompt.md" |
| 7 | build_pattern "Path B (direct conversion)" |
| 8 | shape "browser-automation (distinct from research-pack convention)" |
| 9 | version 1.0.0 |
| 10 | |
| 11 | |
| 12 | # NotebookLM — Browser Automation |
| 13 | |
| 14 | > **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.** |
| 15 | |
| 16 | > **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). |
| 17 | |
| 18 | ## Step 0: Browser Context Setup (Mandatory) |
| 19 | |
| 20 | Before any other action, verify browser automation is available: |
| 21 | |
| 22 | Check whether browser-control tools are loaded in the harness (screenshot, click, find-element, navigate) |
| 23 | If unavailable → **halt with clear message:** "This skill requires browser automation. Currently in {context}. Cannot proceed. Use Claude Code CLI with computer-use, Claude Chrome Extension, or equivalent." |
| 24 | If available → take initial screenshot, navigate to https://notebooklm.google.com |
| 25 | **Detect login wall via screenshot.** If login screen detected: halt with "Please log in to NotebookLM in the browser, then re-invoke this skill." **Never attempt to handle login automatically.** |
| 26 | |
| 27 | ## Phase 0: Grill-Me Intake (Action-Routing) |
| 28 | |
| 29 | Up to 4 forcing questions, one at a time, dependency-ordered. Most invocations stop at Q3. |
| 30 | |
| 31 | ### Q1 (root) — Action |
| 32 | |
| 33 | > **What do you want me to do? Pick one:** |
| 34 | > |
| 35 | > 1. **Read / extract** — ask a question of an existing notebook |
| 36 | > 2. **Add a source** — push content (URL, text, file, Google Doc, or synthesized content) into a notebook |
| 37 | > 3. **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 |
| 38 | > 4. **Create a new notebook** — initialize with title + initial sources |
| 39 | > |
| 40 | > *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. |
| 41 | |
| 42 | **Forcing choice.** If the user says "open NotebookLM" without specifying an action, **refuse to start** and re-ask Q1. |
| 43 | |
| 44 | ### Q2 (depends on Q1) — Notebook identity |
| 45 | |
| 46 | > **Which notebook?** *(asked for actions 1, 2, 3 — not for "create new")* |
| 47 | > |
| 48 | > *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. |
| 49 | |
| 50 | For action 4 (create new): replace with "What's the title for the new notebook?" |
| 51 | |
| 52 | ### Q3 (depends on Q1) — Action-specific parameter |
| 53 | |
| 54 | **Action 1 (read/extract):** |
| 55 | > "What's the question to ask the notebook? Use natural phrasing — the notebook's chat handles it best." |
| 56 | |
| 57 | **Action 2 (add source):** |
| 58 | > "What source type? Pick one: |
| 59 | > 1. URL / website / YouTube link |
| 60 | > 2. Copied text (paste here or point at content) |
| 61 | > 3. File upload (provide absolute path) |
| 62 | > 4. Google Doc (link) |
| 63 | > 5. Synthesized content (I'll pre-process and add as 'Copied text') |
| 64 | > |
| 65 | > *Why I'm asking:* Each source type goes through a different sub-flow in the Add Source dialog. Picking upfront saves a step." |
| 66 | |
| 67 | **Action 3 (Studio output):** |
| 68 | > "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. |
| 69 | > |
| 70 | > *Why I'm asking:* The output type sets the UI button to find. The custom prompt is mandatory for quality." |
| 71 | |
| 72 | **Action 4 (create new):** |
| 73 | > "Initial sources? Provide URLs, file paths, or 'I'll add later'." |
| 74 | |
| 75 | ### Q4 (depends on Q1 = action 3) — Studio custom prompt detail |
| 76 | |
| 77 | > **Tell me the angle, audience, and length for the Studio output. Examples:** |
| 78 | > |
| 79 | > - **Audio Overview:** "Two-host conversation for a non-technical executive, 8–10 min, focus on business implications not technical depth" |
| 80 | > - **Infographic:** "Decision-tree style, action-oriented, 6 panels max, monochrome navy" |
| 81 | > - **Study Guide:** "Undergrad-level, definitions + 3 practice questions per concept" |
| 82 | > |
| 83 | > *Why I'm asking:* This becomes the custom prompt. **Default Studio prompts produce mediocre output — specific direction produces sharp output.** |
| 84 | |
| 85 | **Asked only for Studio output generation (Q1=3). Skip otherwise.** |
| 86 | |
| 87 | **Stop condition:** After Q4 (or earlier with dependency skips), commit and start the action sequence. |
| 88 | |
| 89 | See [`references/studio_output_custom_prompts.md`] for the canon. |
| 90 | |
| 91 | ## Notebook Discovery |
| 92 | |
| 93 | For actions 1-3 (require existing notebook): |
| 94 | |
| 95 | Navigate to homepage → screenshot |
| 96 | If user provided **URL** → navigate directly |
| 97 | If user provided **name**: |
| 98 | Use semantic find() to locate notebook card by visible title text |
| 99 | If multiple matches → screenshot homepage, list options, ask user to specify |
| 100 | If no match → ask user to provide URL or confirm spelling |
| 101 | |
| 102 | For action 4 (create new): |
| 103 | Locate "New notebook" button on homepage |
| 104 | Click → set title from Q2 |
| 105 | Add initial sources per Q3 |
| 106 | |
| 107 | ## Action 1: Read / Extract |
| 108 | |
| 109 | Open the notebook (notebook discovery above) |
| 110 | Locate chat input (semantic find or screenshot coordinates) |
| 111 | Type the question (use the user's natural phrasing from Q3) |
| 112 | Submit (Enter or send button) |
| 113 | **Wait 3–5 seconds** |
| 114 | Screenshot the response area |
| 115 | Extract and present in **clean format** (not raw chat dump) |
| 116 | |
| 117 | ## Action 2: Add Sources |
| 118 | |
| 119 | Sub-flows per source type: |
| 120 | |
| 121 | | Type | UI flow | |
| 122 | |---|---| |
| 123 | | URL / Website / YouTube | Add Source → Link → paste URL | |
| 124 | | Copied Text | Add Source → Copied text → paste content | |
| 125 | | File Upload | Use file-upload tool with absolute path + input ref (never click native file picker) | |
| 126 | | Google Doc | Add Source → Google Docs → Drive picker | |
| 127 | | Synthesized content | Pre-process content elsewhere, then add as Copied text | |
| 128 | |
| 129 | **After every add:** wait for ingestion spinner, screenshot to confirm success. |
| 130 | |
| 131 | **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. |
| 132 | |
| 133 | ## Action 3: Studio Outputs |
| 134 | |
| 135 | **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). |
| 136 | |
| 137 | **Mandatory workflow:** |
| 138 | |
| 139 | Locate Studio panel (right side; may need toggle) and **screenshot it — the tiles you see are the real output types for this account** |
| 140 | Find the specific output button for the requested type (if it isn't visible, check "Discover more"/overflow before declaring it unavailable) |
| 141 | **Open customization menu** (chevron/arrow next to button) — **NOT the main button** |
| 142 | **Write detailed custom prompt** (from Q4) |
| 143 | Confirm and submit |
| 144 | **Do NOT wait for completion** — confirm generation started, notify user, return |
| 145 | |
| 146 | ### Custom prompt examples (4 output types) |
| 147 | |
| 148 | **Audio Overview:** |
| 149 | > "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." |
| 150 | |
| 151 | **Infographic:** |
| 152 | > "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." |
| 153 | |
| 154 | **Study Guide:** |
| 155 | > "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." |
| 156 | |
| 157 | **Slides (slide deck):** |
| 158 | > "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." |
| 159 | |
| 160 | See [`references/studio_output_custom_prompts.md`] for more. |
| 161 | |
| 162 | ## Action 4: Create New Notebook |
| 163 | |
| 164 | Navigate to homepage |
| 165 | Click "New notebook" |
| 166 | Set title from Q2 |
| 167 | Add initial sources from Q3 (use Action 2 sub-flows per source type) |
| 168 | **Wait for auto-summary generation** (this one IS synchronous — usually completes in <30 sec) |
| 169 | Screenshot final state |
| 170 | |
| 171 | ## Critical Async Behavior |
| 172 | |
| 173 | > **Async output rule:** For Studio generations (especially **Audio Overview** — 5-10 min), DO NOT wait for completion. The user's session will time out. |
| 174 | > |
| 175 | > Workflow: Click Generate → confirm generation has started via screenshot → tell the user "Generation in progress — NotebookLM will notify you when ready" → **end the task.** |
| 176 | |
| 177 | This is the **fire-and-notify** pattern. Different from add-source and auto-summary (which are fast enough to wait). |
| 178 | |
| 179 | Use `scripts/async_action_classifier.py` to determine wait-or-notify per action: |
| 180 | |
| 181 | | Action | Wait? | |
| 182 | |---|---| |
| 183 | | Add Source (URL/text/file) | Yes — wait for ingestion spinner (~5-30s) | |
| 184 | | Read/Extract (chat) | Yes — wait 3-5s for response | |
| 185 | | Studio: Audio Overview | **No** — fire and notify (5-10 min) | |
| 186 | | Studio: Video Overview | **No** — fire and notify (5-15 min) | |
| 187 | | Studio: Infographic / Slides / Mind Map | **No** — fire and notify (2-5 min) | |
| 188 | | Studio: Study Guide / Briefing Doc / FAQ / Flashcards / Quiz | Yes — wait ~30-60s | |
| 189 | | Create New Notebook | Yes — wait for auto-summary (<30s) | |
| 190 | |
| 191 | |
| 192 | # Verdict + paste-ready notify message for any action |
| 193 | python3 scripts/async_action_classifier.py --action "video overview" |
| 194 | # -> Verdict: FIRE_AND_NOTIFY, estimated 5-15 minutes, with the exact |
| 195 | # "NOT waiting in this session" message to relay to the user |
| 196 | |
| 197 | |
| 198 | See [`references/async_action_discipline.md`] for the canon. |
| 199 | |
| 200 | ## Screenshot-First Discipline |
| 201 | |
| 202 | NotebookLM is a **dynamic SPA** where UI varies by: |
| 203 | Account tier (free vs Plus vs Enterprise) |
| 204 | Feature rollout (some Studio types not yet available to all users) |
| 205 | Recent UI changes (Google iterates the product frequently) |
| 206 | |
| 207 | **Every UI action must be preceded by a screenshot.** Reasons: |
| 208 | |
| 209 | Verify the UI matches expectations before acting |
| 210 | Catch login walls early |
| 211 | Detect unexpected layout changes |
| 212 | Audit trail for debugging |
| 213 | |
| 214 | Use `screenshot()` (or equivalent in your browser-automation tool) before every meaningful UI interaction. |
| 215 | |
| 216 | See [`references/browser_automation_canon.md`] for the discipline. |
| 217 | |
| 218 | ## find()-Before-Click |
| 219 | |
| 220 | Use **semantic element finders** before pixel coordinates wherever possible: |
| 221 | |
| 222 | ✅ `find(text="Audio Overview")` → returns element regardless of position |
| 223 | ❌ `click(x=420, y=380)` → breaks when UI rearranges |
| 224 | |
| 225 | Semantic finders survive minor UI changes. Pixel coordinates do not. |
| 226 | |
| 227 | Only fall back to coordinates when: |
| 228 | Semantic find() returns nothing |
| 229 | Element has no stable text/aria-label/data-attribute |
| 230 | Visual position is the only reliable signal |
| 231 | |
| 232 | ## Saving Outputs to Workspace |
| 233 | |
| 234 | For Read/Extract actions producing useful information: |
| 235 | |
| 236 | Extract chat response cleanly (strip UI chrome) |
| 237 | Format readably (paragraphs, lists, code blocks as appropriate) |
| 238 | If user requested → save to file (`${WORKSPACE}/notebooklm/<notebook-slug>-<action>-<date>.md`) |
| 239 | Otherwise → return in chat as final summary |
| 240 | |
| 241 | For Studio outputs: |
| 242 | NotebookLM hosts the output (Audio Overview is in-app, Infographic downloadable, etc.) |
| 243 | Report the location (URL or in-app navigation path) to user |
| 244 | Don't try to download/save Studio outputs to local workspace — that's NotebookLM's job |
| 245 | |
| 246 | ## Reporting Back Format |
| 247 | |
| 248 | After completing any action: |
| 249 | |
| 250 | Take final screenshot if visually relevant |
| 251 | Give **clean summary** (not raw chat dump): |
| 252 | Notebook used (name) |
| 253 | Action taken (specific) |
| 254 | Result (1-2 sentences) |
| 255 | For generated outputs: what was created + where it is + when ready |
| 256 | For fire-and-notify actions: explicit "NotebookLM will notify you when ready" |
| 257 | |
| 258 | ## Error Handling |
| 259 | |
| 260 | | Failure | Behavior | |
| 261 | |---|---| |
| 262 | | Browser automation unavailable | Fail fast with "this skill requires browser automation" message (Step 0 halt) | |
| 263 | | Login wall detected | Stop. Tell user to log in. Don't attempt auto-login. | |
| 264 | | Multiple notebooks match name | Screenshot homepage, list options, ask user to specify | |
| 265 | | Source ingestion spinner stuck > 60s | Note timeout, ask user if they want to retry | |
| 266 | | 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 | |
| 267 | | Chat response doesn't appear in 10s | Screenshot, check for error state, retry once | |
| 268 | | Page layout changed unexpectedly | Screenshot, describe what's visible, ask user for guidance | |
| 269 | |
| 270 | ## Tooling |
| 271 | |
| 272 | | Script | Role | |
| 273 | |---|---| |
| 274 | | `scripts/action_router.py` | Q1-Q4 answers → action plan + UI flow + required parameters | |
| 275 | | `scripts/custom_prompt_template_generator.py` | Studio output type + audience + length → starter custom prompt | |
| 276 | | `scripts/async_action_classifier.py` | Action name → wait-or-notify pattern (fire-and-notify for slow generations) | |
| 277 | |
| 278 | ## References |
| 279 | |
| 280 | [`references/browser_automation_canon.md`] — screenshot-first + find-before-click + tool-agnostic patterns (7+ sources) |
| 281 | [`references/studio_output_custom_prompts.md`] — why defaults are mediocre + per-output-type templates (7+ sources) |
| 282 | [`references/async_action_discipline.md`] — fire-and-notify pattern for slow UI ops (7+ sources) |
| 283 | |
| 284 | ## Anti-Patterns To Reject |
| 285 | |
| 286 | Tool-specific tool names without abstraction (e.g., hardcoding "Claude Chrome Extension") |
| 287 | Synchronous waiting on Studio generations (especially Audio Overview) |
| 288 | Skipping screenshots between actions |
| 289 | Using pixel coordinates when semantic find() is available |
| 290 | Attempting to handle login flows automatically |
| 291 | Generating Studio outputs without opening customization menu |
| 292 | Using default Studio prompts (always write custom) |
| 293 | |
| 294 | |
| 295 | |
| 296 | **Version:** 1.0.0 |
| 297 | **Source spec:** `megaprompts/03-notebooklm-megaprompt.md` (maintainer-local draft spec — gitignored, not present in the public repository) |
| 298 | **Build pattern:** Path B (direct conversion). Browser-automation shape — distinct from research-pack convention. |
| 299 |
Discussion
Browse more free Claude skills or everything in Data & analytics.