# Browser conversation capture

> Capture signed-in ChatGPT, Claude.ai, Gemini, Perplexity, Devin, and Ask Devin history with the preview Hansard Browser extension.

Hansard Browser is a preview Chromium extension published in the
[Chrome Web Store](https://chromewebstore.google.com/detail/hansard/oomaaocfbpeljjedgjdclolbdgihpdgd).
It captures ChatGPT, Claude.ai, Gemini, and Perplexity conversations, plus
Devin cloud sessions and Ask Devin queries. It is separate from the npm
package.

## Install and pair

Install Hansard from the
[Chrome Web Store](https://chromewebstore.google.com/detail/hansard/oomaaocfbpeljjedgjdclolbdgihpdgd)
in Chrome, Arc, Brave, Edge, or another Chromium browser (version 109 or
later). The guided setup's **Browser extension** page links to the listing
and pairs the browser in the same steps as Settings.

### Pair in the app

1. Open **Settings → Imports** and find **Browser extension**.
2. Next to **Connect a browser**, select **Pair…**. **Open Chrome Web Store**
   opens the listing. In a source checkout, **Show development build** reveals
   the unpacked build to load instead.
3. Paste the code from **Paste this code in the extension's settings** into
   the extension's settings. The code works once and expires after ten
   minutes.

Each paired browser gets its own row with **Disconnect**. The **Captures** row
counts saved, waiting, unchanged, and failed captures, names the most common
reason for failures, and offers **Retry**. While the app is open it keeps the
receiver running for a paired browser, as the watcher does.

### Pair from the CLI

```sh
hansard browser serve
```

In another terminal, run:

```sh
hansard browser pair
```

Paste the pairing code into the extension settings. `hansard browser status`
lists paired browsers and their captures, `hansard browser retry` retries
failed imports now, and `hansard browser revoke <installation-id>` disconnects
a browser. The watcher keeps the paired receiver running; otherwise keep
`hansard browser serve` open.

Before the extension sends a pairing code, its credential, or a capture, the
receiver proves it holds that pairing, so another program listening on the
receiver's port receives nothing and captures wait in the browser. A browser
paired by an earlier release may be asked to pair again. If another program
holds the port, the receiver does not start, and `hansard browser status` and
the **Browser extension** settings name that program when the system reports
it. Stop it, or run `hansard browser serve --port` with a free port and set the
extension's Hansard address to match.

Your browser updates the extension on its own after the Chrome Web Store
publishes a release. Hansard accepts every version of the extension, so an
update waiting on store review never stops captures. If Hansard is too old to
prove itself to the extension, the extension asks you to update Hansard. A
capture from a provider your Hansard cannot import yet waits in the queue,
counted as waiting for a Hansard update, and imports after you update.

### Build from source

To load a development build instead of the store release, build it from a
Hansard source checkout:

```sh
npm --prefix extension ci
npm --prefix extension run build
```

Open the browser's extensions page, enable Developer mode, choose **Load
unpacked**, and select `extension/dist`.

### Capture history

Enable the providers you want in the extension's settings. Each provider
requests its own website and file-host permissions, and the settings show each
provider's status. Keep a signed-in tab open for that provider. Choose
**Sync now** to capture history or **Rescan all history** to refresh existing
captures. The toolbar icon shows a badge when captures fail. Failed captures
stay queued and retry on their own, waiting longer after each failure, up to
six hours.

## Exact product coverage

| Product     | Archived format       | Preserved data and limits                                                                                                                                                                                                                                                                                                                                                                                    |
| ----------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ChatGPT     | `chatgpt-browser`     | History, archived chats, and project conversations; conversation trees, active branch, exposed model and file metadata, and the canvas documents a conversation references. Archived, project, and canvas reads are new and not yet checked against signed-in accounts; a list that fails is skipped for that check and named in the extension's status. Unavailable branches and expired media remain gaps. |
| Claude.ai   | `claude-web-browser`  | Organization conversation trees, exposed projects and settings, uploaded and generated files; preview bytes remain labeled as previews.                                                                                                                                                                                                                                                                      |
| Gemini chat | `gemini-web-browser`  | Paginated history, selected response candidates, typed media and recorded response models; media coverage is partial.                                                                                                                                                                                                                                                                                        |
| Perplexity  | `perplexity-browser`  | Search threads, citations, research steps, exposed model fields and attachments; media/shopping results remain links.                                                                                                                                                                                                                                                                                        |
| Devin cloud | `devin-cloud-browser` | Cloud event history, tools, child-session relationships, exposed files and metadata; private signed-storage payloads may remain unavailable.                                                                                                                                                                                                                                                                 |
| Ask Devin   | `devin-ask-browser`   | Questions, reasoning, codebase searches, citations and recorded model; missing per-question times remain unknown.                                                                                                                                                                                                                                                                                            |

The extension does not currently capture Codex cloud, Claude Code cloud, Cowork,
Gemini Notebook/NotebookLM, Grok chat, or Grok Bot. Those products must use a
documented separate route or remain in the [coverage backlog](https://www.hansard.dev/reference/import-coverage/).

The collectors use private website APIs. Unsupported response shapes pause
capture with an error. A closed, unloaded, suspended, or signed-out tab cannot
supply history. Deleted and temporary chats, project-only lists, unavailable
branches, and expired files are not guaranteed to be recoverable.

## Overlapping routes

Manual ChatGPT, Claude.ai, and Gemini exports remain supported. Captures and
exports can enrich the same account conversation when their provider account
and conversation identities agree. Matching titles or account labels are not
enough to merge them. Devin desktop mirrors, API records, and browser captures
likewise retain verified cloud identity while preserving the most complete
transcript. See the individual [import guides](https://www.hansard.dev/imports/supported-sources/) for each
route's limitations.

After capture, open the conversation in Hansard and check messages, files,
source, account, project, models, and Session details. A successful delivery
receipt alone does not prove that every provider field was preserved.
