| name | notebooklm-researcher |
| description | Conduct deep, autonomous research using Google's NotebookLM. Use this skill whenever the user asks to "research this topic deeply", "use notebooklm", "analyze this codebase via rag", or when tasks require synthesizing massive amounts of context (up to 1M tokens) into structured vectors or engrams. |
NotebookLM Autonomous Researcher
This skill equips you to act as a headless agentic researcher using Google's NotebookLM. You have access to a backend MCP server (mcp-notebooklm) that wraps the notebooklm-py library to bypass the UI constraints and execute deep research in the background.
When to Use This Skill
You are currently replacing the human in the loop. The user has explicitly stated they may be experiencing cognitive load ("chemo brain") and needs you to autonomously digest massive repos or context libraries without requiring them to read the raw data.
Your Toolkit (MCP Server Tools)
Note: Make sure the mcp-notebooklm server is active before proceeding. If it isn't, you must prompt the user to spin it up.
create_research_notebook(title: str) -> Returns notebook_id
add_source_to_notebook(notebook_id: str, file_path_or_url: str) -> Returns source_id
query_notebooklm(notebook_id: str, query: str) -> Returns the grounded response with citations.
generate_audio_overview(notebook_id: str) -> Returns the path to an .mp3 file.
The Autonomous Workflow
Step 1: Pre-Processing & Ingestion (The Context Funnel)
NotebookLM's Free tier holds 50 sources, Pro 300, and Ultra 600. It cannot natively "crawl" a local codebase.
- Aggregate First: If researching a local repository, use the included script
scripts/repo_aggregator.py to recursively crawl the target directory and condense all code/Markdown files into a single, massive .txt file (e.g., combined_repo.txt).
- Initialize: Call
create_research_notebook("Target Subject").
- Ingest: Call
add_source_to_notebook with the path to your flattened .txt file or external URLs.
Step 2: Triangulation querying
Do not ask NotebookLM broad, generic questions like "Explain this code." You are an AI querying an AI.
- Query Decomposition: Break complex requests into a series of technical sub-questions.
- Targeted Extraction: Use
query_notebooklm with high specificity. Example: "Locate all instances of JWT validation failure in the source text and output them as a structured JSON array."
- If NotebookLM returns a response with low confidence or missing citations, use your judgment to formulate a secondary, more specific query to resolve the ambiguity.
Step 3: Synthesis & Distillation (Vector Engrams)
The user explicitly requested "engrams" or vector chunking.
- Once you have successfully queried NotebookLM and extracted the necessary intelligence, you must distill the raw responses.
- Format the final intelligence into a highly condensed "Engram Payload" (YAML or JSON) that can be stored in the user's graph memory or vector database.
- Only present the final, synthesized Engram to the user. Do not overwhelm them with raw transcripts unless they ask.
Example Engram Synthesis Format
engram_id: "auth_vulnerability_research"
subject: "JWT Token Validation Hierarchy"
confidence: 0.95
source_notebook: "<notebook_id>"
core_vectors:
- "Module auth.py lacks expiration validation on line 142."
- "The downstream API gateway assumes stateless trust."
actionable_remediation: "Implement PyJWT decode with `options={'verify_exp': True}`."
Running the Repo Aggregator
If the user hands you a git repo, run this before uploading to NotebookLM:
python ~/.gemini/antigravity/skills/notebooklm-researcher/scripts/repo_aggregator.py /path/to/repo /tmp/aggregated_repo_output.txt