Summary
Highlights
The biggest wins this release: Privacy Mode v1 redacts your personal data locally on the phone before anything reaches the AI provider, the server keeps running through app updates and aggressive battery management, the app tells you when a new version is out, and MCP clients only ever see tools that will actually work on your device.
- Privacy Mode v1 — PII redacted locally on the phone — catches ~87% of personal data on the benchmark (emails, phone numbers, credit cards, IBANs, national IDs / SSNs, credentials, addresses) and replaces it with placeholders before it leaves the device; agents can still act on the real values without ever seeing them (PR #138, #139).
- The server stays up — restarts itself after an app update or swipe-away from recents, and a one-tap card exempts it from battery optimization so Doze doesn't kill it (PR #126).
- In-app update check — banner and notification when a new release is out (PR #149).
- Permission-aware tool list — tools whose optional permission isn't granted are hidden from clients instead of failing at call time (PR #134).
🛡️ Privacy Mode (v1)
- On-device PII detection and redaction (PR #138) — opt-in. Everything the tools return (including screenshots, which get opaque boxes) is scanned locally on the device and detected values become stable placeholders like
EMAIL#a1b2c— and they round-trip: an agent can type the placeholder into a field and the real value is substituted locally, on-device. On the reproducible benchmark (make privacy-benchmark, PR #139) it catches ~87% of PII across categories: emails, phone numbers, credit cards, IBANs, national IDs / SSNs, credentials, and street addresses. The known weak spot is names — especially non-English ones — so treat name redaction as best-effort; the full per-category numbers are in the README and in the Privacy settings screen. - Optional model, never bundled — the model-backed categories (names, addresses, national IDs) need a one-time ~154 MB download (pinned Hugging Face commit, SHA-256 verified, explicit consent); the other categories work out of the box. If a model-backed category is enabled and the model isn't available, data-returning tools fail closed. Pseudonym mappings live in memory only and are cleared when the server stops.
✨ General improvements
- The server survives updates, swipe-away, and Doze (PR #126) — the server records whether you left it running and restarts itself after a package update or task removal; a card on the Server screen requests the battery-optimization exemption (one-tap dialog on GMS, settings shortcut on FOSS, where F-Droid policy disallows the direct prompt).
- In-app update check (PR #149) — checks the latest GitHub release periodically and on demand from About; a newer version shows a tappable banner and a notification. Can be disabled, never prompts on dev builds, fails silently offline.
- Server logs overhaul (PR #135) — logs move to an on-disk store that survives restarts, coverage expands to OAuth, auth failures, event-channel activity, and settings changes, and a new full-screen Logs page adds per-category filters. Tool-call parameters are no longer written to the log — only tool name, duration, and a failure marker.
- Categorized permissions screen (PR #127) — permissions grouped into Required / Required if you use a feature / Optional, each row explaining what it's actually used for.
- Network-access hint (PR #136) — when the server is bound to localhost with no tunnel, a card explains it's only reachable from the device and offers one-tap Wi-Fi binding or tunnel setup.
🔐 Tools, security & fixes
- Permission-gated tools (PR #134) — camera, location, and notification tools are registered only when their Android permission is actually granted, so clients no longer discover tools that can only fail; the
audiooption ofsave_camera_videodisappears without the microphone permission. OAuth connection approvals no longer require the notifications permission — a pending-approvals card on the Server screen covers that case. send_intentgainspackage(PR #146) — scope an intent to a specific app viaIntent.setPackage()(theam -pequivalent), so a broadcast can target a manifest-declared receiver by package name alone.get_device_logsremoved (PR #130) — the tool was non-functional (reading logcat requires a permission not grantable to regular apps) and has been removed rather than left advertised.- Permission detection on OEM builds (PR #145) — some devices store enabled accessibility/notification services in the short component form (
package/.Class); the checks only matched the fully-qualified form, so a granted permission showed as missing. Both encodings now match. - CVE-patched dependency pins (PR #148, #137, #129, #131) — httpcore5 → 5.4.3 (CVE-2026-54399), bouncycastle → 1.85 (CVE-2025-14813), Apache httpclient → 4.5.14 (CVE-2020-13956), commons-lang3 → 3.18.0 (CVE-2025-48924), netty 4.1.x → 4.1.136.Final, jackson → 2.21.5, logback → 1.5.34. All on the Gradle build/test classpath only — none ship in the APK.
Misc
- AGP 9.3.1 / Gradle 9.6.1 / Kotlin 2.4.10 (PR #131) — full toolchain upgrade (built-in Kotlin plugin, compileSdk 37).
- CI parallelized (PR #133) — independent parallel jobs with the Gradle build cache: ~36 min → ~8 min on a warm cache.
- Location DB build no longer breaks at month start (PR #132) — the build script walks back up to 6 months to the newest DB-IP file instead of failing.
- README refresh (PR #124) — three-clip demo gallery, GMS-vs-FOSS install guidance, Android 13+ "Restricted settings" walkthrough, ChatGPT custom-connector (OAuth) setup.
- Tool docs corrected to 57 tools / 14 categories (PR #140, #150) and integration tests now verify the full production tool surface (PR #151, #125).
What's Changed
- docs: README demo gallery, GMS/FOSS install, and integrations (Claude + ChatGPT) by @danielealbano in #124
- test: retry transient 404/5xx tunnel edge errors in tunnel integration tests by @danielealbano in #125
- feat: MCP server survivability (battery-optimization exemption + restart hardening) by @danielealbano in #126
- Plan 55: Categorize in-app permissions screen (Required / Required if / Optional) by @danielealbano in #127
- fix(deps): close Dependabot jackson & logback CVE alerts by @danielealbano in #129
- fix: remove non-functional get_device_logs MCP tool by @danielealbano in #130
- build: upgrade to AGP 9.3.1 / Gradle 9 (built-in Kotlin) + close netty alerts by @danielealbano in #131
- fix(build): fall back to earlier months when DB-IP DB is unpublished by @danielealbano in #132
- ci/perf: parallelize CI and cache the build (~36 min -> ~8 min warm) by @danielealbano in #133
- feat: gate optional-permission tools + OAuth approvals entry point by @danielealbano in #134
- feat: overhaul server logs — segmented on-disk store, full event coverage, dedicated Logs page by @danielealbano in #135
- feat: Server screen network-access & tunnel suggestion card by @danielealbano in #136
- fix(deps): pin build/test-tooling transitives to CVE-patched versions by @danielealbano in #137
- feat(privacy): on-device PII detection and redaction (Privacy Mode) by @danielealbano in #138
- feat: Privacy Mode effectiveness benchmark (plan 59) by @danielealbano in #139
- docs: correct MCP tool count to 57 and document the sharing tools by @danielealbano in #140
- fix: match short-form component names in accessibility/notification permission checks by @danielealbano in #145
- feat: add package parameter to send_intent by @danielealbano in #146
- build: force httpcore5 to 5.4.3 (CVE-2026-54399) by @danielealbano in #148
- feat: in-app update check against latest GitHub release by @danielealbano in #149
- docs: fix MCP tool count to 57 across 14 categories by @danielealbano in #150
- test: register sharing tools in integration helper to match production by @danielealbano in #151
Full Changelog: v1.10.0...v1.11.0
Requirements
- Android 13 or newer (API 33+) is required. On older Android versions the install fails with "There was a problem parsing the package." This includes emulators running older Android images — for example BlueStacks 5, whose device profiles top out at Android 11, cannot run this app.
- Privacy Mode's model-backed categories (names, addresses, national IDs) require a one-time ~154 MB model download; the other categories work without it.