{"id":"fbe19c97-c832-4985-a457-ba15f263f481","shortId":"cyzaq3","kind":"skill","title":"notebooklm","tagline":"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.","description":"# NotebookLM Research Assistant Skill\n\nInteract 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.\n\n## When to Use This Skill\n\nTrigger when user:\n- Mentions NotebookLM explicitly\n- Shares NotebookLM URL (`https://notebooklm.google.com/notebook/...`)\n- Asks to query their notebooks/documentation\n- Wants to add documentation to NotebookLM library\n- Uses phrases like \"ask my NotebookLM\", \"check my docs\", \"query my notebook\"\n\n## ⚠️ CRITICAL: Add Command - Smart Discovery\n\nWhen user wants to add a notebook without providing details:\n\n**SMART ADD (Recommended)**: Query the notebook first to discover its content:\n```bash\n# Step 1: Query the notebook about its content\npython 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]\"\n\n# Step 2: Use the discovered information to add it\npython scripts/run.py notebook_manager.py add --url \"[URL]\" --name \"[Based on content]\" --description \"[Based on content]\" --topics \"[Based on content]\"\n```\n\n**MANUAL ADD**: If user provides all details:\n- `--url` - The NotebookLM URL\n- `--name` - A descriptive name\n- `--description` - What the notebook contains (REQUIRED!)\n- `--topics` - Comma-separated topics (REQUIRED!)\n\nNEVER guess or use generic descriptions! If details missing, use Smart Add to discover them.\n\n## Critical: Always Use run.py Wrapper\n\n**NEVER call scripts directly. ALWAYS use `python scripts/run.py [script]`:**\n\n```bash\n# ✅ CORRECT - Always use run.py:\npython scripts/run.py auth_manager.py status\npython scripts/run.py notebook_manager.py list\npython scripts/run.py ask_question.py --question \"...\"\n\n# ❌ WRONG - Never call directly:\npython scripts/auth_manager.py status  # Fails without venv!\n```\n\nThe `run.py` wrapper automatically:\n1. Creates `.venv` if needed\n2. Installs all dependencies\n3. Activates environment\n4. Executes script properly\n\n## Core Workflow\n\n### Step 1: Check Authentication Status\n```bash\npython scripts/run.py auth_manager.py status\n```\n\nIf not authenticated, proceed to setup.\n\n### Step 2: Authenticate (One-Time Setup)\n```bash\n# Browser MUST be visible for manual Google login\npython scripts/run.py auth_manager.py setup\n```\n\n**Important:**\n- Browser is VISIBLE for authentication\n- Browser window opens automatically\n- User must manually log in to Google\n- Tell user: \"A browser window will open for Google login\"\n\n### Step 3: Manage Notebook Library\n\n```bash\n# List all notebooks\npython scripts/run.py notebook_manager.py list\n\n# BEFORE ADDING: Ask user for metadata if unknown!\n# \"What does this notebook contain?\"\n# \"What topics should I tag it with?\"\n\n# Add notebook to library (ALL parameters are REQUIRED!)\npython scripts/run.py notebook_manager.py add \\\n  --url \"https://notebooklm.google.com/notebook/...\" \\\n  --name \"Descriptive Name\" \\\n  --description \"What this notebook contains\" \\  # REQUIRED - ASK USER IF UNKNOWN!\n  --topics \"topic1,topic2,topic3\"  # REQUIRED - ASK USER IF UNKNOWN!\n\n# Search notebooks by topic\npython scripts/run.py notebook_manager.py search --query \"keyword\"\n\n# Set active notebook\npython scripts/run.py notebook_manager.py activate --id notebook-id\n\n# Remove notebook\npython scripts/run.py notebook_manager.py remove --id notebook-id\n```\n\n### Quick Workflow\n1. Check library: `python scripts/run.py notebook_manager.py list`\n2. Ask question: `python scripts/run.py ask_question.py --question \"...\" --notebook-id ID`\n\n### Step 4: Ask Questions\n\n```bash\n# Basic query (uses active notebook if set)\npython scripts/run.py ask_question.py --question \"Your question here\"\n\n# Query specific notebook\npython scripts/run.py ask_question.py --question \"...\" --notebook-id notebook-id\n\n# Query with notebook URL directly\npython scripts/run.py ask_question.py --question \"...\" --notebook-url \"https://...\"\n\n# Show browser for debugging\npython scripts/run.py ask_question.py --question \"...\" --show-browser\n```\n\n## Follow-Up Mechanism (CRITICAL)\n\nEvery NotebookLM answer ends with: **\"EXTREMELY IMPORTANT: Is that ALL you need to know?\"**\n\n**Required Claude Behavior:**\n1. **STOP** - Do not immediately respond to user\n2. **ANALYZE** - Compare answer to user's original request\n3. **IDENTIFY GAPS** - Determine if more information needed\n4. **ASK FOLLOW-UP** - If gaps exist, immediately ask:\n   ```bash\n   python scripts/run.py ask_question.py --question \"Follow-up with context...\"\n   ```\n5. **REPEAT** - Continue until information is complete\n6. **SYNTHESIZE** - Combine all answers before responding to user\n\n## Script Reference\n\n### Authentication Management (`auth_manager.py`)\n```bash\npython scripts/run.py auth_manager.py setup    # Initial setup (browser visible)\npython scripts/run.py auth_manager.py status   # Check authentication\npython scripts/run.py auth_manager.py reauth   # Re-authenticate (browser visible)\npython scripts/run.py auth_manager.py clear    # Clear authentication\n```\n\n### Notebook Management (`notebook_manager.py`)\n```bash\npython scripts/run.py notebook_manager.py add --url URL --name NAME --description DESC --topics TOPICS\npython scripts/run.py notebook_manager.py list\npython scripts/run.py notebook_manager.py search --query QUERY\npython scripts/run.py notebook_manager.py activate --id ID\npython scripts/run.py notebook_manager.py remove --id ID\npython scripts/run.py notebook_manager.py stats\n```\n\n### Question Interface (`ask_question.py`)\n```bash\npython scripts/run.py ask_question.py --question \"...\" [--notebook-id ID] [--notebook-url URL] [--show-browser]\n```\n\n### Data Cleanup (`cleanup_manager.py`)\n```bash\npython scripts/run.py cleanup_manager.py                    # Preview cleanup\npython scripts/run.py cleanup_manager.py --confirm          # Execute cleanup\npython scripts/run.py cleanup_manager.py --preserve-library # Keep notebooks\n```\n\n## Environment Management\n\nThe virtual environment is automatically managed:\n- First run creates `.venv` automatically\n- Dependencies install automatically\n- Chromium browser installs automatically\n- Everything isolated in skill directory\n\nManual setup (only if automatic fails):\n```bash\npython -m venv .venv\nsource .venv/bin/activate  # Linux/Mac\npip install -r requirements.txt\npython -m patchright install chromium\n```\n\n## Data Storage\n\nAll data stored in `~/.claude/skills/notebooklm/data/`:\n- `library.json` - Notebook metadata\n- `auth_info.json` - Authentication status\n- `browser_state/` - Browser cookies and session\n\n**Security:** Protected by `.gitignore`, never commit to git.\n\n## Configuration\n\nOptional `.env` file in skill directory:\n```env\nHEADLESS=false           # Browser visibility\nSHOW_BROWSER=false       # Default browser display\nSTEALTH_ENABLED=true     # Human-like behavior\nTYPING_WPM_MIN=160       # Typing speed\nTYPING_WPM_MAX=240\nDEFAULT_NOTEBOOK_ID=     # Default notebook\n```\n\n## Decision Flow\n\n```\nUser mentions NotebookLM\n    ↓\nCheck auth → python scripts/run.py auth_manager.py status\n    ↓\nIf not authenticated → python scripts/run.py auth_manager.py setup\n    ↓\nCheck/Add notebook → python scripts/run.py notebook_manager.py list/add (with --description)\n    ↓\nActivate notebook → python scripts/run.py notebook_manager.py activate --id ID\n    ↓\nAsk question → python scripts/run.py ask_question.py --question \"...\"\n    ↓\nSee \"Is that ALL you need?\" → Ask follow-ups until complete\n    ↓\nSynthesize and respond to user\n```\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| ModuleNotFoundError | Use `run.py` wrapper |\n| Authentication fails | Browser must be visible for setup! --show-browser |\n| Rate limit (50/day) | Wait or switch Google account |\n| Browser crashes | `python scripts/run.py cleanup_manager.py --preserve-library` |\n| Notebook not found | Check with `notebook_manager.py list` |\n\n## Best Practices\n\n1. **Always use run.py** - Handles environment automatically\n2. **Check auth first** - Before any operations\n3. **Follow-up questions** - Don't stop at first answer\n4. **Browser visible for auth** - Required for manual login\n5. **Include context** - Each question is independent\n6. **Synthesize answers** - Combine multiple responses\n\n## Limitations\n\n- No session persistence (each question = new browser)\n- Rate limits on free Google accounts (50 queries/day)\n- Manual upload required (user must add docs to NotebookLM)\n- Browser overhead (few seconds per question)\n\n## Resources (Skill Structure)\n\n**Important directories and files:**\n\n- `scripts/` - All automation scripts (ask_question.py, notebook_manager.py, etc.)\n- `data/` - Local storage for authentication and notebook library\n- `references/` - Extended documentation:\n  - `api_reference.md` - Detailed API documentation for all scripts\n  - `troubleshooting.md` - Common issues and solutions\n  - `usage_patterns.md` - Best practices and workflow examples\n- `.venv/` - Isolated Python environment (auto-created on first run)\n- `.gitignore` - Protects sensitive data from being committed","tags":["notebooklm","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity-skills"],"capabilities":["skill","source-sickn33","skill-notebooklm","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/notebooklm","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (9,102 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:38.765Z","embedding":null,"createdAt":"2026-04-18T21:41:29.263Z","updatedAt":"2026-04-23T06:51:38.765Z","lastSeenAt":"2026-04-23T06:51:38.765Z","tsv":"'/.claude/skills/notebooklm/data':798 '/notebook/...':84,413 '1':137,284,303,469,564,959 '160':847 '2':171,289,319,476,572,966 '240':853 '3':293,366,581,973 '4':296,488,589,984 '5':609,993 '50':1020 '50/day':936 '6':616,1000 'account':941,1019 'activ':294,447,452,495,689,885,890 'ad':379 'add':92,110,118,125,177,182,198,235,398,409,667,1027 'alway':240,248,255,960 'analyz':573 'answer':15,25,50,60,549,575,620,983,1002 'api':1064 'api_reference.md':1062 'ask':85,100,380,423,432,477,489,590,598,893,905 'ask_question.py':146,268,481,501,511,526,537,602,704,708,897,1048 'assist':35 'auth':865,968,988 'auth_info.json':802 'auth_manager.py':260,310,336,629,633,641,647,656,868,875 'authent':305,314,320,343,627,644,651,659,803,872,923,1055 'auto':1085 'auto-cr':1084 'autom':1046 'automat':283,347,750,756,759,763,773,965 'base':186,190,194 'bash':135,253,307,325,370,491,599,630,663,705,724,775 'basic':492 'behavior':563,843 'best':957,1075 'briefli':163 'browser':21,56,326,339,344,358,532,541,637,652,720,761,805,807,829,832,835,925,933,942,985,1013,1031 'call':245,272 'check':103,304,470,643,864,953,967 'check/add':877 'chromium':760,791 'claud':562 'cleanup':722,729,735 'cleanup_manager.py':723,727,732,738,946 'clear':657,658 'close':32,67 'combin':618,1003 'comma':220 'comma-separ':219 'command':111 'commit':816,1096 'common':1070 'compar':574 'complet':161,615,910 'concis':165 'configur':819 'confirm':733 'contain':216,390,421 'content':134,143,151,188,192,196 'context':608,995 'continu':611 'cooki':808 'core':300 'correct':254 'cover':158 'crash':943 'creat':285,754,1086 'critic':109,239,546 'data':721,792,795,1051,1093 'debug':534 'decis':859 'default':834,854,857 'depend':292,757 'desc':673 'descript':189,210,212,229,415,417,672,884 'detail':123,203,231,1063 'determin':584 'direct':247,273,523 'directori':768,825,1041 'discov':132,174,237 'discoveri':113 'display':836 'doc':105,1028 'document':8,30,43,65,93,1061,1065 'enabl':838 'end':550 'env':821,826 'environ':295,744,748,964,1083 'etc':1050 'everi':547 'everyth':764 'exampl':1079 'exclus':26,61 'execut':297,734 'exist':596 'explicit':78 'extend':1060 'extrem':552 'fail':277,774,924 'fals':828,833 'file':822,1043 'first':130,752,969,982,1088 'flow':860 'follow':543,592,605,907,975 'follow-up':542,591,604,906,974 'found':952 'free':1017 'fresh':20,55 'gap':583,595 'gemini':10,45 'generic':228 'git':818 'gitignor':814,1090 'googl':4,39,332,354,363,940,1018 'ground':14,49 'guess':225 'handl':963 'headless':827 'human':841 'human-lik':840 'id':453,456,463,466,485,486,515,518,690,691,696,697,712,713,856,891,892 'identifi':582 'immedi':568,597 'import':338,553,1040 'includ':994 'independ':999 'inform':175,587,613 'initi':635 'instal':290,758,762,784,790 'interact':2,37 'interfac':703 'isol':765,1081 'issu':1071 'keep':742 'keyword':445 'know':560 'librari':96,369,401,471,741,949,1058 'library.json':799 'like':99,842 'limit':935,1006,1015 'linux/mac':782 'list':265,371,377,475,679,956 'list/add':882 'local':1052 'log':351 'login':333,364,992 'm':777,788 'manag':367,628,661,745,751 'manual':197,331,350,769,991,1022 'max':852 'mechan':545 'mention':76,862 'metadata':383,801 'min':846 'miss':232 'modulenotfounderror':919 'multipl':1004 'must':327,349,926,1026 'name':185,208,211,414,416,670,671 'need':288,558,588,904 'never':224,244,271,815 'new':1012 'notebook':108,120,129,140,154,167,215,368,373,389,399,420,437,448,455,458,465,484,496,508,514,517,521,529,660,711,715,743,800,855,858,878,886,950,1057 'notebook-id':454,464,483,513,516,710 'notebook-url':166,528,714 'notebook_manager.py':181,264,376,408,442,451,461,474,662,666,678,682,688,694,700,881,889,955,1049 'notebooklm':1,5,33,40,77,80,95,102,206,548,863,1030 'notebooklm.google.com':83,412 'notebooklm.google.com/notebook/...':82,411 'notebooks/documentation':89 'one':322 'one-tim':321 'open':18,53,346,361 'oper':972 'option':820 'origin':579 'overhead':1032 'overview':162 'paramet':403 'patchright':789 'per':1035 'persist':1009 'phrase':98 'pip':783 'practic':958,1076 'preserv':740,948 'preserve-librari':739,947 'preview':728 'problem':917 'proceed':315 'proper':299 'protect':812,1091 'provid':122,159,201 'python':144,179,250,258,262,266,274,308,334,374,406,440,449,459,472,479,499,509,524,535,600,631,639,645,654,664,676,680,686,692,698,706,725,730,736,776,787,866,873,879,887,895,944,1082 'queri':7,42,87,106,127,138,444,493,506,519,684,685 'queries/day':1021 'question':17,52,147,269,478,482,490,502,504,512,527,538,603,702,709,894,898,977,997,1011,1036 'quick':467 'r':785 'rate':934,1014 're':650 're-authent':649 'reauth':648 'recommend':126 'refer':626,1059 'remov':457,462,695 'repeat':610 'request':580 'requir':217,223,405,422,431,561,989,1024 'requirements.txt':786 'research':34 'resourc':1037 'respond':569,622,913 'respons':1005 'retriev':23,58 'run':753,1089 'run.py':242,257,281,921,962 'script':246,252,298,625,1044,1047,1068 'scripts/auth_manager.py':275 'scripts/run.py':145,180,251,259,263,267,309,335,375,407,441,450,460,473,480,500,510,525,536,601,632,640,646,655,665,677,681,687,693,699,707,726,731,737,867,874,880,888,896,945 'search':436,443,683 'second':1034 'secur':811 'see':899 'sensit':1092 'separ':221 'session':22,57,810,1008 'set':446,498 'setup':317,324,337,634,636,770,876,930 'share':79 'show':531,540,719,831,932 'show-brows':539,718,931 'skill':36,72,767,824,1038 'skill-notebooklm' 'smart':112,124,234 'solut':918,1073 'sourc':13,48,780 'source-ground':12,47 'source-sickn33' 'specif':507 'speed':849 'stat':701 'state':806 'status':261,276,306,311,642,804,869 'stealth':837 'step':136,170,302,318,365,487 'stop':565,980 'storag':793,1053 'store':796 'structur':1039 'switch':939 'synthes':617,911,1001 'tag':395 'tell':355 'time':323 'topic':156,193,218,222,392,427,439,674,675 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'topic1':428 'topic2':429 'topic3':430 'trigger':73 'troubleshoot':916 'troubleshooting.md':1069 'true':839 'type':844,848,850 'unknown':385,426,435 'up':908 'upload':29,64,1023 'url':81,168,169,183,184,204,207,410,522,530,668,669,716,717 'usage_patterns.md':1074 'use':70,97,172,227,233,241,249,256,494,920,961 'user':75,115,200,348,356,381,424,433,571,577,624,861,915,1025 'venv':279,286,755,778,779,1080 'venv/bin/activate':781 'virtual':747 'visibl':329,341,638,653,830,928,986 'wait':937 'want':90,116 'window':345,359 'without':121,278 'workflow':301,468,1078 'wpm':845,851 'wrapper':243,282,922 'wrong':270","prices":[{"id":"b30c4f8d-114a-4d85-aece-a65444d21669","listingId":"fbe19c97-c832-4985-a457-ba15f263f481","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:29.263Z"}],"sources":[{"listingId":"fbe19c97-c832-4985-a457-ba15f263f481","source":"github","sourceId":"sickn33/antigravity-awesome-skills/notebooklm","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/notebooklm","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:29.263Z","lastSeenAt":"2026-04-23T06:51:38.765Z"}],"details":{"listingId":"fbe19c97-c832-4985-a457-ba15f263f481","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"notebooklm","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"e32b4d3f47873b360386e53d94e0200e2112b420","skill_md_path":"skills/notebooklm/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/notebooklm"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"notebooklm","description":"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."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/notebooklm"},"updatedAt":"2026-04-23T06:51:38.765Z"}}