Dossier
Open a topic-scoped NotebookLM corpus (the "dossier"), let Claude orchestrate curation and reasoning, let NotebookLM serve citation-backed answers from within the dossier. The dossier persists—future questions on the same topic reuse it.
When to use
- Reading 5+ papers/reports on one topic
- Pre-IPO / pre-deal due diligence on a company or sector
- Legal, regulatory, or compliance review across document sets
- Competitive analysis across multiple products/companies
- Long-term personal knowledge base queries (Obsidian/Readwise exports, meeting archives)
- Any task where answers must be traceable to source text
When NOT to use
- One-off questions answerable from general knowledge or single web page — just ask Claude directly
- Codebase exploration or "jump to definition" — your agent's native file tools (Read/Grep/etc.) are stronger
- Real-time / freshly changing information — NotebookLM is static
- Tiny corpora (< 5k tokens) — fitting in Claude's context is simpler
- When speed matters over depth — NotebookLM is ~3× slower than direct chat
Setup (first run in a machine)
Preflight has 4 steps. Only step 1 is read-only and always safe to auto-run. Steps 2–4 have side effects (disk writes, browser popups, skill directory changes) — ask the user before each one.
Step 1 — Detect (auto, read-only)
# What CLI form is reachable?
if command -v notebooklm >/dev/null 2>&1; then
NBLM="notebooklm"
elif python3 -m notebooklm --help >/dev/null 2>&1; then
NBLM="python3 -m notebooklm" # pip-installed but scripts dir not on PATH — common on macOS
else
NBLM="" # not installed
fi
# Does the existing session work?
if [ -n "$NBLM" ] && $NBLM auth check 2>&1 | grep -q "Authentication is valid."; then AUTH_OK=1; else AUTH_OK=0; fi
# Note: matches the final verdict line — only appears when every sub-check
# passed. Matching "✓ pass" alone would false-positive when e.g. only
# "Storage exists" passed but SID/token checks failed.
Step 2 — Install (only if $NBLM is empty) — ASK FIRST
Tell the user: "I don't see notebooklm-py on this machine. May I install it with pip install 'notebooklm-py[browser]' plus Playwright Chromium (~150MB)?". Wait for an explicit yes, then:
pip install "notebooklm-py[browser]"
python3 -m playwright install chromium
NBLM="python3 -m notebooklm"
If the notebooklm binary lands outside $PATH (typical on macOS where pip install writes to ~/Library/Python/<ver>/bin/), don't try to patch PATH yourself — just report it and continue using the python3 -m notebooklm form everywhere. It works identically.
Step 3 — Authenticate (only if AUTH_OK=0) — ASK FIRST, OPENS BROWSER
$NBLM login opens Chrome for Google OAuth. Tell the user it'll pop a browser window before running.
Step 4 — Install the low-level notebooklm skill (once per machine) — ASK FIRST
$NBLM skill install writes to ~/.claude/skills/notebooklm/ — it gives Claude direct knowledge of the raw CLI commands, which complements this dossier skill. Low risk but still a filesystem change; tell the user, then run.
Routes — pick the right entry point
First branch — does a dossier on this topic already exist? Run $NBLM list before anything else.
- Yes (same or adjacent topic) → Route D (query / top-up / hygiene). Most time on any long-running topic is spent here, not in fresh builds.
- No → pick one of A/B/C below based on source-quality requirements. Default: Route B.
Always present the choice to the user before spending time.
| Route | When | Setup time | Claude tokens | Durability |
|---|---|---|---|---|
| A. NotebookLM deep research | Quick overview, one-shot curiosity | ~5 min | near-zero | ephemeral (dossier stays but seeded by auto-research) |
| B. Claude-curated sources ⭐ | Noisy topic, long-term reuse, authoritative-source requirement | 15–30 min | moderate (fetching/filtering) | persistent |
| C. User-specified sources | Strict source whitelist (specific authors, databases) | depends on list | moderate | persistent |
| D. Existing dossier | Continuing research on a topic that already has a dossier | near-zero | low (mostly Q&A, maybe small top-up) | persistent |
Route A — NotebookLM auto-research
$NBLM create "dossier-<topic-slug>"
$NBLM use <notebook-id>
$NBLM source add-research "<search query>" --mode deep
NotebookLM's own research agent picks sources, imports them, and indexes. Claude then asks questions. Source quality is opaque — good for exploration, risky for decisions.
Route B — Claude-curated (recommended default)
Steps:
- Claude searches authoritative sources (e.g. PubMed, Cochrane, ISSN, SEC EDGAR, primary sources for the topic — not random blogs or SEO pages)
- Claude drafts a source shortlist with a one-line justification per source
- User confirms or edits the list — never skip this step
- Claude imports confirmed sources one by one (source type auto-detected from content):
All commands use the active dossier (set by$NBLM source add "https://..." # URL $NBLM source add ./paper.pdf # local file $NBLM source add "pasted text" --title "My note" # inline text$NBLM use <id>). Add-n <id>to override. - Verify import quality (see caveats below), fix any bad imports
- Claude starts asking questions with
$NBLM ask --json "..."
Import caveats — read before step 4:
- Check every import. Run
$NBLM source listafter a batch. If a title readsChecking your browser - reCAPTCHA,Access denied, or similar, NotebookLM's backend hit an anti-bot wall. One retry is fine; if still blocked, abandon the direct URL and go to the Jina fallback below — don't loop on retries. - Never batch-parallelize PubMed URLs.
pubmed.ncbi.nlm.nih.govtriggers reCAPTCHA extremely reliably under any concurrency, and even a 3-second serial delay isn't enough. Go straight to Jina Reader + DOI for PubMed. - Jina Reader fallback — when a URL hits anti-bot walls, fetch it via Jina's proxy and ingest as a file. See "Jina key handling" below for how to obtain
$JINA_API_KEY:curl -sL -H "Authorization: Bearer $JINA_API_KEY" \ "https://r.jina.ai/<original-url>" -o /tmp/page.md $NBLM source add /tmp/page.md $NBLM source rename <source-id> "Author Year — descriptive title" - Prefer DOI over PubMed URL.
https://doi.org/<doi>redirects to the publisher. If it's MDPI / BMC / Frontiers / PLOS (open access), you'll get full text, which indexes 5–10× more useful content than a PubMed abstract page. Get the DOI from NCBI esummary:curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=<PMID>&retmode=json". --titleonly works for inline text. When adding a file withsource add /path/file.md --title "...", the title is silently dropped and the filename becomes the title. Always follow a file import with$NBLM source rename <id> "..."to fix.
Route C — User-specified
User provides the source list (files, URLs, or "only these authors"). Same commands and same caveats as Route B, just skip steps 1–3.
Route D — Existing dossier (query / top-up / hygiene)
Pick this whenever $NBLM list shows a dossier on the same or adjacent topic. This is the default path for continuing research. It's not a build mode — A/B/C are for filling an empty dossier; D is for everything you do after.
Open the dossier, then branch into one of three sub-paths:
$NBLM list # find the dossier
$NBLM use <id> # activate it
$NBLM source list # remind yourself what's in here
D1. Query only
The dossier already covers the question — you just need an answer. Go straight to Ask, but respect Working rule 10 (split or -s-scope wide questions before they time out).