A Chrome (Manifest V3) side-panel extension that reads the web page you're on and helps you understand it, brainstorm ideas, and write code. It supports several AI backends — you pick the provider and model:
- GitHub Models — free, rate-limited catalog (GPT, Llama, DeepSeek, Phi, Mistral…).
- Google Gemini — free tier (Gemini Flash/Pro) via a Google AI Studio API key.
- Groq — free tier, very fast (Llama, DeepSeek-distill, Qwen, GPT-OSS, Gemma).
- OpenRouter — one key unlocks many models, including free (
:free) variants. - Cerebras — free tier, extremely fast inference (Llama, Qwen, GPT-OSS).
- Mistral — free tier (Mistral, Codestral, and open models).
- Anthropic — Claude models (Sonnet, Opus, Haiku) via your Anthropic API key (paid).
- OpenAI — GPT models via your OpenAI API key (paid).
This is a personal-use browser extension. It is not a "GitHub Copilot Extension" (those run inside Copilot Chat). It talks directly to each provider's public API using your own credentials.
Why Claude isn't in the GitHub Models list: GitHub Models is Azure-backed and its catalog has no Anthropic models. To use Claude, switch the provider to Anthropic and supply an Anthropic API key.
- 📄 Reads the current tab's title, URL, selected text, and visible content on demand.
- 🧠 Sends that context plus your question to the chat model you selected.
- 💬 Streams the answer into a side panel, with Markdown + copy buttons on code blocks.
- 📋 Copies complete responses or individual code blocks with one click.
- ⚡ Quick actions: Summarize, Suggest ideas, Explain selection.
- 🔀 Switch provider (GitHub Models / Gemini / Groq / OpenRouter / Cerebras / Mistral / Anthropic / OpenAI) and model any time.
- 🔐 Keeps new API keys in memory for the browser session unless you explicitly remember them.
- 🛡️ Uses temporary
activeTabaccess instead of permanent access to every website.
- Google Chrome 116+ (needs the Side Panel API). Recent Edge also works.
- A credential for at least one provider:
- GitHub Models: a fine-grained GitHub token with the
models: readpermission. - Google Gemini: a free API key from https://aistudio.google.com/apikey.
- Groq: a free API key from https://console.groq.com/keys.
- OpenRouter: a free API key from https://openrouter.ai/keys.
- Cerebras: a free API key from https://cloud.cerebras.ai.
- Mistral: a free API key from https://console.mistral.ai/api-keys.
- Anthropic: an API key from https://console.anthropic.com/settings/keys (paid).
- OpenAI: an API key from https://platform.openai.com/api-keys (paid).
- GitHub Models: a fine-grained GitHub token with the
GitHub Models (free, rate-limited)
- Go to https://github.com/settings/personal-access-tokens/new (fine-grained token).
- Give it a name and an expiry.
- Under Permissions → Account permissions, set Models to Read-only. (No repository access is required.)
- Generate the token and copy it (starts with
github_pat_…).
The free tier is rate-limited — a 429 means wait and retry, or enable paid usage.
Google Gemini (free tier)
- Go to https://aistudio.google.com/apikey and sign in with your Google account.
- Accept the terms if prompted — AI Studio creates a default Google Cloud project for you.
- Click Create API key (choose the default project), then copy the key.
- Keys created now are auth keys, already restricted to the Gemini API — good.
Note: old unrestricted "standard" keys stopped working on June 19, 2026, so create a fresh key rather than reusing an old one. The Gemini free tier is rate-limited (per-minute and per-day) — a
429means wait a bit or switch models.
More free tiers (all OpenAI-compatible, sign in and create a key):
- Groq — https://console.groq.com/keys (key starts with
gsk_…). Free and very fast. - OpenRouter — https://openrouter.ai/keys (key starts with
sk-or-…). The model list defaults to free models (their ids end in:free). - Cerebras — https://cloud.cerebras.ai (key starts with
csk-…). Free and very fast. - Mistral — https://console.mistral.ai/api-keys. Enable the free "Experiment" plan.
All of these have rate-limited free tiers — a 429 means wait or switch to a lighter model.
Anthropic (for Claude)
- Go to https://console.anthropic.com/settings/keys and create a key (
sk-ant-…). - Add billing/credits — Anthropic has no free API tier.
OpenAI
- Go to https://platform.openai.com/api-keys and create a key (
sk-…). - Add billing/credits.
- Open
chrome://extensions. - Turn on Developer mode (top-right).
- Click Load unpacked and select this project folder (the one containing
manifest.json). - Pin the extension, then click its toolbar icon to open the side panel.
- In the side panel, open ⚙ Settings.
- Choose a Provider (GitHub Models / Gemini / Groq / OpenRouter / Cerebras / Mistral / Anthropic / OpenAI).
- Paste that provider's credential. Leave Remember this key off for session-only storage, or enable it to keep the key after Chrome closes.
- Click Load models, pick a model, then Save settings.
- Ask away. Toggle Read page to include/exclude the current page as context.
Each provider keeps its own credential, model list, and selection, so you can switch between them freely without re-entering anything.
- GitHub Models, OpenAI, Gemini, Groq, OpenRouter, Cerebras & Mistral use the OpenAI-style chat API:
- Catalog:
GET .../catalog/models(GitHub),GET .../v1/models(OpenAI), orGET .../v1beta/openai/models(Gemini). - Inference:
POST .../chat/completions, streamed via server-sent events. - Auth:
Authorization: Bearer <token-or-key>. - Gemini uses Google's OpenAI-compatible endpoint at
https://generativelanguage.googleapis.com/v1beta/openai/. - Groq, OpenRouter, Cerebras & Mistral use their OpenAI-compatible base URLs
(
api.groq.com/openai/v1,openrouter.ai/api/v1,api.cerebras.ai/v1,api.mistral.ai/v1). OpenRouter's list is filtered to free (:free) models.
- Catalog:
- Anthropic uses the Messages API:
- Catalog:
GET https://api.anthropic.com/v1/models. - Inference:
POST https://api.anthropic.com/v1/messages(SSEtext_deltaevents). - Auth:
x-api-key+anthropic-versionheaders, plusanthropic-dangerous-direct-browser-access: true(required by Anthropic to allow direct browser/extension calls).
- Catalog:
- Page reading: when Read page is on, the extension uses Chrome's temporary
activeTabpermission and injects a small extraction function into that tab — only when you send a message. It does not request permanent access to every website.
- New credentials are kept in
chrome.storage.sessionby default and disappear when Chrome closes. If you enable Remember this key, that provider's key is stored inchrome.storage.local(this Chrome profile only, unencrypted). Existing keys from an older version remain remembered until you clear them or turn Remember off and save. - Provider/model settings are stored locally. Conversations stay in the side panel's memory and are not saved after it closes.
- Page content leaves your browser only when you send a message with "Read page" on, and it goes to the API of the provider you selected (whichever provider's key you're using). Review a page before sending sensitive content.
- Page text is truncated to ~12,000 characters per request (configurable in
sidepanel.jsviaMAX_PAGE_CHARS). - Browser pages (
chrome://, the Chrome Web Store, etc.) can't be read — that's a Chrome restriction.
- System prompt: edit it in ⚙ Settings to change the assistant's behavior.
- Context size / model filter: tweak
MAX_PAGE_CHARSand the catalog filter insidepanel.js. - Model list: click Load models again to refresh the cached catalog.
This project needs no build step: the files in the repository are the extension. A clean
Copilot Page Assistant - GitHub Upload folder can therefore be uploaded directly with
GitHub's web interface:
- Create a new GitHub repository, for example
copilot-page-assistant. - On the empty repository page, choose uploading an existing file. In an existing repository, choose Add file → Upload files.
- Open the clean upload folder, press
Ctrl+Ainside it, and drag the selected contents onto GitHub. - Confirm that
.gitattributes,.gitignore,README.md,manifest.json, the three side-panel files,background.js,icons,PRIVACY.md, andSECURITY.mdappear. - Enter a commit message such as
Add Copilot Page Assistantand choose Commit changes.
Drag the folder's contents, not a ZIP file, if you want GitHub to display the source tree normally. Never add real API keys, tokens, exported Chrome profile data, or a packed extension private key. If a credential is ever committed, revoke it immediately and remove it from Git history; deleting only the newest copy is not sufficient.
| Symptom | Fix |
|---|---|
401 Unauthorized |
Wrong/expired credential (GitHub token needs Models: Read). |
403 Forbidden |
Credential lacks access, or an org/policy is blocking the provider. |
404 Not Found |
Re-load models and reselect; the model id may have changed. |
429 Rate limited |
GitHub/Gemini free-tier limit, or you're out of Anthropic/OpenAI credits. Wait, or pick a lighter model (e.g. a Flash/mini). |
| No Claude in the list | Switch Provider to Anthropic — Claude isn't in GitHub Models. |
| Gemini key rejected | Create a new key at AI Studio — old unrestricted "standard" keys stopped working in June 2026. |
| Anthropic call blocked | Ensure the key is valid; the extension sends the required browser-access header automatically. |
| "Can't read this page" | Browser/Web Store pages are blocked. Otherwise, click the extension toolbar icon on that tab to grant temporary access, then retry. |
| Side panel won't open | Reload the extension at chrome://extensions. |
manifest.json MV3 manifest (side panel, scripting, storage)
background.js Opens the side panel on toolbar click
sidepanel.html UI shell
sidepanel.css Styling (light/dark aware)
sidepanel.js Settings, catalog, page reading, streaming chat, Markdown
icons/ 16 / 32 / 48 / 128 px icons
.gitignore Keeps secrets and local cruft out of git
.gitattributes Normalizes line endings
PRIVACY.md Data handling and Chrome permission details
SECURITY.md Vulnerability reporting and key-safety guidance
This repository contains no credentials. Read PRIVACY.md for data handling details and SECURITY.md for safe vulnerability reporting.