🧬 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 gitHead cb942b3e57f36e8394f841899dc9e690180624c6, against prepared Deek dsh-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 productOfficial export or session referenceInput selected for DeekSupport and fidelity boundary
Claude.ai web/DesktopExport your Claude dataPreserve the downloaded account archive intactUnknown/unsupported for this route. The Claude Code parser is not a general Claude.ai export parser; no custom converter is promised
Claude CodeHow sessions are savedA deliberately selected raw project session .jsonl; format claudeParser 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 webOfficial export procedureSelected conversations.json from the downloaded ZIP; format chatgptParser 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 CLIOfficial CLI and saved-chat guidanceSelected rollout .jsonl; format codexParser source handles Codex rollout records, not the ChatGPT web archive. Historical cwd/model/tool data still need verification
Gemini web / Google TakeoutDownload your Google data and Google TakeoutPreserve the selected account/product archive and downloaded project assetsUnknown/unsupported for this route. A Gemini CLI JSON parser does not establish ingestion of Takeout HTML/JSON or Gemini web history
Gemini CLIOfficial session managementSelected single-session JSON object with messages; format geminiParser 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 / XOfficial consumer data controls and rights; Grok on X is a separate surfacePreserve the downloaded data archive; export project assets separatelyUnknown/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 CLIOfficial Grok Build and documentationSelected session directory containing summary.json and chat_history.jsonl; format grokbuildParser source handles that paired CLI layout. Preserve both files and inspect tool-result/metadata loss; it does not restore a running Grok process
OMPSelected OMP18.1.17 export/session contract; select one redacted representative export yourselfKeep the actual OMP export and its source-version note; do not relabel it as PiUnverified. 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 AgentOfficial Pi session documentation and session formatSelected raw Pi session .jsonl; format piParser 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 HermesOfficial Hermes documentation and sourcePrefer a deliberately selected session JSONL/JSON export. The importer also has an explicit selected state.db readerDB 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

  1. In the eligible account, open Settings → Data controls → Export data → Export → Confirm export, or use the official Privacy Portal.
  2. 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.
  3. Preserve the ZIP. Select conversations.json if 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.
  4. 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 with messages. 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 /export and CLI --export produce HTML, which can embed system/tool definitions and subagent transcripts; /dump can 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 anomalyActual source contractAcceptance rule
ChatGPT branch: "main"Default last-child chainDoes not preserve all alternatives
ChatGPT branch: "all"Each root-to-leaf path becomes its own session with a branch-suffixed source IDTwo-branch synthetic fixture must retain both known alternatives and their tool pairs; shared prefixes appearing in separate branch sessions are expected
Claude compacted: trueLast compression summary plus tailDeliberate information reduction, not full history
Hermes lineage: "tail"Leaf-chain tails only; compaction-fork parents skipped/annotatedDo not use unless this loss is intended
Failed ghost retriesA dead tool-call step may be dropped when the same call ID is immediately re-emittedInspect droppedRetrySteps; do not call the result byte-lossless
Claude/Hermes string-form tool_result.contentIndependent pure-parser inspection found the string replaced by an empty result while droppedToolResults remains0; text-block arrays follow a different supported pathUnreported 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 stepSome converters drop it to keep DSH’s turn/tool structure validCount/report exact loss; inspect droppedToolResults and structural audit
Text normalization or budget trimConverters can normalize text/title and report trimmed historyVerify Unicode and expected text, not just file existence or a success flag
Unknown/malformed/truncated inputMust remain blocked or surface a precise anomaly/lossNever convert a warning into an unqualified migration success
Suspected secretsThe importer can report secret-shaped dataThis 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 familyIntended DSH proofObserved converter status / DSH status
Claude Code JSONLRoles/order/text and paired tool resultRemote positive converter fixture passed; DSH import unverified
Codex rollout JSONLResponse/tool record conversion and indexingRemote positive converter fixture passed; DSH import unverified
ChatGPT JSON with two branchesBoth root-to-leaf alternatives, tool pairs, UnicodeRemote positive converter fixture passed; DSH import unverified
Gemini CLI session JSONMessage types and inline result pairingRemote positive converter fixture passed; DSH import unverified
Grok Build directoryPaired metadata/history filesRemote positive converter fixture passed; DSH import unverified
Pi JSONLSupported Pi event/message shapeRemote positive converter fixture passed; DSH import unverified; not OMP proof
Hermes JSONLSupported flat/nested message shapeRemote positive converter fixture passed; DSH import unverified; not a blanket DB-version claim
Representative OMP exportActual OMP18.1.17 history fidelityAwaiting 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.