跳到正文
cccskills
免费在 GitHub 公开

blog-notebooklm

Ask questions about documents uploaded to Google NotebookLM and receive answers grounded in those sources with citations. You can also discover notebook contents, search and manage a notebook library, and check Google authentication status.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents. Manages notebook library, handles Google authentication, and supports smart discovery. Works standalone via /blog notebooklm or internally from blog-write and blog-researcher for source-grounded research context. Falls back gracefully when not configured. Use when user says "notebooklm", "notebook", "query notebook", "ask notebook", "notebook research", "source grounded research", "document query", "notebook library".

实测评分 未实测

查看安装方法

适用场景

  • Asking questions about uploaded documents
  • Finding the right notebook for a research question
  • Searching or organizing a notebook library
  • Getting cited research context for blog work

包含的文件(1)

  • SKILL.md9.3 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

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 from your uploaded documents, and closes. Responses are source-grounded model answers, not proof of truth: uploaded documents may be primary or secondary, and the answer can still omit context.

Answers satisfy the FLOW evidence triple only when the returned citation includes a verifiable underlying source URL plus a publication or retrieval date. Use the underlying source title as the inline citation. Do not cite the private NotebookLM URL as the bibliography entry for public content.

Quick Reference

CommandWhat 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 listList 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 setupOne-time Google authentication (browser visible)
/blog notebooklm statusCheck authentication status
/blog notebooklm cleanupClean 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]:

# CORRECT:
python3 scripts/run.py auth_manager.py status
python3 scripts/run.py ask_question.py --question "..."

# Do not call files under scripts/ directly. The wrapper owns venv setup.

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:

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:

# 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:

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: validate it is a NotebookLM notebook URL, then use it
  • 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

# 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:

# 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

# 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/run.py notebook_manager.py stats

Internal API (for blog-write / blog-researcher)

When invoked as a Task subagent from blog-write or blog-researcher:

Input (provided by calling skill):

  • question: Research question relevant to the blog topic
  • notebook_id or notebook_url: Which notebook to query
  • context: "internal" (signals graceful fallback mode)

Process:

  1. Check auth status: if not authenticated, return empty result silently
  2. Query the notebook with the research question
  3. Parse and return structured response

Output (returned to calling skill):

### NotebookLM Research
- **Source:** [Notebook name]
- **Question:** [What was asked]
- **Answer:** [Source-grounded response from user's documents]
- **Underlying Source:** [Public source URL or document identifier]
- **Underlying Source Date:** [Publication date or retrieval date]
- **Source Quality:** [Tier 1-3 after classifying the underlying document]

Graceful fallback: If auth is missing or query fails, return immediately with no error. The calling workflow continues with WebSearch-based research. Never block blog-write or blog-rewrite because NotebookLM is unavailable.

Data Storage

All data stored inside the skill directory:

  • data/library.json: Notebook metadata and library
  • data/auth_info.json: Authentication status
  • data/browser_state/: Chrome profile with cookies

Security: All data directories are gitignored. Never commit auth or browser state.

Error Handling

ErrorResolution
Not authenticatedRun /blog notebooklm setup
ModuleNotFoundErrorAlways use run.py wrapper
Browser crashcleanup_manager.py --confirm --preserve-library, then re-auth
Rate limit (50/day)Wait until midnight PST or switch Google account
Notebook not foundCheck with notebook_manager.py list
Query timeout (120s)Retry with simpler question or --show-browser to debug
MCP unavailable (internal)Return silently: writing workflow uses WebSearch

Limitations

  • No session persistence (each question = new browser session)
  • Rate limits on free Google accounts (50 queries/day)
  • Manual upload required (user must add docs to NotebookLM web UI)
  • Browser overhead (few seconds per question for launch + teardown)
  • Local Claude Code only (not available in web UI)

Reference Documentation

Load on-demand: do NOT load all at startup:

  • references/commands.md: Full CLI commands, parameters, and workflow patterns
  • references/troubleshooting.md: Error solutions, recovery procedures, debugging

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

blog

免费

Plan, write, revise, analyze, and repurpose blog content through one command interface. It routes each request to a focused workflow for tasks such as outlines, SEO checks, translations, site audits, topic clusters, and editorial calendars, adapting output to the detected platform.

中文简介正在准备中。当前显示英语简介。

  • Planning a blog's topics and publishing calendar
  • Drafting or improving an article
  • Checking posts for SEO and site health
AgriciDaniel/claude-blog24992026年10月14日 更新

blog

免费

Manage blog work from planning and drafting to audits, SEO checks, repurposing, and multilingual publishing. The skill routes each request to a focused workflow and can return structured content, quality scores, and improvement guidance for supported publishing platforms.

中文简介正在准备中。当前显示英语简介。

  • Plan a blog strategy and editorial calendar
  • Draft or improve a blog post
  • Audit blog quality and SEO
AgriciDaniel/claude-blog24992026年10月14日 更新

Audits blog posts with a 100-point score across content, SEO, trust signals, technical details, and readiness for AI citations. It flags possible AI-style writing and returns prioritized fixes, with reports for individual posts or batches.

中文简介正在准备中。当前显示英语简介。

  • Scoring a draft before publication
  • Finding SEO and trust signal gaps
  • Reviewing several posts as a batch
AgriciDaniel/claude-blog24992026年10月14日 更新

Score a blog post or folder of posts across content, SEO, E-E-A-T, technical details, and readiness for AI citations. Get prioritized fixes and reports in Markdown, JSON, or table format from Markdown, MDX, HTML, or a URL.

中文简介正在准备中。当前显示英语简介。

  • Checking the quality and SEO of a draft post
  • Comparing a folder of blog posts by score
  • Getting prioritized fixes for one article
AgriciDaniel/claude-blog24992026年10月14日 更新

Turn a blog post into a spoken summary, a full read-aloud, or a two-speaker podcast-style dialogue. The skill generates an MP3 and HTML5 embed code, and can help choose a voice and prepare the audio for placement in the post.

中文简介正在准备中。当前显示英语简介。

  • Create a short audio summary of a blog post
  • Make a full spoken version of an article
  • Turn an article into a host-and-expert dialogue
AgriciDaniel/claude-blog24992026年10月14日 更新

Turns a finished blog post into a spoken summary, full read-aloud, or two-speaker dialogue using Gemini text-to-speech. It produces an audio file and HTML embed code, with explicit consent required before the first paid API call.

中文简介正在准备中。当前显示英语简介。

  • Creating a short spoken overview of a blog post
  • Making a full article available as audio
  • Producing a two-speaker podcast-style version
AgriciDaniel/claude-blog24992026年10月14日 更新

查看 AgriciDaniel 的全部技能

报告此技能的问题