Local-first Android AI agent · GPL-3.0

The AI agent that
actually operates
your phone.

57 real device tools — see the screen, tap, type, browse files, run shell. Bring any model you already pay for. Every action gated by mode. No account, no cloud, no telemetry.

Android 8.0+ · No GMS · Sideload-friendly · Free & open source

Hangzhou trip 128/1.0M · 0% CHAT
Plan a quiet Hangzhou weekend — no crowds.
Thinking Thought for 2s
web_search Hangzhou weekend weather ✓
Sat 24°C clear · Sun 22°C light rain
memory_write preference · avoids crowds ✓
Saved note #42 · from conv #7 · msg #128

Hangzhou · quiet weekend

• Sat — Quyuan Fenghe → Yanggongdi

• Sun — Longjing Village + tea

• Rain — lakeside museums

Noted: you avoid crowds.

+ Message… ➤

A scripted preview — the real app streams from your own model and calls 57 real device tools.

57built-in device tools
3provider protocols
4run modes
0accounts or telemetry

Features

Everything a phone agent needs.

Perception, automation, content, memory and orchestration — as first-class tools, not a toy demo.

See the screen, then act on it.

ui_control fuzzy-matches text in the accessibility tree, falls back to OCR, scrolls to find off-screen targets and restores your position when it fails. Every tap is verified by comparing the screen before and after — locate, act and check in a single call.

  • Tap, long-press, type, keys, scroll, wait-for
  • Screenshots, on-device OCR with coordinates, screen recording
  • Foreground app and screen state as first-class signals
ui_controldone

{ "action": "tap", "text": "Send" }

✓ Found "Send" @ (985, 2253)

✓ Screen changed: com.example.chat

Tap by accessibility. Go deeper with Shizuku.

Gestures run through an accessibility service, so no root is required for everyday automation. Install Shizuku when you want a real shell: run_shell and manage_app can inspect, force-stop and manage packages.

  • Time (daily / weekly) and battery triggers
  • Exact alarms survive Doze; a foreground service runs the full agent
  • Boot receiver re-arms every schedule automatically
  • MAX runs report back — an in-app summary, or a notification while you are away
  • Inline voice dictation with a live transcript; hands-free pauses while replies are read aloud
Morning briefon

every day · 08:00 · next in 17 hr

exact alarm fires agent runs with tools notification with the result

Files, articles and the open web.

A six-engine search pipeline fans out concurrently, dedupes by URL and near-duplicate titles, then extracts clean article text for reading. Files live where you expect them: Downloads and Documents, with reads, writes, appends and deletes.

  • web_search · web_read · fetch_rss · get_weather
  • files · file_write · download_file · ocr_file
  • QR codes, clipboard, share sheet, PDF / Word / Excel attachments
web_read9,000 chars

article.md → Downloads

Extracted body: title, headings, lists and code — paged on demand.

Skills, subagents and remote tools.

Record a successful run as a declarative YAML skill, or import one. Spawn parallel subagents with their own budgets for research branches. Add remote MCP servers and their tools join the same toolbox — behind the same gates.

  • YAML recipes replay tools with captured arguments
  • spawn_agent — isolated context, hard budgets, no recursion
  • MCP over Streamable HTTP; collisions with built-ins are refused
id: focus-mode
name: Focus Mode
tools:
  - id: start_focus_session
    steps:
      - tool: set_volume
        args: { stream: ring, level: 0 }
      - tool: set_brightness
        args: { percent: 20 }

Your keys never leave the device.

API keys are encrypted with the Android Keystore; transcripts, memories and run records live in a local database. There is no app server and no analytics. Cleartext HTTP is allowed only for loopback, so local models work without weakening anything else.

  • Keystore AES-GCM for secrets, Room for data
  • Permissions on demand — tools explain the next step when one is missing
  • Per-call confirmation in Act mode; Chat keeps only its private memory tools
  • Biomimetic memory: a constant-size core, on-demand recall across every past conversation, associative and prospective priming, privacy holds and suppression so a fact you asked to forget cannot come back
  • Notes keep their version history, can be corrected in place, and a long-press erases one for good
API keyKeystore AES-GCM
TranscriptsOn-device DB
TelemetryNone
AccountNot required

Modes

From chat to full autonomy, in one chip.

Chat

Plain conversation. Only the private memory tools are advertised, so nothing on the device can run.

Chat+

Read-only research: notifications, files, web, weather. Writes are denied by the gate.

Act

Every tool call pops a confirmation with the exact arguments before it runs.

Max

