Right-click a URL or Markdown link in the editor and run Summarize link.
AI Link Summarizer sends the target URL to Gemini, OpenAI, or Claude, then inserts a concise summary as an [!summary] callout above the detected link.
Auth-gated pages (LinkedIn, X, Medium, ...) are read through a logged-in browser session you sign in to once, and whole folders of link notes can be summarized in one batch.
Features
- Detects URLs from:
- selected raw URLs (
https://...)
- selected Markdown links (
[label](https://...))
- Markdown/raw link under cursor on right-click
- Adds editor context menu action: Summarize link
- Batch mode: right-click a folder → Summarize link notes in folder (also available as a command for the current folder)
- appends an
[!summary] callout to each link-only note; already-summarized notes are skipped, so re-runs resume where they stopped
- with Generate title and tags enabled (default), also renames each note to an AI-generated title (from its summary) and merges topic tags into frontmatter — best-effort, so the summary still lands if titling fails
- waits out per-minute provider rate limits automatically and stops early when a daily quota is exhausted
- per-note failure reasons are written to
AI Link Summarizer batch log.md in the vault root (overwritten each run)
- Inbox auto-ingest: link-only notes dropped into a watched folder are summarized (and titled/tagged) automatically, reusing the same per-note pipeline as batch mode
- runs both when a note is created in the folder and in a one-time startup sweep of notes already sitting there
- notes are held in place — never moved — for a later review pass
- non-link notes and already-summarized notes are skipped
- Fetch modes (how page content is obtained):
provider — the LLM provider fetches the URL itself
browser — the page is rendered in a hidden, logged-in, persistent webview session (reads auth-gated pages)
auto (default) — browser session for configured auth-gated hosts, provider for everything else
- Browser session login: Log in to sites for browser fetch opens a modal with one-click buttons for each configured auth-gated host plus a free-form URL bar; sign in once and the session is remembered
- Provider support:
- Gemini via
@google/genai + urlContext
- OpenAI via
openai + web_search_preview
- Claude via
@anthropic-ai/sdk (fetches page content locally via requestUrl)
- Inserts the summary as an
[!summary] callout above the link's line (optional timestamp prefix) — the same format batch mode uses
- Settings:
- Provider (Gemini/OpenAI/Claude)
- Separate settings blocks for Summary, Gemini, OpenAI, and Claude
- Gemini API key + model
- OpenAI API key + model
- Claude API key + model
- Fetch mode (auto / provider-native / browser session) and the auth-gated host list
- Gemini model presets:
gemini-3.5-flash, gemini-3.1-flash-lite (with free-tier quota notes)
- OpenAI model presets:
gpt-5.4-mini, chat-latest (GPT-5.5 Instant)
- Claude model presets:
claude-sonnet-4-6, claude-haiku-4-5-20251001
- Summary length range (characters), format like
200-600 (minimum 200)
- Private-network URL policy toggle (advanced)
- Request timeout (ms), range
5000-120000
- One-click clear stored API keys (and command:
clear-api-keys)
- Custom prompt (optional)
- Include timestamp
- Generate title and tags in batch runs (default on)
- Auto-summarize new inbox notes (default on) — auto-ingest link notes created in, or found at startup in, the inbox folder
- Inbox folder watched for auto-ingest (vault-relative, default
_inbox)
- Notices + clean errors for:
- no URL found
- invalid URL
- blocked private-network URL
- provider request timeout
- provider request failure (with real HTTP status mapping: invalid key, rate limit, exhausted quota, server error)
- unsupported/unreadable page
- auth-gated page that needs a browser login
- no active editor
Build
- Install dependencies:
npm install
- Build once:
npm run build
- Or watch during development:
npm run dev
Pre-submit Checklist
Run this before tagging a release or updating your Obsidian Community Plugins PR:
npm run preflight
This runs:
- Type check (
npm run check)
- Obsidian lint guardrails (
npm run lint:obsidian)
- Production build (
npm run build)
If your submission PR in obsidianmd/obsidian-releases references this plugin, keep the PR body Repo URL aligned with the current repository:
https://github.com/laroy-sh/obsidian-ai-link-summarizer
Install In Obsidian
Build the plugin so main.js exists.
Copy these files to your vault plugin folder:
manifest.json
main.js
styles.css (empty here, but included for compatibility)
Target folder:
<your-vault>/.obsidian/plugins/ai-link-summarizer/
In Obsidian:
- Settings -> Community plugins
- Enable AI Link Summarizer
- Open plugin settings and set provider + API key + model
The plugin registers the official workspace event:
this.registerEvent(
this.app.workspace.on("editor-menu", (menu, editor) => {
// ...
})
);
When you right-click in an editor, Obsidian provides the current menu and editor.
The plugin extracts a URL from the selection or link under cursor. If found, it adds Summarize link to that menu.
Security Notes
- The plugin sends only the target URL and your prompt settings to the selected provider.
- API keys are stored locally in Obsidian plugin data and are not encrypted by this plugin.
- Private-network URLs (
localhost, *.local, and private/link-local IPs) are blocked by default.
- You can clear all stored API keys from plugin settings or via the command Clear stored API keys.
- Non-overridable prompt constraints are enforced (single paragraph, full sentence ending, configured length range, no secrets disclosure).
Known Limitations
- Model output is probabilistic and may be inaccurate or incomplete.
- The plugin inserts plain text only; it does not execute returned code or commands.
Releases (GitHub Actions)
Pushing a version tag like 0.3.2 triggers a workflow that runs a security audit, builds the plugin, and uploads release assets for that version:
main.js
manifest.json
versions.json
styles.css
obsidian-ai-link-summarizer-<version>.zip
To publish:
git tag <version>
git push origin <version>
Install From GitHub Release
- Open the GitHub Release for your version tag.
- Download either:
- the zip (
obsidian-ai-link-summarizer-<version>.zip), or
- the individual files (
main.js, manifest.json, styles.css, versions.json)
- Extract/copy into:
<your-vault>/.obsidian/plugins/ai-link-summarizer/
- Reload/enable the plugin in Obsidian.