omni
Health Warn
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Pass
- Code scan — Scanned 10 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Open-source Android computer-use agent with a self-hostable backend
Omni
Omni is an experimental open-source Android agent that can see the current
screen and operate the phone through Android's Accessibility API. Give it a
goal and it can tap, type, swipe, navigate, open apps, and adapt as the screen
changes.
Demo
https://github.com/user-attachments/assets/a493cc3c-ee82-4cf8-93a8-307a6a66d0bf
Repository
omni-mobile/— native Kotlin Android applicationomni_backend/— self-hostable Elixir/Phoenix API
The community build uses your own backend and API keys. It does not require
Google sign-in, Google Play, Aptoide, Stripe, or a store subscription.
What you need
- An Android 10+ phone or emulator
- USB debugging enabled on the phone
- Android Studio with Android SDK 35 and JDK 17
- Elixir 1.19 with Erlang/OTP 28
- Docker with Docker Compose, used for PostgreSQL
- One supported LLM API key
Linux and macOS commands are shown below. On Windows, use WSL or the equivalent
PowerShell commands.
1. Clone the project
git clone https://github.com/stevancarlon/omni.git
cd omni
2. Choose API keys
You need one LLM provider. Put its key, provider name, and model inomni_backend/.env.
| Provider | Environment variable | Provider value | Example model | Notes |
|---|---|---|---|---|
| Gemini | GEMINI_API_KEY |
gemini |
gemini-2.5-pro |
Supports annotated screenshots |
| Groq | GROQ_API_KEY |
groq |
llama-3.3-70b-versatile |
Fast, but this adapter uses screen text rather than images |
| OpenAI | OPENAI_API_KEY |
openai |
gpt-5.5 |
Also enables Whisper and app-inventory enhancement |
| Anthropic | ANTHROPIC_API_KEY |
claude |
claude-opus-4-6 |
Supports annotated screenshots |
Optional keys:
DEEPGRAM_API_KEYenables wake-word listening and streaming speech
recognition. The key must be able to create temporary auth grants.OPENAI_API_KEYadditionally enables Whisper transcription refinement and a
generated installed-app inventory when OpenAI is not the main LLM provider.
Store and hosted-service credentials such as Google OAuth, Google Play,
Aptoide, Stripe, and Android signing keys are not needed for the community
build.
API providers charge according to their own pricing. Set spending limits before
testing autonomous tasks.
3. Start the backend
Create your local environment file:
cd omni_backend
cp .env.example .env
Open .env and replace the example key. A minimal Gemini configuration is:
COMMUNITY_MODE=true
DEFAULT_LLM_PROVIDER=gemini
DEFAULT_LLM_MODEL=gemini-2.5-pro
GEMINI_API_KEY=replace-with-your-real-key
Leave the PostgreSQL values from .env.example unchanged for the Docker setup.
Then start PostgreSQL, install dependencies, create the database, and run the
API:
docker compose up -d postgres
mix setup
mix phx.server
Keep this terminal running. Confirm the API is available on port 4000:
curl http://localhost:4000/api/health
If mix is unavailable, install the Elixir and Erlang versions listed above or
use a version manager such as mise or asdf.
4. Build and install Android
Connect the phone over USB, approve its debugging prompt, and verify it appears:
adb devices
Forward the phone's port 4000 to the backend on your computer:
adb reverse tcp:4000 tcp:4000
In a second terminal:
cd omni/omni-mobile
cp local.properties.example local.properties
./gradlew installCommunityDebug
If you are already at the repository root, use cd omni-mobile instead. The
community app uses package ID com.omni.orb.community and connects tohttp://127.0.0.1:4000 by default.
To use a remote backend instead of USB forwarding, editomni-mobile/local.properties before building:
OMNI_COMMUNITY_BACKEND_URL=https://your-backend.example
Use HTTPS for any backend exposed beyond your own machine.
5. Enable Android permissions
- Open Omni Community and choose Connect to community backend.
- Allow microphone and notification permissions when requested.
- On Android 13+, open Settings → Apps → Omni Community, open the overflow
menu, and choose Allow restricted settings. - Return to Omni and enable its Accessibility service during setup.
- Press the listening button and try a low-risk command such as “open
Settings.”
Menu names differ between manufacturers. If the Accessibility toggle is greyed
out, the restricted-settings step has not been completed.
Troubleshooting
- Community sign-in returns 404: verify
COMMUNITY_MODE=trueinomni_backend/.env, then restart Phoenix. - The app cannot reach the backend: confirm the health check works, rerun
adb reverse tcp:4000 tcp:4000, and keep the USB connection active. - LLM request fails: make sure
DEFAULT_LLM_PROVIDERmatches the configured
key and that the model is available to your provider account. - Wake word does not work: configure
DEEPGRAM_API_KEY; without Deepgram,
use the app's manual listening flow. - Gradle cannot find Android SDK: open
omni-mobileonce in Android Studio or
setsdk.dirinomni-mobile/local.properties. - Database connection fails: check
docker compose psinsideomni_backendand confirm port55432is free.
Development checks
cd omni-mobile
./gradlew lintCommunityDebug testCommunityDebugUnitTest assembleCommunityDebug
cd ../omni_backend
mix precommit
Safety
[!WARNING]
Omni can read screen content and interact with other apps. Only install builds
you trust. Do not use it to automate passwords, banking, payments,
authentication challenges, or other sensitive flows. The sensitive-app guard
reduces risk but is not a security boundary.
This is alpha software and is not currently distributed through Google Play.
Read the privacy model before using it with real data.
Contributing
Start with CONTRIBUTING.md, the
roadmap, and issues labeledgood first issue.
Report vulnerabilities privately according to SECURITY.md.
License
Apache License 2.0. The Omni name, wordmark, and logo may not be used to imply
that an unofficial build or deployment is operated or endorsed by the project.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found