DSH Go
A DeepSeek Harness client for Android: run DSH on the phone itself, or drive DSH on your computer remotely.
- Source repo
- ccch1mneyyy/dsh-Go
- Stars
- ★ 9.3k
- Last updated
- today
- License
- AGPL-3.0
- Primary language
- Dart
- FA score
- 55/100 · Major gaps
At a glance
- How it runs
- Works with
- Portable with changes
- Cost
- Free software; you pay for model usage
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- Developers who only carry an Android phone and want to keep using DSH for coding or tool-driven tasks while commuting or travelling.
- Not a fit if
- Users unwilling to reserve about 1 GB on the phone for a local Linux runtime
- Users who expect a Google Play or iOS install path
- Teams that must support 32-bit ARM or x86 devices
- Source review
- 55/100 · Major gaps
What does this agent do, and when should you use it?
DSH Go is a community-built, unofficial Android client for DeepSeek Harness, with a Flutter UI, Kotlin platform code on the Android side, and AGPL-3.0 licensing. It supports two execution models: install Ubuntu, Node.js and the DSH runtime inside the app and run the DSH engine on the phone without root or Termux, or connect to DSH on a computer or server over SSH or DSH Remote. The chat UI covers model switching, image and voice input, tool approvals and questions, plus one-tap switching between the native interface and the official web client on the same conversation. The repository also ships packages/dsh_client (Dart client for the DSH Web API), packages/dsh_remote (Dart client for DSH Remote), the sdk/plugin-kit authoring kit and examples/plugins. The DSH engine runs locally, but model requests still go to whichever provider you configure and are billed to that account. Targets Android 8.0+, distributed as a sideloaded APK rather than a Google Play build; iOS and HarmonyOS are only stated as planned.
On first launch you pick either a local runtime install or a remote host, then configure a model and credentials for that host and start chatting. In local mode the app prepares an in-app Linux runtime (PRoot-compatible by default; the direct-launch developer option is off by default), runs Node.js and the DSH engine inside it, and talks to the DSH Web API through packages/dsh_client. Remote hosts go through packages/dsh_remote or SSH. During a run you can queue a message and send it immediately, collapse the tool trace into a single line once finished, and switch between the native UI and the official web client without losing the conversation. Phone control, once permissions are granted, lets the local engine read the screen, tap and type, while payments, passwords, verification codes and system settings are handed back to you for confirmation. Outputs include share cards, exported conversations as end-to-end encrypted replay links, and appearance options for theme colors, launcher icons and the Deepy / 鲸娘 pets. Plugin authors use sdk/plugin-kit to build native tool cards, forms and panels, with examples/plugins as reference.
- Developers who only carry an Android phone and want to keep using DSH for coding or tool-driven tasks while commuting or travelling.
- Users who already run DSH on a desktop or server and want to pick up the same workflow from a phone via SSH or DSH Remote.
- Plugin authors who want native tool cards, forms and panels in DSH Go and need an SDK plus examples to start.
- Anyone who needs to hand a coding conversation to a colleague as a share card or an encrypted replay link.
- Tablet and landscape-phone users who want a persistent sidebar and centered content for long conversations.
- Users willing to grant accessibility permissions so the local engine can tap and type for them, while keeping sensitive steps under human confirmation.
How do you install or deploy this agent?
Requires Android 8.0 (API 26) or later. Common 64-bit phones take the arm64 package from the Releases page; x86_64 devices and emulators use the x64 package listed under "other downloads" at the end of the release notes. No 32-bit ARM build exists.
- Download the matching APK from GitHub Releases or the official download page and allow that install source when prompted.
- On first launch, either install the local runtime or connect to a remote host. A remote-only setup does not need the local runtime; running DSH on the phone needs roughly 1 GB of free space.
- Configure the model and credentials for the chosen host, then start chatting.
Building from source targets Linux x86_64 and needs Bash, Git, curl, tar, unzip, xz, Python 3, zstd, file and standard GNU tools:
git clone https://github.com/ccch1mneyyy/dsh-go.git
cd dsh-go
bash tooling/setup-toolchain.sh
source tooling/env.sh
flutter --version
java -version
bash runtime/build-runtime.sh arm64-v8a
DSH_BETA_TOKEN_FILE= bash tooling/build-apk.sh -f arm64 --keep-daemonThe output lands at app/build/app/outputs/flutter-apk/app-arm64-release.apk. Without app/android/key.properties, local release builds use debug signing and cannot overwrite an official APK signed with a different key.
How do you use this agent?
After choosing a host on first launch, configure the model and provider credentials for that host to enter the chat UI. Local mode finishes installing the bundled runtime first, so requests go through the on-device DSH engine; remote mode uses the instance on your computer or server over SSH or DSH Remote.
Day-to-day operations include switching models, sending images and voice input, handling tool approvals and questions, queuing a message mid-run and choosing "send now", toggling between the native UI and the web client, and producing share cards or end-to-end encrypted replay links.
Phone control requires enabling accessibility and related permissions as prompted; Do Not Disturb mode additionally needs Android 14+ with Shizuku or self-connected ADB. The guide at docs/guide/README.md covers first-time setup step by step.
Plugin authors start here:
# read the plugin guide and SDK docs
docs/plugins/README.md
sdk/plugin-kit/README.mdTo inspect the APK build commands without running them:
DSH_BETA_TOKEN_FILE= bash tooling/build-apk.sh --dry-run -f allWhat are this agent's strengths and limitations?
- Genuinely runs DSH on Android: an in-app Ubuntu and Node.js runtime with no root or Termux, and remote-only users can skip the local runtime entirely.
- Local and remote paths coexist, so you can continue the same workflow between phone and computer over SSH or DSH Remote instead of picking one.
- Careful conversation handling: queue and immediately send messages during generation, collapse the tool trace to one line, and toggle between native UI and the official web client on the same conversation.
- Privacy-aware sharing: share cards and replay links are end-to-end encrypted with the key only in the link, and phone control hands payments, passwords and verification codes back to you.
- A real plugin path for authors via sdk/plugin-kit and examples/plugins, with sdk/ and examples/ kept under the more permissive MIT license.
- Landscape and tablet layouts, six theme colors, selectable launcher icons, and a fully bilingual Chinese/English interface.
- Android sideload APK only, with no Google Play build and no iOS or HarmonyOS release; those are stated intentions, not shipping targets.
- No 32-bit ARM build, so device architecture must match arm64 or x64.
- Building from source is heavy: Linux x86_64, JDK 17, Flutter 3.47.7, Android SDK/NDK, a runtime build step and network downloads.
- Local release builds fall back to debug signing without key.properties, so they cannot overwrite an official APK; early differently-signed test builds also require uninstalling, which wipes conversations, the Linux environment and settings.
- Capabilities vary by host and connection: DSH Remote supports image attachments only, cannot open the web client in-app, limits plugin management to toggles, and lacks DS Bot and conversation-log export.
- Anonymous usage statistics are on by default and must be turned off in Settings → Privacy & Sharing; with phone control enabled, screen text and screenshots may be sent to the model.
- Community, unofficial project with no affiliation to DeepSeek; the name, marks and the Deepy and 鲸娘 mascots are outside the AGPL grant.
How does this agent compare with similar options?
The README positions DSH Go against the upstream DeepSeek Harness and the author's own DSH-TUI: it does not reimplement the engine, but puts DSH on Android and adds remote takeover, letting you alternate between the native client and the official web client. The remote connection work references the ds-harness-remote project and servers.
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| DSH Go This agent | 55 · Major gaps | Desktop appFree + model costs | ★ 9.3k | today | Dart | — |
| Harness Remote | 69 · Some gaps | Desktop app | ★ 434 | 1d ago | JavaScript | Codex · Claude Code |
| Lody | 75 · Good | Self-hosted service | ★ 1.7k | today | TypeScript | Codex · Claude Code |
| Autoprompt Skill | 69 · Some gaps | CLIFree + model costs | ★ 1.2k | 1mo ago | JavaScript | Codex · Claude Code |
How does FollowAgents rate this agent?
Why each dimension lost points
README states plainly that model requests go to the configured provider, that phone control may send screen text/screenshots to the model, and that anonymous usage stats are on by default and can be disabled; the plugin-config design doc adds a default-deny whitelist, write-only secrets, and error codes that never echo host messages. Those are concrete constraints. Deductions: phone control needs Accessibility and reads the screen — a high-sensitivity capability justified only by a one-line promise that payments/passwords/codes stay with the user, with no verifiable interception mechanism; telemetry is opt-out; dependency security is asserted ('versions and verification data pinned') without a lockfile or scan evidence in the files; external effects (share links, companion service, go.dshtui.com download page) lack a server-side trust-boundary description; rollback is explicitly not transactional ('cancel is not a rollback') and the bridge route is not yet implemented.
The design docs are internally coherent on concurrency, generations, lock ordering, bounded queues, temp-file cleanup and fixed reason codes, and the plugin-config doc enumerates 400/404/409/422/503/500 semantics with the app's handling — failure messaging is well designed. Deductions: the build needs network access to fetch SDK/NDK, Ubuntu packages and runtime assets plus extra tools (gpgv, zstd), and dependency availability rests on a single 'pinned versions' sentence; the docs themselves admit the bridge route is unimplemented and ConfigEditor has a path-normalization defect, so documented behavior and current state diverge.
Audience and scenarios are clear: Android 8+, arm64/x64, on-device PRoot runtime or SSH/DSH Remote hosts, tablet/landscape layouts, bilingual UI. Capability boundaries are explicitly listed (DSH Remote accepts images only, no DS Bot or log export, plugin management limited to enable/disable). Deductions on trigger precision: phone-control activation conditions, safe-mode boundary and the Android 14 + Shizuku requirement for non-disruptive mode get one README sentence each, with no verifiable start/stop rules; environment fit covers vendor battery savers but only as 'it tells you and opens the setting'.
README is well structured (download, features, install, data/permissions, FAQ, build, layout, contribute, community, license); install notes distinguish arm64/x64, warn that a differently signed build cannot update in place, and document the build script plus dry-run; FAQ and known limitations (remote capability limits, no 32-bit ARM, sideload-only) are present; AGPL-3.0 with MIT for sdk/examples and ASSETS.md trademark terms are clear. Deductions: naming stability suffers from dsh-go / DSH Go / dsh-go-bridge / r13 / r14 version codenames and a dated design doc marked 'pending backend'; no changelog or versioning scheme; maintenance responsibility is only Issues, SECURITY.md and chat groups, with no release cadence or support commitment, and the publisher is unverified.
Output usability has concrete evidence: the plugin quickstart gives a runnable 5-minute view function, toolCard fallback rules, check.mjs self-check and a symptom/cause table; the plugin-config doc maps every error code to user-facing copy. Marginal value is real — running DSH on the phone with one-tap host switching is differentiated. Deductions on cost/benefit: ~1 GB free space, an embedded Linux environment, Accessibility permission and possibly Shizuku/ADB, while the bridge route is unimplemented and some capabilities are limited; the trade-off is never quantified.
Fact/inference separation is handled well: the design docs distinguish measured from unverified, refuse to extrapolate Android frame timings, and require unrun device paths to stay unverified; the plugin-config doc marks which fixtures are real captures and which parts await backend work. Deductions: README security/privacy claims (local web interface answers only to the app, share links are end-to-end encrypted with the key only in the link) point to no code or test; cross-source corroboration is limited because test fixtures are synthetic and cannot be checked against real runs; publisher identity is unverified and the external download page and companion service cannot be confirmed from the repository.
- Phone control requires Accessibility and reads the screen; screen text and screenshots may be sent to the configured model. Check the provider's data policy before enabling, and note the README offers no verifiable interception for payments or passwords.
- Anonymous usage statistics are enabled by default and must be turned off during onboarding or in Settings.
- The plugin-config bridge route is not implemented; hosts currently fall back to the volatile path, so the full configuration capability described in the docs is not yet available.
- The plugin-config whitelist is currently a client-side defense only; any client holding /api credentials can still write core config (the doc says so in §7.4). Do not rely on that isolation until the server side lands.
- The APK is sideloaded; an early test build signed with a different key cannot update in place, and uninstalling clears chats, the Linux environment and settings — back up first.
- Publisher identity is unverified; the go.dshtui.com download page and companion sharing service cannot be confirmed from the repository. Prefer GitHub Releases and verify the signature.
- Building requires network access for SDK/NDK, Ubuntu packages and runtime assets plus extra tools (gpgv, zstd); dependency security rests on a 'pinned versions' statement with no lockfile or scan evidence in the files.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
v1.0.10 DSH Go 1.0.10
Release notes excerpt
手机安装:只需下载 [dsh-go-1.0.10-arm64.apk](https://github.com/ccch1mneyyy/dsh-go/releases/download/v1.0.10/dsh-go-1.0.10-arm64.apk)。 update.json 和 SHA256SUMS 供自动更新与校验使用,无需手动下载。GitHub 自动生成的 Source code 是源码包,不是安装包。 Install on your phone: download [dsh-go-1.0.10-arm64.apk](https://github.com/ccch1mneyyy/dsh-go/releases/download/v1.0.10/dsh-go-1.0.10-arm64.apk). update.json and SHA256SUMS support automatic updates and verification. You do not need to download them manually. GitHub's Source code archives are not installers. 中文 …View on GitHub ↗ -
v1.0.9 DSH Go 1.0.9
Release notes excerpt
手机安装:只需下载 [dsh-go-1.0.9-arm64.apk](https://github.com/ccch1mneyyy/dsh-go/releases/download/v1.0.9/dsh-go-1.0.9-arm64.apk)。 update.json 和 SHA256SUMS 供自动更新与校验使用,无需手动下载。GitHub 自动生成的 Source code 是源码包,不是安装包。 Install on your phone: download [dsh-go-1.0.9-arm64.apk](https://github.com/ccch1mneyyy/dsh-go/releases/download/v1.0.9/dsh-go-1.0.9-arm64.apk). update.json and SHA256SUMS support automatic updates and verification. You do not need to download them manually. GitHub's Source code archives are not installers. 中文 …View on GitHub ↗ -
v1.0.8 DSH Go 1.0.8
Release notes excerpt
手机安装:只需下载 [dsh-go-1.0.8-arm64.apk](https://github.com/ccch1mneyyy/dsh-go/releases/download/v1.0.8/dsh-go-1.0.8-arm64.apk)。 update.json 和 SHA256SUMS 供自动更新与校验使用,无需手动下载。GitHub 自动生成的 Source code 是源码包,不是安装包。 Install on your phone: download [dsh-go-1.0.8-arm64.apk](https://github.com/ccch1mneyyy/dsh-go/releases/download/v1.0.8/dsh-go-1.0.8-arm64.apk). update.json and SHA256SUMS support automatic updates and verification. You do not need to download them manually. GitHub's Source code archives are not installers. 中文 …View on GitHub ↗