# Mobile Harness: a Claude Code workspace that runs Ubuntu on an Android phone

> Mobile Harness is a Kotlin Android application that pairs a Jetpack Compose interface with a full Ubuntu 20.04 ARM64 userspace running under PRoot, so a coding agent can edit files, run Linux commands and preview a live web server from the phone itself. It ships as an 89 MB online APK or an 889 MB offline one, needs no root, and the README is blunt that PRoot is not a security boundary.

**techjarves/Mobile-Harness** — Claude Code on Android:  AI-powered mobile coding IDE for Android — chat with a coding agent, run Linux commands, edit files, review diffs, and preview web apps directly from your phone. No root required.

- Repository: https://github.com/techjarves/Mobile-Harness
- Website: https://techjarves.github.io/Mobile-Harness/
- Stars: 666 · Forks: 200
- Language: Kotlin
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/techjarves-mobile-harness

## What the app actually is

The repository description sets the scope: Claude Code on Android, an AI-powered mobile coding IDE where you chat with a coding agent, run Linux commands, edit files, review diffs and preview web apps directly from your phone, with no root required. The README calls it the complete autonomous AI development workspace for Android, and the capability list is the same list in longer form.

The system requirements are narrow and stated in the badges: ARM64 Android 9 or newer, direct APK installation, no root required, and no USB or wireless ADB pairing. That last one matters more than it sounds, because the usual way to drive an Android device from a development tool is over ADB, and this app removes that step entirely by doing the build on the device.

The primary language is Kotlin, the licence is MIT, and the homepage is a GitHub Pages site at techjarves.github.io. The recent releases are v1.0.7 from 2026-10-11, v1.0.6 from 2026-10-10 and v1.0.5 from 2026-10-10, so the project is on a 1.0 line and shipping patch releases daily at that point. The last push was on 2026-10-11 and the project is not archived.

The repository layout is that of a standard Android application: app/ for the app module, build.gradle.kts, settings.gradle.kts, gradle.properties, gradlew and gradlew.bat, plus a dist/ directory, docs/, scripts/, third_party/, a .gitmodules file, fastlane/ for release automation, fdroid/ for F-Droid packaging, and two files worth noting, mobile-harness-update.json for in-app updates and PRIVACY.md.

So this is a real application with a release pipeline, not a script. The question for an evaluator is what the Ubuntu layer and the agent integration actually give you on a phone, and what the security model is, which is where the README is unusually direct.

## Two editions, and the size difference is the interesting part

The download section presents two APKs and the choice between them is about connectivity rather than features.

The Online Edition is 89.1 MB and is the recommended one. The core, Python and Android runtime bundles are downloaded only when needed, so the initial install is small and the heavy parts arrive on demand.

The Offline Edition is 889.4 MB and contains everything, including the Core, Python and Android runtime bundles, for setup with limited or unavailable internet.

Both editions contain the complete Mobile Harness app and support secure in-app updates beginning with v1.0.3. The mobile-harness-update.json file at the repository root is the mechanism for that, and it is a meaningful design choice: an app whose whole purpose is to run an agent that modifies code should be able to update itself without a cable and without a browser.

A tenfold size difference between the two editions is unusual for an app that ships the same features, and it tells you how the runtime is packaged. The Ubuntu userspace with Node.js, npm, Git and OpenSSL is not small, and the fact that it can be fetched lazily means the online edition is downloading a container of a Linux distribution the first time you need it.

For an organisation testing this, the practical detail is that the offline edition is a 889 MB artefact to distribute to a fleet, while the online edition is an 89 MB one that then needs connectivity to become useful.

## PRoot is a convenience layer, not a security boundary

The security notice in the README is the most important paragraph in the document, and it deserves to be quoted rather than paraphrased. Mobile Harness runs on ARM64 Android devices using a private userspace PRoot layer. While isolated from other apps via standard Android sandbox permissions, PRoot is not a virtualization boundary or hardened security jail. Only execute projects and dependencies you own or trust.

That is an unusual level of candour for a project README, and it is technically accurate. PRoot works by intercepting system calls with a userspace library and rewriting paths, which means it provides filesystem isolation without a kernel boundary, and it shares the kernel with everything else on the device. The Android sandbox permissions are real protection against other apps reading the data directory, but they are not protection against the code running inside the subsystem itself.

The practical consequence is that the agent has to be trusted. An agent with shell access in a PRoot Ubuntu is running with the app's own permissions, and an untrusted project or a malicious dependency in that project executes as the user. The credential handling described elsewhere in the README, the Keystore-backed encryption of API keys, protects the keys at rest, but it does not make the execution environment safe for code you do not trust.

The same notice implies the other half of the risk model. If you only run your own projects and your own dependencies, the fact that there is no kernel-level jail matters much less, because the code running there is code you already trusted. The boundary becomes relevant exactly when you point an autonomous agent at a codebase you did not write.

## What the agent integration covers, and what it leaves out

The capability list has eight cells and the first one is the agent story. There are native integrations with Claude Code, DeepSeek Harness and Antigravity CLI, and each agent has an isolated driver, settings and resumable project conversations.

That structure is the interesting detail. Isolated drivers mean each agent integration is kept separate rather than sharing one abstraction, and resumable conversations mean a session survives the app being closed, which is the difference between a phone that can start a task and a phone you can walk away from. The Persistent Project Sessions feature says the same thing from the workspace side, keeping projects, chat history, files and task context together so work can continue across app sessions.

The workspace interface has three panes, Projects, Terminal and Settings, with the Settings pane described as runtime and provider configuration. The Terminal pane executes real Linux commands and scripts with instant output, and the Projects pane is for creating, organizing and resuming isolated workspace sessions.

Two other capabilities are worth calling out. Instant Web Preview spins up a Vite, Next.js or Express server and lets you test the interface in real time inside a restricted, sandboxed mobile WebView with console telemetry, so the web console output is available rather than trapped in a system WebView. And On-device Android Builds lets you build, install and launch APKs directly on the phone without USB or wireless ADB pairing, which closes the loop that would otherwise need a desktop.

The remaining cells are the file workflow, browsing, editing, searching and attaching files from the app and interoperating with system storage through the Android Storage Access Framework, and optional toolchains for Python, Android, C/C++ and PHP added only when a project needs them.

## The Ubuntu layer, the web preview and the parts you can inspect

Underneath the Compose interface is what the README calls a self-contained Ubuntu 20.04 LTS subsystem, a full Ubuntu 20.04 ARM64 userspace running inside PRoot, and it includes Node.js, npm, Git, OpenSSL and essential shell tooling out of the box. The framing is that this gives you a desktop-class software development environment in your pocket without requiring root access, bootloader modifications, or external applications like Termux.

The comparison with Termux is telling. Termux is the established way to get a Linux environment on Android, and it is a separate app with its own installation and its own package model. Bundling the environment inside a single APK means one thing to install and one thing to keep updated, at the cost of a large download and a subsystem you did not choose.

Ubuntu 20.04 is an LTS release, which is the right choice for a bundled environment where you do not control the update cadence.

On the security of the data side, the README claims Keystore-grade encryption: API keys and credentials are encrypted using Android Keystore-backed AES-256 GCM, with no telemetry, no remote proxies and zero plain-text leaks. Using the Android Keystore means the key itself never leaves the hardware-backed keystore, which is the correct primitive for this, and the no-remote-proxies claim matters for an app that runs an agent with your API credentials on it.

The web preview is described as a restricted, sandboxed mobile WebView with console telemetry. Restricted and sandboxed refer to the WebView rather than to the Linux subsystem, and the console telemetry is the part that makes it usable for development, because otherwise the browser errors that would normally appear in devtools go somewhere you cannot see on a phone.

The repository also carries docs/ and a dist/ directory, and a .gitmodules file, so parts of the tree are submodules, which points at the bundled runtime sources.

## Conclusion

Adopt Mobile Harness if you want a coding agent with a real Linux environment on an ARM64 Android phone, and if you are the kind of user who is happy to review diffs on a small screen and install a 89 MB app that pulls a Ubuntu userspace on demand. Do not adopt it to run codebases or dependencies you do not trust, because the README states that PRoot is not a virtualization boundary or a hardened security jail and the agent has shell access inside the subsystem. Before you commit, read the security notice and the privacy policy, decide between the online and offline editions based on whether the devices you will deploy to have connectivity, and check the WebView preview on your target project, because a restricted in-app browser is not the same as a desktop browser and that difference shows up in front-end work.

## FAQ

### What is Mobile Harness and what does it run?

It is a Kotlin Android app that pairs a Jetpack Compose interface with a self-contained Ubuntu 20.04 LTS ARM64 userspace running under PRoot. The environment includes Node.js, npm, Git, OpenSSL and shell tooling, and it needs no root, no bootloader modification and no Termux.

### What are the security implications of using PRoot?

The README states that PRoot is not a virtualization boundary or hardened security jail, and that only projects and dependencies you own or trust should be executed. The app is isolated from other apps by standard Android sandbox permissions, but code running inside the subsystem runs with the app's own permissions.

### Which coding agents does Mobile Harness support?

There are native integrations with Claude Code, DeepSeek Harness and Antigravity CLI, and each agent has an isolated driver, its own settings and resumable project conversations. The Projects pane creates, organizes and resumes isolated workspace sessions.

### What is the difference between the online and offline APK editions?

The Online Edition is 89.1 MB and downloads the core, Python and Android runtime bundles only when needed, while the Offline Edition is 889.4 MB and includes all of them for setups with limited or unavailable internet. Both contain the same app and both support secure in-app updates from v1.0.3.

### Can Mobile Harness build and install an Android app on the phone itself?

Yes. The On-device Android Builds capability builds, installs and launches APKs directly on the phone without USB or wireless ADB pairing, and optional toolchains for Python, Android, C/C++ and PHP can be added when a project needs them.

## Sources

- [License: MIT](https://github.com/techjarves/Mobile-Harness/blob/main/LICENSE)
- [Project website](https://techjarves.github.io/Mobile-Harness/)
- [README](https://github.com/techjarves/Mobile-Harness/blob/main/README.md)
- [Releases](https://github.com/techjarves/Mobile-Harness/releases)
- [techjarves/Mobile-Harness on GitHub](https://github.com/techjarves/Mobile-Harness)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/techjarves-mobile-harness
