Phone-first PWA for DeepSeek Harness — sessions, streaming chat, approvals on iOS and Android. No app install.
在 DeepSeek Harness 终端运行:
dsh plugin --profile web add jackxu925/dsh-pwaEnglish | 中文
DeepSeek Harness in your pocket. A phone-first PWA for DeepSeek Harness (dsh): it mounts at /m on your dsh web server — session list, real-time streaming chat, approvals, agent questions, new sessions, image messages. No app install: open it in mobile Safari/Chrome → Add to Home Screen → full-screen app. iOS and Android.

| dsh-pwa | saya-ch/dsh-mobile | Official web UI over Tailscale | |
|---|---|---|---|
| Form | PWA, zero install on the phone | Native Android app + plugin | Desktop-first web UI |
| iOS | ✅ (Safari → Add to Home Screen) | ❌ (Android only) | ✅ (browser) |
| Android | ✅ | ✅ | ✅ |
| Remote access | Inherits dsh web (LAN / Tailscale / any reverse proxy) |
Built-in: LAN, Tailscale Funnel, cpolar, cloudflared, FRP | Manual tailscale serve |
| Push notifications | ❌ (iOS PWA limits) | ✅ (Android system notifications) | ❌ |
| Security model | Same origin + dsh trusted-host fence |
Cert pinning + device pairing | trusted-host fence |
| Maintenance surface | Static files only — speaks the same /api as the desktop GUI |
Native app + plugin to maintain | None (official UI) |
If you want Android system notifications and certificate-pinned device pairing, check out saya-ch/dsh-mobile. If you want the lightest thing that works on both iOS and Android with nothing to install on the phone, you're in the right place.
The full UX audit trail lives in docs/AUDIT.md — 69 items, all fixed, each with the root cause.
Prerequisite: desktop dsh CLI installed.
1. Create (or reuse) a web profile, ~/.dsh/profiles/web/package.json:
{
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"dsh-pwa": "latest"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-pwa"
]
}
}
}
2. Install and start (add your access domain to the trust fence when the phone connects from outside):
cd ~/.dsh/profiles/web && npm install
dsh --profile web --host 0.0.0.0 --port 3080 --trusted-host <your-access-domain>
3. On your phone, open http://<host>:3080/m/ → Share → Add to Home Screen for the full-screen PWA.
<host> is the server's LAN IP.--trusted-host in step 2 (Tailscale must be running on both the server and the phone, logged into the same account), then open http://<tailscale-hostname>:3080/m/.Upgrade later with npm update dsh-pwa and a dsh web restart. The plugin only mounts static files; the page speaks DSH's own /api, so it moves with your DSH version (developer-preview caveat in the FAQ below).
web/ as static files at /m (lib/routes.js, self-healing if the webServer instance is recreated)./api — the identical protocol the desktop GUI uses (POST /api/<ns>/<method>, POST /api/respond, ws://…/api/events.mux downstream frames). Zero business-logic duplication.trusted-host fence.Iterating on the UI needs no restart: files are re-read per request, just refresh the page.
| Sessions | Chat |
|---|---|
![]() |
![]() |
Contributor-friendly next steps (from docs/AUDIT.md §"still needs protocol/server support"):
session/listFull list: docs/ROADMAP.md. Grab one, open a PR — see CONTRIBUTING.md.
Vanilla JS, no build step, no framework. web/ is the app, lib/ is the mount, client/ injects the desktop settings entry. Details in CONTRIBUTING.md. PRs welcome — especially the roadmap items above.
Does it work on iPhone? Yes — that's the point. Safari → Share → Add to Home Screen.
Do I install anything on the phone? No. It's a web page.
Is it safe to expose? Same threat model as dsh web itself: anyone who can reach the URL (your tailnet / LAN) can drive your agent. Keep it inside a trusted network; don't put it on the public internet.
Does it work offline? No — it needs a live connection to your dsh server.
Will a DSH update break it? The page speaks the same /api as the desktop GUI and ships no protocol logic of its own, so it moves with your DSH version. That said, DSH is still in developer preview and its API may change in breaking ways — if that happens, the plugin will need a matching update.
MIT — see LICENSE.
登录后即可为该插件评分和评价。
还没有人评价这个插件,来抢个沙发吧!