storage.sync rejects any item over 8192 bytes, and the options page writes every field in one set(). An oversized template therefore made every later save fail, including changes to unrelated settings, with only a brief "Could not save settings". Cap the template at 1,000 UTF-16 units: maxlength on the input, and mergeSettings falls back to the default for a longer stored value, as it does for other out-of-range settings. Even a template of pasted control characters (six bytes each once JSON-escaped) stays under the quota; a test pins that arithmetic and another ties the HTML maxlength to the constant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
185 lines
8.9 KiB
Markdown
185 lines
8.9 KiB
Markdown
# Search with ChatGPT Powered by OpenAI Firefox Extension
|
||
|
||
This extension adds ChatGPT as a configurable Firefox search provider. Type
|
||
`gpt <query>` in the address bar to open the query in a new ChatGPT session.
|
||
It uses no API key, custom server, or intermediary handler.
|
||
|
||
**ChatGPT may require you to sign in. If your prompt is not sent automatically,
|
||
press Enter or click Send in ChatGPT.**
|
||
|
||
This is an unofficial extension provided by Zavage Software Inc.
|
||
|
||
- [Firefox Add-ons listing](https://addons.mozilla.org/en-US/firefox/addon/search-with-chatgpt/)
|
||
- [Project website](https://zavage-software.com/portfolio/search-with-ChatGPT)
|
||
- [Project repository](https://git-repos.zavage.net/zavage-software/search-with-chatgpt-powered-by-openai-extension)
|
||
- [Feedback or report a bug](https://zavage-software.com/contact-us)
|
||
- [Zavage Software](https://zavage-software.com)
|
||
|
||
See `LICENSE.txt` for licensing terms.
|
||
|
||
## Ask about selected text
|
||
|
||
Highlight text on a webpage, right-click it, and choose **Ask ChatGPT**.
|
||
ChatGPT opens with your selection. Try selecting a paragraph you want explained
|
||
or translated.
|
||
|
||
You can also press **Alt+Shift+G** to use the current selection. With nothing
|
||
selected, the shortcut opens a blank chat. Change the shortcut under
|
||
**Manage Extension Shortcuts** in the `about:addons` gear menu.
|
||
|
||
Click the extension’s **Ask ChatGPT** toolbar button to use selected text or,
|
||
with nothing selected, open a blank chat. On pages Firefox does not allow
|
||
extensions to read, the button opens a blank chat. You can pin the button to
|
||
the toolbar from Firefox’s extensions menu. It uses your saved prompt and
|
||
tab/window preferences, and works even when the context menu is Off.
|
||
|
||
The options panel shows your currently configured shortcut and refreshes when
|
||
it changes or you return to the panel. If you remove it, the panel shows
|
||
“No keyboard shortcut assigned”. Its **Change keyboard shortcut** button opens
|
||
Firefox’s shortcut editor when supported; otherwise follow the menu path above.
|
||
**Restore defaults** does not change your keyboard shortcut.
|
||
|
||
To customize the prompt, set **Prompt template** to something like
|
||
`Explain simply: {query}` or `Translate into Spanish: {query}`. The Simple menu action, Ask normally, toolbar button, and shortcut use your template.
|
||
Other advanced actions use their own dedicated prompts.
|
||
|
||
## Search keyword and default engine
|
||
|
||
Open Firefox’s **Settings → Search**, or paste `about:preferences#search` into
|
||
the address bar. Under **Search Shortcuts**, edit ChatGPT’s keyword to replace
|
||
`gpt` with your preferred prefix. Under **Default Search Engine**, choose
|
||
ChatGPT to search without a prefix, or choose your previous engine to switch
|
||
back. See [Firefox’s search settings guide](https://support.mozilla.org/en-US/kb/change-your-default-search-settings-firefox)
|
||
for illustrated instructions.
|
||
|
||
These are Firefox settings; the extension’s **Restore defaults** button does
|
||
not change them.
|
||
|
||
## Options
|
||
|
||
Open `about:addons`, select this extension, and choose the **Options** tab
|
||
(**Preferences** on macOS and Linux). Available settings:
|
||
|
||
- **Context menu** — **Simple** (default) keeps the direct selection action;
|
||
**Advanced** offers contextual presets; **Off** hides the menu. The toolbar
|
||
button and keyboard shortcut work in every mode. Existing enabled/disabled preferences migrate
|
||
to Simple/Off. Changes apply without restarting Firefox.
|
||
- **Show Translate in advanced menu** — off by default. When enabled, choose
|
||
**Ask each time** for a language dialog, or enter a **Preferred language**
|
||
to translate directly. An empty or invalid preferred language falls back to
|
||
asking. Enter continues; Escape or Cancel opens nothing.
|
||
- **Request a temporary chat** — asks ChatGPT not to save the conversation.
|
||
ChatGPT may not honour this; check its own indicator before relying on it.
|
||
- **Ask ChatGPT to use web search** — a hint to ChatGPT's interface, not a
|
||
guarantee.
|
||
- **Open in** — a new tab, a new background tab, or a new window.
|
||
- **Prompt template** — wraps your text, for example `Explain simply: {query}`.
|
||
Up to 1,000 characters.
|
||
|
||
Restore defaults resets extension preferences to Simple mode with translation
|
||
hidden; it does not change Firefox's search engine or shortcut settings.
|
||
|
||
In Advanced mode, selected text offers **Ask normally**, **Explain**,
|
||
**Summarize**, and **Debug code**. Translate appears only when enabled. The
|
||
extension does not try to detect code. A selected link uses selection actions;
|
||
without a selection, a link offers **Ask about this link** and **Review link
|
||
safety**. Page background offers **Ask about this page** and **Summarize this
|
||
page**. Link/page actions send only the URL. ChatGPT may be unable to access
|
||
its content, and a link review is not a guarantee of safety.
|
||
|
||
Long selections require confirmation before sending shortened text. Link URLs
|
||
are never shortened: unsupported schemes, embedded login credentials, and URLs
|
||
that cannot fit are rejected. The extension does not simulate submission; ChatGPT controls whether a URL
|
||
prompt is sent automatically or waits in the composer.
|
||
|
||
These settings apply to selecting text and choosing
|
||
**Ask ChatGPT** from the right-click menu, clicking the toolbar button, or pressing
|
||
<kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>G</kbd>. Rebind the shortcut under
|
||
**Manage Extension Shortcuts** in the Add-ons gear menu.
|
||
|
||
The `gpt <query>` address-bar search is unchanged and does not read these
|
||
settings.
|
||
|
||
The options panel, toolbar button, right-click item, and keyboard shortcut require
|
||
Firefox 112 or newer. On older versions the extension still installs and the
|
||
`gpt <query>` address-bar search still works; only these newer features are
|
||
inactive.
|
||
|
||
## Sending your prompt
|
||
|
||
The extension opens ChatGPT with the prompt in the URL. ChatGPT controls what
|
||
happens next: it may send the prompt automatically or leave it in the composer.
|
||
You may need to sign in before continuing. **If your prompt is not sent
|
||
automatically, press Enter or click Send in ChatGPT.**
|
||
|
||
If ChatGPT shows a verification error, try signing in and opening the prompt
|
||
again. Signing in has helped in testing, but does not guarantee automatic
|
||
submission.
|
||
|
||
The extension does not click Send, simulate Enter, or call ChatGPT's internal
|
||
conversation API. This behavior can vary with changes to ChatGPT itself.
|
||
|
||
## Browser Support
|
||
|
||
Firefox Desktop is the current development and release target. Chrome, Brave,
|
||
other Chromium browsers, and additional WebExtension platforms may be evaluated
|
||
after the Firefox feature set is more substantial; they are not current targets.
|
||
|
||
## Development
|
||
|
||
Install Node.js 22 or newer, Firefox, and the locked development dependencies:
|
||
|
||
```sh
|
||
npm ci
|
||
```
|
||
|
||
Available commands:
|
||
|
||
- `npm run dev` launches the extension in a temporary Firefox profile and
|
||
reloads it when files change.
|
||
- `npm run lint` validates the extension and treats warnings as errors.
|
||
- `npm run test:unit` runs the `node:test` unit tests over `test/`.
|
||
- `npm run build` creates
|
||
`web-ext-artifacts/search-with-chatgpt-firefox-<version>.zip`.
|
||
- `npm test` runs the same lint, unit test, and build checks used by Gitea
|
||
Actions.
|
||
|
||
The generated ZIP is unsigned. Use `npm run dev` for local testing; signing and
|
||
submission to Mozilla Add-ons remain a separate release step.
|
||
|
||
Before submitting a change, confirm that `gpt <query>` opens
|
||
`https://chatgpt.com?q=<query>`, the provider remains non-default, and it can be
|
||
configured in Firefox search settings.
|
||
|
||
## Privacy Policy
|
||
|
||
This extension has no server, no API key, and no intermediary. Nothing is
|
||
reported to Zavage Software.
|
||
|
||
- Your settings are stored in your own browser profile. If you use Firefox Sync
|
||
with **Add-ons** enabled, they sync end-to-end encrypted through your own
|
||
Mozilla account.
|
||
- Selection actions, the toolbar button, and the shortcut place your selected text in the ChatGPT
|
||
URL. Advanced link/page actions instead place the chosen link or current
|
||
page URL in the prompt. URLs may include private query parameters or fragments;
|
||
use those actions only for URLs you want to share with ChatGPT.
|
||
- The extension reads the selected text or relevant URL only when you invoke
|
||
the action. It does not extract full page text, read page titles, or open a
|
||
link itself for a safety check.
|
||
- Language and confirmation dialogs hold pending content in memory only, not
|
||
in settings sync or persistent storage. Canceling sends no prompt to ChatGPT.
|
||
Closing or restarting Firefox discards pending actions.
|
||
|
||
## Model selection
|
||
|
||
Model selection is not currently supported. We tested model URL hints while
|
||
signed in and signed out, but could not make them change the selected model.
|
||
Signed-out testing used Luna; signed-in testing stayed on GPT-5.6 Sol with
|
||
medium effort regardless of the requested model. We removed the model setting
|
||
rather than offer a control that did not work. Choose your model and thinking
|
||
effort in ChatGPT itself where available. Previously saved extension model
|
||
values are ignored.
|
||
|
||
Temporary chat did work in manual testing. Check ChatGPT's temporary-chat
|
||
indicator before sending; web-search hints remain unverified.
|