blog-analyze
Score one blog post (or a folder of posts) on a 5-category 100-point scale covering content quality, SEO, E-E-A-T, technical…
Query a user's Gemini Notebook (formerly NotebookLM) for source-grounded answers through a logged-in browser session on their Google account. Uses the account's usage limits and writes browser state. Runs only on an explicit request: /blog notebooklm, "ask my Gemini Notebook",
Claude Code
$ npx -y skills add AgriciDaniel/claude-blog --skill blog-notebooklm --agent claude-code
Codex
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a codex -y
Cursor
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a cursor -y
Gemini CLI
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a gemini-cli -y
GitHub Copilot
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a github-copilot -y
OpenCode
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a opencode -y
Windsurf
$ npx skills add AgriciDaniel/claude-blog --skill blog-notebooklm -a windsurf -y
name: blog-notebooklm description: > Query a user's Gemini Notebook (formerly NotebookLM) for source-grounded answers through a logged-in browser session on their Google account. Uses the account's usage limits and writes browser state. Runs only on an explicit request: /blog notebooklm, "ask my Gemini Notebook", "ask my NotebookLM notebook", or "query my notebook library". Also used by blog-write when the user named a notebook for research. Not for generic research or note-taking. user-invocable: true argument-hint: "[ask|discover|library|setup|status|cleanup] [question-or-url]" license: MIT metadata: author: AgriciDaniel version: "2.3.2" source: "https://github.com/PleasePrompto/notebooklm-skill"
> Google renamed NotebookLM to Gemini Notebook on 2026-07-16 ([announcement](https://blog.google/innovation-and-ai/products/gemini-notebook/notebooklm-gemini-notebook/)). This skill keeps the `notebooklm` command and script names. The scripts accept notebook URLs on `notebooklm.google.com` (which redirected with a 301 to `notebook.google.com` on 2026-10-12) and on `notebook.google.com`. Help: https://support.google.com/gemininotebook/.
Bundled paths below use host Markdown substitution of `${CLAUDE_SKILL_DIR}`; it is not an exported shell variable. Resolve them before execution, quote paths, and refuse nonabsolute overrides. Pass `blog_reference_root` resolved from `${CLAUDE_SKILL_DIR}/../blog/references`, `blog_template_root` from `${CLAUDE_SKILL_DIR}/../blog/templates`, and needed sibling roots to agents. Read the main reference `orchestration-details.md` before loading project context; pass only its helper-fenced output to downstream agents.
Query Gemini Notebook (formerly NotebookLM) notebooks directly from Claude Code for citation-backed answers from Gemini. Each question opens a headless browser session, retrieves the answer from your uploaded documents, and closes. Responses are source-grounded model answers, not proof of truth: uploaded documents may be primary or secondary, and the answer can still omit context.
Answers provide usable provenance only when the returned citation identifies a verifiable underlying source. Record a stable source URL and a publication, study-period, or retrieval date when that detail affects verification or interpretation. Use the underlying source title as the inline citation. Do not cite the private NotebookLM URL as the bibliography entry for public content.
This skill drives the user's real Google account in a browser.
Gemini Notebook usage limits (and any paid plan behind them). It costs no API money, but a loop can exhaust the user's allowance. Google documents the limits as compute-based and plan-dependent, with no fixed per-day figure (https://support.google.com/gemininotebook/answer/17670842, read 2026-10-12).
browser profile under the managed runtime root; setup also installs a virtual environment and Chrome.
the question count, and what is written, and wait for an explicit yes. Setup, reauth, clear, and cleanup each need their own yes.
(see Step 4), and at most 5 queries for one user request unless the user raises the cap. Stop at the first usage-limit error.
and return ONE line for the orchestrator's "Fallbacks and skips" summary, such as "NotebookLM: not authenticated, used WebSearch".
| Command | What it does | |---------|-------------| | `/blog notebooklm ask <question>` | Query a notebook for source-grounded answers | | `/blog notebooklm discover <url>` | Smart-discover notebook content before cataloging | | `/blog notebooklm library list` | List all notebooks in library | | `/blog notebooklm library add <url>` | Add a notebook to library | | `/blog notebooklm library search <query>` | Search notebooks by keyword | | `/blog notebooklm library remove <id>` | Remove a notebook from library | | `/blog notebooklm setup` | One-time Google authentication (browser visible) | | `/blog notebooklm status` | Check authentication status | | `/blog notebooklm cleanup` | Clean browser state (preserves library) |
`CLAUDE_BLOG_RUNTIME_DIR` optionally selects one trusted absolute persistent root. This integration uses `<root>/blog-notebooklm/.venv`; NotebookLM also uses `<root>/blog-notebooklm/data` for its library, authentication and browser state. Without this override, the existing skill-local defaults stay in use. Google's shared credential config/token paths stay unchanged. No state is copied or migrated automatically, and ordinary runs never perform setup.
Preserve an existing validated operator override. For a plugin without one, explicitly pass the host-substituted `${CLAUDE_PLUGIN_DATA}/claude-blog-runtime` path on both setup and every later runner call. This is Markdown substitution, not an exported shell variable. Execute only once it is an absolute resolved path. Single quotes keep an unresolved placeholder literal so validation rejects it instead of expanding it to a different shell path:
CLAUDE_BLOG_RUNTIME_DIR='${CLAUDE_PLUGIN_DATA}/claude-blog-runtime' python3 "${CLAUDE_SKILL_DIR}/scripts/setup_environment.py" --check --json
CLAUDE_BLOG_RUNTIME_DIR='${CLAUDE_PLUGIN_DATA}/claude-blog-runtime' python3 "${CLAUDE_SKILL_DIR}/scripts/run.py" notebook_manager.py list --jsonOnly explicit setup without `--check` installs dependencies. Standalone users keep the default unless they explicitly choose an absolute runtime root. Relative, unresol
claude-blog is a Claude Code skill suite that writes, optimizes, audits, localizes, and refreshes blog content at scale. Every article is evaluated for Google-aligned usefulness and internal AI citation readiness heuristics.
Score one blog post (or a folder of posts) on a 5-category 100-point scale covering content quality, SEO, E-E-A-T, technical…
Paid Gemini TTS audio for a finished blog post: summary, full read-aloud, or two-speaker dialogue, with an MP3 and an HTML5…
Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content,…
Establish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't…
Create a content brief for ONE planned post: target and secondary keywords, search intent, template choice, competitor gaps from…
Build a dated monthly or quarterly editorial calendar: which posts to publish or review when, content mix, templates,…
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…