Security & privacy

Safe by architecture, private by default

BumbleBee holds your full résumé, address, phone, email and complete application history — and it reads attacker-controlled job-page content. So it is built to contain untrusted code and keep your data on your device. Here is exactly how.

The layered sandbox

The side panel — the surface that renders all your PII and runs the React UI and every npm dependency — is split across three frames. Only a tiny first-party Host touches privilege; the UI reaches it through a single, validated capability channel.

Trusted Host · has privilege

sidepanel.html — the Host page

Renders no UI. Owns chrome.*, the AES-GCM key, and the one allowed dependency (Dexie/IndexedDB). It hands the sandbox a single MessagePort and nothing else.

▼ one MessagePort (capability channel)
Sandboxed · zero-dep broker

outer.html — the broker

An opaque-origin frame with no dependencies. It whitelists which inner app may load and relays the capability port — it never touches the data flowing through it.

▼ relays the same port
Sandboxed app · no authority

sidepanel-app.html — the UI

The React app and every npm dependency run here, in an opaque origin with no key, no database, no network and no chrome.*. It can only invoke the closed capability set — and nothing more.

A compromised dependency in the UI can request exactly the audited operations (db, storage, messaging) brokered over that port — it can never read your key, open your database, or reach the network directly. Enforced in code and guarded by tests.

The security model

Six principles, enforced in code — every claim below is implemented and unit-tested.

🧪

Privilege separation

The entire data-rich UI and every library run sandboxed; only a minimal first-party Host touches chrome.*, storage and the key — reached through a validated capability channel.

🔐

Encrypted at rest

Résumé, employment history, address, phone, cover letters and your application log are AES-GCM encrypted — PII per-field, so only the needed value is ever decrypted.

Human-in-the-loop

The default level is Manual: autofill only. BumbleBee never clicks Next or Submit, and never attaches your résumé file, without an explicit confirmation.

🧱

Hardened CSP

The artifact sandbox is locked to connect-src 'none' with form-action 'none' and object-src 'none' — no network, navigation or plugin exfiltration path.

🧹

Prompt-injection defense

Hidden/invisible DOM is stripped before any model sees it, and prompts frame page text as untrusted data — never instructions.

📵

No backend

There is no BumbleBee server. The only network calls are the model requests you trigger, made from the trusted background worker.

Controls, in detail

Grouped by area. ✅ implemented & tested.

BumbleBee is open about its trade-offs. The popup and résumé-editor pages remain non-sandboxed first-party extension pages today; the high-value side-panel surface is the one migrated behind the capability broker.