Claude 34f1131c23 feat: add hostname substitution in user@host patterns
jsmith@macbook-pro now becomes ademo@mycomputer when both username
and hostname are configured in the Identity tab. Hostnames are also
caught standalone (e.g. just "macbook-pro" in text).

Also rewrites README with detailed step-by-step Mozilla API key
setup instructions for Firefox signing.

https://claude.ai/code/session_01Dvgwe7XMoSxnWXkih8p1Cw
2026-03-26 00:15:26 +00:00

Silent Send

A browser extension (Chrome + Firefox) that intercepts personal information and substitutes it with user-defined replacements before sending to Claude.ai.

How it works

  1. You fill in your Identity — name, email, username, computer name, phone
  2. Smart patterns auto-catch variationsjsmith@macbook-pro, John's, /home/jsmith, 555.123.4567
  3. You type normally — you see your real text while composing
  4. On send, it swaps — the extension intercepts the API request and replaces real values with substitutes
  5. Badge shows count — the extension icon shows how many substitutions were made
  6. 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)

  1. Clone this repo
  2. Run ./build.sh chrome (or just use the root directory directly)
  3. Open chrome://extensions/
  4. Enable Developer mode (top right)
  5. Click Load unpacked → select dist/chrome/ (or root dir)
  6. 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

  1. Go to https://addons.mozilla.org/developers/addon/api/key/
  2. Sign in with a Firefox account (create one free if you don't have one)
  3. On that page you'll see two values:
    • JWT issuer — looks like user:12345678:901
    • JWT secret — a long alphanumeric string
  4. 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 .xpi file 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
S
Description
Mirror of outis1one/silent-send from GitHub
Readme
688 KiB
Languages
JavaScript 82.2%
HTML 9.2%
Shell 4.5%
CSS 4.1%