Autonomous runs with budgets — 60 rounds, 160 calls, 60 minutes — persisted and stoppable.

Models

Bring your own model.

Three native protocols plus every OpenAI-compatible endpoint. Keys stay on the device; switching providers is a field, not a migration.

DeepSeekdeepseek-flash · v4-pro
OpenAIgpt-6-astra · gpt-5.6 sol/terra/luna
Anthropicfable-5-1 · opus-5-5 · sonnet-5-5
Googlegemini-3.8-flash · 3.1-pro
Kimikimi-k3 · k2.7-code · k2.6
Qwenqwen3.8-max · 3.7-plus · 3.8-flash
GLMglm-5.3 · glm-5.2
MiniMaxMiniMax-M3 · M2.7
Anything elseOllama · vLLM · LM Studio · any gateway

Reasoning contracts follow each vendor's latest spec: thinking toggles, effort levels, reasoning round-trips with tools, signed thinking replay.

Screenshots

Look around.

Aurora ambience — gradient light and twinkling particles — runs through thinking, the welcome screen, Tasks, About and the MAX chip.

Compare

Built for devices, not retrofitted from chat.

CapabilityBetterAIChat2Chat appsAgent wrappers
Actually operates the device (taps, types, files, shell)YesNoPartial
Mode gates + per-call confirmationYesNoPartial
Keys encrypted on device, no accountYesPartialPartial
Scheduled agent runs on deviceYesNoNo
Any model: 3 protocols + OpenAI-compatibleYesPartialPartial
Skills, subagents and MCPYesNoPartial
Open source (GPL-3.0)YesPartialPartial

FAQ

Questions, answered.

What is BetterAIChat2?

A local-first Android AI agent. It runs an agent loop on your phone and gives the model 57 real device tools — screen reading, UI automation, files, web, reminders and more. It's the successor rewrite of BetterAIChat, released under GPL-3.0. Its agent is Aviiya: a tender, composed presence rather than a tool — softness first, honest before comforting, never pretending to be human.

Which models can I use?

DeepSeek, OpenAI, Anthropic and Gemini natively, plus any OpenAI-compatible endpoint (Kimi, Qwen, GLM, MiniMax, Ollama, vLLM, LM Studio, gateways). Paste an API key and the provider is detected; the model list is fetched from the endpoint.

Is it really private? Where are my keys?

Keys are encrypted with the Android Keystore (AES-GCM) and stored on the device. Conversations, memories and run records live in a local database. There is no app server, no account and no analytics; cleartext HTTP is allowed only for loopback addresses.

How does the memory work?

It is biomimetic, and it lives outside the context window. A small core (about you / what's ongoing) stays always-on with a constant footprint; past conversations and notes are recalled on demand with keyword, time, speaker and entity cues. Recalled notes strengthen and fade more slowly, notes recalled together wire together (two hops of spreading activation), upcoming plans surface by time on their own, near-duplicates are reconsolidated instead of duplicated, a curator rehearses fading high-value notes and prunes what is never used, and consolidation runs when the app leaves the foreground — sleep-time replay, not mid-task. Notes carry their source (what you said vs. the model's inference vs. scraped text), every note can be pinned, edited or forgotten, and a forgotten fact leaves a suppression fingerprint so it cannot be silently relearned. Raw transcripts are never summarized away.

Do I need Shizuku or root?

No. Most tools — accessibility automation, screen capture, files, web, personal-assistant tasks — work without it. Shizuku only unlocks run_shell and deep app management, and it's optional.

Does it drain the battery?

Nothing lingers while idle. Long runs (Act / Max, scheduled tasks) hold a foreground service that can be stopped from the notification, and screen capture is owned by a foreground service only after you grant it.

What happens if a run is stopped mid-tool-call?

Stopping synthesizes "cancelled" tool results for interrupted calls and rewrites their status, so the transcript always satisfies the model's protocol. You can keep chatting or retry — the conversation never breaks.

Does it work without Google Play Services?

Yes. The app has no GMS dependency; OCR runs on-device with a bundled model, so it works on de-Googled devices and emulators.

How is this different from the original BetterAIChat?

It's an architecture rewrite: new package name, new signing key, new agent runtime, new UI. It installs side by side with the old app and shares no data. Later releases upgrade in place.

Is it free?

Yes — free software under GPL-3.0. You only pay your model provider for what you use, and API keys stay on your device. If you find it useful, star the repo or open an issue with feedback.

Give your phone an agent.

Download the APK, paste a key, and watch it work. Android 8.0+, no account required.