libnode.so for arm64-v8a; the installer is ~110 MB, and it asks for ~500 MB on disk.DSH-Android by developer jackwener has been posted on GitHub: a build for Android 10+, arm64-v8a only, Apache 2.0 license. It installs like a regular APK, then you sign in with a DeepSeek account or your own API key. Other providers are added via « → » ("Settings → Model Service"). Link to the jackwener/DeepseekHarness-Android repository.
Inside, there are two processes. :main — Kotlin, Compose, Hilt, Room: the UI, the "Trajectory" screen, settings. :engine — a foreground service where Node 24, compiled into a native library for bionic, is brought up via JNI. Neither proot nor Termux is needed — and this sidesteps the "phantom process" restriction in Android 12+. dsh itself wasn't forked: the app talks to it over the SDK's JSON-RPC protocol via stdio, while all Android-specific functions are moved into plugins and small patches. The Kotlin side owns the device: CapabilityHub handles files, screen, settings, and notifications, and communicates with the engine over a private socketpair. TriggerHub handles automations — on a schedule or by event: connected to Wi-Fi, started charging, arrived at a location, received a notification.
What the agent can actually do in practice: search for and rename files, read text from PDF, Word, Excel, and PPT, read the screen and tap on it via the accessibility service, adjust brightness, sound, Do Not Disturb, Wi-Fi, Bluetooth, and location, reply to notifications, and control the media player. Shizuku connects in one tap from "Settings → Phone Permissions" and adds shell-level rights for system toggles.
It looks like the author wasn't solving the problem of "running an LLM on a phone" but rather "giving the agent hands." The model still goes to the cloud over HTTPS — there's no local inference here. The value lies elsewhere: phone agents used to live either in ADB crutches hooked up to a computer or in homemade Tasker scripts. Here it's an APK file and a JSON-RPC bridge to real system APIs — in our assessment, this is the most practical way to pair an LLM with Android without root.
We believe the main shift isn't in features but in responsibility. An agent with access to the screen, notifications, and settings can hit "confirm transfer" in a banking app just as confidently as it renames a file. The README offers only "use at your own risk" silence: I found no mechanics for confirmations, limits, or logs of dangerous actions there. The "Trajectory" screen shows what the agent did step by step — but that's after the fact, not a brake before an action.
Who wins: people tired of manually sorting files and flipping toggles, and the entire Shizuku ecosystem, which gains another mass-market use case. Who loses: makers of "smart" launchers and automation tools like Tasker — they'll have to explain why buy plugins when there's a free Apache-2.0 agent.
Cold start of the engine is about 5 seconds, and that's the only performance figure in the README; there's nothing about per-step latency, battery drain, or error statistics. The project is young — 24 commits, essentially one voice and one maintainer, with no official DeepSeek support (stated outright in the disclaimer). A separate weakness is third-party models: only OpenAI-compatible Chat Completions, context is counted as 128K for everyone, the reasoning level can't be selected, and web search still requires a DeepSeek key. It's worth checking yourself how the agent behaves on your ROM: some firmwares require manually allowing "background pop-up" and autostart.
Prediction: within a quarter, the repository will get at least one mechanism for confirming dangerous actions (an app whitelist or a dialog before a click) — otherwise the first high-profile "the agent clicked by itself" incident will close the topic for regular users.
Source: github.com · post in Telegram