Skip to content

v1.12.0

Latest

Choose a tag to compare

@github-actions github-actions released this 19 Aug 11:41
· 41 commits to main since this release
3777403

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_access scope 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:dcim and builtin:recordings storage locations, plus proper handling of "Allow limited access": user-selected photos/videos become readable and list_storage_locations reports 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.com host only — deceptive hosts like chatgpt.com.evil.example stay rejected), and the discovery metadata advertises offline_access so 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_files fixed 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:dcim location exposes DCIM/; builtin:pictures now covers videos too, and writes/downloads/captures are MIME-validated against the target location (writing a text file to builtin:pictures returns a clear error).
  • Voice recordings reachable (PR #158) — new builtin:recordings location exposes the Recordings/ 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_locations gains an access_level field (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:7844 to 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 edge pre-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 crafted path could reach outside the granted directory.
  • Auto-backup disabled (PR #174) — allowBackup is 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 cloudflared process 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

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.