前言¶
DeepSeek Harness(下称 DSH)的设计理念是「一切皆插件」,模型推理也由 provider 插件承担。如果你本机已经登录了 Codex CLI,希望在 DSH 会话里直接选用 Codex 原生账号公开的模型和推理强度,而不是在两套工具之间手动搬运上下文,就需要一个桥接层。下面介绍的 @necokeine/dsh-codex-relay 就是做这件事的插件。
这是什么¶
dsh-codex-relay 是 necokeine 维护的 DSH 模型提供方插件,属于模型推理类别,当前版本 0.1.2,许可证为 MIT。它通过本机 codex app-server --stdio 的 JSON-RPC 接口读取当前 Codex 账号可用的模型,并把每次模型请求交给 Codex 原生 agent loop。
一个关键设计:Codex 的工具调用、命令执行和文件修改都在原生 Codex turn 内完成。DSH 不向 Codex 发送自己的工具 schema,也不会重复执行 Codex 已完成的工具调用,只记录请求和最终回答。
前置条件¶
安装前先确认三件事:
- Node.js
^22.19.0或>=24.0.0 - DeepSeek Harness
0.1.1-rc.2 - 本机已通过 Codex CLI 登录
插件使用依赖包提供的 binary,不依赖 PATH 中的其他 codex 版本。
安装与启用¶
从 npm 安装,先加插件,再确认配置,最后启动:
dsh plugin --profile default add @necokeine/dsh-codex-relay
dsh --profile default --dump-config
dsh --profile default
第一条命令把插件加入 default profile;第二条 dump 配置,用来确认插件已正确加载;第三条启动 DSH。
如果要从源码安装,先克隆仓库并安装依赖,再把本地目录加入 profile:
git clone https://github.com/necokeine/dsh-codex-relay.git
cd dsh-codex-relay
pnpm install
dsh plugin --profile default add "$PWD"
dsh --profile default --dump-config
dsh --profile default
源码安装时本地目录使用 pnpm link:,不会代替源码目录安装依赖,prepare 脚本会同时生成 lib/。注意从 Git 仓库安装源码时,pnpm 会要求显式允许该包的 prepare 构建脚本;发布到 npm 或使用 pnpm pack 生成的 tarball 携带预构建的 lib/,无需安装时构建。
插件的 package.json 通过 dsh.bundle 声明把 cordis.patch.yml 加入 profile。该层使用稳定行 ID llm-codex:若当前 DSH 版本内置了同名原型行,插件层会替换它;否则直接插入。
选择模型¶
经过上面的步骤启动 Web 界面后,在模型设置页选择 Codex,再选择 Codex 原生账号公开的模型和推理强度。会话中的模型选择器也会出现 Codex 选项。
配置¶
插件设置保存在 dsh-codex-relay namespace,默认值如下:
dsh-codex-relay:
permissionMode: inherit
disposeGraceMs: 3000
env: {}
permissionMode:inherit(默认)、never、approve-for-me或dangerously-bypass-approvals-and-sandboxdisposeGraceMs:Codex app-server 进程树终止宽限时间,单位为毫秒env:显式传给 Codex 子进程的环境变量;原生登录和账号状态仍由 Codex home 管理retryPolicy:DSH LLM provider 的失败重试策略
permissionMode 的四个值行为不同。inherit 按每个 DSH 会话的实时审批策略决定 Codex 权限:
- DSH 界面为
ask时,Codex 使用workspace-write和approvalPolicy: on-request。命令沙箱提升、额外文件写入与权限扩展请求会进入同一个 DSH 审批界面;单次允许只映射为 Codex 的单次accept,不会静默升级为整场会话授权。这样git commit创建.git/index.lock这类需要提升权限的操作可以由用户批准。 - DSH 界面为
never时,Codex 仍可在普通工作区内写文件,但所有需要提升权限的操作都会被拒绝,也不会弹出审批。
其余三个值是插件级覆盖:never 固定拒绝提升权限;approve-for-me 交给 Codex 原生自动审查器;dangerously-bypass-approvals-and-sandbox 关闭沙箱与交互审批,风险最高,只应在已隔离且完全可信的工作区使用。
另外,session-title 和 compaction 辅助请求不继承普通会话权限,始终强制使用 approvalPolicy: never 和 sandbox: read-only,并要求 Codex 不使用工具或修改外部状态。
运行机制¶
每次目录读取或模型调用都会启动一个临时 app-server 进程。模型调用在当前 DSH Session 的工作目录创建 ephemeral Codex thread,注入持久的 user/assistant 历史,随后执行一个原生 Codex turn。插件等待 terminal notification,只把 final answer 转成一个 DSH text block;完成、失败或取消后会终止并等待整个子进程树退出。
插件使用固定的 bridge instruction:
You are running as the selected Codex model provider inside DeepSeek Harness. Use only your native Codex tools and agent loop. Do not emit DeepSeek Harness tool calls; the host records your final answer.
已知限制¶
使用前需要了解四点:
- 当前只向 DSH 声明文本输入,图片会在调用前投影为稳定的省略提示。
- 插件等待 Codex terminal notification 后一次性输出最终文本,不投影增量文本或 token usage。
- Codex 原生工具轨迹不会转换为 DSH
tool/call和tool/result事件;DSH Session 记录请求和最终回答,不记录 Codex 私有轨迹。 temperature、maxTokens、stop和 DSH 工具 schema 没有映射到该集成。
如果需要 DSH 侧的完整工具轨迹或流式输出,这个插件目前不满足。
适用场景与注意¶
这个插件适合已经登录 Codex CLI、想在 DSH 中直接选用 Codex 模型和推理强度、并且能接受「工具调用留在 Codex 侧、宿主只记录最终回答」这种记录方式的用户。
需要注意:插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证。社区目录(skillhub.cn)是独立站点,与 DeepSeek / 幻方没有官方从属关系,安装任何第三方插件都建议先审阅代码。另外,dangerously-bypass-approvals-and-sandbox 会关闭沙箱与交互审批,只应在已隔离且完全可信的工作区使用。
小结¶
dsh-codex-relay 把 Codex 原生账号的模型能力以标准 provider 插件的形式接入 DSH:安装后即可在模型设置页选用,权限模型可以通过 permissionMode 精细控制,工具调用完全留在 Codex 原生 turn 内。代价是 DSH 侧看不到工具轨迹和增量输出,适合以最终回答为主的用法。
- 目录页:https://www.skillhub.cn/plugins/necokeine/dsh-codex-relay
- GitHub:https://github.com/necokeine/dsh-codex-relay