🧬 Export and Format Matrix
The product name matters more than the filename extension. Claude.ai is not Claude Code; ChatGPT is not Codex; Gemini web is not Gemini CLI; Grok web is not Grok Build; OMP is not Pi.
Evidence level
This matrix describes source-reviewed parser paths in
dsh-chat-import@0.11.0, npm gitHeadcb942b3e57f36e8394f841899dc9e690180624c6, against prepared Deekdsh-v0.1.5-rc.2. The selected importer is blocked on the prepared core and is not installed. These parser descriptions do not certify runtime fidelity or the user’s exports. All DSH persistence/indexing rows remain unverified; the approved decision is not to install the plugin in this blocked round. A separate authorized remote isolated pure-converter check passed seven supported positive fixtures and observed eight negative cases, without DSH, package installation, credentials, or model requests. A later main-branch commit with the same version string is not this published artifact.
Product-by-product matrix
| Source product | Official export or session reference | Input selected for Deek | Support and fidelity boundary |
|---|---|---|---|
| Claude.ai web/Desktop | Export your Claude data | Preserve the downloaded account archive intact | Unknown/unsupported for this route. The Claude Code parser is not a general Claude.ai export parser; no custom converter is promised |
| Claude Code | How sessions are saved | A deliberately selected raw project session .jsonl; format claude | Parser source handles conversation/tool records. Compaction, malformed lines, orphan results, and failed retry steps require loss review; not a repository or Claude.ai account export |
| ChatGPT web | Official export procedure | Selected conversations.json from the downloaded ZIP; format chatgpt | Parser source expects a conversations array with a mapping DAG. Use branch: "all" when all root-to-leaf branches matter. The ZIP, HTML viewer, and attachments are not interchangeable inputs |
| Codex CLI | Official CLI and saved-chat guidance | Selected rollout .jsonl; format codex | Parser source handles Codex rollout records, not the ChatGPT web archive. Historical cwd/model/tool data still need verification |
| Gemini web / Google Takeout | Download your Google data and Google Takeout | Preserve the selected account/product archive and downloaded project assets | Unknown/unsupported for this route. A Gemini CLI JSON parser does not establish ingestion of Takeout HTML/JSON or Gemini web history |
| Gemini CLI | Official session management | Selected single-session JSON object with messages; format gemini | Parser source expects user/gemini message types, text parts, and inline tool results. CLI info/unknown message types are skipped. Not JSONL and not Gemini web |
| Grok web / mobile / X | Official consumer data controls and rights; Grok on X is a separate surface | Preserve the downloaded data archive; export project assets separately | Unknown/unsupported for this route. The Grok Build parser is not proof of Grok web/X archive compatibility; public share links are not private migration |
| Grok Build CLI | Official Grok Build and documentation | Selected session directory containing summary.json and chat_history.jsonl; format grokbuild | Parser source handles that paired CLI layout. Preserve both files and inspect tool-result/metadata loss; it does not restore a running Grok process |
| OMP | Selected OMP18.1.17 export/session contract; select one redacted representative export yourself | Keep the actual OMP export and its source-version note; do not relabel it as Pi | Unverified. The observed operator OMP version is 18.1.17; a synthetic Pi fixture proves nothing about all OMP histories. No automatic operator-home scan, wallet read, or forced Pi parser |
| Pi Coding Agent | Official Pi session documentation and session format | Selected raw Pi session .jsonl; format pi | Parser source handles Pi session/message records. An HTML export is a viewing artifact, not evidence of raw-format import. Branch/tree and compaction fidelity need the actual input |
| Nous Hermes | Official Hermes documentation and source | Prefer a deliberately selected session JSONL/JSON export. The importer also has an explicit selected state.db reader | DB reader reads session/message tables; converter accepts a messages object or flat/nested JSONL. Never copy an entire Hermes home or credentials; snapshot a live session DB consistently under its owner’s native procedure |
Official product documentation above was checked as public guidance on 2026-09-11; those help pages can change. Immutable importer links identify the exact parser snapshot. Export availability depends on the account/workspace and may require its owner or administrator.
The three web exports you can prepare now
ChatGPT
- In the eligible account, open Settings → Data controls → Export data → Export → Confirm export, or use the official Privacy Portal.
- Download the ZIP from the email/SMS link while signed into the same account. The official guide says the link expires after 24 hours and preparation can take up to seven days.
- Preserve the ZIP. Select
conversations.jsonif present and verify that it contains the conversations you intended to bring. A missing or changed schema is not a reason to force another parser. - Keep attachments and project files separate; exporting a chat does not recreate its cloud project. Business/Enterprise/Healthcare self-service export is unavailable in the checked official guide; ask the organization owner for its supported process.
Claude.ai
Use Settings → Privacy → Export data on the web or Desktop application; the checked official instructions do not support initiating the export from iOS/Android. The emailed link expires after 24 hours. Team/Enterprise exports belong to the organization’s Primary Owner. Keep this archive intact: the selected Deek importer does not establish general Claude.ai ingestion.
Gemini and Grok web
In Google Takeout, select only the relevant products/data actually offered to your account and download the resulting archive. Do not label the account archive a Gemini CLI session. For Grok.com/mobile, use the official Settings/Data Controls download or privacy-rights flow; Grok on X has separate account controls. These are archive-preservation steps, not accepted Deek imports.
Raw CLI history is not a universal export format
Select the original session artifact from the source product, using its own session UI/docs. Do not run an automated scan of the Mac or remote operator homes. Do not move the source history out of a running application’s storage, and do not copy configuration, executable skills, hooks, provider settings, or auth data with it.
- Gemini path drift: the selected importer documents discovery under
~/.gemini/history/<slot>/chats/, while the checked official Gemini CLI session guide describes~/.gemini/tmp/<project_hash>/chats/. Use an explicitly selected JSON file; no discovery result does not prove there are no sessions. New Antigravity CLI formats are not implicitly accepted as old Gemini CLI JSON. - Hermes variants: the converter accepts flat
{role, content, ts}records, nested{type, message: {role, content}, timestamp}records, or a single object withmessages. Its DB adapter is a separate path. This is source support, not permission to read another user’s DB or a promise that every version’s schema works. - OMP versus Pi: the selected OMP
/exportand CLI--exportproduce HTML, which can embed system/tool definitions and subagent transcripts;/dumpcan leave a sensitive request sidecar. Neither is automatically a Pi-compatible import. Ancestry and similar message shapes do not establish compatibility. Request a redacted representative OMP export and prove it end to end before advertising OMP import support. Do not rename an unsupported HTML or JSONL file to force a match.
Fidelity choices that change what you get
| Choice or anomaly | Actual source contract | Acceptance rule |
|---|---|---|
ChatGPT branch: "main" | Default last-child chain | Does not preserve all alternatives |
ChatGPT branch: "all" | Each root-to-leaf path becomes its own session with a branch-suffixed source ID | Two-branch synthetic fixture must retain both known alternatives and their tool pairs; shared prefixes appearing in separate branch sessions are expected |
Claude compacted: true | Last compression summary plus tail | Deliberate information reduction, not full history |
Hermes lineage: "tail" | Leaf-chain tails only; compaction-fork parents skipped/annotated | Do not use unless this loss is intended |
| Failed ghost retries | A dead tool-call step may be dropped when the same call ID is immediately re-emitted | Inspect droppedRetrySteps; do not call the result byte-lossless |
Claude/Hermes string-form tool_result.content | Independent pure-parser inspection found the string replaced by an empty result while droppedToolResults remains0; text-block arrays follow a different supported path | Unreported fidelity loss. Positive fixtures using text-block arrays do not certify string-form outputs; compare actual result text, not just call/result IDs or the loss counter |
| Orphan tool result or assistant step | Some converters drop it to keep DSH’s turn/tool structure valid | Count/report exact loss; inspect droppedToolResults and structural audit |
| Text normalization or budget trim | Converters can normalize text/title and report trimmed history | Verify Unicode and expected text, not just file existence or a success flag |
| Unknown/malformed/truncated input | Must remain blocked or surface a precise anomaly/loss | Never convert a warning into an unqualified migration success |
| Suspected secrets | The importer can report secret-shaped data | This is not guaranteed redaction; stop and review privately before any real import or later model request |
See the immutable native usage reference, conversion core, and import state machine. Claims such as “full fidelity” remain conditional on the actual source and the observed persistent result. The concrete string-form result issue is visible in Claude conversion and Hermes conversion. Verifier pure-parser check status: authorized remote isolated repeat completed—seven corrected positive fixtures passed and eight negative cases were observed under the hardened, network-denied staging identity. The string-form Claude/Hermes loss remains a failing fidelity condition, not a successful conversion claim. A parser-only check is not DSH persistence/indexing proof and does not clear the missing-stream or native-route blockers; private fixture receipts are never published here.
Synthetic acceptance matrix
| Fixture family | Intended DSH proof | Observed converter status / DSH status |
|---|---|---|
| Claude Code JSONL | Roles/order/text and paired tool result | Remote positive converter fixture passed; DSH import unverified |
| Codex rollout JSONL | Response/tool record conversion and indexing | Remote positive converter fixture passed; DSH import unverified |
| ChatGPT JSON with two branches | Both root-to-leaf alternatives, tool pairs, Unicode | Remote positive converter fixture passed; DSH import unverified |
| Gemini CLI session JSON | Message types and inline result pairing | Remote positive converter fixture passed; DSH import unverified |
| Grok Build directory | Paired metadata/history files | Remote positive converter fixture passed; DSH import unverified |
| Pi JSONL | Supported Pi event/message shape | Remote positive converter fixture passed; DSH import unverified; not OMP proof |
| Hermes JSONL | Supported flat/nested message shape | Remote positive converter fixture passed; DSH import unverified; not a blanket DB-version claim |
| Representative OMP export | Actual OMP18.1.17 history fidelity | Awaiting a user-supplied redacted input |
The source-owned fixture location is deploy/import-fixtures/ in the prepared release; a fixture file or passing pure conversion is not a passing import test. The remote converter check preserved the two ChatGPT branches and the expected supported text/tool pairs/Unicode, but every synthesized assistant settlement still omitted data.stream; out-of-bound historical cwd was passed through. Those observations leave the persistence and workspace gates blocked. Eight observed negative cases do not mean eight safe rejections. The proof must exercise real plugin conversion, DSH persistence/indexing, repeated unchanged import, and native verify_session/doctor without a model request.
Continue with Preview Before Import and Bring Your Work.