Summary
Highlights
The biggest wins this release: ChatGPT can now connect via its custom connectors, a visible on-screen indicator tells you when the agent is driving your phone, the camera roll and voice recordings are finally reachable through the file tools (with proper Android 14 "limited access" handling), and a path-traversal hardening of the file tools you'll want to update for.
- ChatGPT connector support — the app's built-in OAuth server now accepts ChatGPT's callback URLs and advertises the
offline_accessscope it needs, so you can add the server as a ChatGPT custom connector and approve it with a code on the phone, exactly like Claude.ai (PR #166). - Tool-call indicator — a small on-screen banner shows "MCP controlling · " while a tool is executing, so you always know when the agent is acting on your device; toggle in General Settings, on by default (PR #143, thanks @adelin-b!).
- Camera roll, recordings, and Android 14 limited access — new
builtin:dcimandbuiltin:recordingsstorage locations, plus proper handling of "Allow limited access": user-selected photos/videos become readable andlist_storage_locationsreports the access level (PR #157, #158, #159). - Security hardening — every non-builtin file operation now rejects path-traversal attempts before touching anything, and Android auto-backup of app data (settings, tokens) is disabled (PR #174).
🔌 ChatGPT connector support
- ChatGPT custom connectors work (PR #166) — the OAuth authorization server's redirect-URI allowlist now accepts ChatGPT's fixed connector callback and its per-connector HTTPS callback namespace (exact
chatgpt.comhost only — deceptive hosts likechatgpt.com.evil.examplestay rejected), and the discovery metadata advertisesoffline_accessso ChatGPT gets refresh-token connectivity. Rejected redirect URIs are now logged to the server logs to make connector troubleshooting less of a guessing game. Ported from @ciel051130's fork — thank you!
📁 Storage & media access
list_filesfixed on built-in locations (PR #157) — listing a nested directory dropped the last path segment (treated as a filename), so subdirectories came back wrong or empty; SQL LIKE wildcards in paths are now also escaped so segments match literally.- Camera roll reachable (PR #157) — new
builtin:dcimlocation exposesDCIM/;builtin:picturesnow covers videos too, and writes/downloads/captures are MIME-validated against the target location (writing a text file tobuiltin:picturesreturns a clear error). - Voice recordings reachable (PR #158) — new
builtin:recordingslocation exposes theRecordings/directory, previously invisible to the audio tools. - Android 14+ "Allow limited access" handled (PR #159) — when you grant a limited photo/video selection, the selected media is now actually readable instead of silently falling back to owned-files-only.
android_list_storage_locationsgains anaccess_levelfield (full/partial/owned_only) on built-in locations, display names reflect the state ("Selected files only"), and the Storage settings screen gets a "Manage access" action.
✨ General improvements
- Tool-call indicator (PR #143, contributed by @adelin-b) — a translucent, touch-through overlay banner at the top of the screen while any MCP tool executes, showing only the tool name (never arguments or results). New "Show tool-call indicator" toggle in General Settings, enabled by default.
- Cloudflare tunnel extra arguments (PR #172, contributed by @LING71671) — a new "Extra Arguments" field in Tunnel Settings passes additional flags to
cloudflared(e.g.--edge region1.v2.argotunnel.com:7844to bypass DNS issues), with proper quote/escape handling, in both quick and named tunnel modes. - Cloudflare tunnel via ADB config (PR #170, contributed by @LING71671) — tunnel mode, token, and extra arguments are now configurable through the headless ADB broadcast setup; the README documents these plus the previously undocumented storage-permission extras (PR #171).
- Rolling edge pre-release (PR #162) — a single
edgepre-release on GitHub is now rebuilt on every merge to main that passes the full CI suite, with stable APK download links. Marked pre-release, so the in-app update checker keeps pointing at stable releases only.
🔐 Security
- Path-traversal guard on file operations (PR #174) — all nine non-builtin (user-added storage) file-operation entry points now validate the requested path up front, rejecting
..traversal, absolute paths,./segments, and control characters before any resolution or authorization happens. Previously a craftedpathcould reach outside the granted directory. - Auto-backup disabled (PR #174) —
allowBackupis now off, so app-private data (settings, bearer tokens, OAuth secrets) is no longer captured by Android auto-backup /adb backup.
Misc
- E2E storage coverage (PR #160, #161) — new end-to-end suites exercising the storage tools against a real Android container, upgraded to redroid 14 (API 34) including the partial-photo-access permission state machine.
- cloudflared argv tests (PR #173) — integration tests verifying the extra arguments actually reach the
cloudflaredprocess argv, quoting included.
What's Changed
- Plan 61: Fix list_files path filtering and make the camera roll reachable (DCIM) by @danielealbano in #157
- Plan 62: Add builtin:recordings storage location by @danielealbano in #158
- Plan 63: Handle Android 14+ partial photo access (limited selection) by @danielealbano in #159
- Plan 64: E2E storage-tool tests on redroid 13 (core + edge-case suites) by @danielealbano in #160
- E2E: upgrade redroid to 14 (API 34) and add partial photo access coverage by @danielealbano in #161
- CI: rolling edge pre-release updated on every merge to main by @danielealbano in #162
- feat: show visual indicator during MCP tool calls by @adelin-b in #143
- Plan 65: ChatGPT OAuth connector support by @danielealbano in #166
- feat: add Cloudflare tunnel mode and token extras to AdbConfigHandler by @LING71671 in #170
- docs: document Cloudflare tunnel and storage ADB config extras by @danielealbano in #171
- feat: add Cloudflare tunnel extra arguments support and ADB config by @LING71671 in #172
- test: verify cloudflared extra args reach the process argv by @danielealbano in #173
- fix(security): allowBackup=false + path-traversal guard on non-builtin file ops by @danielealbano in #174
New Contributors
- @adelin-b made their first contribution in #143
- @LING71671 made their first contribution in #170
Full Changelog: v1.11.0...v1.12.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.