Every AI provider lets you share a conversation with a link. None of them lets you keep it. Share links rot, pages get redesigned, providers quietly change what a URL serves. Convolvger is a small CLI that takes a public share URL and archives the conversation into Markdown you can read and JSON you can verify — on your machine, with no account, no telemetry, and no LLM involved.
0.5.0 adds Grok to the lineup. The supported providers are now ChatGPT, Claude, Gemini, and Grok.
Each provider is deceptive in its own way
ChatGPT. The share snapshot is served as a turbo-stream that Convolvger decodes directly. And snapshots move: fetching the same share link eight hours apart once returned the same 31 message IDs with four assistant messages silently re-typed. That is why every archive records when it was retrieved.
Claude. The share page cannot be fetched — the service refuses non-browser clients whatever headers they send. Rather than impersonate a browser, Convolvger waits for yours: convolvger bookmarklet prints a bookmarklet, you click it on the share page, and the snapshot is handed to a listener on loopback (127.0.0.1, one snapshot, three-minute timeout).
Gemini. The share page carries no conversation at all — it is an application shell whose only prose is Google's marketing examples. A plain scrape gives you a plausible archive of the wrong conversation. Convolvger queries the same endpoint the web UI asks, sending only the single necessary query parameter, under its own User-Agent. It handles all three link forms Google issues and catches deleted shares, which Google quietly returns as 200 OK with a null payload.
Grok — new in 0.5.0. Same app-shell shape: the page loads its conversation as JSON afterwards, so Convolvger asks that endpoint directly. No browser, no cookie, no token. The share id is kept whole whatever its prefix. Citations arrive as inline markup and are lifted out of the text — the message exactly as served stays in the JSON. The sender arrived as human, ASSISTANT, and assistant within one conversation, and is kept as-served. The reasoning trace is kept whole but reported as unmodelled (seen in only one conversation so far). Files a response names but doesn't carry are reported as withheld; nothing is fetched to fill the gap. A missing share is reported whether the provider answers 404, 400, or 200 with a title and no messages — the last seen on a real public share.
The rules it holds to
Everything runs locally. convolvger --version answers fully offline, and there is no update check — a test fails the build if the tool ever tries to contact an index about itself.
It never impersonates a browser and never dereferences a URL it archives.
Every archive records its schema version, its retrieval time, and every extraction finding. convolvger verify reports an archive's integrity without re-fetching anything.
Content this version cannot model is flagged, never silently dropped.
A weekly scheduled job queries each live provider in its own job, so an upstream format shift breaks in CI — naming the provider that changed — before it reaches your machine.
Also in 0.5.0
A capture-port bug on Windows is fixed, and the test suite now runs on Windows in CI as well as Linux.
Try it bash
pip install convolvger # or: uv tool install convolvger / pipx install convolvger
convolvger export [https://grok.com/share/SHARE_ID](https://grok.com/share/SHARE_ID)
convolvger export [https://gemini.google.com/share/SHARE_ID](https://gemini.google.com/share/SHARE_ID)
convolvger inspect [https://chatgpt.com/share/SHARE_ID](https://chatgpt.com/share/SHARE_ID) # look without saving
convolvger verify mychat.json # check an archive
Needs Python 3.12+. MIT licensed. GitHub · PyPI