blog-notebooklm
Google NotebookLMのノートブックから、アップロードされた文書に基づいた根拠のある回答を引用付きで提供し、ノートブックライブラリの管理や認証、スマートな情報発見を支援するSkill。
📜 元の英語説明(参考)
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 Tier 1 research data. 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".
🇯🇵 日本人クリエイター向け解説
Google NotebookLMのノートブックから、アップロードされた文書に基づいた根拠のある回答を引用付きで提供し、ノートブックライブラリの管理や認証、スマートな情報発見を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o blog-notebooklm.zip https://jpskill.com/download/10526.zip && unzip -o blog-notebooklm.zip && rm blog-notebooklm.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10526.zip -OutFile "$d\blog-notebooklm.zip"; Expand-Archive "$d\blog-notebooklm.zip" -DestinationPath $d -Force; ri "$d\blog-notebooklm.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
blog-notebooklm.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
blog-notebooklmフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Blog NotebookLM -- ドキュメントからのソースに基づいたリサーチ
Geminiからの引用に基づいた回答を得るために、Claude Codeから直接Google NotebookLMノートブックにクエリを実行します。各質問はヘッドレスブラウザセッションを開き、アップロードされたドキュメントからのみ回答を取得し、閉じます。応答はTier 1品質(ユーザー自身の主要なソース)であり、ハルシネーションのリスクはゼロです。
クイックリファレンス
| コマンド | 動作 |
|---|---|
/blog notebooklm ask <question> |
ノートブックにソースに基づいた回答を問い合わせる |
/blog notebooklm discover <url> |
カタログ化する前にノートブックの内容をスマートに発見する |
/blog notebooklm library list |
ライブラリ内のすべてのノートブックをリスト表示する |
/blog notebooklm library add <url> |
ノートブックをライブラリに追加する |
/blog notebooklm library search <query> |
キーワードでノートブックを検索する |
/blog notebooklm library remove <id> |
ノートブックをライブラリから削除する |
/blog notebooklm setup |
1回限りのGoogle認証(ブラウザが表示される) |
/blog notebooklm status |
認証ステータスを確認する |
/blog notebooklm cleanup |
ブラウザの状態をクリーンアップする(ライブラリは保持される) |
前提条件
- NotebookLMにアクセスできるGoogleアカウント
- Python 3.11+ (
run.pyによって自動的に管理されるvenv) - Google Chrome (初回実行時にPatchright経由で自動的にインストールされる)
- 1回限りの認証設定(表示されるブラウザでのインタラクティブなGoogleログイン)
常に run.py ラッパーを使用する
スクリプトを直接呼び出さないでください。常に python3 scripts/run.py [script] を使用してください。
# 正しい例:
python3 scripts/run.py auth_manager.py status
python3 scripts/run.py ask_question.py --question "..."
# 間違い -- venvがないと失敗する:
python3 scripts/auth_manager.py status
run.py ラッパーは、自動的に .venv を作成し、依存関係をインストールし、Chrome をセットアップし、ターゲットスクリプトを実行します。
認証チェック (ゲートパターン)
クエリ操作の前に、認証を確認してください。
python3 scripts/run.py auth_manager.py status
- 認証されている場合:クエリを続行します
- 認証されていない場合:ユーザーに通知し、セットアップを案内します。
"NotebookLMにはGoogleログインが必要です。
/blog notebooklm setupを実行して認証してください。" - 内部から呼び出された場合 (blog-write または blog-researcher から): 認証されていない場合はエラーなしで静かに戻ります。書き込みワークフローをブロックしないでください。
セットアップワークフロー
/blog notebooklm setup の場合:
# 手動でGoogleログインするための表示可能なブラウザを開きます(1回限り)
python3 scripts/run.py auth_manager.py setup
ユーザーに伝えます: "ブラウザウィンドウが開きます。Googleアカウントにログインしてください。" 認証は、ブラウザプロファイル+ Cookieインジェクション(ハイブリッドアプローチ)によって永続化されます。
その他の認証コマンド:
python3 scripts/run.py auth_manager.py status # 認証を確認
python3 scripts/run.py auth_manager.py reauth # 再認証
python3 scripts/run.py auth_manager.py clear # すべての認証データをクリア
クエリワークフロー
/blog notebooklm ask <question> の場合:
ステップ 1: 認証の確認
認証チェックを実行します(上記のゲートパターンを参照)。認証されていない場合は、セットアップを案内します。
ステップ 2: ノートブックの解決
クエリするノートブックを決定します。
--notebook-urlが指定されている場合:直接使用します--notebook-idが指定されている場合:ライブラリで検索します- どちらも指定されていない場合:ライブラリからアクティブなノートブックを使用します
- アクティブなノートブックがない場合:ライブラリを表示し、ユーザーに選択を求めます
ステップ 3: 質問をする
# 基本的なクエリ(アクティブなノートブックを使用)
python3 scripts/run.py ask_question.py --question "ここに質問を入力"
# IDで特定のノートブックにクエリを実行
python3 scripts/run.py ask_question.py --question "..." --notebook-id notebook-id
# URLで直接クエリを実行
python3 scripts/run.py ask_question.py --question "..." --notebook-url "https://..."
# JSON出力(内部/プログラムで使用)
python3 scripts/run.py ask_question.py --question "..." --json
# デバッグ用にブラウザを表示
python3 scripts/run.py ask_question.py --question "..." --show-browser
ステップ 4: 分析とフォローアップ
すべての応答は、フォローアッププロンプトで終わります。必須の動作:
- 停止 -- ユーザーにすぐに応答しないでください
- 分析 -- 回答をユーザーの元のリクエストと比較します
- ギャップの特定 -- より多くの情報が必要かどうかを判断します
- フォローアップの質問 -- ギャップが存在する場合は、すぐにフォローアップの質問をします
- 繰り返し -- 情報が完了するまで続けます
- 統合 -- ユーザーに応答する前に、すべての回答を組み合わせます
スマートディスカバリーワークフロー
/blog notebooklm discover <url> の場合:
コンテンツを知らずにノートブックを追加する場合は、最初にクエリを実行します。
# ステップ 1: コンテンツの発見
python3 scripts/run.py ask_question.py \
--question "このノートブックの内容は何ですか?どのようなトピックがカバーされていますか?完全な概要を簡潔に提供してください" \
--notebook-url "<URL>"
# ステップ 2: 発見されたメタデータで追加
python3 scripts/run.py notebook_manager.py add \
--url "<URL>" \
--name "<コンテンツに基づく>" \
--description "<コンテンツに基づく>" \
--topics "<抽出されたトピック>"
推測したり、一般的な説明を使用したりしないでください。 常に発見するか、ユーザーに尋ねてください。
ライブラリ管理
# すべてのノートブックをリスト表示
python3 scripts/run.py notebook_manager.py list
# ノートブックを追加(すべてのパラメータが必須 -- 発見するか、ユーザーに尋ねてください!)
python3 scripts/run.py notebook_manager.py add \
--url "https://notebooklm.google.com/notebook/..." \
--name "説明的な名前" \
--description "このノートブックに含まれるもの" \
--topics "topic1,topic2,topic3"
# キーワードで検索
python3 scripts/run.py notebook_manager.py search --query "keyword"
# アクティブなノートブックを設定
python3 scripts/run.py notebook_manager.py activate --id notebook-id
# ノートブックを削除
python3 scripts/run.py notebook_manager.py remove --id notebook-id
# ライブラリの統計
python3 scripts/run.py notebook_manager.py stats
内部API (blog-write / blog-researcher用)
blog-write または blog-researcher から Task サブエージェントとして呼び出された場合:
入力 (呼び出し元のスキルによって提供されます):
question: ブログのトピックに関連するリサーチの質問notebook_idまたは
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
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.
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]:
# 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:
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 setupto 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-urlprovided: use directly - If
--notebook-idprovided: 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:
- STOP -- do not immediately respond to the user
- ANALYZE -- compare the answer to the user's original request
- IDENTIFY GAPS -- determine if more information is needed
- ASK FOLLOW-UP -- if gaps exist, immediately ask a follow-up question
- REPEAT -- continue until information is complete
- 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 topicnotebook_idornotebook_url: Which notebook to querycontext: "internal" (signals graceful fallback mode)
Process:
- Check auth status -- if not authenticated, return empty result silently
- Query the notebook with the research question
- 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]
- **Source Quality:** Tier 1 (user-uploaded primary documents)
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:
scripts/data/library.json-- Notebook metadata and libraryscripts/data/auth_info.json-- Authentication statusscripts/data/browser_state/-- Chrome profile with cookies
Security: All data directories are gitignored. Never commit auth or browser state.
Error Handling
| Error | Resolution |
|---|---|
| Not authenticated | Run /blog notebooklm setup |
| ModuleNotFoundError | Always use run.py wrapper |
| Browser crash | cleanup_manager.py --confirm --preserve-library, then re-auth |
| Rate limit (50/day) | Wait until midnight PST or switch Google account |
| Notebook not found | Check 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 patternsreferences/troubleshooting.md-- Error solutions, recovery procedures, debugging