deepseek-harness-external-migration:把 Codex、Claude Code 的配置和会话迁进 DeepSeek Harness

前言

DeepSeek Harness(dsh)是 DeepSeek AI 开源的 agent 框架,核心设计是「一切皆插件」:模型、工具、会话、存储都可以在配置层替换,不必改核心源码。它目前仍处于开发者预览阶段,迭代很快。

很多人并不是从空白环境开始用 dsh。此前可能已经在 Codex、Claude Code、Qoder 或 OpenCode 里攒了一批 MCP 配置、skills、以及很长的历史会话。换工具时真正耗时间的,往往不是安装新环境,而是这些积累要不要手工复制,复制时会不会把 token 一起带过去。

社区插件目录里有一个专门处理这件事的插件:deepseek-harness-external-migration。下面根据插件目录页和 GitHub 仓库交叉核实后,说明它能迁什么、怎么装、怎么用,以及明确不会做的事。

需要先分清来源:DeepSeek Harness 本身的仓库在 deepseek-ai/deepseek-harnessdeepseek-harness-plugin.com 是社区整理的插件目录,与 DeepSeek / 幻方没有官方从属关系,不能把它当成官方应用商店。安装任何第三方插件前,都应先看源码和许可证。

这是什么

deepseek-harness-external-migrationbuguoshixc 维护,MIT 许可证,主要语言是 JavaScript。package.json 中的版本是 0.1.0。社区目录把它归在「工具与能力」分类;目录页与 GitHub 目前都显示 4 颗星。

它要解决的问题很具体:把 Codex、Claude Code、Qoder(也接受 qcoder 这个别名)和 OpenCode 的配置线索与历史会话,迁到 DeepSeek Harness,不必手工复制粘贴。仓库 README 把流程写成「扫描 → 预览 → 明确确认导入」:

  • 源目录始终只读,源文件不会被修改。
  • 会话写入 Harness 当前启用的原生持久化后端。
  • 配置先导出成可审阅的迁移包,不会直接覆盖现有配置。
  • 认证信息不会被复制;MCP 密钥会替换成环境变量引用,生成的 MCP 配置也不会自动生效。

能迁移什么

README 给出的支持范围如下。

