The page, distilled.
A small, elegant Chrome side-panel extension that turns the webpage you are reading into a clear brief—with your own OpenRouter key and no Brevilo backend.
Brevilo stays beside the page instead of taking you away from it. Click the toolbar icon, choose the depth, and get a focused summary you can copy immediately.
webpage → Brevilo toolbar icon → Chrome side panel → your model → clear brief
| Read where you are | Bring your own model | Keep the setup small |
|---|---|---|
| Summaries live in Chrome's side panel. | Start with OpenRouter's free-model router or enter another OpenRouter model slug. | No account, backend, analytics, build step, or dependency install. |
The extension currently runs from source. It is not yet published in the Chrome Web Store.
Download this repository as a ZIP and unzip it, or clone it with Git. Keep the resulting brevilo folder somewhere you will not delete or move.
The folder you load into Chrome must directly contain manifest.json:
brevilo/
├── manifest.json ← Chrome should see this file
├── assets/
└── src/
- Open
chrome://extensionsin Chrome. - Turn on Developer mode in the top-right corner.
- Click Load unpacked.
- Select the top-level
brevilofolder—the one containingmanifest.json. - Open Chrome's Extensions menu (the puzzle-piece icon) and pin Brevilo.
That is the entire installation. There is no npm install, compile step, or .env file.
Brevilo needs an OpenRouter API key even when using the free-model router.
- Create a key in OpenRouter's key settings. A separate key with a sensible limit is recommended.
- Open any regular
http://orhttps://webpage and click the Brevilo toolbar icon. - In the side panel, click Connect OpenRouter. You can also use the gear icon to open Settings.
- Paste the key into API key.
- Leave Model as
openrouter/freeto start, or enter another OpenRouter model slug. - Click Save & test connection.
openrouter/free asks OpenRouter to route the request to an available free model. The selected model, availability, and rate limits are controlled by OpenRouter and can change.
Note
The key belongs in Brevilo's Settings UI—not in .env. Chrome extensions cannot securely read your shell environment at runtime, and bundling an environment value would expose the same plaintext key inside the extension.
- Open a regular article, documentation page, or other
http://orhttps://page. - Click the Brevilo toolbar icon. This captures the current page and opens the side panel.
- Pick Quick, Standard, or Deep.
- Click Summarize this page.
- Use Copy to put the finished brief on your clipboard.
Important
Click the toolbar icon again after you navigate to another page or reload the current one. That click is what gives Brevilo temporary access to the active page; the side-panel button alone cannot request that Chrome permission.
Brevilo is local-first, not offline: its interface and configuration live in your browser, while summary requests use the model provider you configure.
- Clicking the toolbar icon extracts readable text from that one active tab.
- Nothing is sent to OpenRouter until you click Summarize this page.
- The request includes the page title, URL, readable text, and your summary preferences.
- Your key and preferences stay in
chrome.storage.localon the current Chrome profile and are not synced by Brevilo. - Brevilo has no backend, analytics, telemetry, user account, remote code, or permanent access to every website.
The API key is browser-local, but it is not protected by a hardware vault. Someone who controls your computer or Chrome profile may be able to recover it. Use a dedicated key with a spending limit, review the provider's data policy, and avoid summarizing sensitive pages. See PRIVACY.md for the concise policy.
| Permission | Purpose |
|---|---|
activeTab |
Temporarily access the current tab only after you click Brevilo. |
scripting |
Run the bundled readable-text extractor in that tab. |
sidePanel |
Show the summary UI beside the page. |
storage |
Save your provider settings on this Chrome profile. |
https://openrouter.ai/* |
Let Brevilo's service worker call OpenRouter over HTTPS. |
The side panel is open, but Chrome has not granted Brevilo access to this exact tab since its latest navigation.
- Keep the page you want to summarize active.
- Click the pinned Brevilo toolbar icon once.
- Wait for the page title to appear in the side panel.
- Click Summarize this page.
Repeat this after navigating or reloading.
Chrome blocks extensions from privileged pages, including chrome:// pages, the Chrome Web Store, New Tab, and other extension pages. Open a normal public http:// or https:// page and click the toolbar icon there. Pages that place most content inside inaccessible frames may also provide too little readable text.
- Check that the key begins with the expected OpenRouter prefix and has not been revoked.
- Confirm that
openrouter/freeis still selected before testing a custom model. - OpenRouter's free routes can be rate-limited or temporarily unavailable; try again later or choose another model.
- Reopen Settings from the side-panel gear and click Save & test connection again.
Return to chrome://extensions and click the Reload button on Brevilo's card. Refresh the webpage too, then click the toolbar icon again.
Brevilo is deliberately dependency-free: the extension uses bundled JavaScript, HTML, and CSS and follows Manifest V3's remote-code restrictions. Chrome 116 or newer is required. Node.js is optional unless you want to run the checks or create a package.
npm test # unit tests for configuration and prompts
npm run check # validate the manifest and extension source
npm run package # create dist/brevilo-<version>.zipAfter editing source, reload Brevilo from chrome://extensions.
assets/icons/ extension artwork
src/background.js toolbar capture, trusted messages, provider calls
src/panel/ side-panel interface and safe summary rendering
src/options/ local provider and summary preferences
src/providers/ model-provider adapters
src/shared/ configuration, extraction, messages, and prompts
scripts/ validation and packaging
tests/ Node test suite
manifest.json Chrome Manifest V3 definition
The provider boundary is intentionally small so OpenAI, Gemini, Anthropic, or a local OpenAI-compatible endpoint can be added without rewriting extraction or the UI.
- Add the provider's public metadata to
src/shared/config.js. - Implement
summarizeandtestinsrc/providers/<provider>.js. - Register the adapter in
src/providers/index.js. - Add only the provider's required HTTPS origin to
host_permissionsand the content security policy. - Add provider-specific settings only when the shared key/model fields are insufficient.
- Load an unpacked extension
- Chrome Manifest V3
- Chrome Side Panel API
- Chrome
activeTabpermission - Chrome Scripting API
- Chrome Storage API
- Chrome extension security guidance
- OpenRouter free-model router
- OpenRouter quickstart
Issues and pull requests are welcome. Keep changes local-first, request the narrowest Chrome permissions possible, avoid remote executable code, and include a short manual test note for user-facing changes.
