Mobile Agent
On-device Android agent that taps any app, with an allow/confirm/block safety gate optionally backed by Jev or Laya.
Overview
Mobile Agent is an open-source Android agent that runs on the phone itself and operates any app the way a person would, by reading the accessibility node tree for standard controls and sending screenshots to a vision model for icon-heavy or custom-drawn interfaces. It supports foreground control without root, an optional root virtual display for background work, a local MCP bridge so desktop agents can drive the phone, reusable task recipes, and fully local storage of conversations and decisions. The README is in Chinese with an English version and warns it is in early development.
Every tool call with external side effects passes through a semantic DecisionGate that returns allow, confirm or block; timeouts or failures fall back to asking the user. That gate can optionally be handed to a dedicated decision backend, a self-hosted Laya or TypeSafe Jev over /v1/systemone. It is off by default, sends only minimal context, can only pick among candidates, and runs in SHADOW or ENFORCE mode while local policy stays authoritative.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Should this side-effecting action run? | allow · confirm · block |
How it works
- Model proposes a tool call such as sending a message or changing a setting.
- Read-only calls skip the gate; side-effecting calls go to DecisionGate.
- Optional Laya/Jev backend returns allow, confirm or block (shadow or enforce).
- Timeouts or failures fall back to asking the user.
Strengths
- Conservative default: never silently allows on failure.
- Decision backend only selects among candidates and cannot invent actions.
- Data stays on the device unless you configure outbound services.
Caveats
- Early-stage project; the README warns against payment or account-security tasks.
- Jev/Laya integration is optional and disabled by default.
- Primary documentation is in Chinese.
Getting started
Install the APK from the GitHub Releases page; configure a model, and optionally a Laya or Jev decision backend (see deploy/laya/).At a glance
- Type
- Service
- Status
- prototype
- Language
- Kotlin
- Runtime
- Android app, MCP server
- Has code
- yes
Use cases and integrations
How curated lists describe it
On-device Android agent that reads and taps any app through accessibility and vision; its allow / confirm / block safety gate can be handed to Jev or a self-hosted Laya over `/v1/systemone`, off by default. In Chinese.
MrJev/awesome-jev
Frequently asked questions
What does the decision model decide here?
Whether a side-effecting phone action should be allowed, sent for confirmation or blocked.
Does it require a TypeSafe key?
No. The Jev/Laya backend is optional and off by default; you can self-host Laya.
What if the decision service fails?
The gate falls back to requiring human confirmation.
Related projects
Verified computer-use agent: a Jev guard checks claimed completions and gates irreversible actions; Jev also takes simple steps.
ProjectbetaPythonMCP server that lets agents observe and control Android phones over ADB, with Jev picking controls and judging goal completion.
MCP serverbetaTypeScriptClaude Code PreToolUse hook that auto-approves shell commands Jev is confident are read-only, and otherwise shows the normal prompt.
HookbetaPythonClaude Code plugin adding typed Jev decisions to hooks: task kind, command risk, failure class, completion; never grants permissions.
PluginbetaJavaScriptVoice assistant daemon for Hyprland Linux desktops that acts through tool modules, with Jev gating which requests and actions proceed.
ProjectbetaPythonAccessibility-first macOS computer-use MCP server and CLI, with optional Jev guards on targets and inputs before irreversible actions.
PluginbetaPython