Browser conversation capture
Hansard Browser is a preview Chromium extension published in the Chrome Web Store. 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
Section titled “Install and pair”Install Hansard from the Chrome Web Store 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
Section titled “Pair in the app”- Open Settings → Imports and find Browser extension.
- 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.
- 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
Section titled “Pair from the CLI”hansard browser serveIn another terminal, run:
hansard browser pairPaste 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
Section titled “Build from source”To load a development build instead of the store release, build it from a Hansard source checkout:
npm --prefix extension cinpm --prefix extension run buildOpen the browser’s extensions page, enable Developer mode, choose Load
unpacked, and select extension/dist.
Capture history
Section titled “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
Section titled “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.
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
Section titled “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 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.