DeepSeek Harness 蓝皮书
用户指南

从 Codex / Claude Code 迁移

三条迁移路径:模型层兼容(Responses API)、复用现有 hooks.json(hook 桥接)、原生 Cordis 插件

如果你正在使用 OpenAI Codex 或 Anthropic Claude Code,DeepSeek Harness 提供了三条渐进式的迁移路径。本页基于上游仓库的 hooks 子系统文档与 DeepSeek API 官方公告整理。

先想清楚:要不要迁移

Harness 仍处于开发者预览阶段,而 Codex 与 Claude Code 是成熟产品。如果当前工具已经满足需求,不必因为 DeepSeek 官方基准使用 Harness 就立即迁移——基准成绩是「模型 + Harness + 配置 + 工具环境」的系统成绩,见评测口径

三条路径可以按需组合,互不冲突:

路径做法适合
1. 模型层兼容继续用 Codex,把模型指向 DeepSeek API想先用上 DeepSeek V4,不想换工具
2. Hook 桥接迁移到 dsh,复用现有 hooks.json团队已沉淀 hooks 工作流,想平缓切换
3. 原生插件用 Cordis 插件在扩展点上重写定制逻辑长期投入、需要类型化返回与更强能力

路径一:模型层兼容

DeepSeek API 已原生支持 OpenAI Responses API 格式,并针对性适配 Codex;官方文档提供一键配置脚本完成 Codex 的接入(见 DeepSeek API 官方公告)。模型接入细节见配置模型

这一步几乎零成本

不改工作流、不换编辑器,只换模型端点,即可对比 DeepSeek 模型在你的任务上的表现。这也是评估「模型 vs 工具」贡献的最快方法。

路径二:Hook 桥接

Harness 的 hooks 子系统允许把现有的 Claude Code / Codex hook 配置直接指给桥接插件,让这些外部 shell hook 在 Harness 的类型化拦截点上继续运行。两个桥接均为 Cordis 插件:

Claude Code 桥接(dsh-hooks-claude-code

读取 Claude Code 的 hooks.json(或 settings 文件的 hooks key),映射的 hook 点:

Claude Code hook行为
SessionStartadditionalContext 注入新会话(不可阻塞)
UserPromptSubmitdeny → 拒绝该步;additionalContext → 追加上下文
PreToolUsedeny → 拒绝工具调用;ask → 转为审批请求
PostToolUsedeny → 带反馈阻断;additionalContext → 前置上下文
Stop阻塞 Stop 并把原因送回,强制 agent(智能体)再执行一步
SubagentStart / SubagentStop注入上下文 / 仅观测

cordis.yml 中启用:

- dsh-hooks-claude-code:
    configPath: ./.claude/hooks.json
    pluginRoot: ./.claude/plugins/my-plugin
    projectDir: .
  • configPath:必填;进程级配置,启动时解析一次。
  • pluginRoot:替换命令里的 ${CLAUDE_PLUGIN_ROOT}
  • projectDir:替换 ${CLAUDE_PROJECT_DIR} 并设置 hook 环境变量,缺省为会话 cwd。
  • 只运行 type: 'command' 的 hook;http / mcp_tool / prompt / agent 会被解析并跳过(记录警告)。
  • hook 进程在会话工作区目录运行;多个 hook 按配置顺序串行执行,决策按最严格方式折叠(deny > ask > allow)。

Codex 桥接(dsh-hooks-codex

读取 Codex 的 hook 配置,实现其 10 个 hook 点中的 5 个:PreToolUsePostToolUseSessionStartUserPromptSubmitStop

- dsh-hooks-codex:
    configPath: ./.codex/hooks.json
    model: deepseek-v4
  • matcher 一律按正则解释;stdin payload 为 snake_case,额外携带 turn_idmodel
  • 不注入 Codex 插件环境变量,也不做配置期占位符替换。
  • 没有工具预审批或改写路径:hook 可以阻塞,但不会预批准或替换工具输入。
  • 只运行同步 type: 'command' hook;async: true 会被跳过(记录警告)。

桥接的边界

桥接是兼容路径,不是完整能力

两个桥接都只覆盖各自协议的一个子集。解析失败会被隔离(记录警告、不注册任何内容),不会拖垮启动;但原生 Cordis 插件能做桥接能做的一切,且具有类型化返回、无序列化边界。所有深度定制都应迁移到原生插件(见开发者指南)。

路径三:原生 Cordis 插件

hook 桥接底层是 Harness 的类型化拦截点agent/pre-steptools/pre-executetools/post-execute 等,见 Host 服务与事件)。一个「原生 hook」就是挂在同一批扩展点上的普通 Cordis 插件——把外部 shell hook 协议翻译到这些点上,就是桥接做的事;你自己写插件时直接消费这些点即可。

常见概念对照

Codex / Claude CodeDeepSeek Harness
hooks.json(shell hook)cordis.yml 插件(或 hook 桥接兼容层)
PreToolUse deny / asktools/pre-execute waterfall 决策(deny / ask)
${CLAUDE_PLUGIN_ROOT}桥接的 pluginRoot 配置
产品自带审批内置 permission preset(权限预设)与审批策略
终端 CLIWeb GUI / headless / CLI 三形态

建议路线

  • 先跑通模型层兼容(路径一),用你自己的任务集做 A/B;
  • 需要沿用 hooks 工作流时接入桥接(路径二),并逐步把高频 hook 改写为原生插件(路径三);
  • 迁移期间保留旧工具作为回退,双轨运行一段时间再切换。

相关页面

本页目录