Browser collection
Browser collection fills the gap between occasional account exports. The extension observes only the conversation currently rendered in a ChatGPT tab, normalizes bounded semantic message blocks, and forwards the observation to the local native host.
It does not read cookies, access tokens, local storage, passwords, or undocumented ChatGPT APIs.
Collection path
Section titled “Collection path”ChatGPT tab → content script → extension background context → native messaging → historia-collect-host → Git source ref → SQLite projection- Install the browser bridge.
- Read the privacy and data-handling disclosure.
- Open a ChatGPT conversation.
- Open the Historia Collect popup.
- Choose Collect this conversation.
- Confirm that the popup reports the archive commit and refreshed index.
The host commits browser observations to a source ref beneath:
refs/historia/sources/openai-browser/<source-key-digest>The private source key is configured in the extension options and hashed before it appears in refs or tree paths.
Manual and automatic collection
Section titled “Manual and automatic collection”Manual collection is the default. It creates an explicit user action for each captured conversation, and the popup states that the rendered conversation is sent to a native host on the same computer.
Automatic collection can be enabled in extension settings. It is opt-in, debounced after rendered-message changes, and still captures only tabs matching the permitted ChatGPT origins. The settings page repeats the local-transfer disclosure before the preference is saved.
Exact content duplicates are idempotent. Observing the same normalized conversation later does not create a duplicate transaction merely because the observation timestamp changed.
Firefox consent
Section titled “Firefox consent”Firefox 140 or newer is required. The extension uses Firefox’s built-in consent model and declares:
browsingActivitypersonalCommunicationswebsiteContentThese categories represent the current ChatGPT page identity, rendered chat
messages, and visible page content transferred to
ai.greenways.historia_collect on the same computer. They do not mean that
Greenways receives the data.
The same Manifest V3 source remains compatible with Chromium-family browsers:
Chromium uses background.service_worker, while Firefox uses
background.scripts.
Conversation graphs
Section titled “Conversation graphs”The browser observation format is a graph rather than a flat transcript. Each message has a stable local identity, parent relationships, semantic blocks, and an optional position on the active path.
Historia rejects:
- cyclic parent relationships;
- dangling parents;
- duplicate message IDs;
- over-sized messages, blocks, strings, nesting, or total payloads;
- unsupported page origins;
- credential-shaped metadata fields.
Alternate branches visible in the rendered page can therefore survive as graph structure instead of being flattened into one lossy transcript.
Provenance classification
Section titled “Provenance classification”Browser records are stored as:
browser-observedThis means “rendered content observed by Historia at this time.” It does not mean that Historia cryptographically proved provider authorship, captured the entire account, or observed branches the browser did not render.
Native security boundary
Section titled “Native security boundary”The extension page and content script are treated as untrusted inputs. The host:
- accepts only bounded length-prefixed JSON frames;
- validates protocol version, request ID, and operation;
- validates and canonicalizes the complete observation;
- strips query strings and fragments from captured page URLs;
- accepts only configured ChatGPT HTTPS origins;
- checks the extension caller against the native-manifest identity;
- uses atomic compare-and-swap Git ref updates;
- writes no network remote unless the user separately configures one.
The extension requests only nativeMessaging, storage, and tabs, plus
content-script access to the declared ChatGPT origins. It does not request
cookies, history, proxy, debugger, management, web-request interception,
geolocation, downloads, or unlimited storage.
Live connection check
Section titled “Live connection check”Use Check connection in the popup to send a native ping. For filesystem and
manifest diagnostics, run:
historia-collect doctor --browser chromeA local observation document can also be tested without loading the extension:
historia collect capture-json browser-observation.jsonThe file must conform to historia.collect.browser-observation/v1.