中文EN

dsh-plugin-tether

remote已测通过npmMIT

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

下载量 / Downloads
3,147
依赖体积 / node_modules
23.45 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

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

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

<h1 align="center">DSH Tether</h1>

<p align="center">

<strong>DSH 随身:有电脑连电脑,没电脑本地跑。</strong><br>

连电脑:跨网络点对点打洞直连,不用架任何服务器,不用同一个 WiFi;打不通才退回 relay,relay 只见密文。<br>

本地跑(Android):DeepSeek Harness 直接在手机上运行,装完即用,不装 Termux 不敲命令。

</p>

<p align="center"><sub>独立的社区开源项目,与深度求索不存在隶属、合作、授权或背书关系。<br>本仓库无深度求索员工或 DeepSeek Harness 上游官方团队成员参与。<br>中文 · <a href="README.md">English</a></sub></p>

<p align="center">

<img src="assets/banner.jpg" alt="手机与开发机直接相连" width="100%">

</p>

<p align="center">

<a href="../../releases/latest"><img src="https://img.shields.io/github/v/release/zexadev/dsh-tether?style=flat&label=release&color=4D6BFE" alt="最新版本"></a>

<a href="../../releases"><img src="https://img.shields.io/github/downloads/zexadev/dsh-tether/total?style=flat&label=downloads&color=4D6BFE" alt="下载量"></a>

<a href="../../stargazers"><img src="https://img.shields.io/github/stars/zexadev/dsh-tether?style=flat&label=%E2%98%85&color=08C" alt="Stars"></a>

<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat" alt="MIT"></a>

<img src="https://img.shields.io/badge/dsh-0.1.0--rc.7%20%7C%20rc.8%20%7C%200.1.2%20%7C%200.1.5%20%7C%200.1.6%20%7C%200.1.7%20%7C%200.2.0%20%7C%200.2.1%20%7C%200.2.2-4D6BFE?style=flat" alt="dsh 0.1.0-rc.7 | rc.8 | 0.1.2 | 0.1.5 | 0.1.6 | 0.1.7 | 0.2.0 | 0.2.1 | 0.2.2">

<img src="https://img.shields.io/badge/Android-4493F8?style=flat" alt="Android">

<img src="https://img.shields.io/badge/iOS-%E6%B5%8B%E8%AF%95%E7%89%88-8E8E93?style=flat" alt="iOS 测试版">

<a href="https://www.dsh.so/artifact/dsh-tether"><img src="https://www.dsh.so/badge/dsh-tether.svg" alt="dsh.so 安全扫描"></a>

<a href="https://www.dsh.so/artifact/dsh-tether"><img src="https://www.dsh.so/badge/install/dsh-tether.svg" alt="dsh.so 安装实测"></a>

</p>

<p align="center">

<img src="assets/phone-cellular.png" width="240" alt="手机上的 DSH 会话界面">

<img src="assets/phone-sidebar-drawer.png" width="240" alt="侧栏以抽屉方式覆盖">

<img src="assets/phone-settings.png" width="240" alt="设置页按手机版式重排">

</p>

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

手边没有电脑时,同一个 App 还能在手机本地把 DSH 跑起来(Android),见[本地模式](#本地模式没电脑也能用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](../../releases/latest) 里的 dsh-tether-<版本>-arm64.apk · 已签名,直接安装;内置本地模式

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

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

主要功能

<table>

<tr>

<td width="50%" valign="top">

<h3>跨网直连</h3>

<p>两端靠 iroh 直接打洞,打通后流量不经过任何第三方。手机在 4G/5G、电脑在家宽也能连上,不需要公网 IP、内网穿透或自建中转。打洞失败才退回 relay,而 relay 上过的只是它读不懂的密文。</p>

</td>

<td width="50%" valign="top">

<h3>完整的 DSH 界面</h3>

<p>手机上跑的就是 DSH 自己的 Web 界面,不是另做一套:会话、工具调用、审批、设置一个不少。窄屏下做了适配——侧栏改成抽屉覆盖、设置页导航横排、内容占满整宽。</p>

</td>

</tr>

<tr>

<td width="50%" valign="top">

<h3>多台电脑</h3>

<p>手机侧栏底部的「我的电脑」里,配过的电脑都留着,可以切换、改名、删除,也能添加新的。换一台不用重新填凭证。电脑侧栏的「连接手机」随时能出新的配对码。</p>

</td>

<td width="50%" valign="top">

<h3>审批通知</h3>

<p>agent 卡在等你批准时,手机会推一条系统通知。批准本身在 DSH 自己的界面里点——本插件刻意不代答审批,只把「它在等你」送到锁屏上。</p>

</td>

</tr>

</table>

安全

  • 配对码是 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 界面;端口按

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:26,最后更新 2026-11-02

链接

GitHub · Homepage · npm

同类插件