DeepSeek Harness 插件

zexadev/dsh-tether

Star 数 ★ 59 下载量(近 30 天) 2,623 分类 远程与移动端 收录于 2026-09-01 npm dsh-plugin-tether

用 Android/iOS 手机远程使用电脑上的 dsh 完整网页界面,经 iroh 跨网点对点打洞直连,不用架任何服务器;打不通才退回 relay,relay 只见密文。

安装

# npm 包(预构建)

dsh plugin --profile web add dsh-plugin-tether

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:zexadev/dsh-tether

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

DSH Tether 把 DeepSeek Harness 的 Web 界面通过点对点直连带到手机上。agent 依旧跑在你代码所在的那台电脑,手机拿到的是 DSH 自己的完整界面——会话、工具调用、审批、设置全都在,不是另做一套。用 6 位码配对一次,之后两端在哪个网络都能互相找到。

手边没有电脑时,同一个 App 还能在手机本地把 DSH 跑起来(Android),见本地模式。

它解决什么

你不在电脑那个网络里,又不想中间有一台服务器。

手机连回自己开发机,常见做法要么要求两端在同一个局域网,要么要求你部署并信任一台中转。这个项目两样都不要:两端靠 iroh 直接打洞,打通后流量不经过任何第三方;打不通才退回 relay,而 relay 上过的也只是它读不懂的密文。

如果你只在和电脑同一个 WiFi 下用手机,你并不需要这些——局域网方案更简单。

与同类项目的区别

同类里最常被拿来比的是 liguobao/ds-harness-remote 和 chokwinlee/deepseek-harness-desktop。按各自的 README 对照:

DSH Tether ds-harness-remote DSH Desktop
建链 直连优先(iroh 打洞),失败才退回 relay,relay 只见密文;不用账号,不用架服务器 登录其服务后建链,LAN → P2P → TURN → Relay 逐级回退,也可自建 relay 同一 Wi-Fi,或自己搭的 Tailscale
没电脑时 Android 本地模式,DSH 跑在手机上 — —(其 README 明确说不在手机上跑 agent)
客户端 Android;iOS 测试版(未签名 IPA,需自行签名) PC、Android、Web,无 iOS 原生 App 桌面端、Android,以及经公开 TestFlight 的 iPhone 版
许可证 MIT 仓库未附许可证 MIT

下载与安装

装在哪 下载 安装方式
电脑 — dsh plugin --profile web add dsh-plugin-tether
手机 Release 里的 dsh-tether-<版本>-arm64.apk 已签名,直接安装;内置本地模式
手机(iOS) Release 里的 dsh-tether-<版本>-ios-unsigned.ipa 测试版,未签名,需自签

插件带一个 Rust 写的 sidecar 负责 iroh 连接,按平台拆成独立子包;安装时只会下载与你系统匹配的那一个,不用手动选。

手机端按 CPU 架构分了四个包,近十年的安卓手机都选 arm64;arm 给 32 位老设备,x86 / x86_64 给模拟器和 ChromeOS。装错了系统会直接拒绝安装,不会装出问题。只有 arm64 包带本地模式的运行时,其余三个包没有这个入口。

iOS 版是测试版:本项目没有 Mac,该包只在 CI 上构建过,从未在真机上运行。需要用 AltStore、Sideloadly 一类工具自行签名(免费 Apple ID 签的应用 7 天过期)。遇到问题请提 issue。

也可以从源码构建 sidecar(需要 Rust):

git clone https://github.com/zexadev/dsh-tether && cd dsh-tether
cargo build --release -p tether-host
dsh plugin --profile web add .

配对

电脑上照常启动 dsh web,在侧栏底部点**「连接手机」**,会给出一行配对串:

手机上打开 DSH Tether →「添加电脑」→ 把那一整行粘进去 → 给这台电脑起个名字 → 连接。

之后每次打开 App 自动连上,不用再配对。

本地模式:没电脑也能用(Android)

打开 App → 顶栏「主机」→ 在本机运行。第一次要先解压运行时(实测约 9 秒),之后每次约 2 秒出现 dsh 的界面;在设置里填上 API Key 就能对话。

  • 装完即用:不装 Termux、不开终端、不敲命令、不要 root。Node 24 与 dsh 0.2.0-rc.2 的完整依赖树打在 APK 里,首次启动离线解压;之后只有调用模型 API 才需要网络。
  • 没有配对:dsh 就在这台手机上,没有远端。会话、设置、工作区只存在手机里,和连电脑时看到的完全是两套,来回切换互不影响。
  • 常驻:运行期间有一条常驻通知(前台服务),退后台、锁屏不会被系统收掉;进程真被杀了,下次打开 App 自动重起,会话已落盘不丢。
  • 版本随 App 走:内置的 dsh 随 App 升级一起升,当前内置 0.2.0-rc.2。
  • 只有 arm64 的 APK 带本地模式;iOS 的沙箱不允许子进程,iOS 版没有这个入口。
  • 手机上没有 bash 和完整的 coreutils,依赖 shell 的工具用不全;对话、文件读写不受影响。

想走 Termux 的老路也行:在 Termux 里装好 dsh 和本插件(会自动选到 android-arm64 的 sidecar 子包),再用远程模式配对连接——手机自己也是一台「电脑」。这条路不做引导,只是仍然能用。

