Skip to content
Unofficial companion app

The harness in your pocket

DSH Mobile is an open-source Android companion for the DeepSeek Harness. Drive sessions, review plans and goals, answer approvals and questions, and get notified when the harness finishes — from your phone, over your local network.

Android only. Kotlin and Jetpack Compose. It mirrors the harness web GUI feature-for-feature, in the harness's own visual language.

Android 8.0+MITv0.4.0Harness 0.1.0-rc.7
The Chat screen: streamed turns with a glyph per tool, expandable tool cards, the goal dock and the composer.
The Connect screen: remembered harnesses with live reachability, LAN discovery, manual host and port entry, and auto-connect toggles.
The Trajectory view: the same session as a per-turn ledger with usage totals.
Harness + phone

Your REMOTE for a harness that is still working

The harness runs on your computer. The work does not stop when you walk away from it.

Finds your harness

An active subnet scan plus a readiness handshake discovers a harness on your Wi-Fi. Remembered hosts are probed for liveness on the way in, and you can always enter a host and port by hand.

Drives the session

Streamed turns, reasoning disclosure, markdown, tool cards, the queue dock, slash commands, plan review, permission approvals and subagents — everything the web GUI does.

Tells you when it is done

Turn complete, goal complete or blocked, a review or a question waiting for you. A foreground service keeps the connection alive so the notification actually arrives.

What it does

Everything the GUI does, on a phone

Full chat experience

Streamed turns with reasoning disclosure, markdown, and terminal, diff, read, search and web tool cards. A queue dock to edit, remove or steer what is waiting. History paging and image attachments.

Full chat experience

Everything the GUI does

Goals with phases and rounds, plan mode and plan review, permission approvals, user questions, the todo dock, subagents, background jobs, workflow runs, skills, model selection, agent presets, session search and export.

Everything the GUI does

Slash commands and skills

The composer adjudicates a slash 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.

Slash commands and skills

Discord-style navigation

Swipe right from the left edge for the workspace-grouped chat list, swipe left to close it, and swipe left from the right edge for the session details panel.

Discord-style navigation
Screens

Five surfaces, one session

The same connection, seen five ways.

Connect
ConnectRemembered harnesses with live reachability, LAN discovery, manual host and port, auto-connect.
Chat
ChatStreamed turns, a glyph per tool, expandable tool cards, permission picker.
Trajectory
TrajectoryThe same session as a per-turn ledger with usage totals.
Session details
Session detailsContext breakdown, goal, plan mode, background jobs, queued turns, host info, session-log export.
Subagents
SubagentsThe subagent catalog — open a child's transcript, follow up, or interrupt it.
Looks like the harness

The harness's own design tokens, ported

Colors, type scale, radii, disclosure rows, shimmer and ink buttons come from the harness's own design platform rather than being approximated. Light, dark and system themes.

  • Ink#0F1115
  • Accent#4176E6
  • Surface#F5F6F7
  • Warn#F59E0B
  • Success#22C55E
  • Error#EC1313
Eleven languages

It speaks your language. So does this page.

The app ships in eleven languages, right-to-left aware. A lint rule fails the build when any base string is missing a translation — which is the only reason the claim stays true.

  • English
  • 中文
  • हिन्दी
  • Español
  • Français
  • العربية
  • বাংলা
  • Português
  • Русский
  • اردو
  • ไทย
Security and privacy

Read this before you put it on Wi-Fi

The harness has no authentication

The harness web server serves plain HTTP behind a trust fence, not authentication. There are no tokens, no cookies, no TLS. Any device on the same network can drive the agent — including running commands on the host computer. Only bind it to your own trusted network, never public or guest Wi-Fi.

One request leaves your network

On start the app asks GitHub for the latest release so it can tell you a newer APK exists. That is the only request that leaves your network, and you can turn it off in Settings. Nothing else in the app contacts anything but the harness.

What it stores

Remembered host addresses and app preferences, in app-private storage. No session content is written to disk — chat history lives in memory and is re-fetched on connect.

What it scans

Scanning probes only your own device's IPv4 /24, and only with a TCP connect followed by the harness's own describe call.

Read the full security model
Compatibility

Pinned to a tested baseline

DSH Mobile speaks the harness web client protocol, which is internal and not versioned on the wire. So the app pins a baseline — the harness release its call shapes were ported from and checked against.

DSH MobileHarnessStatus
0.5.00.1.0-rc.8Supported baseline
0.4.00.1.0-rc.7Previous baseline
0.1.0 – 0.3.10.1.0-rc.5

The baseline says what was tested. It is not a gate: the app degrades on shape rather than version, and shows the harness's own version wherever a host appears.

Read the compatibility policy
Get started

Install it, then point it at your harness

Install the APK

Grab the latest release. Android 8.0 or newer.

v0.4.0

USB or emulator

Run the harness, forward the port, then connect to loopback in the app.

$ dsh web
$ adb reverse tcp:3080 tcp:3080

Wi-Fi

Apply the one-file LAN patch, restart the harness, then tap Scan network in the app.

$ ~/.dsh/profiles/web/cordis.patch.yml
LAN mode setup

If a connect attempt fails, the app names the cause — and the wiki's troubleshooting page is keyed on that exact sentence.

Put the harness in your pocket

Open source under MIT. No account, no telemetry, no server in the middle — just your phone and your own computer.