skills/notebooklm-create/SKILL.md
Complete "topic notebook build" workflow for Google NotebookLM — deep web research, sequential source loading (with known-failing domain skips), full Studio artifact generation, and curated chat-prompt library. Use this skill whenever the user wants to create a new NotebookLM notebook on a topic, build a full research notebook from scratch, generate a "{topic} :: docs" notebook, compile sources from forums (Reddit/HN/GitHub/Discord/Quora) into a notebook, produce a full Studio (audio + video + mind map + reports + flashcards + quiz + infographic + slide deck + data table) for an existing notebook, or prepare curated NotebookLM prompts for a topic. Triggers on phrases like "build a notebook on X", "create cmux :: docs", "research and build NotebookLM", "full studio for my notebook", "entire studio", "NotebookLM prompts for topic Y", "turn this into a NotebookLM notebook". Apply even when the user does not explicitly say "NotebookLM" — if they ask you to assemble a research notebook on a topic with sources and derivative artifacts, this is the right skill.
npx skillsauth add julianobarbosa/claude-code-skills notebooklm-createInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
End-to-end workflow for building a complete NotebookLM topic notebook: deep research, source loading, full Studio, curated prompts. Orchestrates the notebooklm-rpc MCP tools with domain-specific gotcha handling encoded.
notebooklm-skill = low-level API reference (notebooklm-py CLI)notebooklm-create) = high-level workflow orchestration using the notebooklm-rpc MCP tools available in this sessionIf the user just wants to call a single API (e.g., "list my notebooks"), use notebooklm-skill or the MCP tool directly. If they want to BUILD a research notebook from a topic, use this skill.
Building a rich NotebookLM notebook for a topic has repeatable shape but is strewn with gotchas that cost real time if rediscovered:
llms.txt URLs need the trailing .md stripped before addingtype: flashcards once generated (title disambiguates)confirm=True is mandatory on every Studio creation tool AND requires explicit user approvalThis skill encodes all of that so future runs don't relearn it.
Run these in order. Each phase has a clear hand-off to the next.
Ask or infer:
{topic} :: docs (matches user's existing naming pattern visible via notebook_list)If the topic name is ambiguous (multiple projects share the name — common: cmux = manaflow-ai vs craigsc vs coder), anchor disambiguation on the user's seed URLs before researching.
Goal: produce two artifacts — a research synthesis and a community content dossier. Both become text sources in the notebook.
Read references/prompt-library.md for prompt starters. Use WebFetch on user-provided seed URLs first to lock in disambiguation, then WebSearch for canonical repo / docs / llms.txt.
Dispatch two parallel agents (via the Agent tool with general-purpose subagent):
Research synthesis agent — produces 2000–3000 word markdown covering overview, architecture, features, comparisons, installation, traction, limitations, official URLs. Output template: assets/research_synthesis_template.md.
Community content agent — searches Reddit, Hacker News, GitHub Discussions for threads, extracts verbatim quotes with attribution. Captures Discord community texture by pulling equivalent content from GitHub Discussions (Discord isn't publicly scrapeable). Confirms Quora status (usually no threads for technical topics). Output template: assets/community_content_template.md.
Both agents should return ready-to-paste markdown. Save locally under MEMORY/WORK/<slug>/.
Use mcp__notebooklm-rpc__notebook_create with the agreed title.
mcp__notebooklm-rpc__notebook_create(title="{topic} :: docs")
Capture the returned notebook.id — you'll need it for every subsequent call.
Verify no duplicate exists first via mcp__notebooklm-rpc__notebook_list (filter titles case-insensitively for the topic term).
Read references/url-gotchas.md for the domain blocklist and URL-cleaning rules before calling any add tool.
Order of source types to add (each as a separate, sequential call — never in parallel):
/ that Reddit prefersmcp__notebooklm-rpc__notebook_add_textDO NOT attempt to add:
medium.com/* — always failsquora.com/* — always fails (as of 2026-04-21; see url-gotchas.md)linkedin.com/* — typically fails (auth gates)If a domain is uncertain, probe with WebFetch first — if that returns bot-detection content, assume NotebookLM will fail too and capture as text instead.
If adding an llms.txt URL, strip any trailing .md before the call (e.g., foo.com/llms.txt, not foo.com/llms.txt.md).
Sequential sample pattern:
# For each url in ordered_list:
mcp__notebooklm-rpc__notebook_add_url(notebook_id=NB, url=url)
# wait for success, then next
Every Studio tool takes confirm=True. The MCP server explicitly states user approval is required before setting it. Present the plan to the user, get approval, then dispatch.
Read references/studio-quirks.md for sync vs async classification and known API quirks.
Recommended order (async-first minimizes total wall-clock):
audio_overview_create — async, ~60s+video_overview_create — async, several minutesinfographic_create — async, several minutesslide_deck_create — async, several minutesmind_map_create — synchronousreport_create(format="Briefing Doc") — synchronousreport_create(format="Study Guide") — synchronousflashcards_create — synchronousquiz_create(question_count=10) — synchronous (note: classified as type: flashcards in studio_status)data_table_create(description=...) — synchronousFor each async artifact, pass a focus_prompt tailored to the topic — see references/mcp-tool-map.md for recommended focus prompts per tool.
After dispatching, poll once via mcp__notebooklm-rpc__studio_status after ~45s, then again after 2–3 minutes. Async media can take 5–10 minutes to render.
Add a text source containing 9 NotebookLM chat prompts adapted to the topic. Base templates live in references/prompt-library.md — they come from two public articles (XDA Developers, AI Fire) and are pre-mapped to structural goals:
Replace the topic-specific placeholders in each template with concrete references from the research (actors, quotes, key architectural facts). Save to both:
MEMORY/WORK/<slug>/prompts.md for reusemcp__notebooklm-rpc__notebook_add_text titled "9 Curated NotebookLM Prompts for {topic}"mcp__notebooklm-rpc__notebook_get(notebook_id=NB)
mcp__notebooklm-rpc__studio_status(notebook_id=NB)
Confirm:
{topic} :: docsReport back to the user with:
notebooklm.google.com/notebook/{id})scripts/add_urls_sequential.py — wraps the sequential-add pattern with the domain blocklist built inscripts/build_full_studio.py — dispatches all 10 Studio artifacts in the correct async-first order (prints the MCP call plan; actual MCP invocation happens from Claude's tool layer)scripts/adapt_prompts.py — takes a topic facts dict and emits the 9 prompts with placeholders filledreferences/url-gotchas.md — domain blocklist + URL-cleaning rulesreferences/studio-quirks.md — sync vs async, quiz classification, confirm guardreferences/prompt-library.md — 9 base prompts with source attribution (XDA + AI Fire)references/mcp-tool-map.md — which MCP tool per phase + recommended focus promptsassets/research_synthesis_template.md — 9-section research doc scaffoldassets/community_content_template.md — forum/community dossier scaffoldassets/workflow_checklist.md — phase-by-phase checklist to copy into a work PRDsamples/cmux_docs_walkthrough.md — worked example from the original sessionnotebooklm-skill or direct MCP callsnotebooklm-skill| When | Read |
|------|------|
| Before Phase 4 (URL adds) | references/url-gotchas.md |
| Before Phase 5 (Studio) | references/studio-quirks.md, references/mcp-tool-map.md |
| Before Phase 6 (Prompts) | references/prompt-library.md |
| If stuck on a tool choice | references/mcp-tool-map.md |
confirm=True.studio_status immediately → async artifacts show in_progress; wait 45s minimum.type field to distinguish quiz from flashcards → both classify as flashcards post-generation. Use the artifact title.notebook_id → costs a redundant notebook_list call to recover it.& and wait in bash get random ordering and unstable citations.development
End-to-end branch delivery: commit (no AI attribution) → push → open a pull request → ensure a Board work item exists (create one per task, assigned to the configured user, if none) and link it → after merge, clean up branch and worktree. Auto-detects the platform from the remote — Azure Repos + Boards (azure-devops-node-api SDK; OAuth Bearer push fallback via `az`) or GitHub (Octokit; `gh` for auth). Scripts are TypeScript, run via `bun`. Use whenever asked to "ship", "ship it", "ship this branch", "open a PR", "push and open a PR", "raise a PR", "deliver this", "send this for review", or "create a PR and link the work item" — and when a direct push to main is blocked and the change needs to go through a PR instead.
testing
Brief description of what this skill does. Include specific triggers - when should Claude use this skill? Example triggers, file types, or keywords that indicate this skill applies.
tools
Manage and troubleshoot PATH configuration in zsh. Use when adding tools to PATH (bun, nvm, Python venv, cargo, go), diagnosing "command not found" errors, validating PATH entries, or organizing shell configuration in .zshrc and .zshrc.local files.
tools
Zabbix monitoring system automation via API and Python. Use when: (1) Managing hosts, templates, items, triggers, or host groups, (2) Automating monitoring configuration, (3) Sending data via Zabbix trapper/sender, (4) Querying historical data or events, (5) Bulk operations on Zabbix objects, (6) Maintenance window management, (7) User/permission management