# Privacy Policy

**OpenDevBrowser Chrome Extension**

Last updated: May 19, 2026

## Overview

OpenDevBrowser is a browser automation extension that bridges the OpenDevBrowser plugin with Chrome for local development and testing purposes. This privacy policy explains how the extension handles your data.
The Chrome Web Store listing, declared permissions, and this policy are kept aligned with the shipped local-only relay, browser replay, browser-scoped challenge automation, and daemon or core-owned read-only desktop observation boundaries.

## Data Collection

**We do not send your browsing data or page content to the developer or any third-party service.**

The extension:
- Does NOT send browsing history to external servers
- Does NOT send personal information to external servers
- Does NOT track user behavior
- Does NOT use analytics or telemetry
- May access page URLs, titles, and page content locally when you use automation or annotation features
- May honor a local `challengeAutomationMode` setting (`off`, `browser`, or `browser_with_helper`) so bounded browser challenge handling can stand down or proceed on your machine without sending challenge state to OpenDevBrowser-operated services
- The extension itself does not capture desktop data. If you separately invoke daemon or core-owned desktop commands or tools with the shipped default or explicit `desktop.permissionLevel=observe`, the local OpenDevBrowser runtime may use the public read-only desktop observation plane to capture local desktop or window screenshots plus accessibility snapshots on-device and write repo-local audit artifacts under `.opendevbrowser/desktop-runtime`; OS-level desktop permissions still apply
- May, when you explicitly start a browser replay capture, sample screenshots locally and write replay artifacts such as `replay.json`, `replay.html`, `frames/`, and `preview.png` to the chosen local output directory on-device
- May store relay settings, pairing state, relay identity metadata, and the last user-triggered annotation payload without screenshots locally on-device so the popup can reconnect and reopen recent annotation results
- May store screenshot-free annotation payloads in a repo-local shared inbox when you explicitly use popup/canvas/in-page `Send` actions. A single active chat scope for that worktree can consume them; missing or ambiguous chat scope keeps them stored-only for explicit `annotate --stored` retrieval
- May keep extension-hosted canvas stage annotation selections, region metadata, and optional local crop references on-device only when you explicitly capture or send them during a canvas session

## How the Extension Works

The extension operates entirely on your local machine:

1. **Local Relay Connection**: The extension connects to a local relay server running on your machine (default: `127.0.0.1:8787`). This connection never leaves your computer.

2. **Chrome DevTools Protocol (CDP)**: The extension uses the `debugger` permission to interact with browser tabs via CDP. This enables automation features like clicking, typing, and capturing page snapshots.

3. **Tab Access**: The `tabs` permission is used to identify and manage browser tabs during automation sessions.

4. **Popup Navigation Tracking**: The `webNavigation` permission is used only to detect new top-level navigation targets opened from an existing tab so the extension can preserve popup opener ownership when Chrome omits `tabs.onCreated.openerTabId`.

5. **Local Storage**: The `storage` permission stores your relay configuration (port, pairing token, pairing toggle), relay identity metadata, and last annotation payload metadata locally in Chrome. When you explicitly capture or send annotation results, the extension can also persist a local copy of the last annotation payload without screenshots so the popup can reopen it. If you explicitly use a `Send` action, OpenDevBrowser can also write a screenshot-free copy into `.opendevbrowser/annotate/agent-inbox.jsonl` in the current worktree so the intended active chat can consume it, or so the payload can be retrieved later with `annotate --stored` when safe chat scoping is unavailable. This data stays local to your machine and repository.

User-triggered browser replay capture also stays local. Extension-backed sessions reuse the existing screenshot primitive, while replay manifests, preview images, and sampled frames are written only to the output directory you selected for that capture.

Challenge automation evaluation also stays local. The optional helper bridge remains browser-scoped and is not a desktop agent, and desktop observation stays outside the extension relay.

## Data Flow

```
[OpenDevBrowser Plugin] <--127.0.0.1--> [Extension] <--CDP--> [Browser Tabs]
```

The relay and optional native-host transport stay local to your machine. OpenDevBrowser does not send browsing data, page content, or annotation payloads to the developer or to third-party analytics services. Websites you open in Chrome continue to exchange their own normal network traffic.

## Permissions Justification

| Permission | Purpose |
|------------|---------|
| `debugger` | Required for CDP access to automate browser tabs |
| `webNavigation` | Required to observe popup navigation targets and preserve opener ownership for local automation sessions |
| `tabs` | Required to list and manage tabs during automation |
| `activeTab` | Required for user-initiated active-tab actions |
| `storage` | Required to persist relay configuration and the last local annotation payload metadata |
| `scripting` | Required to inject annotation/runtime scripts into pages during automation |
| `alarms` | Required for background reconnect and retry scheduling |
| `nativeMessaging` | Required for optional local native-host fallback |
| `http://127.0.0.1/*` | Required to reach the local relay/discovery endpoints on your machine |
| `<all_urls>` | Required to run automation/annotation flows across user-opened sites during local sessions |

## What Stays Local

- Relay configuration, pairing state, and health metadata stored in `chrome.storage.local`
- The last annotation payload metadata, plus a local copy of the last annotation payload without screenshots when you explicitly capture or send annotation results
- Extension-hosted canvas stage annotation selections, region metadata, and optional local crop references when you explicitly capture or send them
- Repo-local shared inbox files under `.opendevbrowser/annotate/`, including `agent-inbox.jsonl` and `agent-scopes.json`, when you explicitly use `Send` from popup/canvas/in-page annotation surfaces
- Full screenshots remain in memory for the active extension session unless you explicitly copy or send them through the local tooling flow
- User-triggered browser replay artifacts (`replay.json`, `replay.html`, `frames/`, `preview.png`) written to the chosen local output directory

Shared inbox persistence strips screenshots and stores only sanitized payloads plus screenshot asset references. Shared entries are retained locally with bounded limits (`200` entries total, `50` unread entries, `7`-day TTL).

## Third-Party Services

The extension does not transmit browsing data or page content to analytics platforms or third-party APIs operated by OpenDevBrowser. It interacts only with the sites you choose to open in Chrome plus the local relay and optional local native host on your machine.

## Open Source

OpenDevBrowser is open source. You can review the published package contents at:
https://registry.npmjs.org/opendevbrowser

## Changes to This Policy

We may update this privacy policy from time to time. Any changes will be reflected in the "Last updated" date above.

## Contact

For questions about this privacy policy or the extension, please contact the maintainer at:
https://github.com/freshtechbro
