dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Неофициальное Android-приложение для DeepSeek Harness: чаты всех проектов, задачи и ответы агента с телефона. QR-привязка, Wi‑Fi/Tailscale, без облачного сервера. Модели и инструменты остаются на компьютере.
Case study on the website: · Technical write-up (in Russian) on Habr
English | Русский
Your DeepSeek Harness agent runs on your computer. From your Android phone you assign tasks with photos and files, read replies in real time, answer the agent's questions and get an “Answer ready” notification.
Download APK 0.8.2 · Installation · Architecture · Security
An unofficial project by Pavel Logachev. Developed independently of DeepSeek.
Android 8.0+ · QR code pairing · Wi‑Fi or Tailscale
Models, tools and subscriptions stay on the computer. DSH Mobile has no cloud server.
Attachments, “Steer”, answering questions, renaming, changing the model, viewing and downloading files, as well as the new notification features require companion plugin 0.7.0 or later. The notification-delay and send-admission fixes in the current release require plugin 0.7.2. The app shows each new feature only if the connected plugin reports that it supports it.
The theme follows the system one; you can also choose light or dark manually. The interface is in Russian and English: the language follows the system or is chosen in the app settings. Large font sizes are supported.
The screenshots were taken in the real app with synthetic demo data. They contain no real chats or connected models.
DSH Mobile 0.8: the agent works on your computer, and your chat with it is on your phone.
Chats from all DSH projects in one list.
The agent is working and you add a message: to the queue, or “Steer” at the next step.
Camera photos, gallery pictures and files — in one message to the agent.
An agent question: pick an option, write your own answer or skip it.
The ⋯ menu: renaming the chat and changing the model.
An image from the chat in full screen: zoom in, share, save.
Notifications: the answer is ready, the agent has asked a question.
A companion plugin is installed on the computer. It opens a narrow API to the paired phone over a secure connection but does not expose the DSH web interface to the outside.
Android app
│ HTTPS over Wi‑Fi or Tailscale
│ or through your own relay
▼
Companion plugin inside DSH
│
▼
Your projects and agents on the computerThe phone is only a client: the agent keeps working after you close the app. The main conversation history is stored in DSH on the computer.
The Android client is written in Kotlin and Jetpack Compose; the plugin runs on Node.js. Your own relay is an optional way to connect; the project does not provide a shared public relay.
You can hand the detailed setup guide to your DSH agent. It contains environment checks, commands and separate approval of the installation, access rights and activation.
Computer: Windows, DeepSeek Harness 0.2.0-rc.2 or 0.2.1-alpha.1, Node.js 24.x, OpenSSL 3. Phone: Android 8.0 or later. Node 24 is also required by the DSH process the plugin runs in — having one suitable version on PATH is not enough.
From release 0.8.2 you need the signed dsh-mobile-0.8.2.apk, the plugin archive dsh-mobile-host-0.7.2.zip and their checksums: dsh-mobile-0.8.2.apk.sha256, dsh-mobile-host-0.7.2.zip.sha256. The archive contains companion plugin 0.7.2 for app 0.8.2. All files must come from the same release. UNSIGNED-verification.apk is a verification artifact, not a file to install.
Specify the absolute paths to the downloaded files and compare the hashes with the .sha256 files. If they do not match, stop.
$zip = '<ABSOLUTE_DOWNLOADED_HOST_ZIP>'
$apk = '<ABSOLUTE_DOWNLOADED_SIGNED_APK>'
(Get-FileHash -LiteralPath $zip -Algorithm SHA256).Hash.ToLowerInvariant()
(Get-FileHash -LiteralPath $apk -Algorithm SHA256).Hash.ToLowerInvariant()
# Compare exactly with the release's .sha256 files. A mismatch means STOP.Extract the installer from the archive and read it. In the commands below, replace the placeholders: the path to the script and the computer's address on your home network or in Tailscale. If you do not need an additional address, remove the second element of the array.
$installer = '<ABSOLUTE_REVIEWED_INSTALL_HOST_PS1>'
$hosts = @('<ACTUAL_PRIMARY_LAN_OR_TAILSCALE_HOST>', '<OPTIONAL_ADDITIONAL_SAN>')
# Remove the second element if not needed. Substitute approved real values locally.
& $installer -ZipPath $zip -Hosts $hosts -WhatIf
& $installer -ZipPath $zip -Hosts $hostsThis step prepares the files and configuration but does not yet connect the plugin to DSH.
After reviewing the proposed changes:
& $installer -ZipPath $zip -Hosts $hosts -ActivateThe installer does not restart DSH. If the plugin has not started, follow the troubleshooting steps in the guide: a restart may be needed, but it is approved separately.
If home Wi‑Fi needs a Windows Firewall rule, add it only with the owner's consent and only for the private network. The installer does not change the firewall automatically.
Allow Android to install apps from the chosen source. Turn this permission off after installation.
On the computer, specify the directory of the installed plugin version and check the configuration:
$plugin = '<EXACT_LOCALAPPDATA_DSHMOBILE_PLUGIN_VERSION_DIRECTORY>'
$cli = Join-Path $plugin 'dist/cli.js'
$config = Join-Path $env:LOCALAPPDATA 'DSHMobile/host/host.json'
node $cli verify-config --config $configThen choose one pairing command. Read-only access to all current and future projects:
node $cli pair --config $config --read all --ttl 300 --qrOr read access and running tasks in all of these projects — only if you agree to give the phone these rights:
node $cli pair --config $config --read all --execute all --ttl 300 --qrIn the app, tap “Scan QR code”, check the computer's address and the certificate fingerprint, then confirm pairing. The camera is used only for scanning; the code is recognized without a network and without Google services.
To use it away from home, install Tailscale on the computer and the phone, connect both to your Tailscale network and specify the computer's name when preparing the plugin. You do not need to open a port on your router. The alternative is your own relay on a VPS.
Upgrading: APK 0.8.2 is signed with the same key as all previous releases and installs over them without uninstalling the app. On October 24, 2026, installing 0.8.2 over 0.8.1 was verified on a OnePlus with Android 16: pairing was kept. Verification history: on October 23, 2026, installing 0.8.1 over 0.8.0 was verified on a OnePlus CPH2747 phone: app data and pairing were kept. Earlier, installing 0.8.0 over 0.7.1 was verified on the owner's phone: chats and pairing were kept; settings are kept on such an upgrade as well. The 0.6.1 → 0.7.0 and 0.7.0 → 0.7.1 upgrades were verified on the same phone, and installing 0.7.1 over the published 0.7.0 was also verified on an Android 11 emulator. The plugin is upgraded to 0.7.2 by the installer from the new archive with the -Upgrade -Activate switches: the installer replaces the plugin block in the DSH profile with a placeholder, waits until the previous plugin releases its port, and only then connects the new version, and DSH picks it up on the fly. Agents keep working, and the phone briefly loses its connection. If hot reload is not enabled in DSH and the previous plugin has not released the port, the installer stops without connecting the new version and leaves the placeholder in the profile. A separately approved DSH restart is then needed, but the restart alone does not complete the upgrade: once the previous plugin has stopped, connecting the new version still has to be finished. A restart ends the agents' running turns, so do it when the agents are not running anything. In the upgrade history, plugin 0.7.1 added a new table to its database (schema 3 → 4); it does not change existing data. The plugin upgrade 0.5.1 → 0.6.0 was verified on a test copy, with the configuration, the TLS key and the rest of the profile contents preserved. The upgrade and rollback procedure is described in the guide.
The current release pair is app 0.8.2 and plugin 0.7.2. Compatibility history (not a check of the current pair): app 0.8.1 shows new features only if the connected plugin reports them, so with plugin 0.7.0 it keeps the core features, but without the faster notification delivery and the empty-session fix; this combination was not tested separately. App 0.8.0 should work with plugin 0.7.1: the plugin keeps API v1 and the earlier contracts; this combination was not verified either. App 0.8.0 works with plugin 0.6.0 without the 0.8.0 features. App 0.7.0 was also verified on the phone with plugin 0.5.1: without the subagent indicator and with a slower first opening of a chat. App 0.6.1 is protocol-compatible with plugin 0.6.0.
Do not expose the DSH web port to the outside and do not disable TLS verification. Details are in the security overview.
From the repository root, in PowerShell:
cd host; npm ci; npm ci --prefix ../relay; npm run check # companion plugin, Node 24; the tests need the neighboring relay
cd ..\android
powershell -NoProfile -ExecutionPolicy Bypass -Command "& ../tools/android-build.ps1 -Tasks ':app:assembleDebug', ':app:testDebugUnitTest', ':app:lintDebug'"JDK 21 is recommended; the Windows helper also supports JDK 17. You need Android SDK platform 36 and build-tools 36.0.0.
A regular release build of the APK is unsigned and cannot be installed as is. Building, packaging the plugin and signing with your own key are described in the build guide and the APK release guide.
Release: app 0.8.2 (versionCode 15) and companion plugin 0.7.2; details are in the 0.8.2 release notes. Plugin 0.7.2 runs in the owner's DSH, and app 0.8.2 on his phone. The checks of the previous release are in the 0.8.0 release notes.
Component · What was checked Android 0.8.2 · On Android code 3dc0126: two full JVM runs, 357/357 each; lintDebug — 0 errors (46 warnings, 1 hint). The release helper runs assembleRelease, testDebugUnitTest and lintRelease APK signature · The same certificate, SHA-256: F9080C63B49A0BDE6B74AA2ADF7E9531D6C4F305978A24D3F5D271A39F1B7B95; v2/v3 schemes, 16 KB alignment; non-debuggable, HTTPS-only Plugin 0.7.2 · 282/282 with the Cordis module env; without it, 275 pass and 5 skipped (280 total). Independent re-review of the host code: GO after three blockers were fixed Installer · 28/28 synthetic scenarios; not a check of installation on a phone Physical phone · OnePlus, Android 16, APK 3dc0126: the sending status after 0.3–0.7 s; sends in a new and an existing chat and after more than 110 s idle; send → Home ×2 — one delivered prompt each time; the upgrade over 0.8.1 kept pairing Owner's observation, October 24, 2026, around 11:40 Moscow time · App 0.8.2 + live host 0.7.2: «Ну вроде бы всё приходит, и чат открывается нужный» (“Well, everything seems to arrive, and the right chat opens”). Everyday use, no instrumented latency measurements Not verified with instruments on a phone · Notification latency and tap routing with host 0.7.2; auto-retry and the “not sent” banner on a real network switch (the send button was disabled during reconnect); delivery under real Doze APK permissions · INTERNET, CAMERA, POST_NOTIFICATIONS, FOREGROUND_SERVICE, FOREGROUND_SERVICE_SPECIAL_USE, ACCESS_NETWORK_STATE and the app's own signature-level receiver permission. No telemetry and no Google services
This project was built by Pavel Logachev. I build websites, web services, Telegram bots, apps and automation for your task: I work out the task, build the solution and launch it myself. 20 years in IT: first as an engineer, then as a project manager. Tell me about your task by email or on Telegram — a 20–30 minute review is free, and you do not need a ready-made specification. Prices and other projects are on logachev.net and in my profile.
MIT © 2026 Pavel Logachev. Third-party dependencies are distributed under their own licenses.