来源 历史会话 配置与扩展
Codex sessions/**/*.jsonl,可选 archived_sessions/**/*.jsonl config.toml 中的 MCP、模型/权限摘要,AGENTS.md、prompts、skills
Claude Code ~/.claude/projects/*/*.jsonl 用户/项目 settings、.mcp.jsonCLAUDE.md、commands、agents、skills
Qoder ~/.qoder/projects/*/transcript/*.jsonl 用户/项目 settings、.mcp.json、commands、agents、skills
OpenCode 当前 opencode.db 的 session/message/part 表,也兼容旧 storage/ JSON 树 opencode.json / opencode.jsonc、AGENTS、commands、agents、skills

迁移后的会话使用 Harness 的 turn/startuser/messageassistant/messagesession/title 等原生事件,可被 JSONL 或 SQLite 持久化实现读取。每个会话还会带一个可忽略的来源事件,记录来源、源会话 ID 和内容指纹,用来避免重复导入。

默认查找根目录是:

Codex:    $CODEX_HOME 或 ~/.codex
Claude:   $CLAUDE_CONFIG_DIR 或 ~/.claude
Qoder:    $QODER_HOME 或 ~/.qoder
OpenCode: $XDG_DATA_HOME/opencode 或 ~/.local/share/opencode
配置:     $XDG_CONFIG_HOME/opencode 或 ~/.config/opencode

数据不在默认位置时,可以给插件配置 roots 覆盖。README 特别提醒:Harness 后续 patch 会整体替换该行的 config,要重述所有希望保留的字段,不能只写改动的那一项。

三个模型端工具

插件向模型暴露三个工具,职责分开,写入只发生在最后一步。

1、external_migration_scan:只读盘点。它读取目录、文件元数据和用于摘要的配置,不读取会话正文,不返回认证值,也不写任何内容。适合先看「有哪些可迁对象」,再决定要不要继续。

2、external_migration_preview:只读解析。它会解析会话,返回标题和少量正文预览,仍然不写任何内容。适合在导入前确认「迁过来的是不是我想要的那几段对话」。

3、external_migration_import:真正写入。必须传入 confirm=true 才会执行;它把会话写入 Harness,并生成配置迁移包。

默认每种来源最多处理最近 200 个会话,单个会话文件上限 25 MiB。完全相同的会话再次导入会被跳过;源文件内容变化后会产生一个新的导入版本,旧版本不会被删除。

安装与启用

运行环境要求来自仓库 README:DeepSeek Harness 0.1.0-rc.5 或更高兼容版本,以及 Node.js 22.19+24+package.json 里对应的 peer 依赖是 @deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-tools^0.1.0-rc.5

社区目录页给出的安装命令是:

dsh plugin add github:buguoshixc/deepseek-harness-external-migration

如需可复现安装,目录页建议固定 commit 哈希。当前仓库 main 分支最新提交是 12218a3f6d59370567ab92e6bde410ca4ccdd769(2026-08-14),可以写成:

dsh plugin add github:buguoshixc/deepseek-harness-external-migration#12218a3f6d59370567ab92e6bde410ca4ccdd769

仓库 README 另外提供了本地安装方式。本包声明了 dsh.bundle.patch,因此 dsh plugin 会把它作为所选 profile 的配置层激活。把路径换成本机绝对路径后,可以安装已打包文件或源码目录:

dsh plugin --profile web add /absolute/path/deepseek-harness-external-migration-0.1.0.tgz
dsh plugin --profile web add /absolute/path/deepseek-harness-external-migration

安装完成后需要重启该 profile。插件以当前 dsh 进程的权限运行,安装时可能执行代码,安装前应检查源代码仓库和许可证。

典型用法

安装并重启 profile 之后,直接在 Harness 对话里按三步说即可。下面三句来自仓库 README:

1、先盘点,明确不要导入:

扫描 Codex、Claude Code、Qoder 和 OpenCode 的可迁移内容,不要导入。

2、再预览指定来源:

只预览 Codex 和 Claude 最近 10 个会话。

3、检查结果后,再确认写入:

确认导入刚才预览的来源,并导出配置迁移包。

配置迁移包默认写到:

$DSH_HOME/migrations/external-agents/

其中通常包含:

  • migration-report.json:来源、映射结果、未支持项、需要设置的环境变量。
  • cordis.mcp.patch.yml:可审阅的 MCP 插件配置层。
  • artifacts/:可审阅的指令、commands、agents 和 skills 文本副本。
  • README.txt:应用检查清单。

插件不会自动应用 cordis.mcp.patch.yml。检查报告并设置所列环境变量后,可以在启动时试用(把路径换成实际文件位置):

dsh --profile web --patch /absolute/path/cordis.mcp.patch.yml

确认无误后,再把该配置层合并到自己的 profile 流程中。

认证信息不会写入迁移包。名称里带 token、secret、password、api key、auth、credential 的环境变量或请求头,看起来像 API token 的参数值,以及 URL 中的用户名、密码或疑似密钥查询参数,都会被替换成 process.env[...] 引用。需要设置的变量名列在 migration-report.json。OpenCode / Claude / Qoder 的 WebSocket MCP 配置只会报告为不支持,不会错误转换。

适用场景与注意事项

这个插件适合已经在 Codex、Claude Code、Qoder 或 OpenCode 里积累了会话和配置、准备把工作流接到 DeepSeek Harness 的人。它不是「一键覆盖现有 dsh 配置」的工具,配置部分默认只导出审阅包,要你自己检查后再合并。

仓库 README 列出了几条有意限制,使用前值得看完:

  • 原客户端的工具调用和工具结果会转成可阅读文本,不会伪装成可重新执行的 Harness 工具事件。
  • 图片和文件附件只保留占位说明,不复制二进制内容。
  • 模型和权限设置只写入摘要,因为不同客户端与 Harness 的语义并不一一对应;插件不会擅自降低 Harness 的安全策略。
  • 指令、commands、agents、skills 只复制到审阅目录,需人工检查后再合并。
  • 检测到常见私钥或 token 形态的文本扩展文件会标记为 possible-secret 并跳过,不写入审阅目录。
  • OpenCode 支持当前 message/part 的 SQLite 结构和旧 JSON 结构;如果将来完全切换到不同的 V2-only 表结构,需要新增适配器。

仓库还说明:测试使用合成数据,覆盖四种来源解析、OpenCode SQLite、事件日志生成、MCP 脱敏、配置导出和重复导入;维护者用 DeepSeek Harness 0.1.0-rc.6 的实际 SessionStore 与 JSONL 持久化后端做过烟雾测试。这是仓库自己的验证说明,不是第三方评测。

最后再强调一次安全边界。扫描工具只读盘点,不返回凭据、不写任何内容;预览仍然只读;导入必须显式确认。即便如此,插件仍以当前 dsh 进程权限运行,生成的迁移报告和 artifacts 里可能包含私有会话内容。安装前检查源码与许可证,导入前先看预览,应用 MCP 配置前先看 migration-report.json

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-harness-external-migration/

GitHub:https://github.com/buguoshixc/deepseek-harness-external-migration

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