{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "notebooklm-python",
  "built": "2026-10-26",
  "control_level": 5,
  "control_level_label": "L5 严管",
  "capabilities": [
    "credential",
    "execute_command",
    "install_deps",
    "network",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "isolated_environment",
      "per_use_authorization"
    ],
    "admin": [
      "strict_authorization",
      "full_audit",
      "compliance_signoff"
    ]
  },
  "evidence": [
    {
      "file": "本地凭据 / 浏览器配置",
      "summary": "Reads user login cookies/sessions/keyrings: `~/.notebooklm/profiles/<profile>/storage_state.json` (Google session cookies; default p"
    },
    {
      "file": "scripts/",
      "summary": "Executes local scripts or commands: SKILL.md instructs agents to execute `pip install \"notebooklm-py[browser]\"` / `[c` in the host shell"
    },
    {
      "file": "scripts/ 或 SKILL.md",
      "summary": "Declares dynamic installation of external language package dependencies"
    },
    {
      "file": "网络端点",
      "summary": "Declares external network access: https://notebook.google.com/_/LabsTailwindUi/data/batchexecute (default Web RPC; can"
    },
    {
      "file": "本地工作目录",
      "summary": "File read/write and artifact output: downloads artifacts to user-specified paths (`notebooklm download <type> <path> -n <nb> -a <artifact>`), SKI"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（换角度抓第一遍的错）：① `git -C spy-repos/notebooklm-py rev-parse HEAD` = 5472d7cfcc2f5afeaa8bf556506c25e55946a22c，与任务 pin 一致；② 逐项回访每个 external_dep 的真实调用点：batchexecute 由 rpc/types.py 常量 + _env.py 主机常量坐实，Drive 下载由 _web/sources/drive_import.py 的 `_DRIVE_DOWNLOAD_URL` 坐实，gpsoauth 由 _auth/mint_service.py 的懒加载报错文本坐实，rookie-cookies 由 cli/_chromium_profiles.py 的懒 import 与 `any_browser(...)` 调用坐实；③ 凭证清单与 SECURITY.md 的表格逐行对照（storage_state.json / master_token.json / browser_profile / context.json / oauth/<slug>.json 全部出现且权限位一致）；④ 『无遗漏网络端点』反查：`grep -rhoE 'https?://[a-z0-9.-]+' src/ | sort | uniq -c` 列出全部主机，除上面申报的 Google 域名外，其余命中均为文档链接（github.com、docs.windsurf.com、cursor.com、claude.ai、youtu.be）、占位符（https://host、https://TOKEN、https://a、https://download.invalid）或测试夹具（example.com、127.0.0.1 故障注入服务器），无隐藏的第三方外发；⑤ 权限位与原子写复核：_atomic_io.py 默认 `mode: int = 0o600`，且有 fchmod + fsync + os.replace，证实不是空口承诺；⑥ skill 与包同源的链路复核：pyproject force-include → _app/skill.py TARGETS → cli/skill_cmd.py 安装/分类，三处串起来成立。",
    "second_pass": [
      {
        "item": "skill.path 定位",
        "status": "ok",
        "detail": "候选位置检查：仓库根有 SKILL.md（存在，314 行）；无 skills/ 目录、无 .claude/skills/、无 plugins/；另在包内发现它的分发副本位置 `notebooklm/data/SKILL.md`（构建期注入，非仓库源文件）。故按批次规则 path='.'。"
      },
      {
        "item": "『实现方式』核对：SKILL.md 是不是空壳？（first-pass 假设它靠 CLI）",
        "status": "ok",
        "detail": "不是空壳也不是纯文档——它是 crate 级薄指令 + 重实现库的组合：SKILL.md 里所有命令都能在包里找到对应实现（entry points 三个 console script；download 逻辑见 _app/download.py 的 'Click-free core' 说明），且 pyproject 的 force-include 把 SKILL.md 本身当包数据分发，说明二者版本绑定。没有夸大口径：它自称的前提（Python 3.10+、需 pip 装包、非官方集成）都在源码/文档里有对应。"
      },
      {
        "item": "外部依赖逐条复核（第二遍独立重查调用点）",
        "status": "ok",
        "detail": "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。"
      },
      {
        "item": "安全结论反例搜索：有没有漏掉的网络调用/隐藏脚本/混淆内容？",
        "status": "ok",
        "detail": "按主机名穷举后未发现第三方（非 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 把风险写明。"
      },
      {
        "item": "injection_surface 的『无隔离条款』是否有遗漏的防护（例如源内容白名单/沙箱）",
        "status": "ok",
        "detail": "在 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。"
      },
      {
        "item": "退出码/状态取值等细节表述是否与代码一致",
        "status": "ok",
        "detail": "SKILL.md 所述 exit 0/1/2 与 JSON 包络形态来自仓库自述的契约文档（docs/cli-exit-codes.md 同主题）；本次未逐条跑 CLI 实测（不构造账号环境、也不跑测试），故只按『源码文本一致』给结论，未验证运行时行为。"
      },
      {
        "item": "元数据复核",
        "status": "ok",
        "detail": "本地 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。"
      }
    ],
    "level": 2,
    "level_label": "V2 已复核",
    "commit": "5472d7cfcc2f5afeaa8bf556506c25e55946a22c",
    "sha256": "2231081c4d43c0ea8f39e58d8628a2bc018bbc1ed666fecf0d90c647f30a9ee0",
    "reviewed_by": "skills-bayx-audit",
    "reviewed_at": "2026-10-25"
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/notebooklm-python.tar.gz",
    "sha256": "2231081c4d43c0ea8f39e58d8628a2bc018bbc1ed666fecf0d90c647f30a9ee0",
    "commit": "5472d7cfcc2f5afeaa8bf556506c25e55946a22c"
  },
  "original": {
    "github": "https://github.com/teng-lin/notebooklm-py",
    "path": "",
    "commit": "5472d7cfcc2f5afeaa8bf556506c25e55946a22c"
  }
}