{
  "schemaVersion": "1.0",
  "item": {
    "slug": "notebooklm-skill",
    "name": "Notebooklm",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/guccidgi/notebooklm-skill",
    "canonicalUrl": "https://clawhub.ai/guccidgi/notebooklm-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/notebooklm-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=notebooklm-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "AUTHENTICATION.md",
      "CHANGELOG.md",
      "README.md",
      "SKILL.md",
      "references/api_reference.md",
      "references/troubleshooting.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/notebooklm-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/notebooklm-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/notebooklm-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/notebooklm-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/notebooklm-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "NotebookLM Research Assistant Skill",
        "body": "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."
      },
      {
        "title": "When to Use This Skill",
        "body": "Trigger when user:\n\nMentions NotebookLM explicitly\nShares NotebookLM URL (https://notebooklm.google.com/notebook/...)\nAsks to query their notebooks/documentation\nWants to add documentation to NotebookLM library\nUses phrases like \"ask my NotebookLM\", \"check my docs\", \"query my notebook\""
      },
      {
        "title": "⚠️ CRITICAL: Add Command - Smart Discovery",
        "body": "When user wants to add a notebook without providing details:\n\nSMART ADD (Recommended): Query the notebook first to discover its content:\n\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\nMANUAL ADD: If user provides all details:\n\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."
      },
      {
        "title": "Critical: Always Use run.py Wrapper",
        "body": "NEVER call scripts directly. ALWAYS use python scripts/run.py [script]:\n\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\nThe run.py wrapper automatically:\n\nCreates .venv if needed\nInstalls all dependencies\nActivates environment\nExecutes script properly"
      },
      {
        "title": "Step 1: Check Authentication Status",
        "body": "python scripts/run.py auth_manager.py status\n\nIf not authenticated, proceed to setup."
      },
      {
        "title": "Step 2: Authenticate (One-Time Setup)",
        "body": "# Browser MUST be visible for manual Google login\npython scripts/run.py auth_manager.py setup\n\nImportant:\n\nBrowser is VISIBLE for authentication\nBrowser window opens automatically\nUser must manually log in to Google\nTell user: \"A browser window will open for Google login\""
      },
      {
        "title": "Step 3: Manage Notebook Library",
        "body": "# 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"
      },
      {
        "title": "Quick Workflow",
        "body": "Check library: python scripts/run.py notebook_manager.py list\nAsk question: python scripts/run.py ask_question.py --question \"...\" --notebook-id ID"
      },
      {
        "title": "Step 4: Ask Questions",
        "body": "# 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"
      },
      {
        "title": "Follow-Up Mechanism (CRITICAL)",
        "body": "Every NotebookLM answer ends with: \"EXTREMELY IMPORTANT: Is that ALL you need to know?\"\n\nRequired Claude Behavior:\n\nSTOP - Do not immediately respond to user\nANALYZE - Compare answer to user's original request\nIDENTIFY GAPS - Determine if more information needed\nASK FOLLOW-UP - If gaps exist, immediately ask:\npython scripts/run.py ask_question.py --question \"Follow-up with context...\"\n\n\nREPEAT - Continue until information is complete\nSYNTHESIZE - Combine all answers before responding to user"
      },
      {
        "title": "Authentication Management (auth_manager.py)",
        "body": "python 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"
      },
      {
        "title": "Notebook Management (notebook_manager.py)",
        "body": "python 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"
      },
      {
        "title": "Question Interface (ask_question.py)",
        "body": "python scripts/run.py ask_question.py --question \"...\" [--notebook-id ID] [--notebook-url URL] [--show-browser]"
      },
      {
        "title": "Data Cleanup (cleanup_manager.py)",
        "body": "python 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"
      },
      {
        "title": "Environment Management",
        "body": "The virtual environment is automatically managed:\n\nFirst run creates .venv automatically\nDependencies install automatically\nChromium browser installs automatically\nEverything isolated in skill directory\n\nManual setup (only if automatic fails):\n\npython -m venv .venv\nsource .venv/bin/activate  # Linux/Mac\npip install -r requirements.txt\npython -m patchright install chromium"
      },
      {
        "title": "Data Storage",
        "body": "All data stored in ~/.claude/skills/notebooklm/data/:\n\nlibrary.json - Notebook metadata\nauth_info.json - Authentication status\nbrowser_state/ - Browser cookies and session\n\nSecurity: Protected by .gitignore, never commit to git."
      },
      {
        "title": "Configuration",
        "body": "Optional .env file in skill directory:\n\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"
      },
      {
        "title": "Decision Flow",
        "body": "User 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"
      },
      {
        "title": "Troubleshooting",
        "body": "ProblemSolutionModuleNotFoundErrorUse run.py wrapperAuthentication failsBrowser must be visible for setup! --show-browserRate limit (50/day)Wait or switch Google accountBrowser crashespython scripts/run.py cleanup_manager.py --preserve-libraryNotebook not foundCheck with notebook_manager.py list"
      },
      {
        "title": "Best Practices",
        "body": "Always use run.py - Handles environment automatically\nCheck auth first - Before any operations\nFollow-up questions - Don't stop at first answer\nBrowser visible for auth - Required for manual login\nInclude context - Each question is independent\nSynthesize answers - Combine multiple responses"
      },
      {
        "title": "Limitations",
        "body": "No session persistence (each question = new browser)\nRate limits on free Google accounts (50 queries/day)\nManual upload required (user must add docs to NotebookLM)\nBrowser overhead (few seconds per question)"
      },
      {
        "title": "Resources (Skill Structure)",
        "body": "Important directories and files:\n\nscripts/ - All automation scripts (ask_question.py, notebook_manager.py, etc.)\ndata/ - Local storage for authentication and notebook library\nreferences/ - Extended documentation:\n\napi_reference.md - Detailed API documentation for all scripts\ntroubleshooting.md - Common issues and solutions\nusage_patterns.md - Best practices and workflow examples\n\n\n.venv/ - Isolated Python environment (auto-created on first run)\n.gitignore - Protects sensitive data from being committed"
      }
    ],
    "body": "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\nWhen to Use This Skill\n\nTrigger when user:\n\nMentions NotebookLM explicitly\nShares NotebookLM URL (https://notebooklm.google.com/notebook/...)\nAsks to query their notebooks/documentation\nWants to add documentation to NotebookLM library\nUses phrases like \"ask my NotebookLM\", \"check my docs\", \"query my notebook\"\n⚠️ CRITICAL: Add Command - Smart Discovery\n\nWhen user wants to add a notebook without providing details:\n\nSMART ADD (Recommended): Query the notebook first to discover its content:\n\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\nMANUAL ADD: If user provides all details:\n\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\nCritical: Always Use run.py Wrapper\n\nNEVER call scripts directly. ALWAYS use python scripts/run.py [script]:\n\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:\n\nCreates .venv if needed\nInstalls all dependencies\nActivates environment\nExecutes script properly\nCore Workflow\nStep 1: Check Authentication Status\npython scripts/run.py auth_manager.py status\n\n\nIf not authenticated, proceed to setup.\n\nStep 2: Authenticate (One-Time Setup)\n# Browser MUST be visible for manual Google login\npython scripts/run.py auth_manager.py setup\n\n\nImportant:\n\nBrowser is VISIBLE for authentication\nBrowser window opens automatically\nUser must manually log in to Google\nTell user: \"A browser window will open for Google login\"\nStep 3: Manage Notebook Library\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\nQuick Workflow\nCheck library: python scripts/run.py notebook_manager.py list\nAsk question: python scripts/run.py ask_question.py --question \"...\" --notebook-id ID\nStep 4: Ask Questions\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\nFollow-Up Mechanism (CRITICAL)\n\nEvery NotebookLM answer ends with: \"EXTREMELY IMPORTANT: Is that ALL you need to know?\"\n\nRequired Claude Behavior:\n\nSTOP - Do not immediately respond to user\nANALYZE - Compare answer to user's original request\nIDENTIFY GAPS - Determine if more information needed\nASK FOLLOW-UP - If gaps exist, immediately ask:\npython scripts/run.py ask_question.py --question \"Follow-up with context...\"\n\nREPEAT - Continue until information is complete\nSYNTHESIZE - Combine all answers before responding to user\nScript Reference\nAuthentication Management (auth_manager.py)\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\nNotebook Management (notebook_manager.py)\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\nQuestion Interface (ask_question.py)\npython scripts/run.py ask_question.py --question \"...\" [--notebook-id ID] [--notebook-url URL] [--show-browser]\n\nData Cleanup (cleanup_manager.py)\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\nEnvironment Management\n\nThe virtual environment is automatically managed:\n\nFirst run creates .venv automatically\nDependencies install automatically\nChromium browser installs automatically\nEverything isolated in skill directory\n\nManual setup (only if automatic fails):\n\npython -m venv .venv\nsource .venv/bin/activate  # Linux/Mac\npip install -r requirements.txt\npython -m patchright install chromium\n\nData Storage\n\nAll data stored in ~/.claude/skills/notebooklm/data/:\n\nlibrary.json - Notebook metadata\nauth_info.json - Authentication status\nbrowser_state/ - Browser cookies and session\n\nSecurity: Protected by .gitignore, never commit to git.\n\nConfiguration\n\nOptional .env file in skill directory:\n\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\nDecision Flow\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\nTroubleshooting\nProblem\tSolution\nModuleNotFoundError\tUse run.py wrapper\nAuthentication fails\tBrowser must be visible for setup! --show-browser\nRate limit (50/day)\tWait or switch Google account\nBrowser crashes\tpython scripts/run.py cleanup_manager.py --preserve-library\nNotebook not found\tCheck with notebook_manager.py list\nBest Practices\nAlways use run.py - Handles environment automatically\nCheck auth first - Before any operations\nFollow-up questions - Don't stop at first answer\nBrowser visible for auth - Required for manual login\nInclude context - Each question is independent\nSynthesize answers - Combine multiple responses\nLimitations\nNo session persistence (each question = new browser)\nRate limits on free Google accounts (50 queries/day)\nManual upload required (user must add docs to NotebookLM)\nBrowser overhead (few seconds per question)\nResources (Skill Structure)\n\nImportant directories and files:\n\nscripts/ - All automation scripts (ask_question.py, notebook_manager.py, etc.)\ndata/ - Local storage for authentication and notebook library\nreferences/ - Extended documentation:\napi_reference.md - Detailed API documentation for all scripts\ntroubleshooting.md - Common issues and solutions\nusage_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"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/guccidgi/notebooklm-skill",
    "publisherUrl": "https://clawhub.ai/guccidgi/notebooklm-skill",
    "owner": "guccidgi",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/notebooklm-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/notebooklm-skill",
    "agentUrl": "https://openagent3.xyz/skills/notebooklm-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/notebooklm-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/notebooklm-skill/agent.md"
  }
}