ShizuStore

Aether

Zhou-Shilin

2.1.6 · GitHub

Download APK
AI agents Android 8.0+ 4 weeks ago GPL-3.0
116 ShizuStore
6.8k GitHub
710 Stars
17 MB Size

More about this app

Localized, extensible general-purpose AI agent for Android, iOS and macOS, with optional Shizuku and Termux integration for direct device control.

Aether Logo

Aether

Soar with local AI.
A stunning, localized, highly extensible general-purpose AI Agent for Android, iOS and macOS.

中文 • Visuals & Experience • Extensions • Core Features • Documentation

Download on the App Store   Get the APK on GitHub


🌪️ Aether

"When the great Peng bird journeys to the Southern Ocean, it flaps the water for three thousand miles, spiraling upward on a whirlwind (Aether/Fuyao) to ninety thousand miles, and travels for six months before resting."

Aether is dedicated to bringing a modern, local AI Agent experience to mobile and desktop devices (Android, iOS, and macOS). Built on top of the Pi framework, it pairs a minimalist, polished UI with immense extensibility, seamless tool calling, and full extension ecosystem support.

🧩 High Extensibility

Aether natively supports loading standard Pi Extensions. To bring TUI-oriented extensions seamlessly to mobile touchscreens, Aether provides a rich Extension API allowing extensions to inject custom settings cards, interactive composer widgets, overlay transcript viewers, prompt interceptors, and semantic tool titles.

Extension Description Repository
Pi Web Access* Web search across 20+ providers (OpenAI, Brave, Exa, Tavily, Perplexity, Gemini, SearXNG), GitHub repo cloning, PDF extraction, and YouTube/video understanding with native settings and transcript cards. AetherExtensions/pi-web-access
Pi MCP Adapter* Model Context Protocol (MCP) gateway supporting Stdio, Streamable HTTP, SSE, and Unix domain sockets with lazy loading, token-saving tool discovery, interactive OAuth authentication, and a visual server management GUI. AetherExtensions/pi-mcp-adapter
Pi Subagents* Claude Code-style autonomous sub-agents with parallel background execution, mid-run steering, live widget & FleetView cards above the composer, conversation overlay viewer, and @handle prompt mentions. AetherExtensions/pi-subagents

* means it's an official extension adapted by the Aether team. Add your extension to the list by submitting a PR.

Extensions can be installed directly as zip packages in Settings → Extensions → Import extension.

For extension development documentation, see https://aether.baimoqilin.com/docs/extensions/overview.md.

📱 Visuals & Experience

Aether's UI and interactions are heavily inspired by excellent, mature applications like ChatGPT, Codex CLI/App, Gemini, and Poco Agent. Every animation and interaction detail has been carefully polished to break the stereotype that "open-source means cheap and unrefined."

✨ Core Features

  • Stunning UI & Silky Smooth Interactions: Distilling the design essence of top-tier apps like ChatGPT to create a minimalist, modern, and elegant interface.
  • Pi Harness Kernel: Powered by the Pi framework, providing the widest LLM provider compatibility and a lightweight, highly efficient Agent execution engine.
  • Extreme Extensibility: Inherits Pi's complete extension model while providing Aether's proprietary Script Extensions and Native Mods system to deeply customize mobile UI, settings, composer widgets, and runtime behavior.
  • Built-in Alpine VM: Includes an automatically installed Alpine Linux environment to run shell commands and tools out of the box.
  • System File Manager Access (Android): After initializing Alpine, select Aether (Alpine) in the system Files app or SAF document picker's sidebar to browse the environment and /workspace, create, edit, rename, delete, or copy files between Alpine and device storage. Changes apply directly to the files used by proot. System mounts such as /dev, /proc, and /sys are excluded.
  • Extensible Host Control: Supports optional Shizuku and Termux integration for direct device manipulation and automation. (Android only)

🚀 Quick Start

See https://aether.baimoqilin.com/docs/quickstart.

🤝 Contributing

This project is being developed sporadically by a 15yo student during their spare time (⁠ʘ⁠ᴗ⁠ʘ⁠✿⁠). Aether is still actively iterating and being polished. If you like this project, please consider giving it a ⭐ Star, or submit PRs and Issues to help make Aether even better!

ko-fi

Afdian

Special Thanks

Star History


📄 License

This project is licensed under the GPL-3.0 License.


Built with ❤️ by Shilin "BaimoQilin" Zhou.

Close

How Shizuku is used

Can run apps on an isolated virtual display and tap, swipe, type and screenshot it via Shizuku using `DisplayManager.createVirtualDisplay` and input injection.

This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.

How this app uses Shizuku

