一句话:Codex 的配置是资产,不是牢笼。codex2dsh 帮你把多年积累的 MCP 服务器、技能、全局规则、记忆、会话历史「翻译」成 DSH 原生形态——迁移全程可视化操作、源码只读、密钥按原样迁移、dry-run 预览、人工确认。
搜索关键词:Codex → DeepSeek Harness 迁移 · MCP 服务器镜像 · 技能(Skills)转换 · 全局指令(AGENTS.md)· 记忆迁移 · 会话历史导入 · DSH 插件 · 可视化迁移面板 · 无命令行迁移
📸 截图预览
🖥️ 可视化使用指南(推荐)
打开迁移面板
安装插件并重启 DSH 后:
- 打开 设置 → 插件
- 找到 「Codex 迁移」 标签页
- 面板包含 5 个区域,从下到上操作即可完成迁移
面板功能一览
推荐流程(首次迁移)
- 看状态:打开面板先看「状态总览」——确认源配置根正确、了解有哪些资产、注意黄色凭据警告
- 走向导:点「开始全量迁移」
- 第 1 步 预览:查看各分类资产规模(零副作用)
- 第 2 步 选择:勾选要迁移的分类;MCP 与技能可在下方分类卡片细化勾选
- 第 3 步 执行:自动按 MCP → 技能 → 指令 → 记忆 → 配置 顺序执行,显示进度
- 第 4 步 完成:查看每类结果汇总(成功 / 跳过 / 警告)
- 细化选择(可选):在「分类迁移」里
- MCP 服务器:勾选要迁移的服务器(如只留
google-mcp-toolbox),本地工具目录会自动随迁并重写路径
- 技能:勾选想要的技能;用「排除前缀」批量取消勾选整套技能(如输入
ccpanes- 排除全部 ccpanes 技能)
- 收尾:迁移产物(如
mcp-mirror.cordis.yml)生成后,按产物中的提示人工审阅并合并进 DSH profile 即可使用(见 常见问题)
💡 每个「执行」按钮点击前都有确认框;所有写盘操作默认先「预览」,确认后再执行。
📥 安装
环境要求
- Node.js ≥ 22.13
- DeepSeek Harness
dsh ≥ 0.1.x(本插件在 0.1.1-rc.2 实测)
- 本机已有 Codex 配置(
~/.codex/,Windows 为 C:\Users\<你>\.codex\)
方式一:npm 包安装(推荐)
# DSH Desktop 用户(desktop profile):
dsh plugin --profile desktop add codex2dsh
# 或 dsh CLI / Web profile 用户:
dsh plugin --profile web add codex2dsh
安装后重启 DSH,即可在「设置 → 插件」看到「Codex 迁移」面板。
方式二:本地开发 / 试用最新版
dsh plugin --profile desktop add -w link:D:/Projects/codex2dsh # 替换为你的项目路径
卸载:dsh plugin --profile <name> remove codex2dsh,已迁移的资产不会被删除。
✨ 功能
🔧 命令行(可选)
codex2dsh preview # 只读预览全部可迁移资产
codex2dsh mcp --apply # 生成 MCP 镜像(密钥默认原样;--mask-secrets 脱敏)
codex2dsh skills --apply --exclude ccpanes-* # 技能迁移(排除 ccpanes)
codex2dsh titles # 预览:哪些导入会话缺标题、将补什么标题
codex2dsh repair-titles --apply # 修复坏标题事件(0.1.1 缺陷导致会话打不开;修复后重启 DSH)
codex2dsh regroup --apply # 整理工作区:非工作区会话统一归组(执行后重启 DSH)
codex2dsh doctor # 迁移体检
codex2dsh ledger # 查看迁移台账
🔒 安全说明
❓ 常见问题
MCP 迁移后如何让 DSH 真正用上这些服务器?
迁移生成的是待审阅片段(如 ~/.dsh/codex2dsh/mcp-mirror.cordis.yml)。请把片段中的 - insert: dsh-mcp-client 块合并进 profile 的 cordis.patch.yml(~/.dsh/profiles/<你的profile>/cordis.patch.yml),然后重启 DSH。
我该用哪个 profile?
DSH Desktop 用户看「设置 → 关于/插件」里当前激活的 profile(通常是 desktop 或你切换后的 web)——插件要装到当前激活的 profile 才会出现在设置里。用 dsh plugin --profile <当前profile> add codex2dsh。
连接 MCP 服务器失败?
部分服务器(如 Google MCP Toolbox)的 stdio transport 走 NDJSON 而非标准帧格式,DSH 的 MCP 客户端可能连不上。此时可改用 HTTP 模式:toolbox serve 常驻 + 镜像配置 type: http(url: http://127.0.0.1:5000/mcp)。如遇此类问题,可在 Issues 反馈,我们会给出适配指引。
迁移后技能/指令去哪了?
- 技能 →
~/.agents/skills/<name>/(可用 DSH_AGENTS_HOME 覆盖)
- 指令 →
~/.agents/instructions/
- 记忆 →
~/.dsh/memories/codex/
- MCP 镜像与台账 →
~/.dsh/codex2dsh/
导入的 Codex 会话标题丢了 / 显示成工作区名?
import_chat 不写 session/title 事件,DSH 会回退到首条 user 消息——而 Codex rollout 首条常是 harness 注入(<environment_context> / AGENTS.md),所以显示成路径/工作区名。修复:面板「会话导入 → 修复标题」按钮(或 codex2dsh_fix_titles 工具,apply: true),标题取自 ~/.codex/session_index.jsonl 的 thread_name,缺失时取 rollout 首条真实提问;只补不覆盖、可重复执行。委托导入后也会自动补。
会话打不开,报 SessionPersistenceCorruptionError: ... is not surface-eligible ...?
这是 0.1.1 早期回填缺陷:session/title 误带 surfaceOp 导致整份日志校验失败。修复:在 DSH 外执行 codex2dsh repair-titles --apply(截断清除坏事件,零数据丢失),重启 DSH 后重新点「修复标题」即可。
会话列表很乱:非工作区会话每个一个工作区、还排在最上面?
DSH 的 workspace 按会话工作目录(cwd)分组,而 Codex 非工作区会话的 cwd 是 Documents\Codex\<日期>\<主题> 这类一次性目录,迁移后各自成组,又因 C: 前缀字母序排前。修复:面板「会话导入 → 整理工作区」(或 codex2dsh regroup --apply)——按 Codex 官方标记(projectless-thread-ids)把非工作区会话统一改写 header.cwd 并移动到同一工作区目录,重启 DSH 后生效;其余工作区会话不动,排序恢复为按时间、与 Codex 一致。
卸载后数据会丢吗?
不会。插件从不自动删除已迁移资产;卸载只移除插件本身。
📚 文档
🤝 参与
🙏 致谢与引用的开源项目
本插件无运行时依赖,以下项目以可选协同 / 目标平台 / 格式契约方式被引用,特此致谢:
完整清单与致谢详见 docs/10-致谢与引用.md。
📄 许可
MIT License —— 见 LICENSE。
⚠️ 免责声明:本插件只负责「翻译」配置,不承担目标服务器、凭据与访问策略的合规责任;迁移含密钥的 MCP 配置前请务必阅读 docs/09-安全边界.md。