Shadow AI Browser Extension
How to install the RAIC browser extension, how it detects Shadow AI usage across your organization, what it observes, what it never captures, and how data flows back to the platform.
Install the Extension
Install on one machine first, sign in, and confirm detections appear in AI Discovery before rolling out more widely. Downloadable packages for every browser are available under Admin → Integrations → Browser Extension, which also shows every connected device and its installed version.
Chrome, Edge, Brave and other Chromium browsers
Open store listingAvailable in the Chrome Web Store — one-click install with automatic updates. This is the only browser with a live store listing today.
- Open the Chrome Web Store listing and click Add to Chrome.
- Sign in to your RAIC tenant in the same browser profile — the extension pairs itself automatically.
- Open the extension icon to confirm it shows your organization name.
Firefox
Manual install from the downloadable package; no store listing yet.
- Download and unzip the Firefox package.
- Open about:debugging#/runtime/this-firefox.
- Click Load Temporary Add-on… and select manifest.json.
- Click the extension icon, then Sign in to RAIC.
Safari (macOS, iOS, iPadOS)
App Store listing pending. The downloadable Safari package is App Store submission source, not an end-user install.
Each device authenticates with the same RAIC login (including SSO) — there are no API keys to distribute. Available on Professional and Enterprise plans.
Overview
The extension is a lightweight Manifest V3 background service that passively observes when users visit known AI tools (ChatGPT, Claude, Gemini, Microsoft Copilot, GitHub Copilot, and ~60 others) and forwards anonymized sightings to AI Discovery in RAIC.
It does not read page content, intercept network requests, inject scripts, or capture keystrokes. Detection is based purely on the browser's tab URL and page title.
Detection Approaches
- Tab URL & title observation — listens to
chrome.tabs.onUpdatedfor completed navigations. Only the hostname, path prefix, and tab title are read. - Cloud-delivered AI catalog — the canonical catalog lives in the platform and is fetched on install and every 24 hours. The bundled
ai-domains.jsholds only a three-entry bootstrap list for the window between install and the first fetch, so new vendors are added centrally without shipping a new extension build. - Hostname suffix matching — matches subdomains (e.g.
enterprise.openai.com). - Path-scoped matching — for general-purpose hosts, matches only specific paths (e.g.
github.com/copilot) to avoid false positives. - Signature ruleset — a published detection ruleset, refreshed daily with a version check, flags AI model traffic that is not in the curated catalog.
- Local buffering — events queue in
chrome.storage.local, capped at 500 entries to bound memory. - Periodic sync —
chrome.alarmstriggers a sync every 30 minutes plus a heartbeat for liveness. - Trusted enrollment — the RAIC web app pairs the extension via
externally_connectable, validated against a strict origin allowlist.
Permissions & Privacy
The extension requests the following permissions:
tabs— to read the active tab's URL and title on navigation.storage— to buffer pending sightings and store the device token.alarms— to schedule the periodic sync and refresh intervals.webRequest+<all_urls>— required only for optional API endpoint detection (see below). The listener exits immediately if your org has not enabled the feature.
Never captured: page DOM, form fields, prompts, responses, request/response bodies, request headers, query strings, cookies, localStorage of visited sites, or screen content.
API Endpoint Detection (Optional, Per-Org)
In addition to detecting AI tabs users open, the extension can optionally detect background calls made by other apps to known AI APIs (e.g. api.openai.com,api.anthropic.com,generativelanguage.googleapis.com). This catches Shadow AI embedded inside internal tools, IDE plugins, and SaaS apps that wouldn't surface as a tab visit.
Opt-in per organization. Default is off. Org Admins toggle it under Admin Panel → Org Settings → Browser Extension. When off, the webRequest listener exits immediately and no API URLs are observed.
When on, each match captures only: the AI API hostname/path, the calling app's hostname (page domain), the page title, and — for v1.2+ — the specific AI model identifier (e.g. anthropic.claude-3-5-sonnet-20241022-v2:0,gpt-4o-2024-08-06) extracted from the URL path (AWS Bedrock, Azure OpenAI/Foundry, Google Vertex/Gemini) or, for OpenAI/Anthropic Direct, the single JSON model field from the request body — no other body fields are inspected. Same 10-minute dedup window applies per (source_domain, api_domain, model_id) tuple, so model switches surface as separate detections. Detections appear in AI Discovery with an API Call badge, a Detected Model column, and a Called by: attribution.
Sync Behavior (Automatic vs. Manual)
The extension syncs automatically on its own schedule via chrome.alarms. The Sync now button in the popup is a manual override that now refreshes the latest catalog, org config, and approved-list cache before flushing detections.
- Detection sync — every 30 minutes. Sends the detections it has saved on the device to RAIC.
- Config refresh — every 6 hours. Polls
get-extension-configto refresh the org's API-detection toggle and tier eligibility. - Catalog refresh — every 24 hours. Pulls the latest published AI domain catalog from
get-ai-catalog. - Approved-list refresh — every 24 hours. Polls
get-org-approved-catalogfor warn-enabled state and approved catalog entry IDs. - On install / popup open. A silent reconnect runs immediately if the user is signed into RAIC in any tab.
- On RAIC sign-in. The web app fires a handshake event the extension picks up in real time.
- Manual "Sync now". Forces an immediate catalog/config/approved-list refresh and then flushes detections without waiting for the next scheduled refresh.
The device token persists in chrome.storage.local until it is revoked, expires from inactivity (90-day sliding window via last_seen_at), or the org's tier/status changes.
Architecture Flow
- User navigates to a tab in Chrome / Edge / Brave / Firefox.
- Extension background service receives the
onUpdatedevent. - Detector matches hostname / path against the AI catalog.
- Matched event is appended to the local buffer (capped at 500).
- Every 30 minutes, the alarm fires and POSTs queued events to the
shadow-ai-ingestendpoint with a device bearer token. - Pre-submission deduplication — before each sync, the buffer is collapsed so identical events post only once. Web visits are keyed by
(domain, title); API calls by(source_domain, api_domain, model_id). Earliest detected_at wins. This protects against tab-reload storms and service-worker restarts that would otherwise drop the in-memory 10-min API dedup map. - RAIC checks the device, validates payload, and writes to
discovered_ai_apps+ discovery_events. - Org admins see results in AI Discovery, scoped by org via RLS.
Data Captured per Detection
- Matched vendor / app name (from catalog)
- Hostname (e.g.
chat.openai.com) - Path prefix only — never query strings or fragments
- Page title (truncated)
- Detected model identifier & provider family (v1.2+, API detection only)
- Timestamp (UTC)
- Device label + authenticated user ID + org ID
Backend Ingestion
RAIC authenticates each device session, validates the payload, and writes results to discovered_ai_apps. All rows are tagged with org_id and protected by Row Level Security so each tenant only sees its own discoveries.
Device sessions can be revoked at any time from Admin → Integrations → Connected Devices.
Catalog Maintenance & Extensibility
The AI domain catalog is now dynamic. The bundledai-domains.js serves only as an offline fallback. On install and every 24 hours thereafter, the extension fetches the latest published catalog from RAIC and saves it in chrome.storage.local.
Platform Managers (Super Admins) maintain the catalog under Account Tools → AI Catalog. Edits are staged until a new version is explicitly published, and any prior version can be restored via Version History. All publishes and rollbacks are fully audited.
Approved-List Warning (v1.5.0+)
When an organization admin enables "Warn users about unapproved AI services" under Admin → Integrations → Browser Extension, the extension shows a non-blocking dialog whenever a user visits or invokes an AI service that is not on the organization's approved list.
A service is considered approved when it is mapped to a catalog entry on a registered AI system whose status is Approvedor Conditionally Approved. If a system is later disapproved, retired, or unmapped, it is automatically removed from the approved list.
The dialog reads: "This AI service is not on your organization's approved list. If you need it for business use, please submit a use case or AI system for review." It offers two actions: Submit for Review (opens the intake page) and Dismiss for 8 hours (per-host, per-organization suppression persisted in chrome.storage.local so the 8-hour cooldown survives browser restarts and new tabs on the same site — fixed in v1.5.4).
To minimize network traffic, the approved list is refreshed at most once every 24 hours per device using a server-side versioncounter — when the device's cached version matches, no payload is transferred. The list also force-refreshes when the AI catalog itself is bumped.
Recent Capabilities (current build v1.18.3)
- Partner-branded deployments — the popup, warning dialog, and update notices carry the partner name and partner support email for white-labeled tenants.
- Organization-key managed rollouts — devices deployed with an org key register individually, so admins can see the build on each device and disconnect specific devices or versions.
- Device fleet view — Connected Devices reports installed version, last seen, and update status across the fleet.
- Update handling — devices below the minimum supported version pause detection, show a dismissible (8-hour) update prompt, and re-check every 6 hours instead of syncing routinely.
- Signature-based detection — a published detection ruleset lets the extension flag AI model traffic that is not in the curated catalog, refreshed daily with a version check so unchanged rulesets transfer no payload.
Limitations & Future Enhancements
Current limitations
- Detection covers catalogued domains plus the published signature ruleset; a genuinely novel AI UI that makes no recognizable API call still needs a catalog entry, which Platform Managers can publish without shipping a new extension build.
- Embedded AI inside other SaaS apps is detected through optional API-call detection, which an org admin must enable; features that run entirely server-side inside the vendor's own backend produce no browser-observable signal.
- Firefox installs are manual today, and the Safari build is App Store submission source rather than an end-user install.
- Detection is per browser profile — activity in a different profile, a private window with extensions disabled, or a non-browser desktop client is not observed.
On the roadmap
- A catalog and ruleset version indicator in the popup and admin dashboard.
- Store listings for Firefox and Safari.
