🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Codex 双向接力 Hoemr/dsh-codex-handoff

DeepSeek Harness
Hoemr9 天前有提交已提供中文文档扫描:含敏感能力

在 Codex 与 DSH 间自动派发任务并回传结果

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Hoemr/dsh-codex-handoff
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 9 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 21 处,展示前 16 条)
  • 执行外部命令固定命令
    lib/index.js:37
    const r = spawnSync('which', [cmd], { encoding: 'utf8' });
  • 读取本地文件
    lib/index.js:54
    if (typeof c === 'string' && c.trim() !== '' && existsSync(c)) return c.trim();
  • 执行外部命令来自配置/变量
    lib/index.js:130
    const child = spawn(bin, args, {
  • 读取本地文件
    lib/index.js:188
    if (existsSync(outFile)) finalText = readFileSync(outFile, 'utf8').trim();
  • 读取本地文件
    lib/index.js:188
    if (existsSync(outFile)) finalText = readFileSync(outFile, 'utf8').trim();
  • 执行外部命令来自配置/变量
    lib/index.js:216
    const child = spawn(bin, ['exec', 'resume', thread, message], {
  • 执行外部命令来自配置/变量
    lib/index.js:224
    const r = spawnSync(bin, ['queue', '--thread', thread, '--message', message], {
  • 读取本地文件
    lib/index.js:242
    if (!existsSync(file)) return [];
  • 读取本地文件
    lib/index.js:244
    for (const line of readFileSync(file, 'utf8').split('\n')) {
  • 读取本地文件
    lib/index.js:339
    if (!existsSync(cwd)) {
  • 执行外部命令固定命令
    bin/bridge.mjs:86
    const r = spawnSync('which', ['codex'], { encoding: 'utf8' });
  • 执行外部命令来自配置/变量
    bin/bridge.mjs:159
    const r = spawnSync(finder, [cmd], { encoding: 'utf8' });
  • 执行外部命令固定命令
    bin/bridge.mjs:170
    const r = spawnSync('ps', ['-o', 'ppid=,comm=', '-p', String(pid)], { encoding: 'utf8' });
  • 执行外部命令来自配置/变量
    bin/bridge.mjs:299
    const child = spawn(DSH_BIN, args, {
  • 执行外部命令来自配置/变量
    bin/bridge.mjs:440
    const r = spawnSync(CODEX_BIN, ['queue', '--thread', threadId, '--message', message], {
  • 执行外部命令来自配置/变量
    bin/bridge.mjs:455
    const child = spawn(CODEX_BIN, ['exec', 'resume', threadId, message], {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

Codex 与 DeepSeek Harness 双向交接,无需操作电脑:从 Codex 派发 DSH 任务,结果回到同一线程。附带一个 Codex 技能、一个 DSH 插件和一个零依赖命令行。

README

由 DeepSeek 最新模型翻译生成
dsh-codex-handoff 让 Codex 和 DeepSeek Harness(DSH)双向自由流转:不用 CUA、不用浏览器、不用你人工转达。 English · 更新日志 · MIT Codex 说:“这块交给 DSH 做” │ dsh-bridge ask --background ▼ DSH 会话开始干活(真实、可续聊、能在 DSH 界面里打开) │ DSH 进程退出 = 完成 ▼ codex queue --thread <原 Codex 线程> ← 结果作为一条新用户消息回到原来的 Codex 对话 │ ▼ Codex 自己接着往下干,全程没人通知 目录 - 为什么需要它 - 和其他 codex–dsh 插件的区别 - 快速开始 - 两种形态 - 工作原理 - 配置文件与命令 - 设计要点与安全边界 - 兼容性与已知限制 - 目录结构 - License 为什么需要它 用 Codex 当「大脑」、让 DSH 当「手」的人,通常会卡在同一个地方: 1. Codex 想把活交给 DSH —— 只能靠 CUA/浏览器打开 DSH,新建对话、粘贴任务; 2. DSH 干完了 —— 没有任何机制告诉 Codex,只能由人复述一句「DSH 做完了」。
展开完整文档(README 剩余 1 节)
dsh-codex-handoff

让 Codex 和 DeepSeek Harness(DSH)双向自由流转:不用 CUA、不用浏览器、不用你人工转达。

English · 更新日志 · MIT

Codex 说:“这块交给 DSH 做” │ dsh-bridge ask --background ▼ DSH 会话开始干活(真实、可续聊、能在 DSH 界面里打开) │ DSH 进程退出 = 完成 ▼ codex queue --thread <原 Codex 线程> ← 结果作为一条新用户消息回到原来的 Codex 对话 │ ▼ Codex 自己接着往下干,全程没人通知

目录

- 为什么需要它
- 和其他 codex–dsh 插件的区别
- 快速开始
- 两种形态
- 工作原理
- 配置文件与命令
- 设计要点与安全边界
- 兼容性与已知限制
- 目录结构
- License

为什么需要它

用 Codex 当「大脑」、让 DSH 当「手」的人,通常会卡在同一个地方:

1. Codex 想把活交给 DSH —— 只能靠 CUA/浏览器打开 DSH,新建对话、粘贴任务;
2. DSH 干完了 —— 没有任何机制告诉 Codex,只能由人复述一句「DSH 做完了」。

本仓库把这两步都变成接口调用:

- Codex → DSH:dsh-bridge ask 启动 dsh --profile headless --json,得到一个真实、会落盘、能在 DSH 侧栏打开、可续聊的会话。
- DSH → Codex:DSH 结束后,dsh-bridge 用 Codex 自己的持久队列(codex queue --thread $CODEX_THREAD_ID)把结果作为一条新的用户消息投回原 Codex 线程,Codex 自动开下一轮。
- DSH → Codex(反向派发):DSH 侧装了原生插件后,可以直接调 codex_task / codex_send / codex_threads 把活派回 Codex。

和其他 codex–dsh 插件的区别

版本与描述核对于 2026-10-23,以各项目当时公开的 npm / 仓库 README 为准。生态变化很快,欢迎提 PR 修正。

| 项目 | 形态 | 方向 | 与它的关键差异 |
| dsh-codex-handoff(本项目) | DSH 原生插件 + Codex skill + CLI,同一仓库 | 双向 | 唯一把「DSH 完成后自动回传 Codex 原会话」做成闭环:复用 Codex 持久队列,结果是对话里的下一轮,不是新线程、不是轮询 |
| @esroamer/codex-dsh-collab 0.2.0 | DSH 插件 + Codex skill | Codex → DSH 单向 | 其 README 声明需要 Windows,并明确写着「DSH 不会主动唤醒空闲的 Codex 会话」——回传这一段留给了人 |
| dsh-codex-workflow 1.1.14 | DSH 插件 | Codex 计划/审查,DSH 执行 | 定位是「Codex 只做只读规划与审查」;设计上原始 Codex 任务 never resumed,结果走它自己的 SQLite 桥,不回到你的 Codex 对话 |
| dsh-session-bridge 0.7.0 | DSH 插件(agent 工具) | 在 DSH 内部驱动会话 | 能给 DSH 新建/驱动会话、等回复,但没有 Codex 侧入口,Codex 无法调用它 |
| dsh-acp-door 0.2.0 | DSH 插件 | 对外暴露 ACP 入口 | 解决「运行中的 DSH 可被外部程序驱动」,但客户端要自己实现 ACP;Codex 不是 ACP 客户端 |
| dsh-agent-relay 0.5.0 | 中继 + 插件 + CLI | 多 agent 消息总线 | 通用消息中继,不负责唤醒某个 Codex 会话,各端还要常驻客户端 |
| dsh-codex-sync 1.6.2 / codex2dsh 0.1.4 / dsh-bridges | DSH 插件 | 静态迁移 | 迁移 skills、MCP、配置或历史会话,不涉及实时双向协作 |
| dsh-llm-codex-app-server / dsh-codex-connect(-plus) | DSH 插件 | 模型接入 | 把 Codex/Codex 模型当成 DSH 的模型提供方,不是 agent 之间的派活与回传 |

我们的定位一句话:不是「让 Codex 指挥 DSH」,也不是「把 Codex 的配置搬进 DSH」,而是让两个 agent 互相派活、并把结果送回对方原本那轮对话里——两边都有原生入口,两个方向都能续聊。

具体差异:

1. 回传是「对话级」的,不是「任务级」的。 结果经 codex queue 进入原线程的持久队列(带 revision 触发器),Codex 那一边表现为「用户又发了一条消息」,因此它会自然地继续推理,而不是收到一个孤立的结果文件。
2. 双向都是原生接口。 Codex 侧是技能(自然语言触发),DSH 侧是 codex_task / codex_send / codex_threads 原生工具(结构化调用,受 DSH 取消信号控制)。
3. 不碰 UI。 全程进程 + 队列 + stdio,没有截图、点击、坐标,也不依赖浏览器。
4. 一套协议、三种用法。 命令行、Codex 技能、DSH 插件共用同一份会话映射(session-… ↔ Codex thread-id)。
5. 明确的防误伤设计。 只在「调用链来自 Codex」时才使用继承来的 CODEX_THREAD_ID,避免把结果灌进无关会话;凭据只在内存注入,不落盘、不打印。

快速开始

环境:macOS(主要验证平台)、Node ^22.19 或 >=24、已安装 Codex 命令行与 DSH Desktop。

git clone https://github.com/Hoemr/dsh-codex-handoff.git
cd dsh-codex-handoff
./install.sh --with-plugin # 装 Codex skill + dsh-bridge 命令 + DSH 插件(desktop profile)

装完 重启 DSH(插件只在启动时加载),然后:

- 在 Codex 里说:「这个任务交给 DSH 做:<任务>」——Codex 会 dsh-bridge ask --background 派活并结束本轮;DSH 完成后结果自动回到这个对话。
- 在 DSH 里说:「问一下 Codex:<问题>」——DSH 会调 codex_task 等 Codex 回答。

自检:

dsh-bridge doctor # 检查 dsh / codex / 模型配置 / 凭据 / 回告目标 dsh-bridge status # 最近的派发与回告记录

要求 DSH 打开一个超过几秒的任务时,用 --background:阻塞模式会占住 Codex 的一次工具调用,长任务容易撞上 shell 超时。

两种形态

1) Codex 技能(skills/dsh-bridge)

安装后对 Codex 说人话即可触发,它会调用:

dsh-bridge ask --background [--workspace DIR] [--session session-xxxx] -- "<task>"
dsh-bridge ask -- "<task>" # 短任务:本轮内等结果 dsh-bridge status / dsh-bridge doctor

技能里已经写清了触发条件、后台/阻塞的选择、续聊方式以及沙箱报错时的处理方式。

2) DSH 原生插件(lib/)

装进 DSH 配置档后注册三个工具:

| 工具 | 作用 |
| codex_task | 派任务给 Codex 并等它返回最终回答;传 thread 可续聊同一 Codex 会话 |
| codex_send | 往已有 Codex 会话投递一条消息(默认走持久队列,不等待) |
| codex_threads | 列出最近的本机 Codex 会话(id / 标题 / 更新时间) |

插件零依赖,只 import Node 内置模块,不触碰 DSH 内部包。

工作原理

┌──────────────┐ dsh-bridge ask --background ┌───────────────────────────┐
│ Codex 会话 │ ───────────────────────────► │ dsh --profile headless │
│ (thread T) │ │ --json [--session-id S] │
└──────────────┘ └─────────────┬─────────────┘
▲ │ NDJSON 事件 │ ▼ │ session / status / text / final │ │ │ codex queue --thread T --message "【DSH 已完成】…" │ 进程退出 = 完成 └────────────────────────────────────────────────────┘

DSH 内的反向:codex_task ──► codex exec --json --output-last-message ◄── final answer + thread-id

- 完成信号:dsh-bridge 是 DSH 的父进程,进程退出即完成,不需要 DSH 钩子。
- 会话续聊:DSH 侧 --session session-…;Codex 侧 thread / codex_send。
- 模型一致:自动从 DSH 的 desktop/web 配置档抽 agent-default-model + llm-pi-ai 生成补丁,headless 会话用的是你在 GUI 里选的同一个模型;凭据从 ~/.dsh/.credentials.yaml 读入子进程环境。

配置文件与命令

dsh-bridge ask [--workspace DIR] [--session ID] [--background] [--notify auto|queue|resume|off]
[--thread ID] [--json] [--raw] [--timeout SEC] [--] <task...>
dsh-bridge codex [--thread ID] [--workspace DIR] [--json] [--] <task...>
dsh-bridge notify --thread ID --message TEXT [--mode queue|resume]
dsh-bridge status [--limit N] [--json]
dsh-bridge doctor

| 选项 | 说明 |
| --background | 立即返回;结果稍后自动回到 Codex 会话。长任务用这个 |
| --session | 续用已有 DSH 会话,保持上下文 |
| --notify | 回告方式:auto(默认,从 Codex 调用时走 queue)、queue、resume、off |
| --thread | 回告目标 Codex 线程(默认取 CODEX_THREAD_ID,带调用链安全检查) |
| --json | 输出一行 JSON 摘要,给 Agent 解析用 |

环境变量:DSH_BIN CODEX_BIN DSH_HOME DSH_BRIDGE_HOME DSH_BRIDGE_PROFILE

插件配置(profile 的 cordis.patch.yml): yaml
- id: codex-bridge
name: 'dsh-codex-handoff'
config:
codexBin: '' # 空 = 自动探测 $CODEX_BIN → which codex → ChatGPT.app sandbox: workspace-write # read-only | workspace-write | danger-full-access timeoutMs: 900000 # codex_task 默认超时

设计要点与安全边界

1. 为什么要调用链检查:CODEX_THREAD_ID 会被子进程继承。如果 DSH 恰好是从某个 Codex 终端里启动的,这个变量就是过期值;直接投回去会污染无关会话。桥只认「最近的 agent 祖先是 Codex」的情况,--thread 可显式覆盖。
2. 凭据不落地:OPENCODE_GO_API_KEY 等只在生成子进程环境时从 ~/.dsh/.credentials.yaml 读取,不写日志、不写配置。
3. 状态目录可降级:Codex 沙箱不允许写 $HOME 时自动落到 $TMPDIR/dsh-codex-handoff。
4. 不修改 DSH / Codex 本体:桥只读写它们自己的持久化数据,并调用官方 CLI 入口(dsh --profile headless、codex exec、codex queue)。
5. 沙箱:桥必须跑在 Codex 沙箱外(DSH 要写 ~/.dsh)。skill 会在遇到 EPERM/read-only 时提示用提升权限重跑;想彻底零点击,可把 Codex 设为 sandbox_mode = "danger-full-access"(自行评估风险)。

兼容性与已知限制

- 已在 macOS 实测:DSH 0.2.1-rc.2 + Codex CLI 0.163;Linux/Windows 的路径探测已做兼容处理,但未实测,欢迎反馈。
- 回传需要 Codex 会话处于「活」状态(桌面端/TUI)。Codex 完全关闭时消息留在持久队列里,下次打开该会话消费;需要立刻推进用 --notify resume。
- headless 会话不是 GUI 里的「正在运行」会话:它真实存在、可续聊,在 DSH 侧栏历史里打开即可。
- 未发布 npm:目前通过 git clone + install.sh 安装。
- 本项目的「回传」依赖 Codex 的 queue 子命令;更老的 Codex CLI 没有该子命令时会自动降级到 exec resume。

目录结构

dsh-codex-handoff/
├── lib/index.js # DSH 原生插件(codex_task / codex_send / codex_threads) ├── lib/index.d.ts ├── cordis.patch.yml # 插件挂载配置 ├── bin/bridge.mjs # CLI 与桥的全部逻辑(零依赖) ├── skills/dsh-bridge/SKILL.md # Codex 技能 ├── install.sh # 一键安装(skill + 命令 + 可选插件) ├── package.json ├── README.md / README.en.md ├── CHANGELOG.md └── LICENSE

开发 bash
npm run check # 语法检查
npm run doctor # 本机环境体检

装到自定义 profile: bash
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
plugin --profile <name> add /path/to/dsh-codex-handoff

卸载:dsh plugin --profile <name> remove dsh-codex-handoff,并删除 ~/.codex/skills/dsh-bridge、~/.local/bin/bridge、~/.dsh-codex-handoff。

License

MIT
预览分享卡片长什么样 ↓Hoemr/dsh-codex-handoff
分享 · DeepSeek Harness Hub
Hoemr/dsh-codex-handoff

在 Codex 与 DSH 间自动派发任务并回传结果

回到顶部