大模型
dev.to ·
@Fahad Bilal Saleem
Convolvger 0.5.0:本地归档 AI 对话,新增 Grok 支持
Convolvger 是一个本地 CLI 工具,可将 ChatGPT、Claude、Gemini 和 Grok 的公开分享链接归档为可读的 Markdown 和可校验的 JSON,无需账号、无遥测、不调用 LLM。0.5.0 新增 Grok 支持。文章详述各平台抓取难点:ChatGPT 分享快照以 turbo-stream 提供且内容会变动(同一链接 8 小时后 4 条助手消息被静默改写);Claude 拒绝非浏览器客户端,改用书签脚本经 127.0.0.1 回环传递快照;Gemini 分享页本身不含对话,需直接查询 Web UI 所用端点;Grok 同样为应用外壳后加载 JSON。工具坚持不伪装浏览器、不二次访问归档 URL,并记录 schema 版本、检索时间与提取发现,verify 可离线校验完整性,无法建模的内容会被标记而非静默丢弃。
AI推荐理由 开发者发布的 CLI 工具 0.5.0 版本说明,新增 Grok 支持,并具体描述了各平台分享页的抓取难点(ChatGPT 的 turbo-stream、Claude 拒绝非浏览器客户端、Gemini 空壳页面、Grok 的 JSON 端点)以及本地归档、记录检索时间、verify 校验等设计取舍。信息密度较高且为可验证的实现细节,但属个人项目自述,无独立评测或使用数据,实际效果未经验证,故兴趣分中等。
62
正文
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
convolvger export https://gemini.google.com/share/SHARE_ID
convolvger inspect https://chatgpt.com/share/SHARE_ID # look without saving
convolvger verify mychat.json # check an archive
Needs Python 3.12+. MIT licensed. GitHub · PyPI