A browser extension that lets you summarize any webpage and ask questions using AI.
JavaScript 81%
CSS 9%
HTML 9%
Shell <1%

README.md

Lede — page summarizer & chat (WIP) #

A browser extension for Chrome and Firefox that lets you ask questions and summarize any webpage using AI (using Ollama or any OpenAI-compatible API). Works best with the GPT-OSS-20b model.

In Beta. Not yet in the Chrome Web Store or Firefox Addons.

Features #

  • 📄 One-Click Summaries - Summarize page content efficiently
  • 🤖 Follow Up Questions - Ask questions about the current webpage and summary
  • 🔌 OpenAI-Compatible - Works with Ollama, OpenAI, Groq, and LM Studio
  • ⚙️ Configurable - Choose your own model and API endpoint
  • 🔒 Privacy-first - Keep summaries local with Ollama, or use a cloud provider when you choose one.
  • ⌨️ Quick access - Keyboard shortcut of Ctrl/Cmd+Shift+U, use the right click menu, or click the extension icon.

About #

Made to solve a very simple problem I had as a user of the Helium web browser.

Installation (in dev mode) #

Chrome #

  1. Open Chrome and navigate to chrome://extensions/
  2. Enable Developer mode (toggle in top right)
  3. Click Load unpacked
  4. Select the webai-summarizer folder
  5. The extension icon should appear in your toolbar
  6. Optionally set up the keyboard shortcut at chrome://extensions/shortcuts

Firefox #

  1. Open Firefox and navigate to about:debugging#/runtime/this-firefox
  2. Click Load Temporary Add-on
  3. Select the manifest.json file in the webai-summarizer folder
  4. The extension icon should appear in your toolbar

Note: Firefox requires you to manually enable the keyboard shortcut:

  1. Type about:addons in the address bar
  2. Click the gear icon (⚙️) → Manage Extension Shortcuts

TODO #

Build for Specific Browser #

If needed, you can build for a specific browser:

# For Chrome
./build.sh chrome

# For Firefox
./build.sh firefox

Usage #

  1. Navigate to any webpage
  2. Click the extension icon in your toolbar, or press Ctrl/Cmd+Shift+U
  3. Click "Summarize Page" for an instant summary, or
  4. Type a question about the page content and press Enter

API Mode Explained #

Ollama Native Mode #

  • Uses Ollama's native /api/generate endpoint
  • Works out of the box if Ollama is installed
  • Recommended for local Ollama installations
  • Base URL should NOT include /v1

OpenAI-Compatible Mode #

  • Uses the /v1/chat/completions endpoint
  • Required for OpenAI, Groq, and other cloud providers
  • Can work with Ollama if you set the OPENAI_API_BASE environment variable
  • Base URL MUST include /v1 for Ollama compatibility mode

Privacy Notes #

  • In Ollama Native mode, your content stays on your machine (local model/server).
  • In OpenAI-compatible mode, page content is sent to the provider endpoint you configure.
  • The extension now extracts page text on-demand when you trigger summarize/chat, rather than running a persistent content script on all pages.

Troubleshooting #

"Cannot connect to localhost:11434" #

  1. Make sure Ollama is running: ollama serve
  2. Check that you pulled the model: ollama list
  3. If using Ollama, make sure your URL doesn't have /v1 in Native mode
  4. Check browser console for detailed error messages

"HTTP 403" or "HTTP 405" #

This means the API endpoint is wrong. Try:

  1. Switch API Mode from settings
  2. For Ollama Native: use http://localhost:11434 (no /v1)
  3. For OpenAI mode: use http://localhost:11434/v1 (with /v1)

File Structure #

webai-summarizer/
├── manifest.json            # Extension configuration (active)
├── manifest-chrome.json    # Chrome-specific manifest
├── manifest-firefox.json    # Firefox-specific manifest
├── build.sh                # Build script for browser switching
├── BROWSER_SUPPORT.md      # Browser compatibility documentation
├── popup/
│   ├── popup.html         # Chat interface
│   ├── popup.css          # Styling
│   ├── popup.js           # Popup logic
│   └── marked.min.js      # Markdown parser
├── scripts/
│   ├── content.js         # Webpage text extraction
│   └── background.js      # API communication
├── options/
│   ├── options.html       # Settings page
│   ├── options.css
│   └── options.js
└── icons/
    ├── icon16.png
    ├── icon32.png
    ├── icon48.png
    └── icon128.png