主要功能

安全

  • 配对码是 6 位随机数(CSPRNG),10 分钟有效,每个窗口只许试 3 次。配对之后凭手机的 iroh 公钥授权,那是 TLS 验证过的,伪造不了。
  • 未配对方够不到你的界面:代理流只在完成控制流握手的连接上提供,未配对连接首行最多 512 字节就被拒。
  • 流量由 iroh 端到端加密(QUIC/TLS)。打洞成功时不经过任何第三方;退回 relay 时,relay 上过的也只是它读不懂的密文。
  • 插件自己那两条 HTTP 路由套了与 dsh /api 同一套浏览器信任判据:Host 必须是回环权威,跨站标记一律拒,带 Origin 时必须与 Host 同源。恶意网页的跨站请求和 DNS 重绑定都会拿到 403。
  • 已知边界:上面那套判据防的是浏览器被当枪使,挡不住本机进程。本机进程的 Host 就是回环,能取到一个配对码,进而把自己配成一台「手机」。也就是说,已经能在你开发机上执行代码的攻击者,可以借此拿到长期访问权。若你的机器上会跑不受信任的代码,别用这个插件。
  • 手机侧同样有边界:App 在手机上起的本地代理只监听 127.0.0.1,但手机上其他 App 一样连得上,连上拿到的就是完整 dsh 界面;端口按主机派生固定,比随机端口更容易被找到。手机上装着不受信任的 App,或手机没锁屏落到别人手里,等同于开发机暴露。

已知限制

  • iOS 版是测试版:只在 CI 上构建,从未在真机运行过,且需要自行签名。安卓版是经过真机验证的那一个。
  • App 打开时才连接,不在后台常驻——Android 的 doze 也留不住它。
  • 手机上的界面是 DSH 自己的,窄屏适配靠注入的最小样式完成;dsh 改版式时可能需要跟进。
  • 中英双语:App 界面跟随手机的系统语言;电脑终端上的输出跟随电脑的系统语言;注入 dsh 界面的那部分跟随 dsh 自己的语言设置。没有单独的语言开关。
  • 本地模式只有 arm64 包有,iOS 没有;手机上没有 bash 与完整 coreutils,依赖 shell 的工具用不全。arm64 包因内置运行时约 78 MB,其余包约 32 MB。
  • 已针对 dsh 0.1.0-rc.7、0.1.0-rc.8、0.1.2(alpha 与 rc.1)、0.1.5-alpha.1、0.1.5-rc.2、0.1.6-alpha.2、0.1.7-rc.2、0.2.0-rc.2、0.2.1-alpha.1 与 0.2.1-alpha.2 验证。dsh 处于 developer preview,换更新的 dsh 之前先看这一行。0.1.7 起 dsh 会拒绝安装声明范围没覆盖自己的插件,所以这一行之外的版本是装不上,而不是装上了埋雷。dsh 0.1.2-alpha 引入的浏览器认证完全在电脑侧处理,手机 App 无需更新。

验证过什么

跨网直连是这个项目的立意,所以给证据而不是给说法。手机关掉 WiFi 只走 5G、电脑在家宽,插件侧输出:

[tether] 手机已连接: 我的手机
[tether] 连接路径: P2P 直连(NAT 打洞成功) Ip(…:41341)

选中路径是公网地址,说明两端是打洞打通的,relay 全程没用上。上面第一张截图就是手机在这条路径上渲染的 DSH 界面——状态栏没有 WiFi 图标。

配对(含错码被拒)、审批送达、多设备切换都在真机上验证过。打洞失败退回 relay 这条路径,尚未在真实网络下触发过。

本地模式在 Redmi(Android 16)真机验证:全新安装后首次启动到界面出现 9.1 秒(含解压运行时),之后启动 2.1 秒;退后台 30 秒 node 进程仍在;强杀 App 后重开自动恢复到本地模式。

与 DeepSeek Harness 的关系

DSH Tether 是基于 DeepSeek Harness 与 Cordis 插件机制构建的独立社区项目。它不修改上游源码:固定版本的 dsh 原样运行,本项目作为一个普通 DSH 插件接入,只依赖官方公开的扩展点。

本仓库由社区独立维护,与深度求索不存在隶属、合作、授权或背书关系,也无深度求索员工或上游官方团队成员参与开发、维护或治理。README 中使用的 DeepSeek Harness 标识仅用于说明本项目服务于该上游,不代表任何授权或背书关系;手机应用图标同样取自该上游标识。

上游提供智能体能力、插件系统和 Web 界面;本项目负责:

  • 电脑与手机之间的点对点连接与配对
  • 把上游的 Web 界面带到手机上,并做窄屏适配
  • 手机端的多设备管理与系统通知

从源码构建

需要 Node ^22.19 || >=24、Rust;构建 APK 另需 JDK 21 与 Android SDK/NDK(Windows 上可用 scripts/setup-android-env.ps1 装齐)。

cargo build --release -p tether-host          # 电脑侧 sidecar
cd app && pnpm install
pnpm exec tauri android build --apk --target aarch64

许可证

MIT

友情链接

  • LINUX DO —— 本项目在该社区分享

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。