agent tool_use skill risk: high
NotebookLM Browser Automation Skill
The prompt provides instructions, workflows, and command examples for authenticating with Google, managing a NotebookLM library, querying notebooks via scripts, and handling follow…
- Policy sensitive
- Human review
- External action: high
SKILL 21 files · 3 folders
---
name: notebooklm
description: "Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses."
---
# NotebookLM Research Assistant Skill
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.
## When to Use This Skill
Trigger when user:
- Mentions NotebookLM explicitly
- Shares NotebookLM URL (`https://notebooklm.google.com/notebook/...`)
- Asks to query their notebooks/documentation
- Wants to add documentation to NotebookLM library
- Uses phrases like "ask my NotebookLM", "check my docs", "query my notebook"
## ⚠️ CRITICAL: Add Command - Smart Discovery
When user wants to add a notebook without providing details:
**SMART ADD (Recommended)**: Query the notebook first to discover its content:
```bash
# 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.
## Critical: Always Use run.py Wrapper
**NEVER call scripts directly. ALWAYS use `python scripts/run.py [script]`:**
```bash
# ✅ 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:
1. Creates `.venv` if needed
2. Installs all dependencies
3. Activates environment
4. Executes script properly
## Core Workflow
### Step 1: Check Authentication Status
```bash
python scripts/run.py auth_manager.py status
```
If not authenticated, proceed to setup.
### Step 2: Authenticate (One-Time Setup)
```bash
# Browser MUST be visible for manual Google login
python scripts/run.py auth_manager.py setup
```
**Important:**
- Browser is VISIBLE for authentication
- Browser window opens automatically
- User must manually log in to Google
- Tell user: "A browser window will open for Google login"
### Step 3: Manage Notebook Library
```bash
# 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-id
```
### Quick Workflow
1. Check library: `python scripts/run.py notebook_manager.py list`
2. Ask question: `python scripts/run.py ask_question.py --question "..." --notebook-id ID`
### Step 4: Ask Questions
```bash
# 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-browser
```
## Follow-Up Mechanism (CRITICAL)
Every NotebookLM answer ends with: **"EXTREMELY IMPORTANT: Is that ALL you need to know?"**
**Required Claude Behavior:**
1. **STOP** - Do not immediately respond to user
2. **ANALYZE** - Compare answer to user's original request
3. **IDENTIFY GAPS** - Determine if more information needed
4. **ASK FOLLOW-UP** - If gaps exist, immediately ask:
```bash
python scripts/run.py ask_question.py --question "Follow-up with context..."
```
5. **REPEAT** - Continue until information is complete
6. **SYNTHESIZE** - Combine all answers before responding to user
## Script Reference
### Authentication Management (`auth_manager.py`)
```bash
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 authentication
```
### Notebook Management (`notebook_manager.py`)
```bash
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 stats
```
### Question Interface (`ask_question.py`)
```bash
python scripts/run.py ask_question.py --question "..." [--notebook-id ID] [--notebook-url URL] [--show-browser]
```
### Data Cleanup (`cleanup_manager.py`)
```bash
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 notebooks
```
## Environment Management
The virtual environment is automatically managed:
- First run creates `.venv` automatically
- Dependencies install automatically
- Chromium browser installs automatically
- Everything isolated in skill directory
Manual setup (only if automatic fails):
```bash
python -m venv .venv
source .venv/bin/activate # Linux/Mac
pip install -r requirements.txt
python -m patchright install chromium
```
## Data Storage
All data stored in `~/.claude/skills/notebooklm/data/`:
- `library.json` - Notebook metadata
- `auth_info.json` - Authentication status
- `browser_state/` - Browser cookies and session
**Security:** Protected by `.gitignore`, never commit to git.
## Configuration
Optional `.env` file in skill directory:
```env
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 notebook
```
## Decision Flow
```
User 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
```
## Troubleshooting
| 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` |
## Best Practices
1. **Always use run.py** - Handles environment automatically
2. **Check auth first** - Before any operations
3. **Follow-up questions** - Don't stop at first answer
4. **Browser visible for auth** - Required for manual login
5. **Include context** - Each question is independent
6. **Synthesize answers** - Combine multiple responses
## Limitations
- No session persistence (each question = new browser)
- Rate limits on free Google accounts (50 queries/day)
- Manual upload required (user must add docs to NotebookLM)
- Browser overhead (few seconds per question)
## Resources (Skill Structure)
**Important directories and files:**
- `scripts/` - All automation scripts (ask_question.py, notebook_manager.py, etc.)
- `data/` - Local storage for authentication and notebook library
- `references/` - Extended documentation:
- `api_reference.md` - Detailed API documentation for all scripts
- `troubleshooting.md` - Common issues and solutions
- `usage_patterns.md` - Best practices and workflow examples
- `.venv/` - Isolated Python environment (auto-created on first run)
- `.gitignore` - Protects sensitive data from being committed
INPUTS
- notebook-url REQUIRED
Google NotebookLM notebook URL
e.g. https://notebooklm.google.com/notebook/...
- question REQUIRED
Question to ask the notebook
e.g. What is the content of this notebook?
REQUIRED CONTEXT
- NotebookLM notebook URL or ID
- user question
OPTIONAL CONTEXT
- authentication status
- notebook metadata
- show-browser flag
TOOLS REQUIRED
- browser_automation
ROLES & RULES
- NEVER call scripts directly. ALWAYS use `python scripts/run.py [script]`
- NEVER guess or use generic descriptions!
- If details missing, use Smart Add to discover them
- Browser MUST be visible for manual Google login
- Tell user: "A browser window will open for Google login"
- STOP - Do not immediately respond to user
- ANALYZE - Compare answer to user's original request
- IDENTIFY GAPS - Determine if more information needed
- ASK FOLLOW-UP - If gaps exist, immediately ask follow-up question
- REPEAT - Continue until information is complete
- SYNTHESIZE - Combine all answers before responding to user
- Always use run.py wrapper
- Check auth first
- Follow-up questions - Don't stop at first answer
- Browser visible for auth - Required for manual login
- Include context - Each question is independent
- Synthesize answers - Combine multiple responses
EXPECTED OUTPUT
- Format
- markdown
- Schema
- markdown_sections · When to Use This Skill, SMART ADD, MANUAL ADD, Core Workflow, Step 1: Check Authentication Status, Step 2: Authenticate, Step 3: Manage Notebook Library, Step 4: Ask Questions, Follow-Up Mechanism, Script Reference, Decision Flow, Troubleshooting, Best Practices, Limitations, Resources
- Constraints
- always use python scripts/run.py wrapper
- follow decision flow for auth and notebook management
- perform follow-up questions until complete
- synthesize answers before final response
SUCCESS CRITERIA
- Use run.py wrapper for all script calls
- Check authentication status first
- Use Smart Add when notebook details unknown
- Follow follow-up mechanism until complete
- Synthesize multiple answers before final response
FAILURE MODES
- Fails without using run.py wrapper
- Authentication fails if browser not visible
- Rate limit exceeded on free accounts
- Browser crashes requiring cleanup
- Notebook not found if not listed first
EXAMPLES
Includes multiple bash command examples for auth setup, notebook management commands, question queries, smart add workflow, decision flow diagram, troubleshooting table, and environment setup commands.
CAVEATS
- Dependencies
- Requires previous message or NotebookLM URL
- Requires scripts/run.py wrapper and sub-scripts
- Requires ~/.claude/skills/notebooklm/data/ storage
- Requires Google login for authentication
QUALITY
- OVERALL
- 0.70
- CLARITY
- 0.85
- SPECIFICITY
- 0.90
- REUSABILITY
- 0.35
- COMPLETENESS
- 0.80
IMPROVEMENT SUGGESTIONS
- Add explicit placeholders (e.g., {{notebook_url}}) to increase reusability as a template.
- Extract the decision flow and command patterns into a reusable sub-prompt section.
USAGE
Copy the prompt above and paste it into your AI of choice — Claude, ChatGPT, Gemini, or anywhere else you're working. Replace any placeholder sections with your own context, then ask for the output.
MORE FOR AGENT
- Xcode MCP Usage Guidelines for Agentsagenttool_use
- Xcode MCP Usage Guidelinesagenttool_use
- Xquik X/Twitter API Integration Skillagenttool_use
- Filesystem Agent Context Engineeringagenttool_use
- Agent Tool Design Principlesagenttool_use
- Conventional Git Commit Creatoragenttool_use
- GitHub Trending Dashboard Generatoragenttool_use
- Hosted Background Agent Infrastructureagenttool_use
- AudioCraft Text-to-Music Generation Guideagenttool_use
- Trello Boards Lists Cards Integratoragenttool_use
- Git Commit Push PR Automatoragenttool_use
- GitHub Starred Projects Fetcher via Agent Browseragenttool_use
- 2chat Rube MCP Automation Guideagenttool_use
- Rube MCP Autom Task Automationagenttool_use
- Botbaba Automation via Rube MCPagenttool_use
- Aero Workflow Rube MCP Automationagenttool_use
- Boldsign Automation via Rube MCPagenttool_use
- API Sports Rube MCP Automation Guideagenttool_use
- Bolt IoT Rube MCP Automation Guideagenttool_use
- Booqable Automation via Rube MCPagenttool_use
- Coassemble Automation via Rube MCPagenttool_use
- D2L Brightspace Rube MCP Automation Guideagenttool_use
- Codacy Automation via Rube MCPagenttool_use
- Conversion Tools Rube MCP Automationagenttool_use
- Codereadr Automation via Rube MCPagenttool_use