DeepSeek Harness Hub
← 返回列表

alextangson/dsh-dispatch

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

从手机向 DeepSeek Harness 派发任务。一键批准工具调用。指挥你拥有的每一台机器。

暂不能直接安装(需源码编译或环境不满足):缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/8/25 · 已提供中文文档

📱 从你的手机向 DeepSeek Harness (dsh) 派发任务——在锁屏界面完成审批,隔离的 git 工作树,端到端加密,可自托管。就像 Claude Code Dispatch,但专为 dsh 打造。

综合分
33.3
GitHub 分
33.3
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add alextangson/dsh-dispatch
缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包dsh-dispatch-monorepo(未发布到 npm,仅可源码安装)
Node 引擎要求 >=20 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/18 16:59:20

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-dispatch

从手机向 DeepSeek Harness 派发任务。一键批准工具调用。指挥你拥有的每一台机器。

从手机给 DeepSeek Harness (dsh) 派任务、审批一键批、一部手机指挥所有机器。中文说明 →

CI
npm
license

类似 Claude Code 的 Dispatch + Remote Control,但专为 dsh 打造——开源、端到端加密、可自托管。

为什么会有这个项目

dsh web 绑定到 127.0.0.1 且没有认证——这是有意为之。现有的所有远程工具都只是把那个网页包进一个 WebView。dsh-dispatch 不是镜像,而是一个指挥中心:

| | WebView 镜像 | dsh-dispatch |
|---|---|---|
| 在沙发上查看会话 | ✅ | ✅ |
| 从手机派发新任务 | ❌ | ✅ 派发到独立的 git worktree |
| 审批推送通知,点击允许/拒绝 | ❌ | ✅ 适用于每一个会话,即使是桌面上启动的 |
| 一屏管理多台机器 | ❌ 每台各需一个隧道 | ✅ 一块面板 |
| 中继可以读取你的流量 | 通常可以 | 绝不——零知识、端到端加密 |

- 📤 派发——在手机上输入提示词;机器会创建一个 git worktree,启动一个全新的 dsh 会话,并通过推送通知回报最终答案。
- ✅ 在锁屏上审批——该插件接入 dsh 的 approval/request waterfall。手机和桌面同时竞争;先做出的决定生效;绝不会自动批准任何操作。
- ❓ 问题转发——ask_user_question 的选项会显示在手机上;随时随地作答,会话继续(同时也解决了上游无人应答导致的挂起问题)。
- 💬 继续对话——已结束的会话不是死胡同:从卡片上回复,机器会重新接起同一个会话。
- 👀 看到它在做什么,以及它做了什么——卡片会标明正在进行的工具,并保留该轮次的轨迹,因此一个 200ms 就返回的工具会留下痕迹,而不是一闪而过。
- 📖 阅读对话——在手机上打开任意会话的记录,向前翻页,并从同一张卡片回复。
- 📁 选择目录,而不是输入目录——机器会发布它允许的根目录,手机将它们作为选项提供;无需凭记忆回忆绝对路径,也不会在点击发送后才被拒绝。
- ⚡ 可选的全权限层级——在 dsh 的 danger-full-access 下派发,以跳过完全可信任务的审批;默认关闭,由机器控制,每个此类会话都带有永久红色徽章。
- 🌏 英文或中文——在设置中切换,包括机器撰写的句子。
- 🖥️ 多机器——一部手机,N 台机器,一块面板展示实时会话状态。
- 🔒 零知识中继 — 转发它无法读取的密文。32 字节的配对密钥仅在二维码内部传输。用一条命令自托管中继。

工作原理

┌────────────┐  E2E encrypted   ┌───────┐  E2E encrypted   ┌──────────┐
│ dsh plugin │ ───── wss ─────► │ relay │ ◄──── wss ────── │ PWA      │
│ (machine)  │                  │ (dumb │                  │ (phone)  │
│            │                  │ pipe) │                  │          │
└────────────┘                  └───────┘                  └──────────┘
approval/request waterfall      sees only                approve / dispatch
ctx.agents.create + worktree    ciphertext               web push alerts

| 包 | npm | 说明 |
|---|---|---|
| dsh-dispatch | npm | dsh 插件 — 事件总线监听器、审批竞速、worktree 派发 |
| dsh-dispatch-relay | npm | 无状态密文路由器 + Web Push,Docker/npx 一行命令 |
| @dsh-dispatch/pwa | — | 可安装的手机应用(PWA)— 无需应用商店 |

快速开始

在运行 dsh 的机器上:

