Skill63 repo starsupdated today
blog-notebooklm
Blog NotebookLM queries Google NotebookLM notebooks directly within Claude Code to retrieve citation-backed answers from user-uploaded documents exclusively. Use this skill when you need source-grounded research with zero hallucination risk, verified primary sources for statistics or claims, and built-in bibliography entries from your own documents rather than web search results.
Install in Claude Code
Copygit clone --depth 1 https://github.com/Infrasity-Labs/dev-gtm-claude-skills /tmp/blog-notebooklm && cp -r /tmp/blog-notebooklm/.claude/skills/blog-notebooklm ~/.claude/skills/blog-notebooklmThen start a new Claude Code session; the skill loads automatically.
Definition
SKILL.md
# Blog NotebookLM: Source-Grounded Research from Your Documents Query Google NotebookLM notebooks directly from Claude Code for citation-backed answers from Gemini. Each question opens a headless browser session, retrieves the answer exclusively from your uploaded documents, and closes. Responses are Tier 1 quality (user's own primary sources): zero hallucination risk. Answers satisfy the FLOW evidence triple: use the returned source title as the inline citation and the notebook URL plus retrieval date as the bibliography entry. This is the highest-confidence path to meeting the "verified source" bar that FLOW requires before any statistic goes public. ## 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) | ## Prerequisites - Google account with NotebookLM access - Python 3.11+ (venv managed automatically by `run.py`) - Google Chrome (installed automatically on first run via Patchright) - One-time authentication setup (interactive Google login in visible browser) ## Always Use run.py Wrapper **NEVER call scripts directly. ALWAYS use `python3 scripts/run.py [script]`:** ```bash # CORRECT: python3 scripts/run.py auth_manager.py status python3 scripts/run.py ask_question.py --question "..." # WRONG -- fails without venv: python3 scripts/auth_manager.py status ``` The `run.py` wrapper automatically creates `.venv`, installs dependencies, sets up Chrome, and executes the target script. ## Auth Check (Gate Pattern) Before any query operation, check authentication: ```bash python3 scripts/run.py auth_manager.py status ``` - If authenticated: proceed with the query - If not authenticated: inform user and guide to setup: "NotebookLM requires Google login. Run `/blog notebooklm setup` to authenticate." - **When called internally** (from blog-write or blog-researcher): return silently with no error if not authenticated. Never block the writing workflow. ## Setup Workflow For `/blog notebooklm setup`: ```bash # Opens a visible browser for manual Google login (one-time) python3 scripts/run.py auth_manager.py setup ``` Tell the user: "A browser window will open. Please log in to your Google account." Authentication persists via browser profile + cookie injection (hybrid approach). Other auth commands: ```bash python3 scripts/run.py auth_manager.py status # Check auth python3 scripts/run.py auth_manager.py reauth # Re-authenticate python3 scripts/run.py auth_manager.py clear # Clear all auth data ``` ## Query Workflow For `/blog notebooklm ask <question>`: ### Step 1: Check Auth Run auth check (see gate pattern above). If not authenticated, guide to setup. ### Step 2: Resolve Notebook Determine which notebook to query: - If `--notebook-url` provided: use directly - If `--notebook-id` provided: look up in library - If neither: use active notebook from library - If no active notebook: show library and ask user to select ### Step 3: Ask the Question ```bash # Basic query (uses active notebook) python3 scripts/run.py ask_question.py --question "Your question here" # Query specific notebook by ID python3 scripts/run.py ask_question.py --question "..." --notebook-id notebook-id # Query by URL directly python3 scripts/run.py ask_question.py --question "..." --notebook-url "https://..." # JSON output (for internal/programmatic use) python3 scripts/run.py ask_question.py --question "..." --json # Show browser for debugging python3 scripts/run.py ask_question.py --question "..." --show-browser ``` ### Step 4: Analyze and Follow Up Every response ends with a follow-up prompt. **Required behavior:** 1. **STOP**: do not immediately respond to the user 2. **ANALYZE**: compare the answer to the user's original request 3. **IDENTIFY GAPS**: determine if more information is needed 4. **ASK FOLLOW-UP**: if gaps exist, immediately ask a follow-up question 5. **REPEAT**: continue until information is complete 6. **SYNTHESIZE**: combine all answers before responding to the user ## Smart Discovery Workflow For `/blog notebooklm discover <url>`: When adding a notebook without knowing its content, query it first: ```bash # Step 1: Discover content python3 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: Add with discovered metadata python3 scripts/run.py notebook_manager.py add \ --url "<URL>" \ --name "<Based on content>" \ --description "<Based on content>" \ --topics "<Extracted topics>" ``` **NEVER guess or use generic descriptions.** Always discover or ask the user. ## Library Management ```bash # List all notebooks python3 scripts/run.py notebook_manager.py list # Add notebook (all params required -- discover or ask user!) python3 scripts/run.py notebook_manager.py add \ --url "https://notebooklm.google.com/notebook/..." \ --name "Descriptive Name" \ --description "What this notebook contains" \ --topics "topic1,topic2,topic3" # Search by keyword python3 scripts/run.py notebook_manager.py search --query "keyword" # Set active notebook python3 scripts/run.py notebook_manager.py activate --id notebook-id # Remove notebook python3 scripts/run.py notebook_manager.py remove --id notebook-id # Library statistics python3 scripts/ru
More from this repository
blog-researcherSubagent
>
blog-reviewerSubagent
>
blog-seoSubagent
>
blog-translatorSubagent
>
blog-writerSubagent
>
seo-backlinksSubagent
Backlink profile analyst using free and paid sources. Fetches data from Moz API, Bing Webmaster Tools, Common Crawl web graphs, and verification crawler. Merges multi-source data with confidence-weighted scoring.
seo-clusterSubagent
>
seo-contentSubagent
Content quality reviewer. Evaluates E-E-A-T signals, readability, content depth, AI citation readiness, and thin content detection.