Extend Silent Send to intercept API requests on all major AI chat services. Each service has different API shapes: - ChatGPT: /backend-api/conversation with content.parts arrays - Grok: GraphQL + /2/grok/add_response with message field - Gemini: form-encoded f.req with nested arrays (+ generateContent) - OpenWebUI: /api/chat and /ollama/api/chat (self-hosted) All services share the same substitution pipeline. Manifests updated for both Chrome and Firefox with host_permissions for all domains. OpenWebUI supported via localhost/127.0.0.1 for self-hosted instances. https://claude.ai/code/session_01Dvgwe7XMoSxnWXkih8p1Cw
4.9 KiB
4.9 KiB
Silent Send
A browser extension (Chrome + Firefox) that intercepts personal information and substitutes it with user-defined replacements before sending to AI services.
Supported services
| Service | Domains |
|---|---|
| Claude | claude.ai, claude.ai/code |
| ChatGPT | chatgpt.com, chat.openai.com |
| Grok | grok.x.ai, x.com/i/grok |
| Gemini | gemini.google.com |
| OpenWebUI | localhost, 127.0.0.1 (self-hosted) |
How it works
- You fill in your Identity — name, email, username, computer name, phone
- Smart patterns auto-catch variations —
jsmith@macbook-pro,John's,/home/jsmith,555.123.4567 - You type normally — you see your real text while composing
- On send, it swaps — the extension intercepts the API request and replaces real values with substitutes
- Badge shows count — the extension icon shows how many substitutions were made
- Reveal mode — optionally translates Claude's responses back to your real data
Smart pattern examples
| You type | What gets sent |
|---|---|
jsmith@macbook-pro |
ademo@mycomputer |
anyone@gmail.com |
anon@example.com (catch-all) |
John Smith |
Alex Demo |
Smith, John |
Demo, Alex |
John's code |
Alex's code |
/home/jsmith/project |
/home/ademo/project |
~jsmith |
~ademo |
C:\Users\jsmith |
C:\Users\ademo |
(555) 123-4567 |
(555) 000-0000 |
555.123.4567 |
(555) 000-0000 |
macbook-pro |
mycomputer |
How to verify it's working
- Badge count on the extension icon shows substitutions per page
- Activity tab in the popup shows a timestamped log of every substitution
- Test tab in the popup lets you type text and see the before/after diff live
- Reveal mode (eye icon) toggles showing real vs substitute data in responses
- Browser DevTools → Console shows
[Silent Send] Substituted N value(s)messages
Installation
Chrome (Developer Mode)
- Clone this repo
- Run
./build.sh chrome(or just use the root directory directly) - Open
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked → select
dist/chrome/(or root dir) - Navigate to claude.ai — the extension is active
Firefox (signed, persistent)
Firefox requires extensions to be signed. Mozilla provides free self-hosted signing — no store listing needed.
Step 1: Get your Mozilla API credentials
- Go to https://addons.mozilla.org/developers/addon/api/key/
- Sign in with a Firefox account (create one free if you don't have one)
- On that page you'll see two values:
- JWT issuer — looks like
user:12345678:901 - JWT secret — a long alphanumeric string
- JWT issuer — looks like
- These are your API key and secret
Step 2: Configure and sign
# Install dependencies
npm install
# Copy the env template and fill in your credentials
cp .env.example .env
Edit .env with the values from step 1:
WEB_EXT_API_KEY="user:12345678:901"
WEB_EXT_API_SECRET="your-jwt-secret-here"
Then build and sign:
source .env && npm run sign:firefox
This produces a signed .xpi file in dist/firefox-signed/.
Step 3: Install the signed extension
- Drag the
.xpifile into any Firefox window, or - Firefox menu → File → Open File → select the
.xpi - Click "Add" when prompted
The signed .xpi is permanent — it survives browser restarts, updates, everything. No store listing, no review process, no fees.
Firefox (temporary, for development)
npm install && npm run run:firefox
Opens Firefox with the extension pre-loaded. Auto-reloads on file changes. Resets when Firefox closes.
Architecture
manifest.json — Chrome extension manifest (Manifest V3)
manifest.firefox.json — Firefox variant (adds gecko ID for signing)
build.sh — Copies the right manifest to dist/{chrome,firefox}/
src/
background/
service-worker.js — Badge management, logging coordination
content/
injector.js — Content script (isolated world) — loads config, bridges messaging
content.js — Page script (main world) — hooks fetch(), does substitution
content.css — Visual indicators (highlights, reveals)
popup/
popup.html/css/js — Quick access: identity, mappings, activity, test mode
options/
options.html/css/js — Full mapping management, import/export, settings
lib/
substitution-engine.js — Core explicit find/replace logic
smart-patterns.js — Auto-detection of emails, names, usernames, hostnames, phones, paths
storage.js — Browser storage wrapper
browser-polyfill.js — Chrome/Firefox API compatibility
Privacy
- All data stays local in browser storage
- No external servers, no telemetry, no analytics
- The extension only activates on claude.ai
- Your real identity data never leaves your machine