前言¶
DeepSeek Harness(DSH)桌面端自带官方 Web UI,智能体开发、对话和任务常在 Mac 上长时间运行。若想在手机上看同一会话、同一份上下文,常见做法往往是再起一套服务、做反向代理或把端口暴露到公网——维护和认证都更麻烦。
dsh-mobile-remote 是社区维护的 DSH 插件:不复制数据、不重写官方前端,而是通过 Tailscale 私网把手机 Safari 接到本机正在跑的 DSH Host,并加上移动端皮肤与一次性配对流程。下面介绍它的定位、能力与安装用法。
这是什么¶
- 名称:dsh-mobile-remote(GitHub:
monsterjakey/dsh-mobile-remote) - 维护者:monsterjakey
- 分类:客户端
- 许可证:MIT(
package.json版本 0.2.2) - 一句话:为官方 DeepSeek Harness Web UI 提供移动端皮肤、配对辅助,以及
tailscale serve与 DSH 端口的自动对齐。
插件体量很小(README 称安装包约 19 KB,若干 JS/CSS,无运行时 npm 依赖)。DSH 仍监听 127.0.0.1;认证沿用官方 launch-token → signed-cookie,配对码单次有效、30 分钟 TTL,token 不离开 Mac。
工作原理概览¶
访问路径可概括为:
iPhone / iPad Safari → https://<本机>.<tailnet>.ts.net(Tailscale HTTPS,仅 tailnet)
→ tailscaled(tailscale serve --https=443 → 127.0.0.1:<DSH 端口>)
→ 与桌面相同的 DSH Host(官方 Web UI + 插件注入的 /__dshm/* 与配对路由)
桌面 Host 每次启动可能换新端口时,插件会在启动后按 2/5/10/20/40 秒重试,并每 5 分钟做一次 tailscale serve 协调。手机不经过第三方中继,走 Tailscale WireGuard 隧道直连本机。
核心功能¶
以下均来自项目 README / package.json,按模块归纳:
- 移动端皮肤:作用域为
html.dshm-mobile;大屏(如宽于 1024px)保留官方桌面布局,仅增加触摸滚动与浮动上下页按钮。可用 URL 片段#dshm-off/#dshm-on切换并写入 localStorage。 - 配对:提供
/__dshm/pair页面与 6 位码;状态写入~/.dsh/mobile-remote.json(权限 0600)。 - Tailscale 集成:从
tailscale status --json检测 tailnet URL;自动刷新 serve 指向当前 DSH 端口;README 明确插件不触碰 Funnel。 - 可审计工具:
scripts/check-exposure.mjs检查 Funnel 关闭、Serve 仅 tailnet、Tailscale SSH 关闭、Serve 目标端口与当前 DSH 端口一致;scripts/setup-profile.mjs计算主机名、备份 profile 补丁并写入部署项。
兼容性:dsh.compatibility.dsh 为 >=0.2.2-0 <0.3.0(DeepSeek Harness Desktop 0.2.2.x)。
环境与依赖¶
安装前需确认:
- Mac 与手机登录同一 Tailscale tailnet,手机安装 Tailscale 应用。
- 在 tailnet 管理端启用 HTTPS 证书(DNS 相关设置),本机可用
tailscaleCLI(默认路径/usr/local/bin/tailscale)。 - DeepSeek Harness Desktop 满足上述版本范围。
安装与启用¶
推荐从 GitHub 安装(README 原文命令)。先将 DSH 指向桌面应用内置 CLI:
DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
"$DSH" plugin --profile desktop add -w github:monsterjakey/dsh-mobile-remote
node ~/.dsh/profiles/desktop/node_modules/dsh-mobile-remote/scripts/setup-profile.mjs
也可使用 release 压缩包(需自行准备 DSH 变量与文件路径):
"$DSH" plugin --profile desktop add -w file:/path/to/dsh-mobile-remote-0.2.2.tgz
执行 setup-profile.mjs 后,重启 DSH Desktop 一次。
典型用法:手机配对与收藏¶
重启后,在手机上按 README 步骤操作:
- 打开
https://<本机>.<tailnet>.ts.net/__dshm/pair - 在
~/.dsh/mobile-remote.json中查看pairingCode并输入 - 将
https://<本机>.<tailnet>.ts.net/加入书签(cookie 有效期约 7 天)
横屏大屏设备(README 以 iPhone Duo 为例)可获得更接近平板的侧栏与对话并排布局;仍为同一官方 Web UI 与同一会话。
排错与卸载¶
手机无法访问时,可在 Mac 上运行:
node ~/.dsh/profiles/desktop/node_modules/dsh-mobile-remote/scripts/check-exposure.mjs
若提示 serve target port X != DSH port Y,可执行 tailscale serve --bg --https=443 <Y>(插件也会自动重试)。另需确认手机 Tailscale 已连接且启用 Use Tailscale DNS,否则 *.ts.net 无法解析;长会话可考虑保持 Mac 唤醒(如 caffeinate)。
布局异常时,可在 URL 后加 #dshm-off 对比官方布局。
卸载示例(README):
DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
"$DSH" plugin --profile desktop remove -w dsh-mobile-remote
# 从 ~/.dsh/profiles/desktop/cordis.patch.yml 移除 "dsh-mobile-remote setup" 块
rm -f ~/.dsh/mobile-remote.json
tailscale serve reset # 仅当没有其他 serve 配置时
适用场景与安全注意¶
适合谁:已在 Mac 上用 DSH Desktop 跑 Harness,且 tailnet 内有一台 iPhone/iPad,希望用 Safari 查看同一 Web UI 与运行中任务,而不愿另建实例或公网暴露。
权限与风险:README 与 SECURITY 说明,配对后的手机对本机 DSH 具备所有者级访问(智能体可执行 shell、读写文件)。插件以当前 DSH 进程权限运行;安装前应阅读仓库源码、LICENSE(MIT)及 SECURITY.md、INSTALL.md。建议保持手机锁屏、禁用 Funnel,并用 ACL 限制仅你的设备访问本机 tcp:443。
DSH 生态强调「一切皆插件」;插件目录站点 SkillHub 为社区索引,与 DeepSeek / 幻方无官方从属关系。本文事实以仓库 README 与 package.json 为准。
链接¶
- 目录页:https://www.skillhub.cn/plugins/monsterjakey/dsh-mobile-remote
- 源码与文档:https://github.com/monsterjakey/dsh-mobile-remote
若你的场景是「同一台 Mac 上的同一会话、私网 HTTPS、移动端可读」,dsh-mobile-remote 把皮肤、配对和 serve 协调收成一条安装链;按上文命令安装并完成一次性配对即可在手机上复用桌面 DSH。