sorsama/deepseek-harness-mobile
Android companion for DeepSeek Harness | chat, goals, approvals & notifications from your phone, over your LAN. Kotlin + Jetpack Compose.
项目介绍Project Overview
DSH Mobile 是 DeepSeek Harness 的非官方 Android 伴侣应用,基于 Kotlin 与 Jetpack Compose 开发。它复刻网页端的会话驱动、计划与目标审阅、批准与提问交互,以及完成通知等功能,配套 dsh-relay 提供凭据与证书固定。在需要通过本地网络远程管控 Harness 时使用。注意:原 Harness 缺乏身份验证,明文局域网模式仅适用于可信网络。
DSH Mobile is an unofficial Android companion for the DeepSeek Harness, built with Kotlin and Jetpack Compose. It mirrors the web GUI for driving sessions, reviewing plans and goals, answering approvals, and receiving completion notifications, and pairs with dsh-relay for credentialed, certificate-pinned access. Use it to control a harness over a local network from a phone. Caveat: the bare harness has no authentication, so plaintext LAN mode is only safe on trusted networks.
请帮我了解并安装插件:【deepseek-harness-mobile】【https://github.com/sorsama/deepseek-harness-mobile】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add dsh-relay
把 sorsama/deepseek-harness-mobile 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
DSH Mobile — DeepSeek Harness Remote
An open-source Android companion that puts your DeepSeek Harness in your pocket.
Drive sessions, review plans and goals, answer approvals and questions, and get notified
when the harness finishes — from your phone, over your local network.
DSH Mobile is an unofficial companion app for the DeepSeek Harness (MIT), mirroring its web GUI feature-for-feature in the harness's own visual language. Android only, Kotlin + Jetpack Compose.
Its companion on the other end is dsh-relay — a harness plugin that adds the authentication layer the harness says it lacks, so this app can reach a harness with a real credential and a pinned key instead of an open port. See Relay.
dshm.zyphite.com is the project site — what the app is, what it looks like, and how to get it running, on one page.
The wiki is the user-facing guide: getting started, connecting, troubleshooting, a feature tour and an FAQ.
Screenshots
| Connect | Chat | Trajectory |
|---|---|---|
![]() |
![]() |
![]() |
Recent harnesses with live reachability, LAN discovery, manual host:port, auto-connect. |
Streamed turns, a glyph per tool, expandable tool cards, permission picker. | The same session as a per-turn ledger with usage totals. |
| Session details | Subagents |
|---|---|
![]() |
![]() |
| Context breakdown, goal, plan mode, background jobs, queued turns, host info, session-log export. | The subagent catalog — open a child's transcript, follow up, or interrupt it. |
Features
- Connect effortlessly — auto-discovers a harness on your Wi-Fi (active subnet scan +
readiness handshake), remembers hosts and probes them for liveness on the way in, supports
manual
host:portentry, loopback for same-device setups, and auto-connect toggles (last used / LAN / same device). - Discord-style navigation — swipe right from the left edge to open the workspace-grouped chat list, swipe left to close it, swipe left from the right edge for the session details panel.
- Full chat experience — streamed turns with reasoning disclosure, markdown, terminal/diff/read/search/web tool cards, queue dock (edit / remove / steer), history paging, image attachments.
- Slash commands and skills — the composer adjudicates a
/line against the session's own command catalog and runs it through the harness's command gateway; anything the catalog does not claim is sent as a prompt, which is how skills are invoked. - Everything the GUI does — goals (phases, rounds, pause/resume/edit), plan mode + plan review, permission approvals, user questions, todo dock, subagents (catalog, follow-ups, interrupt), background jobs, workflow runs, skills, model selection, agent presets, session search, trajectory ledger, session export, message feedback.
- Notifications — turn complete, goal complete / blocked, review or question waiting for you; background connection via a foreground service.
- Looks like the harness — the exact DeepSeek Harness design tokens (colors, type, radii, disclosure rows, shimmer, ink buttons) with light / dark / system themes.
- 11 languages — English, 中文, हिन्दी, Español, Français, العربية, বাংলা, Português, Русский, اردو, ไทย (RTL aware).
Requirements
- Android 8.0+ (minSdk 26).
- A running DeepSeek Harness
(tested against
0.1.1-rc.2).
Quick start
Install the latest APK from Releases.
Open the app and choose how to connect. The two are not variations of one setting — pick the one that matches what you set up on the computer.
Relay — encrypted, authenticated, and works from outside your Wi-Fi. Install
dsh-relayinto the harness web profile:dsh plugin --profile web add dsh-relay dsh webOpen the printed URL on that computer, set a password, then open
/relay/pair. In the app: Relay → Pair a relay, scan the QR. Once every client you use has paired, turn off the relay'scompat.addressGrants— nothing here needs it.Local network — no setup on the phone, no authentication at all. Apply the one-file LAN patch in
harness/README.md, restartdsh web, then tap Scan network. Only on networks you trust.Behind your own HTTPS reverse proxy — paste the
https://address into local-network mode. The proxy can forward to loopback, so the harness needs no patch; but it encrypts the link without authenticating anyone. Seeharness/README.md.USB / emulator —
dsh web, thenadb reverse tcp:3080 tcp:3080, and connect to127.0.0.1:3080in local-network mode. No patch needed.Pick a session, chat, and get notified when the harness is done.
If a connect attempt fails, the app names the cause; the wiki's Troubleshooting page is keyed on that exact sentence.
Compatibility & security
- See docs/COMPATIBILITY.md for the harness version matrix and loopback-only surfaces.
- Read docs/SECURITY.md first. The bare harness has no authentication, so local-network mode is for trusted networks only — the app says so on the connect screen for the same reason. Relay mode adds a real credential and a pinned certificate, but authenticating still grants the same power as a shell on that computer, because the agent runs commands there.
Building
./gradlew :app:assembleDebug # debug APK
./gradlew :app:assembleRelease # release APK (signed when keystore env is set)
The shipped version comes from the git tag: the release workflow exports DSH_VERSION_NAME from
the tag name, and versionCode is derived from it. A local build falls back to the literal in
app/build.gradle.kts.
See CONTRIBUTING.md for the development loop against a real harness, the module layout, and the release workflow.
Repository
| Path | What |
|---|---|
core/ |
Pure-JVM protocol core: wire DTOs, RPC client, WebSocket downlinks, reconnect loop, session folding, notification classifier |
app/ |
Android UI: screens, discovery/connection, foreground service, notifications, i18n |
mock-harness/ |
Ktor mock of the harness /api server for tests |
tools/capture/ |
Records real harness traffic into conformance fixtures |
harness/ |
Companion patch + guide for LAN mode |
| — | The relay itself lives in sorsama/deepseek-harness-relay |
docs/ |
Architecture, protocol notes, compatibility, security |
License
MIT. Bundled third-party material is listed in THIRD_PARTY_NOTICES.md. The DeepSeek Harness and its brand are property of their respective owners; this project is an independent, community-built remote.





nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill