Notebooklm
robonuggets/notebooklm-skill
Query, manage, and automate Google NotebookLM from your AI agent.
Manages Google NotebookLM notebooks via the nlm CLI. An agent skill from tmc/nlm.
$ npx skills add tmc/nlm --skill nlm -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tmc/nlm nlm --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/tmc/nlm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/nlm .claude/skills/nlm && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "nlm" agent skill from https://github.com/tmc/nlm/tree/main/skills/nlm into .claude/skills/nlm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nlm", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/tmc/nlm/tree/main/skills/nlmType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add tmc/nlm --skill nlm -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tmc/nlm nlm --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tmc/nlm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/nlm .agents/skills/nlm && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "nlm" agent skill from https://github.com/tmc/nlm/tree/main/skills/nlm into .agents/skills/nlm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nlm", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tmc/nlm --skill nlm -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tmc/nlm nlm --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tmc/nlm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/nlm .cursor/skills/nlm && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "nlm" agent skill from https://github.com/tmc/nlm/tree/main/skills/nlm into .cursor/skills/nlm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nlm", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/tmc/nlm.git --path skills/nlm--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add tmc/nlm --skill nlm -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tmc/nlm nlm --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tmc/nlm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/nlm .gemini/skills/nlm && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "nlm" agent skill from https://github.com/tmc/nlm/tree/main/skills/nlm into .gemini/skills/nlm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nlm", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install tmc/nlm nlmInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add tmc/nlm --skill nlm -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tmc/nlm.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/nlm .github/skills/nlm && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "nlm" agent skill from https://github.com/tmc/nlm/tree/main/skills/nlm into .github/skills/nlm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nlm", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tmc/nlm --skill nlm -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tmc/nlm nlm --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tmc/nlm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/nlm .opencode/skills/nlm && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "nlm" agent skill from https://github.com/tmc/nlm/tree/main/skills/nlm into .opencode/skills/nlm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nlm", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
nlmManages Google NotebookLM notebooks via the nlm CLI. An agent skill from tmc/nlm.
Nlm is an agent skill from tmc/nlm. Manages Google NotebookLM notebooks via the nlm CLI. Use for creating notebooks, listing and syncing sources, uploading files/URLs/text, chatting with sources, generating reports/audio/video/slides, running research, managing labels, editing notebook metadata (title/emoji/description/cover), and managing notebook content.
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `reference/commands.md`).
It sits in Knowledge Management, covering Source-grounded notebooks and Slides and decks. It works with NotebookLM. The repository describes itself as: a command line interface to NotebookLM. The licence is MIT.
Read from SKILL.md and the folder at commit 7a173b4. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(*)ReadGlobGrepWriteFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pdftotextFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Nlm loads about 2.2k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 700 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash(*), Read, Glob, Grep, WriteAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from tmc/nlm at commit 7a173b4, republished under its MIT licence (© tmc). 700 words, ~2,173 tokens.
.claude/skills/nlm/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Run nlm --help for the canonical command tree. Run nlm <command> --help
for command-local flags. The stable surface is noun-first: notebook,
source, note, artifact, and chat groups.
For a compact command map, read reference/commands.md only when needed.
Always prefer live help output when it disagrees with the reference.
| Argument | Action |
|---|---|
| (empty) | Run nlm notebook list, then ask what to do |
create or new | Create a notebook with nlm notebook create |
upload or add | Add one-off sources with nlm source add |
sync | Sync a directory as a managed source with nlm source sync |
chat | Start, resume, or run one-shot chat |
research | Run nlm research and choose fast/deep mode if needed |
audio / video / slides / report | Use the corresponding create or generation command |
status | Show notebook, sources, artifacts, and recent chats |
| a notebook ID | Show details for that notebook |
| a file path or glob | Upload that file/pattern to a notebook |
-y for destructive operations in non-interactive contexts, for example nlm -y notebook delete <id>.nlm auth --authuser N or NLM_AUTHUSER=N for non-default Google accounts.--direct-rpc for audio download; if the direct fetch is unavailable,
it prints the NotebookLM browser URL. video download enables the required
direct-RPC path itself and uses the same browser fallback.List notebooks
nlm notebook list
nlm notebook list --limit 25
nlm notebook list --allAdd one-off sources — use source add for files, URLs, and direct text.
Pass - to read newline-delimited source references from stdin.
nlm source add <notebook-id> https://example.com/article
nlm source add <notebook-id> ./paper.pdf
nlm source add --name "API notes" <notebook-id> ./notes.txt
printf '%s\n' ./a.pdf https://example.com/b | nlm source add <notebook-id> -Sync a directory as one source — source sync packs files into txtar,
quotes nested txtar markers, chunks large payloads, and skips unchanged chunks
using a content-hash cache. Use it whenever the same tree will be re-uploaded.
Use source add for one-shot single-file/URL uploads.
nlm source sync <notebook-id> src/
nlm source sync --name "project: src/" <notebook-id> src/
nlm source sync --dry-run <notebook-id> .
nlm source sync --force <notebook-id> ./docs ./notes
nlm source sync --json <notebook-id> .Preview what sync will upload — source pack writes the exact txtar
bytes sync would upload, no network. Pipe through txtar --list or txtar -x
to inspect:
nlm source pack src/ | txtar --list
nlm source pack src/ > preview.txtar
nlm source pack --chunk 2 src/ > pt2.txtarFocus on specific sources — --source-ids and --source-match scope
chat, generate-chat, generate-report, source-guide, and content
transforms. --source-match is a Go regex matched against titles and UUIDs.
nlm chat --source-match 'internal/sync' <notebook-id> "What changed?"
nlm generate-chat --source-ids a,b,c <notebook-id> "Summarize these"
nlm summarize --source-match '^spec/' <notebook-id>
nlm source list <notebook-id> | grep Q3 | nlm chat --source-ids - <notebook-id> "Risks?"Chat and continuation
nlm chat <notebook-id>
nlm chat <notebook-id> "What are the main conclusions?"
nlm generate-chat --conversation <conversation-id> <notebook-id> "Follow up"
nlm chat show --citations tail <notebook-id> <conversation-id>Research
nlm research <notebook-id> "What changed in the source set?"
nlm research --mode fast <notebook-id> "Which docs should I read first?"
nlm research --md <notebook-id> "Write a concise brief" > report.md
nlm research --import <notebook-id> "Find source material"Content creation — creation may take time. Poll with artifact list,
audio list, or video list.
nlm create-audio <notebook-id> "Conversational, focus on key decisions"
nlm create-video <notebook-id> "Whiteboard walkthrough"
nlm create-slides <notebook-id> "Presentation summary"
nlm generate-report --sections 3 <notebook-id>
nlm artifact list <notebook-id>
nlm --direct-rpc audio download <notebook-id> output.wav
nlm --direct-rpc video download <notebook-id> output.mp4Rename after stdin upload — stdin text defaults to "Pasted Text"; use
--name during upload or rename after:
nlm source rename <source-id> "descriptive name"Notebook metadata — title, emoji, description, and cover are separate
commands. cover takes a built-in preset ID; cover-image uploads a custom
image. unrecent only hides from the recents list, it does not delete.
nlm notebook rename <notebook-id> "New Title"
nlm notebook emoji <notebook-id> "📓"
nlm notebook description <notebook-id> "One-line summary"
echo "long description" | nlm notebook description <notebook-id>
nlm notebook cover <notebook-id> 4
nlm notebook cover-image <notebook-id> ./cover.png
nlm notebook unrecent <notebook-id>Labels (autolabel clusters) — labels are server-side clusters over
sources. generate and relabel-all are heavy server jobs (relabel-all can
exceed the 60s deadline on large notebooks); unlabeled only touches
sources without a label. attach takes one source per call.
nlm label list <notebook-id>
nlm label generate <notebook-id>
nlm label create <notebook-id> "Important" "⭐"
nlm label rename <notebook-id> <label-id> "New Name"
nlm label emoji <notebook-id> <label-id> "🐛"
nlm label delete <notebook-id> <label-id> [<label-id>...]
nlm label unlabeled <notebook-id>
nlm label relabel-all <notebook-id>
nlm label attach <notebook-id> <label-id|name> <source-id|name>Discover sources vs chat — discover-sources calls a server-driven
source-discovery RPC (Es3dTe) that returns ranked source IDs for a query.
If the server rejects it (error or transient code-13), the CLI falls back
to a regular chat call asking the model to list relevant sources. Use it
to pick --source-ids for a follow-up; use nlm chat when you want a
narrative answer rather than just IDs.
nlm discover-sources <notebook-id> "Q3 revenue assumptions"Pick the lightest tool that does the job:
nlm source check <source-id> [notebook-id] — Drive-only. Asks Google
whether the indexed copy is still current. No re-index, no upload.
Use to decide whether anything else is needed.nlm source refresh <notebook-id> <source-id> — Drive-only. Re-indexes
the existing source in place. Use when check reports stale and the
source is still a Google Drive document.check
and refresh do not apply. Use nlm source delete then nlm source add,
or for a synced tree run nlm source sync (it auto-detects changed
chunks; --force to re-upload unchanged content).Binary upload workarounds — if a binary upload fails, convert to text:
pdftotext paper.pdf - | nlm source add --name "paper text" <notebook-id> -
plutil -convert xml1 -o - file.plist | nlm source add --name "plist text" <notebook-id> -| Error | Fix |
|---|---|
| "Authentication required" | Run nlm auth |
| "Service unavailable" on upload | Retry after a few seconds (rate limit) |
| "source limit reached" or "Failed precondition" on add | Remove unused sources or use a smaller target notebook |
| "upload init failed (status 500)" | Try text extraction workaround |
--source-match matched no sources | Re-run nlm source list <notebook-id> and adjust the regex |
© tmc, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/nlm of tmc/nlm.
Open the folder on GitHubat commit 7a173b4
Nlm next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Nlm this skilltmc/nlm | 391 | — | ~2.2k | Automated safety check: Notes | MIT | |
| Notebooklmrobonuggets/notebooklm-skill | 139 | — | ~2.5k | Automated safety check: Pass | None | |
| Notebooklm Slide StylesYamilAyma/notebooklm-prompt-styles | 104 | — | ~744 | Automated safety check: Pass | None | |
| Notebooklm CLIItamarZand88/CLI-Anything-WEB | 231 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Nlm Skilliusztinpaul/ai-research-os-workshop | 179 | 1 repos | ~6.9k | Automated safety check: Pass | MIT | |
| Notebooklmalirezarezvani/claude-skills | 28k | — | ~4k | Automated safety check: Pass | MIT |
robonuggets/notebooklm-skill
Query, manage, and automate Google NotebookLM from your AI agent.
YamilAyma/notebooklm-prompt-styles
Translates visual identity and design documents into standardized YAML for NotebookLM slide generation.
ItamarZand88/CLI-Anything-WEB
Use cli-web-notebooklm to interact with Google NotebookLM — create notebooks, add sources, ask questions, generate artifacts (audio, video, slides, mindmap, study guide, quiz, briefing, infographic…
iusztinpaul/ai-research-os-workshop
Expert guide for the NotebookLM CLI (nlm) and MCP server - interfaces for Google NotebookLM.
alirezarezvani/claude-skills
Browser automation skill for controlling Google's NotebookLM.
ItamarZand88/CLI-Anything-WEB
Drives Google NotebookLM via the cli-web-notebooklm command-line tool — create and manage notebooks, add URL/text sources, ask questions grounded in the sources, and generate/download artifacts…
Works with
Categories
Manages Google NotebookLM notebooks via the nlm CLI. An agent skill from tmc/nlm. Nlm is an agent skill from tmc/nlm. Manages Google NotebookLM notebooks via the nlm CLI.
Nlm fits situations like: creating notebooks; listing and syncing sources; uploading files/URLs/text; chatting with sources.
Run `npx skills add tmc/nlm --skill nlm -a claude-code`. Or copy the skill folder (skills/nlm in tmc/nlm) into .claude/skills/nlm in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tmc/nlm --skill nlm -a codex`. Or copy the skill folder (skills/nlm in tmc/nlm) into .agents/skills/nlm in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tmc/nlm --skill nlm -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nlm, .gemini/skills/nlm, .github/skills/nlm and .opencode/skills/nlm in your project.
Going by SKILL.md and its folder, Nlm needs the command-line tools its instructions call (pdftotext). Its frontmatter pre-approves these tools: Bash(*), Read, Glob, Grep, Write.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Nlm is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Nlm: Notebooklm (robonuggets/notebooklm-skill, 139 stars), Notebooklm Slide Styles (YamilAyma/notebooklm-prompt-styles, 104 stars), Notebooklm CLI (ItamarZand88/CLI-Anything-WEB, 231 stars) and Nlm Skill (iusztinpaul/ai-research-os-workshop, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tmc (a GitHub user) maintains it in tmc/nlm, which has 391 GitHub stars. The repository was last updated on September 23, 2026.
Source: tmc/nlm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.