1仕組みと動作原理
SKILL.md 自体は実行エンジンではなく「エージェント運用マニュアル」です。パッケージに付属する `notebooklm` CLI の呼び出し方をエージェントに指示し、実際のネットワークおよびプロトコル実装は Python パッケージ側に存在します(Web 向け batchexecute RPC および Android gRPC バックエンド)。
Use the `notebooklm` CLI for agent workflows. Prefer `--json` and explicit IDs so every operation is inspectable and safe under concurrency.
本スキルは Python パッケージ内に直接バンドルされた成果物です。ビルド時にリポジトリ直下の SKILL.md が `notebooklm/data/SKILL.md` に注入され、`notebooklm skill install` によってエージェントホストのスキルディレクトリに配置されるため、スキル定義と CLI バージョンが自然と同源・同バージョンに保たれます。
force-include = {"SKILL.md" = "notebooklm/data/SKILL.md", "AGENTS.md" = "notebooklm/data/CODEX.md"}
認証は「平文認証情報ファイル+階層化」モデルを採用しています。ブラウザログインにより storage_state.json(セッション Cookie)が生成され、ヘッドレス環境では master_token.json(アカウントレベルの認証情報)を使用します。両者ともファイル権限 0600、ディレクトリ権限 0700 が要求され、プロファイルごとの分離に対応しています。
A master token is a durable full-account credential that survives password changes; use a dedicated account, protect it in a secret store and as `0600` on disk, and explicitly revoke it if exposed.
「明示的 ID + readiness(準備完了)ゲート」により、不確実な非同期生成プロセスを検証可能なステートマシンに変換しています。ソースは `ready`、成果物(artifact)は `completed` になるまで待機する必要があり、いずれも「最新の可視項目」ではなく返却された実 ID を指定して処理します。
After adding sources, retain every `.source.id`, then run `source wait` for each before chat or generation.
同時実行の安全性は三重の分離によって担保されています。各 CLI コマンドに `-n/--notebook` を明示し、並列実行ごとに独立したプロファイルを用い、ディープリサーチには `--run-id` を指定します。複数のエージェント間で書き込み可能な同一の storage_state.json を共有することは禁止されています。
For every concurrent run, also set a unique `NOTEBOOKLM_PROFILE=agent-<id>` so context and profile writes are isolated.
認可の境界線はスローガンではなく厳密な規約として定義されています。安全な読み取り専用操作は即座に実行可能ですが、破壊的・時間のかかる・ディスク書き込みを伴うアクションは事前にユーザーの確認を得る必要があります。また「CLI に確認プロンプトが出ない ≠ 認可済み」であることが明確化されています。
User intent, not the presence of a CLI prompt, is the authorization boundary.
引用の追跡可能性:チャットの回答には `references[].source_id` が付与され、文字オフセットは(平文のバイト/文字オフセットではなく)UTF-16 オフセットであるため、エージェントが独自に切り出すのではなく専用の解析関数が提供されています。
A reference's `start_char`/`end_char` are UTF-16 offsets into the structured source document, not flat `SourceFulltext.content`.
障害処理には曖昧なプロンプトではなく、判定可能な終了コードとレスポンスエンベロープ規約が定義されています。成功は 0、一般エラーは 1、`source wait` タイムアウトは 2、`artifact wait`/`research wait` タイムアウトは 1 であり、調査時に状態変更を伴わない読み取り専用診断が義務付けられています。
Exit 0 means success. Expected command failures use exit 1. A `source wait` timeout uses exit 2; `artifact wait` and `research wait` timeouts use exit 1.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | notebooklm CLI(本包 entry point,agent 全程调用它) |
| cli | pip / uv tool install / pipx(安装包本体,可选 extra 决定能力面) |
| cli | uv / uvx(桌面版 MCP 扩展启动器,用于拉起 notebooklm-mcp) |
| network | NotebookLM Web batchexecute RPC 端点(默认 notebook.google.com,可切 notebooklm.google.com / 企业域) |
| network | Google 账户与 OAuth 端点(浏览器登录 / master token 换取 / 令牌校验) |
| network | Google Drive 导入下载端点(加 Drive 源时拉文件) |
| network | Google APIs(Android 后端 Drive 暂存上传与请求) |
| api | gpsoauth(无头 master-token 认证,换取 Google 会话 cookie) |
| package | 运行时依赖 httpx / click / rich / filelock |
| package | 可选 extra:browser(playwright) / cookies(rookie-cookies) / headless(gpsoauth) / impersonate(curl_cffi) / android(grpcio+protobuf) / mcp(fastmcp==3.4.2) / server(fastapi+uvicorn+python-multipart) / markdown(markdownify) |
4推奨統制措置と判定根拠
- 本地凭据 / 浏览器配置: ユーザーログイン Cookie/セッション/キーリングの読み取り: `~/.notebooklm/profiles/<profile>/storage_state.json`(Google セッション Cookie、デフォルト p
- scripts/: ローカルスクリプトまたはコマンドの実行: SKILL.md はホストシェル上で `pip install "notebooklm-py[browser]"` / `[c` を実行するようエージェントに指示
- scripts/ 或 SKILL.md: 外部言語パッケージ依存関係の動的インストールを宣言
- 网络端点: 外部ネットワークアクセスの宣言: https://notebook.google.com/_/LabsTailwindUi/data/batchexecute(デフォルトの Web RPC、
- 本地工作目录: ファイルの読み書きおよび成果物の出力: 成果物をユーザー指定パスへダウンロード(`notebooklm download <type> <path> -n <nb> -a <artifact>`)、SKI
5二重目の独立検証
- [ok] skill.path 定位 — 候选位置检查:仓库根有 SKILL.md(存在,314 行);无 skills/ 目录、无 .claude/skills/、无 plugins/;另在包内发现它的分发副本位置 `notebooklm/data/SKILL.md`(构建期注入,非仓库源文件)。故按批次规则 path='.'。
- [ok] 『实现方式』核对:SKILL.md 是不是空壳?(first-pass 假设它靠 CLI) — 不是空壳也不是纯文档——它是 crate 级薄指令 + 重实现库的组合:SKILL.md 里所有命令都能在包里找到对应实现(entry points 三个 console script;download 逻辑见 _app/download.py 的 'Click-free core' 说明),且 pyproject 的 force-include 把 SKILL.md 本身当包数据分发,说明二者版本绑定。没有夸大口径:它自称的前提(Python 3.10+、需 pip 装包、非官方集成)都在源码/文档里有对应。
- [ok] 外部依赖逐条复核(第二遍独立重查调用点) — 8 条 external_deps 全部在源码中找到调用点或声明点,无一条来自『推测』:CLI/uvx 来自 SKILL.md 与 desktop-extension;网络四条来自 rpc/types.py、_env.py、_web/sources/drive_import.py、_source/drive.py 的常量;gpsoauth 与各 extra 来自 _auth/mint_service.py 与 pyproject.toml。
- [ok] 安全结论反例搜索:有没有漏掉的网络调用/隐藏脚本/混淆内容? — 按主机名穷举后未发现第三方(非 Google)外发;未发现混淆代码或 base64 载荷;`src/notebooklm/_android/proto/**` 是 Google 生成的 protobuf 桩(自动生成、量大但非隐藏逻辑);desktop-extension/run_server.py 只做 uvx 定位与 exec,且注释明确 stdout 必须保持纯 JSON-RPC(有单测暴露函数)。deploy/ 与 MCP/REST 是 opt-in 且 SECURITY.md 把风险写明。
- [ok] injection_surface 的『无隔离条款』是否有遗漏的防护(例如源内容白名单/沙箱) — 在 SKILL.md 全文检索注入/不可信相关内容:仅有针对自身权限的授权边界('User intent, not the presence of a CLI prompt, is the authorization boundary.')与凭证不外泄要求('Never expose credential contents.'),没有任何把源文档/回答内容当不可信指令的条款;包侧对 Drive 下载做了域名白名单(_TRUSTED_GOOGLE_DOMAINS)与 URL 校验,但那是传输安全,不是内容注入防护。故 first-pass 的判断成立,且已把风险写进 risks。
- [ok] 退出码/状态取值等细节表述是否与代码一致 — SKILL.md 所述 exit 0/1/2 与 JSON 包络形态来自仓库自述的契约文档(docs/cli-exit-codes.md 同主题);本次未逐条跑 CLI 实测(不构造账号环境、也不跑测试),故只按『源码文本一致』给结论,未验证运行时行为。
- [ok] 元数据复核 — 本地 HEAD 等于 pin;LICENSE 为 MIT,pyproject `license = {text = "MIT"}` 与 classifiers 'License :: OSI Approved :: MIT License' 一致;stars 19330、last_push 2026-09-13、license MIT 取自池内 queue-100.json(未额外 gh 复核)。installs 无公开来源,置 null。
6結論
2231081c4d43c0ea…