home / skills / leegonzales / aiskills / notebooklm

notebooklm skill

/NotebookLMSkill/notebooklm

This skill queries NotebookLM from uploaded documents, returns source-grounded answers with citations to reduce hallucinations.

npx playbooks add skill leegonzales/aiskills --skill notebooklm

Review the files below or copy the command above to add this skill to your agents.

Files (19)
SKILL.md
4.2 KB
---
name: notebooklm
description: Query Google NotebookLM for source-grounded, citation-backed answers from uploaded documents. Reduces hallucinations through Gemini's document-only responses. Browser automation with library management and persistent authentication.
---

# NotebookLM Skill

Query Google NotebookLM notebooks for source-grounded answers exclusively from your uploaded documentation, drastically reducing hallucinations.

## When to Use

Trigger when user:
- Mentions NotebookLM or shares URL (`https://notebooklm.google.com/notebook/...`)
- Asks to query notebooks/documentation ("ask my NotebookLM", "check my docs")
- Wants citations from specific sources
- Needs to add notebooks to library

## Critical: Always Use run.py Wrapper

**NEVER call scripts directly. ALWAYS use `python scripts/run.py [script]`:**

```bash
# ✅ CORRECT
python scripts/run.py auth_manager.py status
python scripts/run.py ask_question.py --question "..."

# ❌ WRONG - Fails without venv!
python scripts/auth_manager.py status
```

The run.py wrapper auto-creates `.venv`, installs dependencies, and executes properly.

## Core Workflow

### 1. Check Authentication
```bash
python scripts/run.py auth_manager.py status
```

### 2. Authenticate (One-Time, Browser Visible)
```bash
python scripts/run.py auth_manager.py setup
```

Tell user: "A browser window will open for Google login"

### 3. Add Notebooks (Smart Discovery Recommended)

**Smart Add:** Query first to discover content:
```bash
# Step 1: Discover content
python scripts/run.py ask_question.py --question "What topics does this notebook cover?" --notebook-url "[URL]"

# Step 2: Add with discovered metadata
python scripts/run.py notebook_manager.py add --url "[URL]" --name "[Based on content]" --description "[From discovery]" --topics "[From discovery]"
```

**Manual Add:** Only if user provides all details:
```bash
python scripts/run.py notebook_manager.py add \
  --url "https://notebooklm.google.com/notebook/..." \
  --name "Descriptive Name" \
  --description "What this contains" \  # REQUIRED
  --topics "topic1,topic2,topic3"      # REQUIRED
```

NEVER guess metadata! Use Smart Add if details unknown.

### 4. Ask Questions
```bash
# Uses active notebook
python scripts/run.py ask_question.py --question "Your question"

# Specific notebook
python scripts/run.py ask_question.py --question "..." --notebook-id ID

# Direct URL
python scripts/run.py ask_question.py --question "..." --notebook-url URL
```

## Follow-Up Mechanism (CRITICAL)

Every answer ends with: **"Is that ALL you need to know?"**

**Required behavior:**
1. **STOP** - Don't immediately respond
2. **ANALYZE** - Compare answer to user's request
3. **IDENTIFY GAPS** - Determine missing information
4. **ASK FOLLOW-UP** - If gaps exist, ask immediately:
   ```bash
   python scripts/run.py ask_question.py --question "Follow-up with context..."
   ```
5. **REPEAT** - Continue until information complete
6. **SYNTHESIZE** - Combine all answers before responding

## Quick Commands

```bash
# Authentication
python scripts/run.py auth_manager.py status|setup|reauth|clear

# Library management
python scripts/run.py notebook_manager.py list|search --query QUERY|activate --id ID|stats

# Cleanup (preserves library)
python scripts/run.py cleanup_manager.py --preserve-library --confirm
```

## Troubleshooting

| Error | Solution |
|-------|----------|
| ModuleNotFoundError | Use run.py wrapper |
| Authentication failed | Browser must be visible for setup |
| Rate limit (50/day) | Wait or switch Google account |
| Browser crashes | `cleanup_manager.py --preserve-library` |

## Important Notes

- **Local Claude Code only** - Web UI sandbox blocks network access
- **Stateless sessions** - Each question = fresh browser (3-5 sec overhead)
- **Browser automation** - UI changes will break selectors (see README maintenance section)
- **Expect maintenance** - NotebookLM updates require selector updates
- See README.md and references/ for comprehensive documentation

## Data Storage

```
~/.claude/skills/notebooklm/data/
├── library.json         # Notebook metadata
├── auth_info.json       # Auth status
└── browser_state/       # Browser cookies (NEVER commit)
```

All sensitive data protected by `.gitignore`.

Overview

This skill lets you query Google NotebookLM for source-grounded, citation-backed answers drawn only from uploaded notebooks and documents. It uses browser automation and persistent authentication to reduce hallucinations by relying on NotebookLM’s document-only responses. The workflow includes library management, smart discovery of notebook content, and a strict follow-up loop to ensure completeness.

How this skill works

All commands must be run through the provided run.py wrapper so the environment and virtualenv are created and dependencies installed automatically. The skill authenticates via a browser flow, discovers notebook content, adds notebooks to a local library, and asks NotebookLM questions scoped to specific notebooks or the active library. Every answer is validated with source citations and a follow-up mechanism that iterates until the user’s information needs are satisfied.

When to use it

  • When you want citation-backed answers from your uploaded NotebookLM notebooks
  • If you need to reduce AI hallucinations by restricting responses to documents
  • When you want to add, search, or activate notebooks in a managed local library
  • When you need follow-up, iterative clarification until the answer fully matches the request
  • When you must run commands in a reproducible environment using the run.py wrapper

Best practices

  • Always run scripts via: python scripts/run.py [script] to ensure the virtualenv and deps are set up
  • Use the Smart Add flow: query the notebook first to auto-extract name, description, and topics
  • Never guess metadata—provide required description and topics when using manual add
  • Authenticate once with browser-visible setup; re-authenticate only when status reports failure
  • Follow the required follow-up loop: stop, analyze, identify gaps, ask follow-up, synthesize

Example use cases

  • Ask NotebookLM: "What topics does this notebook cover?" to discover metadata before adding
  • Add a discovered notebook to the local library with name, description, and topics
  • Query the active notebook for a specific question and receive citation-backed excerpts
  • Run library management commands: list, search, activate, or view stats for notebooks
  • Recover from browser crashes or state issues using the cleanup manager while preserving the library

FAQ

Do I need to run scripts directly?

No. Always use python scripts/run.py [script] so the environment, deps, and execution are handled correctly.

How does the follow-up mechanism work?

Every NotebookLM answer ends with "Is that ALL you need to know?" Then stop, analyze the response against the request, identify gaps, run a follow-up query if needed, and synthesize results before replying.