From sync-claude-sessions-skill
Loads YouTube channels into NotebookLM via CLI, runs cited expert interviews for personalized protocols, generates experiments in Obsidian daily notes. Use for podcast-to-action workflows.
npx claudepluginhub artemxtech/personal-os-skills --plugin recall-skillThis skill uses the workspace's default tool permissions.
Turn any expert's content into a personalized protocol with experiments you actually run. Load 300 YouTube episodes into NotebookLM from terminal, run a cited interview about your goal, create experiments in your Obsidian daily note.
Integrates Google NotebookLM via nlm CLI for querying project docs, managing notebooks/sources, retrieving AI-synthesized info, and generating podcasts/reports. Use for RAG on curated knowledge bases.
CLI automation for Google NotebookLM: create notebooks, add sources (URLs, YouTube, PDFs, audio/video/images), chat with content, generate artifacts (podcasts, videos, reports, quizzes, mind maps, flashcards, infographics), download results.
Share bugs, ideas, or general feedback.
Turn any expert's content into a personalized protocol with experiments you actually run. Load 300 YouTube episodes into NotebookLM from terminal, run a cited interview about your goal, create experiments in your Obsidian daily note.
Video walkthrough: https://youtu.be/KRpZSvtMiTI
uv tool install notebooklm-mcp-cli
Gives you the nlm command. See notebooklm-mcp-cli for details.
pip install "notebooklm-py[browser]"
playwright install chromium
# nlm CLI auth (for queries and source listing)
nlm auth login
# notebooklm-py auth (for notebook creation and loading)
notebooklm login
Both open a browser window for Google login. nlm saves to its own config, notebooklm-py saves cookies to ~/.notebooklm/storage_state.json.
# List your notebooks
nlm notebook list
# Ask a question with citations
nlm notebook query <notebook-id> "What does Huberman say about deep focus?" --json
# List sources
nlm source list <notebook-id> --json
| User says | Workflow |
|---|---|
| "load channel", "youtube channel", "bulk load videos" | workflows/youtube-channel.md |
| "notebooklm ask", "ask notebook", "Q&A" | workflows/ask.md |
| "import notebook", "import sources" | workflows/import.md |
| "notebooklm auth", "notebooklm login" | workflows/auth.md |
This is the workflow shown in the video:
Goal: "I want to improve my health and focus"
Expert: Andrew Huberman (@hubaborhab on YouTube)
# Scrape channel videos
python3 scripts/load_channel.py scrape \
--channel "https://www.youtube.com/@hubaborhab" \
--output /tmp/huberman-videos.json
# Create notebook
notebooklm create "Andrew Huberman - Health"
# Load 200 most recent health-related episodes
notebooklm use <notebook-id>
python3 scripts/load_channel.py load \
--videos /tmp/huberman-videos.json \
--notebook <notebook-id> \
--count 200 \
--concurrency 20
nlm notebook query <notebook-id> \
"What does Huberman recommend for sustaining deep focus for 4+ hours daily?" --json
Each answer comes with [N] citations back to the exact source and passage.
Claude uses the notebook to generate interview questions specific to YOUR goal. You answer honestly. Claude builds a personalized protocol where each recommendation is tied to an exact episode.
The protocol becomes experiments in your Obsidian vault:
Package the workflow as a /huberman or /lenny skill. Same pattern, different expert.
Your Vault/
├── Notes/NotebookLM/
│ ├── Huberman Health.md # type: notebook (index)
│ └── huberman-health/
│ ├── Sources/ # type: notebook-source (transcripts)
│ │ └── Episode Title.md
│ └── QA/ # type: nlm-query (cited answers)
│ └── 2026-04-05 Focus Protocol.md
├── Notes/Experiments/
│ └── Morning Sunlight Protocol.md # type: experiment
└── Notes/Dashboards/
└── Health.md # Dashboard with embedded experiments
| Script | Purpose |
|---|---|
scripts/load_channel.py | Scrape YouTube channel + bulk-load into NotebookLM |
scripts/resolve_citations.py | Replace [N] with [[Source#^anchor|[N]]] wikilinks |
scripts/import_sources.py | Import sources as vault files with metadata |
scripts/extract_passages.py | Extract cited passages from Q&A into source files |
scripts/backfill_fulltext.py | Fetch full transcripts for source files |
All scripts use Path.cwd() as vault root. Run them from your vault directory.
The resolver turns [N] markers in NotebookLM answers into clickable [[Source#^c-XXXXXXXX|[N]]] wikilinks. Click to jump to the exact cited passage in the source transcript.
MIT