把边界明确的任务交给本地 DSH 执行并验收
30.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add aototo/codex-subagent-dsh该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 41 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包codex-subagent-dsh(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.13.0 <23 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/6 14:18:46
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 19 处,展示前 19 条)
- 写入本地文件src/auth.ts:44
await mkdir(config.stateDir, { recursive: true, mode: 0o700 }); - 读取本地文件src/auth.ts:45
const stateInfo = await lstat(config.stateDir); - 写入本地文件src/auth.ts:49
await chmod(config.stateDir, 0o700); - 写入本地文件src/auth.ts:51
await mkdir(directory, { recursive: true, mode: 0o700 }); - 读取本地文件src/auth.ts:52
const credentialInfo = await lstat(directory); - 写入本地文件src/auth.ts:56
await chmod(directory, 0o700); - 发起网络请求src/dsh-client.ts:211
const response = await fetch(new URL(`${channel}/${method}`, this.origin), { - 发起网络请求src/dsh-companion.ts:322
async fetch(request: Request): Promise<Response> { - 读取本地文件src/dsh-endpoint.ts:90
const directory = await lstat(entry); - 读取本地文件src/dsh-endpoint.ts:95
const before = await lstat(metadataPath); - 执行外部命令来自配置/变量src/pairing-client.ts:25
const child = spawn(command, args, { stdio: 'ignore', shell: false }); - 发起网络请求src/pairing-client.ts:75
const response = await this.#deps.fetch(new URL(path, this.#config.origin), { - 读取本地文件src/task-manager.ts:116
const cwd = await realpath(input.cwd); - 读取本地文件src/task-manager.ts:117
if (!(await stat(cwd)).isDirectory()) throw new Error('cwd must be an existing directory'); - 读取本地文件src/task-manager.ts:135
const root = await realpath(await git('rev-parse', '--show-toplevel')); - 读取本地文件src/task-manager.ts:139
if (await realpath(gitDir) === await realpath(path.resolve(cwd, commonDir))) throw new Error('write tasks require a separate Git linked worktree'); - 写入本地文件src/task-store.ts:78
mkdirSync(privateDir, { recursive: true, mode: 0o700 }); - 写入本地文件src/task-store.ts:79
chmodSync(privateDir, 0o700); - 写入本地文件src/task-store.ts:83
chmodSync(databasePath, 0o600);
扫描于 2026/10/31(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 委派本地小任务
- 共享本地实例
- 规划与最终校验
把 Codex 的本地小任务委派给共享的本地 DeepSeek Harness 实例,Codex 只管规划和最终校验。
README
由 DeepSeek 最新模型翻译生成codex-subagent-dsh
codex-subagent-dsh 是一个社区 Codex 插件,通过本地 STDIO MCP 把边界明确的任务交给已运行的 DeepSeek Harness(DSH)。Codex 主智能体仍负责选择使用 DSH 还是 Codex 原生子代理,并负责检查文件、diff、测试与最终验收。
仓库同时提供 Codex marketplace 入口和可直接运行的插件产物。真实 DSH 文本、文件读取和隔离 worktree 修改均已通过;新桌面对话直接调用插件的只读任务也已通过。关闭窗口和整个应用正常退出均已验证:DSH 可继续执行,插件先保留 unknown。重开后可用原 taskId 和 conversationKey 调用 dsh_task,按完整证据恢复终态与结果;崩溃场景仍待验证。
0.4.0 新增浏览器确认连接:Codex 发起连接,在已登录的 DSH 页面确认后自动连接,无需运行连接命令或复制登录链接。详情见发布说明;GitHub main 在本次 PR 合并后提供此版本。
展开完整文档(README 剩余 1 节)
codex-subagent-dsh
codex-subagent-dsh 是一个社区 Codex 插件,通过本地 STDIO MCP 把边界明确的任务交给已运行的 DeepSeek Harness(DSH)。Codex 主智能体仍负责选择使用 DSH 还是 Codex 原生子代理,并负责检查文件、diff、测试与最终验收。
仓库同时提供 Codex marketplace 入口和可直接运行的插件产物。真实 DSH 文本、文件读取和隔离 worktree 修改均已通过;新桌面对话直接调用插件的只读任务也已通过。关闭窗口和整个应用正常退出均已验证:DSH 可继续执行,插件先保留 unknown。重开后可用原 taskId 和 conversationKey 调用 dsh_task,按完整证据恢复终态与结果;崩溃场景仍待验证。
0.4.0 新增浏览器确认连接:Codex 发起连接,在已登录的 DSH 页面确认后自动连接,无需运行连接命令或复制登录链接。详情见发布说明;GitHub main 在本次 PR 合并后提供此版本。
快速开始
1. 从 GitHub marketplace 安装插件(仓库已提交可运行产物,不需要克隆或 npm 构建):
codex plugin marketplace add aototo/codex-subagent-dsh --ref main
codex plugin add codex-subagent-dsh@codex-subagent-dsh
2. 确认本机 DSH 已启动,默认地址为 http://127.0.0.1:3080。在浏览器中完成 DSH 自己的登录;多个 Codex 对话共用此实例。
3. 让 Codex 协助将随插件提供的 dsh-companion 安装到实际运行的 DSH profile;浏览器连接和指定模型都需要它。无需克隆仓库或 npm 构建:
dsh plugin --profile web add -w "/absolute/path/to/installed-plugin/dsh-companion"
web 替换为实际 profile。安装/升级后需要重启该 profile:先检查有无运行任务,避免打断共享实例。安装位置可由 Codex 根据已加载 Skill 定位。为避免 Codex 缓存清理导致 DSH 引用失效,建议由 Codex 将 companion 完整复制到稳定的、带版本号的本地数据目录后,从该目录安装;保留旧目录可供回滚。若直接引用缓存路径,升级/卸载后需重新绑定仍存在的路径。
4. 开启新 Codex 对话,直接说 “连接我的 DSH”。Codex 检查状态并打开确认页;核对页面与对话里的匹配码,点击 “允许连接”,再告诉 Codex 已确认。插件检查成功后返回 ready。若浏览器还没登录 DSH,先通过 DSH 启动时打开的页面登录,再重开确认链接。首次 DSH 登录仍需要完成,但不需要把登录链接复制给 Codex。
5. 需要指定模型时,先让 Codex 用 includeModels: true 调用 dsh_status,从返回目录复制精确的 provider、model 和可选 reasoningEffort,然后用自然语言委派,例如:
把这个边界明确的任务交给 DSH,使用 deepseek-official/deepseek-v4-flash(effort low);你负责检查完整 diff 和验收。
6. 路由验收:dsh_task 分别返回 modelRouting.requested、configured 和由真实 request/header 观察到的 actualRequest。显式指定模型的 completed 任务必须有精确匹配的实际 header;缺失或不匹配不会静默回退、不会报告成功。
环境
- Node.js 22.13+(支持 22 LTS 和 24+)
- npm
- 已在本机回环地址启动的 DSH;默认地址为 http://127.0.0.1:3080
- DSH 启动时生成的登录链接,用于首次本地连接
浏览器配对与可选的 Session 模型固定都需要把随插件分发的 DSH companion 安装到 Codex 实际连接的同一个 DSH profile。companion 目录已包含在 marketplace 安装的插件根目录中,普通使用者直接指向已安装插件根目录下的 dsh-companion 即可,不需要克隆仓库或运行 npm 构建;仓库开发者也可以使用仓库内路径:
dsh plugin --profile web add -w "/absolute/path/to/installed-plugin/dsh-companion"
安装后重启该 profile。它不会修改 DSH 的共享默认模型。当前兼容性门禁针对 @deepseek-ai/dsh 0.1.5-rc.1、其实际加载的 dsh-agent/Session Controller/Connection 0.1.5-rc.2 和 Cordis 4.0.2;其他组合必须重新运行隔离主机探针。
构建
npm ci
npm run build
构建会把 MCP 服务和连接入口连同 npm 运行依赖打包为:
plugins/codex-subagent-dsh/runtime/server.mjs
plugins/codex-subagent-dsh/runtime/connect.mjs
完整开发检查使用 Node 22.13+:
npm run check
插件清单位于 plugins/codex-subagent-dsh/.codex-plugin/plugin.json,MCP 配置使用插件根目录相对路径启动 runtime/server.mjs。本机 marketplace 安装快照、新桌面对话的直接调用,以及隔离 Codex 配置从 GitHub 来源安装均已验证。
从 GitHub 安装
仓库已经提交可运行的 runtime/*.mjs,普通使用者不需要安装 npm 依赖或在本地构建:
codex plugin marketplace add aototo/codex-subagent-dsh --ref main
codex plugin add codex-subagent-dsh@codex-subagent-dsh
安装后开启新 Codex 对话加载插件。当前实测基于 Codex 桌面应用内置 CLI;精确最低 Codex 版本仍未确定,见兼容性记录。
更新 GitHub marketplace 和插件后运行:
codex plugin marketplace upgrade codex-subagent-dsh
codex plugin add codex-subagent-dsh@codex-subagent-dsh
卸载插件及 marketplace:
codex plugin remove codex-subagent-dsh@codex-subagent-dsh
codex plugin marketplace remove codex-subagent-dsh
本地开发时先运行 npm ci && npm run build,再使用 codex plugin marketplace add /absolute/path/to/codex-subagent-dsh 安装仓库目录。修改插件后需更新清单 cachebuster 并重新安装,不能只修改源码后假定缓存已更新。
首次连接
在 Codex 中说 “连接我的 DSH”。dsh_status 只检查状态,不会自动打开网页。
- DSH 未启动:先启动显示地址上的 DSH。
- companion 缺失或过旧:先在对应 profile 安装/升级本插件附带的 companion,再安全重启。
- 需要认证:dsh_connect 的 start 打开确认页;自动打开失败时可以点击返回的确认链接。页面和 Codex 显示相同匹配码。
- 用户允许后:告诉 Codex 已确认,调用 dsh_connect 的 check;只有实际 API 验证及凭证保存成功才返回 ready。
- 拒绝/过期:本次配对结束,不自动重试。cancel 可取消本次配对。
浏览器配对目前支持 HTTP 的 127.0.0.1、localhost 和 [::1],默认使用 http://127.0.0.1:3080;不支持 HTTPS 或反向代理配对。
配对页面复用浏览器已登录的 DSH 身份,不会自动登录,也不会代替用户点击确认。确认授予插件访问当前 DSH 的能力;文件、Shell 等操作仍由 DSH 权限策略管理。本版复用已有 DSH 登录 Cookie 的有效期,尚不是可独立撤销或按任务限权的专用凭证。删除插件本地凭证不等于服务端撤销已复制的 Cookie。
领取凭据只保存在插件运行时内存,不会出现在对话、URL 或确认页。配对有效期为 5 分钟;尚未完成的配对在关闭 Codex 或插件重启后需要重新发起。已保存且仍有效的连接凭证可继续使用。不要把登录链接、token 或 Cookie 发到聊天里。
兼容回退:没有配对 companion 时,仍可在本地终端执行 dsh_status 返回的完整 connectCommand,按提示粘贴 DSH 登录链接。正常浏览器配对流程无需执行此命令。插件不会自动安装或重启 DSH。
使用方式
插件公开五个工具:
| 工具 | 用途 |
| dsh_status | 区分 DSH 未启动、需要认证和已就绪;includeModels: true 会通过 companion 返回净化后的 provider/model/effort 目录 |
| dsh_connect | 发起、检查或取消浏览器配对;用户在 DSH 页面亲自确认,凭证由运行时自动处理 |
| dsh_submit | 提交一个边界明确的任务,返回 taskId;可选 modelSelection 在首个 prompt 前固定该 Session 的精确 route;相同请求不会重复派发 |
| dsh_task | 查询指定任务的状态、结果,或进行有界等待;检测到等待授权结果时提前返回,等待超时不取消任务 |
| dsh_cancel | 请求取消指定任务;请求被接受不等于已停止,也不回滚文件修改 |
通常直接告诉 Codex:
把这个边界明确的小任务交给 DSH,你负责检查完整 diff 和运行关键测试。
多个 Codex 对话共用一个已运行的 DSH 实例,每个委派任务创建独立 Session。首次连接完成后,各 MCP 进程复用凭证。主 Agent 会在当前对话首次委派时创建并后续复用一个 conversationKey。它只是逻辑分组标签,不是安全身份。只读模式也是任务约束,不代表操作系统级只读隔离。
写任务只支持主 Agent 已准备并核对基线提交的 Git linked worktree。DSH 返回完成后,主 Agent 仍需独立检查实际产物;取消请求不回滚已经发生的修改。
需要指定模型时,先调用 dsh_status 并传 includeModels: true,从返回目录复制精确的 provider、model 和可选 reasoningEffort。不要根据任务关键词猜 route。modelSelection 一旦为该 Session 持久化便不可更改,且参与幂等参数哈希;配置、能力或持久化确认失败时不会发送首个 prompt。未传 modelSelection 时保持原有默认路由行为。
dsh_task 将 requested、configured 与真实 request/header 观察到的 actualRequest 分开返回。显式指定模型的 completed 任务必须有匹配的真实 header;不匹配或缺失时不会静默回退并报告成功。
故障排查
- node 找不到或版本过低:确认 node --version 至少为 22.13,然后重新构建。
- DSH 未启动:dsh_status 返回 dsh_not_running;先启动返回地址对应的 DSH,再检查状态。
- 未连接或认证失效:按 dsh_status 指引使用 dsh_connect 完成浏览器配对;connectCommand 仅作兼容回退。
- runtime/server.mjs 不存在:运行 npm ci && npm run build。
- 任务为 waiting_permission:插件从连续事件中观察到仍未决定的授权申请;请按返回的 sessionId 打开 DSH 会话检查。处理后继续查询原任务,授权拒绝本身不等于任务失败。插件不会代替用户授权,原任务超时仍继续计时。
- 任务长时间保持 running:普通用户提问及缺少可识别授权事件的等待仍可能显示 running,请到 DSH 检查。
- 任务为 unknown:用原 taskId 和 conversationKey 再调用 dsh_task,插件会有界读取原会话核对终态;不会创建或重派任务。证据不足时仍保持 unknown,请到 DSH 和工作区核对,写任务占用不会提前释放。
- 取消后仍显示 cancel_requested:这只表示停止请求已发送,必须等到可确认的终止状态;已产生的文件修改不会自动恢复。
- Codex 找不到工具:确认插件已安装并启用,更新后开启新对话加载工具;再核对构建产物和清单,参见 docs/COMPATIBILITY.md。
- MODEL_ROUTING_COMPANION_MISSING:把 bundled companion 安装到 DSH_SUBAGENT_URL 指向的同一 profile 并重启;不要用 session/selectModel 代替,它会写共享默认模型。
- MODEL_ROUTING_CAPABILITY_UNSUPPORTED 或模型配置失败:用 dsh_status { includeModels: true } 重新读取目录,并核对精确 provider/model/effort;插件不会自动换模型。
当前限制
- GitHub marketplace 的隔离配置安装已验证,Git 来源的更新与卸载回归尚未完成;本地 marketplace 中的新对话工具发现和只读任务已验证,关闭测试窗口的生命周期边界已验证;整个应用正常退出并重开已验证;崩溃尚未验证。
- 每个任务使用独立 DSH Session;不支持继续原会话返工或任务列表。支持查询时按需恢复已证实的终态与结果,不支持后台自动恢复或运行中任务接管。
- Codex/MCP 进程退出后,插件不保证继续计时、自动取消或唤醒对话。
- 授权等待识别只适用于在线、连续且关联到本任务的事件;400ms 合并窗口用于抑制即时决定,不保证浏览器已显示人工审批框。普通用户输入等待不识别,断线或重启后的旧申请不会被还原成当前等待。关闭 Codex 后不保证主动提醒。
- 等待授权功能的隔离服务与自动化验证见验证记录;浏览器人工审批验收状态以该记录为准。
- 无法确认终态时返回 unknown,不会自动重发。按需恢复要求完整连续历史、原任务关联和一致的空闲/空队列证据;DSH 返回的历史快照若已截断,本版本不会分页补齐。恢复结果超过 65,536 个字符上限或快照超过传输大小上限时,也会保留 unknown。
- 仅允许回环地址;不支持跨机器 DSH。
- 这是 Codex 调用外部 DSH 的社区 MCP 插件,不是 Codex 原生子 Agent 后端。
版本与参考来源见 兼容性记录。
开发验证
npm run check 执行类型检查、可分发构建与自动化测试。以下隔离探针还会启动临时 DSH profile、安装 companion 与 synthetic adapter、验证鉴权、双 Session 隔离、默认 Session 不受影响、冷重启恢复、真实 request header,以及 bundled MCP 的 dsh_submit→dsh_task 完整链路:
DSH_INSTALL_ROOT=/path/to/@deepseek-ai/dsh node scripts/probe-dsh-companion.mjs
授权事件与 bundled MCP 状态链路使用另一隔离探针验证:
DSH_INSTALL_ROOT=/path/to/@deepseek-ai/dsh node scripts/probe-dsh-approval.mjs
synthetic adapter 只证明路由机制,不证明某个外部 provider 或商业模型在当前用户配置中可用。
完成首次连接后,以下命令会向真实 DSH 提交一次受限任务:
npm run smoke -- text
npm run smoke -- read
脚本打印 taskId / sessionId,以返回报告中的准确标记和文件实际内容验收。DSH 可能附带说明,本插件不保证纯文本严格格式输出。两分钟未完成会请求取消;无法确认的任务保留 unknown,不自动重试。临时测试目录保留供核查,避免删除仍被 DSH Session 引用的工作区。
公开验证摘要见 验证记录。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
aototo/codex-subagent-dsh
把边界明确的任务交给本地 DSH 执行并验收
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9