📥 DSH Chat Import
Import 15+ external agent conversation histories into DeepSeek Harness as full-fidelity, resumable sessions — and export / sync back to Claude Code, Codex, Kimi, or a portable interchange bundle.
💡 Intro · 🚀 Install · ✨ Features · 🗂 Supported sources · 🛠 Usage · 🔑 Key behaviors · 📚 Docs · ⭐ Star History · 🤝 Contributing
16+ agent sources, one plugin — full-fidelity import into DeepSeek Harness, seamless resume, matrix interop / backup / handoff on the way out.
Changelog: CHANGELOG.md · Roadmap: ROADMAP.md · Interchange protocol: docs/INTERCHANGE.md
💡 Intro
dsh-chat-import imports conversation histories from Claude Code, Codex, ChatGPT, Cursor, Gemini, Reasonix, opencode, MiMo Code, ZCode, Grok Build, OpenClaw, Pi Coding Agent, Hermes, Kimi CLI / Kimi Code, Qoder CLI and DSH session logs — tool calls, reasoning and all — as full-fidelity, resumable DeepSeek Harness sessions. Source files are read read-only (never rewritten), the DSH engine is never touched, and every import becomes a fresh session grouped into the workspace of its source cwd.
The reverse direction is covered too: export_claude serializes a DSH session back into a Claude Code JSONL transcript that Claude Code can load with --resume (read-only — your DSH log is never modified), sync_to_claude incrementally appends a session's new turns back to a Claude Code file — guarded, never silently overwriting — and the same matrix extends to Codex rollouts (export_codex) and Kimi wire files (export_kimi), plus a portable interchange bundle (export_bundle / restore_bundle) with SHA-256 fingerprints and cross-machine restore.
Requires Node.js ≥ 22.13, targets dsh 0.1.x (tested on 0.1.0-rc.6 / 0.1.0-rc.7).
🚀 Install
dsh plugin --profile web add dsh-chat-import # npm package
dsh plugin --profile web add -w link:/path/to/dsh-chat-import # local checkout (symlink)
Then:
- Import — call any
import_*tool in a DSH session:
import_claude({ path: "~/.claude/projects" })
import_chatgpt({ path: "~/Downloads/chatgpt-export/conversations.json" })
import_local_jsonl({ path: "D:\downloads\session.jsonl" })
-
Resume — refresh the session list, open the imported session, and keep chatting from where the source left off.
-
Discover & batch —
scan_discover()previews read-only; the sidebar "Import sessions" panel browses by workspace and supports multi-select import;/import-allbatch-imports everything. -
Sync (optional) — the panel's "Sync" tab offers bidirectional incremental sync (external → DSH, DSH → external), default off. Sub-agent conversations are filtered out by default in both directions, and
excludeDirsdeny-lists let you skip specific workspace directories per direction.
Uninstall: remove the import-claude insert line from your profile's bundles and restart dsh; imported sessions stay untouched and the plugin never auto-deletes.
✨ Features
Capability Entry points Description
Batch import from 16+ sources
import_* (17 tools) · scan_discover · sidebar panel · /import
A file, a directory or a whole database — each conversation becomes its own session
Full-fidelity resume
Imported sessions
Tool calls & results, reasoning, titles, models and timestamps carry over; sessions group into the source cwd workspace
Matrix export
export_claude / export_codex / export_kimi
Serialize DSH sessions back to Claude / Codex / Kimi formats; every lossy item is reported
Portable backup
export_bundle / restore_bundle
Interchange bundle with dual SHA-256 fingerprints, restorable across machines
Incremental write-back
sync_to_claude
Appends new complete turns back to a Claude Code file — guarded, never overwriting
Bidirectional sync
panel "Sync" tab
Incremental inbound/outbound sync across Claude / Codex / Grok; sub-agent conversations filtered by default; per-directory excludeDirs deny-list
Agent asset migration
import_agents
Converts pi / opencode / Claude / Codex agents, prompts, skills, instructions into persistent DSH skills
MCP mirror plan
import_mcp / /mcp-status
Reads Claude / Codex MCP servers and generates a reviewable DSH MCP client YAML snippet
Settings translation
import_settings / /settings-suggest
Turns Claude settings / Codex config into DSH migration suggestions (read-only)
Handoff summaries
/resume-claude / /resume-codex
Treats external transcripts as untrusted history and injects a handoff summary into the current session
Read-only audit / checkup
verify_session / doctor / CLI dsh-chat-import doctor
Structural audit and migration health check
Idempotency & protection
All import tools
expectedHash / restamp / context-budget protection; unchanged sources skip, grown sources append
Preset mode + system prompt Settings tab in the Plugins section Imported sessions record the default preset; optional "import system prompt" as a context injection (off by default)
🗂 Supported sources
Source Storage location Import tool
Claude Code
~/.claude/projects/<slug>/<sessionId>.jsonl
import_claude
Claude-3p (new client)
%LOCALAPPDATA%\Claude-3p\claude-code-sessions (metadata → JSONL via cliSessionId)
import_claude
Codex / ChatGPT CLI
~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl
import_codex
ChatGPT (web export)
anywhere you saved the export — conversations.json
import_chatgpt
Cursor
~/.cursor/projects/<slug>/agent-transcripts/<id>/<id>.jsonl
import_cursor
Gemini CLI
~/.gemini/history/<slot>/chats/session-*.json
import_gemini
Reasonix (CLI + desktop)
~/.reasonix/sessions/desktop-*.jsonl · %APPDATA%\reasonix\projects\<slug>\sessions\*.jsonl
import_reasonix
opencode
~/.local/share/opencode/opencode.db
import_opencode
MiMo Code (opencode fork)
~/.local/share/mimocode/mimocode.db
import_mimocode
ZCode (z.ai CLI)
~/.zcode/cli/db/db.sqlite
import_zcode
Grok Build
~/.grok/sessions/<project>/<session_id>/
import_grokbuild
OpenClaw
~/.openclaw/agents/<agent>/sessions/*.jsonl
import_openclaw
Pi Coding Agent
~/.pi/agent/sessions/--<cwd>--/<timestamp>_<uuid>.jsonl
import_pi
Hermes
~/.hermes/ (Windows %LOCALAPPDATA%\hermes)
import_hermes
Kimi CLI / Kimi Code
~/.kimi/sessions/<workdir-md5>/<sessionId>/wire.jsonl · ~/.kimi-code/sessions/<workspaceId>/<sessionId>/agents/main/wire.jsonl
import_kimi
Qoder CLI
~/.qoder/projects/<encoded-project>/<sessionId>.jsonl (subagents in <sessionId>/subagents/*.jsonl)
import_qoder
DSH session logs
~/.dsh/sessions/<encoded-workspace>/<sessionId>/session.jsonl(.zstd)
import_dsh
Any local JSONL
any .jsonl file / directory (auto-detected)
import_local_jsonl
Each import preserves what the source actually records; anything a format cannot preserve is explicitly flagged in the import report. Per-format details and edge cases live in Usage Reference.
🛠 Usage
All import_* tools share the same path semantics: a single file becomes one session, a directory is scanned recursively for batch import. Common options: preview (zero side effects), force (new full copy), sessionId (override target id), expectedHash (SHA-256 verification), restamp (shift timestamps to now), workspaceMode / workspaceDir (grouping control).
import_claude({ path: "C:\Users\<you>\.claude\projects\<slug>\<sessionId>.jsonl" })
import_opencode({ path: "C:\Users\<you>\.local\share\opencode\openco