1. Run a relay — yours, or any you trust (it can't read your traffic)
npx dsh-dispatch-relay            # listens on :8787

2. Install the plugin into your dsh profile
dsh plugin --profile web add dsh-dispatch

3. Configure it — ~/.dsh/profiles/web/cordis.patch.yml
- id: dsh-dispatch
config:
relay: 'ws://localhost:8787/ws'          # wss:// for anything non-local
allowedRoots: ['/path/you/allow']        # dispatch stays OFF until you set this
pwaUrl: 'https://alextangson.github.io/dsh-dispatch'   # where the pairing link points

4. Boot dsh, then run /dispatch-pair and open the printed link on your phone
dsh web

手机应用托管在 **** — 无需安装,无需应用商店;将它添加到主屏幕,这样 Web Push 就能触达锁屏。它是一个静态页面,只与你配置的中继通信,所以如果你不想从 GitHub Pages 加载它,可以从 packages/pwa 自托管。

你的手机直接连接中继,因此位于 localhost 的中继只能从同一台机器访问。对于真实手机,请将中继放在可通过 wss:// 访问的地方 — 一台 5 美元的 VPS,或者在其前面加一个隧道。

配对后审批转发立即生效;一旦设置了 allowedRoots,派发就会激活。中继自托管(Docker、VAPID 推送密钥)以及每个配置项:参见 packages/relay 和 packages/plugin。

安全模型

- 配对 = 信任。 二维码/配对码包含一个 32 字节的密钥;扫描它的人可以在 allowedRoots 范围内控制这台机器。请像对待 SSH 密钥一样对待它。可随时用 /dispatch-repair 轮换。
- 端到端加密(nacl.secretbox,每条消息使用独立 nonce)。中继只存储房间在线状态和推送端点——从不存储明文,也从不存储密钥。
- 此代码库中不存在任何超时自动批准机制。 未答复的审批会一直保持待处理状态,并反复提醒。工具调用在未经审核的情况下运行的唯一途径,是你自己逐机器、逐次派发开启的完全访问层级——而每一个此类会话都会带有永久红色标记。
- 派发采用允许列表机制。 allowedRoots 之外的请求会被明确拒绝。工作树永远不会被自动删除。

状态与路线图

npm 上的 v0.4.0——开发者预览版,跟踪 dsh 0.1.x(上游警告存在破坏性变更;每一个 harness API 接触点都隔离在一个适配器层中)。以下所有内容均已针对 dsh 0.1.1-rc.2 配合真实 DeepSeek API 完成端到端验证,而非在 mock 中验证:手机派发 → 工作树会话 → 真实工具执行 → 沙箱升级审批推送到手机 → 允许 → 命令运行;从手机回答的问题回流到正在运行的会话中;在手机上输入的后续消息会重新打开已完成的会话,卡片会标明它运行的工具并保留该轮次的轨迹,且该会话的转录记录可在手机上回读;完全访问派发在 danger-full-access 下运行,并可在工作区之外写入,且不会弹出审批提示。

托管 PWA 跟踪 main 分支,插件也从该分支发布,因此两者在 0.4.0 处保持一致。较旧的机器会以可见方式降级,而非静默失败:目录步骤会提示插件版本过旧并回退到文本字段,不会出现回复框,而机器无法提供的转录记录会明确说明,而不是一直转圈。

dsh-dispatch-relay 保持在 0.2.0——此后它没有变化,而在没有任何 diff 的情况下提升版本号,是对你所安装内容的谎言。

已知限制:
- 完全访问会话在 dsh 的 danger-full-access 预设下运行,该预设将 approval 设为 'never'——因此它完全不会弹出审批卡片。根据 dsh 自身的预设语义,完全访问与手机审批在每个会话中互斥。这就是权衡:以速度换取无审核界面。
- Web Push 通过中继工作,但锁屏推送目前仅在桌面浏览器中验证过,尚未在通过 HTTPS 连接的真实手机上验证。
- 每次派发都会从仓库的 HEAD 获取一个全新的工作树——之前派发创建的文件存在于该次派发自己的工作树中。
- 待处理的问题在手机重新加载后不会保留(协议中尚无 questions.get);机器会反复提醒,直到得到答复。
- 在手机上接听,dsh 自己的网页仍会显示那张卡片。 决定已生效,工具继续执行——那张过期的卡片是惰性的,点击它不会改变任何东西(竞速只裁定一次,迟到的应答会被丢弃)。插件里没有任何东西能撤回它:瀑布流传给应答方的是 next: () => Promise,不带参数,而唯一的撤回路径是 ApprovalRequest.signal,它属于提问方。当手机认领一个请求时,dsh 确实会记录带结果的 approval/decided,所以 Web 应用有它需要的东西来关闭自己的卡片。
- 两半列出的会话并不相同。 手机列出的是活动会话——包括你在桌面上启动的那些——并且能读取其中任何会话的记录,但它从不列出冷历史,所以它是一块"正在运行什么"的看板,而不是档案库。反方向上,dsh 的网页按已注册的工作区分组会话,而派发的会话存在于一个从未被添加为工作区的新 worktree 中,所以手机派发的工作在桌面上不可见,除非你自己添加那个 worktree。
- 记录是对话,不是日志:工具参数和工具输出从不离开本机。运行了什么会作为这一轮的轨迹显示在卡片上;它打印了什么不在你手机上。
- 审批卡片的三个字段标签在英文模式下仍保持中文。详情的结构化副本会让一个在 16KB 信封内已被限制在 10KB 的字段翻倍;在那个特定界面上,把你审批前能读到的命令内容减半是一笔糟糕的交易。工具名称、原因和参数本来就无法翻译。
- 控制台诊断信息是中文。它们是开发者输出,不是 UI,语言切换并不声称覆盖它们。

路线图:真机推送打磨 → 机群视图 → 超越活动看板的会话历史。

中文

这是什么:dsh 官方没有手机端、没有远程方案。现有第三方全是"把 localhost:3080 套壳进 WebView"。dsh-dispatch 走的是 Claude Code Dispatch 那条路——一个指挥中心:

- 手机派任务:输入一句话,机器自动开独立 git worktree 跑一个新会话,跑完推送结果。目录不用手打——机器把白名单目录报给手机,你点选就行。
- 审批推送:任何会话(包括你在电脑上开的)的工具审批都会推到手机,锁屏一键允许/拒绝;手机和桌面竞速,先答先赢,永不超时自动批准。
- 提问转发:模型调 ask_user_question 时,选项直接出现在手机上,答完会话继续跑。
- 接着聊:会话跑完不是终点,在卡片下面直接追问,机器会把同一个会话拉起来继续。
- 看得见在干嘛、干过啥:卡片显示此刻正在跑的工具,并保留这一轮用过的工具轨迹——几百毫秒返回的工具不再一闪而过。
- 能读对话:任何会话都能在手机上展开完整聊天记录,往上翻页,在同一张卡片里接着问。
- 多机看板:一部手机管 N 台机器,会话状态实时同屏。
- 中英双语:设置里一键切换,连机器发来的报错也会跟着翻译。
- 零知识中继:relay 只转发密文(端到端加密,密钥只存在于配对二维码里),一条命令自托管。

快速开始:npx dsh-dispatch-relay → dsh plugin --profile web add dsh-dispatch → 在 profile 的 cordis.patch.yml 里配 relay 和 allowedRoots → dsh 里执行 /dispatch-pair,手机打开  扫码即配对。手机是直连 relay 的,所以 localhost 上的 relay 只有本机能用;真要用手机,relay 得放在 wss:// 能访问到的地方。

版本:插件与托管 PWA 都在 0.4.0。机器上如果还是 0.2.0,降级是看得见的——目录选择器会提示"这台机器的插件较旧"并退回手填,追问输入框不出现;升级插件即可。
已知限制:手机先答审批后,dsh 网页版那张卡片会残留——决定已生效、卡片是死的(点了会被丢弃,不会重复执行),但插件没有 API 能撤下它。另外两边看到的会话不是同一批:手机只列活着的会话(包括你在电脑上开的),不含历史;而手机派的任务跑在新建 worktree 里,没被注册成工作区,所以在 dsh 网页版侧栏里看不到。

安全:配对码即信任边界(当 SSH 私钥对待,可随时 /dispatch-repair 轮换);派任务只进你白名单的目录;审批永不自动通过(唯一例外是你主动开启的完全访问模式,那类会话在看板上永久标红)。

贡献

欢迎提交 Issue 和 PR。通信协议已冻结于 docs/PROTOCOL.md;产品边界见 docs/PRODUCT.md;每一条 dsh API 声明均在 docs/dsh-plugin-groundtruth.md 中有据可查。

关键词:DeepSeek Harness 插件、dsh-plugin、dsh 远程控制、手机审批、手机派任务、智能体远程控制、端到端加密中继、Claude Code Dispatch 替代方案、DeepSeek 手机远程控制、手机审批、远程派任务。

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群