Back to home

april-jk

dsh-mobile-plugin

Unofficial DSH plugin for paired mobile access to a local DeepSeek Harness

Stars
0
Language
TypeScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

DSH Mobile Remote

English | 简体中文

Access a local DeepSeek Harness Web UI from a paired phone through an outbound-only Relay connection.

Community project: this is an unofficial project, independently developed and maintained by the community. It is not reviewed, endorsed, or supported by DeepSeek.

Complete project, signed Android APK, and private Relay package: DSH Mobile Suite

DSH Mobile Remote settings inside DeepSeek Harness

Compatibility

The current release is tested against @deepseek-ai/dsh@0.1.0-rc.6. DeepSeek Harness is in Developer Preview and may introduce breaking plugin changes. CI pins this version so compatibility changes are explicit.

Requirements:

  • Node.js 18 or newer
  • DeepSeek Harness 0.1.0-rc.6
  • A phone running the companion DSH Mobile app
  • HTTPS access to the configured Relay

Install

The immutable GitHub tag is the recommended public installation path. It requires neither a global DSH installation nor a local plugin directory:

npx @deepseek-ai/dsh plugin --profile web add "github:april-jk/dsh-mobile-plugin#v0.1.2"
npx @deepseek-ai/dsh web

Each GitHub Release also contains a prebuilt .tgz. DSH can install it directly from its release URL without a manual download or local path:

npx @deepseek-ai/dsh plugin --profile web add "https://github.com/april-jk/dsh-mobile-plugin/releases/download/v0.1.2/april-jk-dsh-mobile-0.1.2.tgz"
npx @deepseek-ai/dsh web

The package metadata is ready for npm, but @april-jk/dsh-mobile is not yet published to the public npm registry. After its first npm release, the registry command will be:

npx @deepseek-ai/dsh plugin --profile web add "@april-jk/dsh-mobile@<published-version>"
npx @deepseek-ai/dsh web

To uninstall:

npx @deepseek-ai/dsh plugin --profile web remove @april-jk/dsh-mobile

For local development, clone the repository and let the shell supply its current path:

git clone https://github.com/april-jk/dsh-mobile-plugin.git
cd dsh-mobile-plugin
npm ci
npm run build
npx @deepseek-ai/dsh plugin --profile web add "$PWD"
npx @deepseek-ai/dsh web

Pair a phone

Open Settings > Remote Access in the local DSH Web UI and generate a six-digit code or QR code. Log in on the mobile app and claim it once. Later DSH starts reuse the device credential stored in ~/.dsh-remote/config.json with owner-only permissions.

The same settings page can remove the pairing. Removal revokes the Relay device credential, disconnects active remote access, and clears the local credential only after the Relay confirms the operation. The dsh-mobile unpair command provides the same behavior when the Web UI is unavailable.

Network and data behavior

  • DSH remains bound to 127.0.0.1:3080; the plugin never creates a public listener.
  • The computer opens an outbound WSS connection to https://relay.dshmobile.online by default. Set DSH_RELAY before starting DSH to use another compatible Relay.
  • The Relay forwards authenticated HTTP and WebSocket traffic. MVP traffic is protected by TLS but does not yet have application-level end-to-end encryption.
  • The plugin stores its Relay device token locally in ~/.dsh-remote/config.json and never sends that token to the mobile client.
  • The Relay records bounded phone metadata and access times for the access timeline. It does not persist DSH request or response bodies.
  • Installing this bundle disables DSH's native directory picker and enables the browser-based picker so remote browsers can choose a directory without opening Finder or another native dialog.

For a private Relay, start DSH with the same HTTPS origin configured in the mobile app:

DSH_RELAY=https://relay.example.com npx @deepseek-ai/dsh web

Standalone commands

The fallback CLI is installed as dsh-mobile and supports start, pair, status, and unpair. Normal users should manage pairing through the DSH settings page.

Development

npm ci
npm run build
npm test
npm pack --dry-run

dist/ is committed intentionally so GitHub installs have a complete plugin without lifecycle scripts. CI rebuilds it and rejects stale generated output. Tags matching v* create a GitHub Release containing the prebuilt npm tarball.

Community discovery

The repository should use the dsh-plugin and deepseek-harness GitHub topics. A single-project post for the official plugin Discussion category can use:

DSH | DSH Mobile Remote | Access your local DSH Web UI from a paired phone

A ready-to-post project description is maintained in docs/SHOW-YOUR-PLUGIN.md.

License

MIT