DeepSeek Harness 如何导入 Claude Code、Codex、OpenCode 会话:完整操作指南
DeepSeek Harness 会话导入,是把 Claude Code、Codex、OpenCode 等工具保存的对话日志转换成可继续编辑的 Harness 会话;目前 dsh-chat-import README 列出 21 个支持来源,导入后的会话可以在 DeepSeek Harness 中刷新、打开并继续对话。它处理的是聊天历史,不等同于 Skills、Hooks 或权限配置迁移。
先理解:导入的到底是什么
会话导入的核心是保留“上下文轨迹”,包括用户消息、模型回复、工具调用、工具结果、标题、模型和时间戳。导入后,每段外部对话会成为 DeepSeek Harness 中的独立会话,原项目文件不会被自动复制或修改。
这和配置迁移不是一回事
dsh-chat-import 负责 conversation history;如果目标是迁移 Skills、Hooks、全局设置和权限规则,应单独检查 dsh-movein。官方 README 特别提醒,两者没有联合验证,不能把“导入会话”理解成“完整复制开发环境”。
第一步:安装插件
DeepSeek Harness 的 Web profile 可以直接安装 npm 包:
dsh plugin --profile web add dsh-chat-import如果你在本地 checkout 了插件,使用 link 方式:
dsh plugin --profile web add -w link:/path/to/dsh-chat-import安装后重新打开或刷新 Harness,确认右下角出现 Import sessions 面板。插件 README 同时提供 GUI 和工具调用两种入口;首次操作建议用 GUI,便于检查扫描出的文件范围。
第二步:准备三个来源的会话目录
导入是否成功,首先取决于你传入的是“会话文件或目录”,而不是仓库目录。下面是 README 给出的参数形态:
import_chat({ format: "claude", path: "~/.claude/projects" })
import_chat({ format: "chatgpt", path: "~/Downloads/chatgpt-export/conversations.json" })
import_chat({ format: "local-jsonl", path: "D:\\downloads\\session.jsonl" })对 Claude Code,通常从 ~/.claude/projects 开始扫描;Codex 和 OpenCode 则应先在各自工具的会话目录中找到实际的 JSON/JSONL 文件,再将路径交给导入器。不同版本和操作系统可能改变默认目录,先确认文件确实存在,再执行导入。
一个稳妥的准备流程是:
关闭正在写入日志的源工具,避免导入过程中日志继续增长。
复制要迁移的会话文件到临时目录,保留原始文件作为回滚副本。
只选择一个会话做试导入,确认标题、最后一轮消息和工具结果都存在。
试导入成功后,再批量扫描同一来源的其他会话。
第三步:导入 Claude Code 会话
Claude Code 是 README 明确列出的来源。GUI 操作路径是打开右下角 Import sessions,选择 Claude 格式和会话目录,然后勾选需要导入的会话。
使用工具调用时,参数形态如下:
import_chat({
format: "claude",
path: "~/.claude/projects"
})导入完成后刷新会话列表,打开最新生成的会话,检查三点:最后一条用户消息是否完整、工具调用是否与结果成对出现、原会话的项目标题是否保留。如果只看到普通文本而没有工具轨迹,先检查是否选错了格式或指向了导出的摘要文件。
第四步:导入 Codex 会话
Codex 同样在支持列表中,但不要把 Claude 的目录参数直接套到 Codex。先定位 Codex 的本地会话日志,再根据文件格式选择对应的导入格式;如果文件是 JSONL,可从 local-jsonl 入口开始验证。
import_chat({
format: "local-jsonl",
path: "/absolute/path/to/codex-session.jsonl"
})Windows 路径需要使用双反斜杠,或改用正斜杠:
import_chat({
format: "local-jsonl",
path: "D:/work/migration/codex-session.jsonl"
})Codex 会话常包含较长的工具结果。试导入时先选单个文件,确认 Harness 能显示完整轨迹,再扩大范围;不要一次把整个日志目录交给转换器,以免重复导入或难以定位坏文件。
第五步:导入 OpenCode 会话
OpenCode 也是插件的明确支持来源。操作重点是找到 OpenCode 的会话存储目录,并在 GUI 中选择 OpenCode 对应格式。若你使用工具调用,格式名应以插件当前 Usage Reference 显示的枚举为准;README 展示了 claude 和 local-jsonl 示例,但没有在首页固定列出所有格式字符串。
因此推荐采用这个顺序:
在 Import sessions 面板选择 OpenCode 来源,让插件自动扫描可发现的会话。
只勾选一个短会话导入。
打开结果,确认消息、工具调用和时间线。
再批量导入长会话。
如果自动扫描不到文件,使用 scan_discover 查看可发现来源,再把返回的实际路径传给 import_chat。不要凭经验猜测 OpenCode 的缓存目录,不同安装方式可能使用不同数据位置。
三个常见失败原因
导入后会话为空
最常见原因是格式与文件结构不匹配,或者传入的是目录摘要而不是原始日志。先用单个文件试导入,再切换格式;不要先批量重试。
工具调用丢失
工具调用需要对应的结果记录。插件会处理一种特殊的 failed ghost retry:当调用没有结果、下一步又用相同 call id 重发时,转换器会丢弃死步骤,避免重复 id 让整条轨迹折叠失败。这不代表所有损坏日志都能恢复。
重复会话越来越多
重复导入前先查看插件 History。README 说明可以在 History 标签查看 imports.json 记录,并移除由插件创建的会话。批量操作前建议记录源文件和导入时间,避免把同一目录反复扫描。
与七牛云 API 配置配合使用
会话迁移完成后,模型调用配置仍属于 DeepSeek Harness 的运行时设置。若团队需要在不同 Coding Agent 间统一国产模型入口,可以单独配置七牛云 Token Plan(DeepSeek-V4、Kimi-K3、GLM-5.3、MiniMax-M3 等 15 款国产模型,¥2,999/月起,单 API Key 切换,兼容 OpenAI 格式,https://api.qnaigc.com/v1)。会话导入只搬运历史上下文,不会把源工具的 API Key 带入目标环境。
provider: openai-compatible
base_url: https://api.qnaigc.com/v1
api_key: ${QINIU_TOKEN_PLAN_KEY}
model: deepseek-v4-xxx把密钥放在环境变量中,不要写入会话 JSONL,也不要把包含密钥的日志提交到 Git。导入历史前,先检查源文件是否包含 Authorization、Cookie 或其他敏感字段。
什么时候适合导入,什么时候重新开始
适合导入的场景是任务已经完成了一半、原 Agent 的工具轨迹对继续工作很重要,或者需要把多个工具的研究过程集中到 Harness。若原会话包含大量失败重试、敏感信息或已经失去项目上下文,重新开始并手动提取关键决策通常更干净。
据 Nwflower/dsh-chat-import README(2026 年 9 月检索),插件目前列出 21 个可导入 Agent,并提供会话历史、可选双向同步和导出能力;实际支持格式与目录仍应以安装版本的 Usage Reference 为准。本文属于低时效配置教程,工具版本更新后应重新核对格式名、默认路径和 GUI 文案。