Shizuku powers an AI agent mode that operates apps on a separate virtual display the agent can see and control.

  • Run isolated display: the agent creates and manages its own virtual display for automation through Shizuku, with live preview, release and stop support.
  • Launch apps remotely: an app name or package chosen by the agent is opened directly on the agent display through Shizuku.
  • List installed apps: the agent lists launchable apps with names, packages and system status to pick what to open, using the privileged package query through Shizuku.
  • Tap and swipe: coordinates supplied by the agent are performed as touchscreen taps and swipes on the agent display through Shizuku input injection.
  • Press keys and type: a key name or code and text supplied by the agent are injected as keyboard events on the agent display through Shizuku.
  • Capture screenshots: the agent captures the virtual display as a JPEG image returned to the conversation through Shizuku.
  • Inspect displays: the agent lists system displays and reports whether its virtual display is active through Shizuku.

Android APIs or commands used

  • DisplayManager.createVirtualDisplay
  • DisplayManager.getDisplay
  • VirtualDisplay.setSurface
  • VirtualDisplay.release
  • PendingIntent.getActivity
  • ActivityOptions.makeBasic
  • Context.createDisplayContext
  • PackageManager.queryIntentActivities
  • PackageManager.getLaunchIntentForPackage
  • android.hardware.input.InputManager.injectInputEvent
  • InputEvent.setDisplayId
  • MotionEvent.obtain
  • KeyEvent
  • KeyCharacterMap.getEvents
  • ImageReader.newInstance
  • Display.getSize
Close

Changelog

What's new for version 2.1.6

🚀 Aether v2.1.6 Changelog

✨ New Features

  • Conversation Timeline: Added timeline navigation for reviewing and moving through conversation history.
  • Provider Compatibility: Added compatibility mode and automatic fallback when providers reject developer message roles.
  • iOS File Provider: Added a native File Provider implementation backed by the Alpine filesystem.

🛠 Improvements & Optimizations

  • Agent Skills & MCP: Streamlined MCP management and unified built-in agent skills across Android and iOS.
  • File Management: Improved Alpine workspace path resolution and made hidden files available in native file managers.
  • Provider Configuration: Enhanced provider mapping, custom-header persistence, model selection, and fallback behavior.
  • Localization: Expanded Persian localization for native iOS settings.

🐛 Bug Fixes

  • Bidirectional Text: Corrected RTL/LTR rendering, link hit testing, inline-code isolation, and copy behavior in chat messages.
  • Conversation Branching: Fixed retry navigation so Pi branches return to the preceding assistant message.
  • Settings Persistence: Fixed persistence for Tavily settings, default skills, compatibility mode, and custom headers.
  • iOS Layout: Fixed composer insets when device orientation changes.

🔀 Merged Pull Requests

🧾 Included Commits

  • d2ca058 fix: update thinking level on reused agent sessions and fix iOS composer orientation insets
  • b9d3779 fix: persist Tavily settings and default skill selections in settings stores
  • 2490290 feat: support automatic fallback and reset for unsupported developer message roles
  • c1c446e fix: navigate Pi branch to previous assistant message on turn retry
  • 76ca32d fix(ui): derive chat text direction from content for correct RTL/LTR bidi
  • 2f1bf2e fix(ui): use isolated AnnotatedString for link hit testing (addresses review)
  • af1086b fix(ui): place @Composable directly on renderers (addresses review)
  • 155db34 fix(ui): isolate inline code spans with LRI/PDI (addresses review)
  • f6244ca fix(ui): keep content-directed markdown copy-safe
  • a276a93 fix(ios): localize native settings in Persian
  • fdf0a0e Merge pull request #73 from mcuteangel/fix/issue-57-rtl-bidi-content-direction
  • f869dd0 refactor: streamline MCP management and unify built-in agent skills
  • 28d7584 fix(runtime): resolve Alpine workspace host files and show hidden files in file manager
  • 6660f39 feat: add conversation timeline, provider compatibility mode, and enhanced file provider
  • 1c7ab3b fix: persist compatibility mode and custom headers on fallback provider selection
  • ca1b14c chore: finalize 2.1.6

Full Changelog: https://github.com/Zhou-Shilin/Aether/compare/2.1.5...2.1.6

Close

Permissions

11 permissions requested

  • android.permission.INTERNET
  • android.permission.POST_NOTIFICATIONS
  • android.permission.FOREGROUND_SERVICE
  • android.permission.FOREGROUND_SERVICE_DATA_SYNC
  • android.permission.RECEIVE_BOOT_COMPLETED
  • android.permission.SCHEDULE_EXACT_ALARM
  • android.permission.REQUEST_INSTALL_PACKAGES
  • com.termux.permission.RUN_COMMAND
  • moe.shizuku.manager.permission.API_V23
  • android.permission.ACCESS_NETWORK_STATE
  • com.baimoqilin.aether.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Close