Your on-phone / mobile AI Agent / Claw, capable of operating terminals and performing a wide range of tasks in the Android world || 你的手机 AI 代理,她可以操作终端,也可以完成 Android 世界的广泛任务
See the code
| Demo | Quick Start | Release | Issues |
OmniBot runs directly on your Android device and combines chat, agent tools, local workspaces, and system integrations in one app. 🎉 Our iOS & macOS version: ViaVera
OmniBot is an on-device AI agent built with native Android Kotlin and Flutter. Instead of stopping at chat, it focuses on the full loop of understand -> decide -> execute -> reflect.
Open the settings page from the left sidebar:
Then open the scenario model settings:
Note: Memory embedding requires an embedding model. For the best overall experience, the other scenarios should use multimodal or vision-capable models whenever possible.
The app usually initializes the Alpine environment automatically on startup, and you can also manage that environment from the same settings area.
You can ask OmniBot to install a skill by simply sending it the repository link. Recommended collection: https://github.com/OpenMinis/MinisSkills
Enable or disable skills from the skill repository:
Scheduled tasks execute subagent flows. Alarms are reminder-only. A subagent can be assigned a complete task and behaves like a full agent.
To use Codex mode with Codex running on a PC or Mac, start codex-bridge on the computer where the Codex CLI is installed and logged in:
npx @thuocean/codex-bridge
Choose the LAN address and token mode in the terminal setup UI, then scan the printed QR code from OpenOmniBot's Codex settings. For advanced options and troubleshooting, see the codex-bridge README.
3.47.2+17+20.19+ or 22.12+ and pnpm 10.28.0 (for WebUI development)git clone https://github.com/omnimind-ai/OpenOmniBot.git
cd OpenOmniBot
cd ui
flutter pub get
If Flutter reports Could not read script '.../ui/.android/include_flutter.groovy', run:
flutter clean
flutter pub get
The WebUI in webchat/ is a standalone React + TypeScript + Vite project. During local development, Vite serves the frontend with hot reload and proxies /webchat/api requests to the Android app's local service.
8899, but always use the address shown by the app./webchat):cd webchat
pnpm install --frozen-lockfile
VITE_WEBCHAT_PROXY_TARGET=http://192.168.1.20:8899 pnpm dev
On PowerShell, set the proxy target first:
$env:VITE_WEBCHAT_PROXY_TARGET = "http://192.168.1.20:8899"
pnpm dev
Open the URL printed by Vite (normally http://localhost:5173) and enter the Token copied from the app. Use pnpm dev for end-to-end API/SSE testing; the proxy keeps session cookies, realtime events, workspace access, and browser mirroring on the same local origin.
Before submitting WebUI changes, run:
cd webchat
pnpm run typecheck
pnpm run build
The production files are generated in webchat/dist/. Both dist/ and node_modules/ are local outputs and must not be committed.
Android builds handle the WebUI automatically: Gradle runs the locked pnpm install, executes the Vite production build, clears stale WebChat assets, and copies only dist/ into the APK. To verify this step without building the full app, run:
./gradlew :app:syncWebChatBundle -Ptarget=lib/main_standard.dart
Flutter Web is not part of this workflow.
Release APK builds use OMNIBOT_UPDATE_WORKER_URL as the default GUI VLM proxy
and receive the Gelab route from the update Worker. The upstream Gelab key stays
in the Worker. Debug APK builds use the OpenAI-compatible LLM API configured by
LLMTHU_API_BASE, LLMTHU_API_KEY, and LLMTHU_MODEL for normal LLM requests,
context compaction, and scene.vlm.operation.primary.
For local acceptance testing, Release builds can explicitly enable
-POOB_BUNDLE_LLMTHU_PROVIDER=1 to bundle the same LLMTHU_* configuration
for use out of the box. Regular Release and CI builds do not bundle this
configuration by default.
cd ..
./gradlew :app:installDevelopStandardDebug -Ptarget=lib/main_standard.dart
For acceptance testing on a physical device, use the repository's LLMTHU
installation script. It enables the LLMTHU provider by default and reads the
API key from LLMTHU_API_KEY in the current shell. If the key is missing, the
script fails immediately instead of producing an unusable test APK. Regular
Release and CI builds still do not automatically bundle the key.
export LLMTHU_API_KEY='your-api-key'
./scripts/install_release_llmthu_device.sh
OpenOmniBot/
├── app/ # Android host app: entry point, agent orchestration, system abilities, MCP, services
├── ui/ # Flutter Android UI: chat, settings, tasks, and memory
├── webchat/ # React + TypeScript WebUI; Vite builds the static bundle packaged by Android
├── baselib/ # Shared core libraries: database, storage, networking, model config, permissions
├── assists/ # Shared task lifecycle and chat/model coordination
├── uikit/ # Native overlay UI: floating ball, overlay panels, half-screen surfaces
└── ReTerminal/core/ # Embedded terminal experience modules
Thanks to developers from LINUX.DO and other communities for supporting OpenOmniBot.
Special thanks to these open-source projects:
|
WeChat Group Join the Discord community |
Dart
46.3%
Kotlin
43.5%
Java
3.9%
JavaScript
3.2%
Your on-phone / mobile AI Agent / Claw, capable of operating terminals and performing a wide range of tasks in the Android world || 你的手机 AI 代理,她可以操作终端,也可以完成 Android 世界的广泛任务
See the code
| Demo | Quick Start | Release | Issues |
OmniBot runs directly on your Android device and combines chat, agent tools, local workspaces, and system integrations in one app. 🎉 Our iOS & macOS version: ViaVera
OmniBot is an on-device AI agent built with native Android Kotlin and Flutter. Instead of stopping at chat, it focuses on the full loop of understand -> decide -> execute -> reflect.
Open the settings page from the left sidebar:
Then open the scenario model settings:
Note: Memory embedding requires an embedding model. For the best overall experience, the other scenarios should use multimodal or vision-capable models whenever possible.
The app usually initializes the Alpine environment automatically on startup, and you can also manage that environment from the same settings area.
You can ask OmniBot to install a skill by simply sending it the repository link. Recommended collection: https://github.com/OpenMinis/MinisSkills
Enable or disable skills from the skill repository:
Scheduled tasks execute subagent flows. Alarms are reminder-only. A subagent can be assigned a complete task and behaves like a full agent.
To use Codex mode with Codex running on a PC or Mac, start codex-bridge on the computer where the Codex CLI is installed and logged in:
npx @thuocean/codex-bridge
Choose the LAN address and token mode in the terminal setup UI, then scan the printed QR code from OpenOmniBot's Codex settings. For advanced options and troubleshooting, see the codex-bridge README.
3.47.2+17+20.19+ or 22.12+ and pnpm 10.28.0 (for WebUI development)git clone https://github.com/omnimind-ai/OpenOmniBot.git
cd OpenOmniBot
cd ui
flutter pub get
If Flutter reports Could not read script '.../ui/.android/include_flutter.groovy', run:
flutter clean
flutter pub get
The WebUI in webchat/ is a standalone React + TypeScript + Vite project. During local development, Vite serves the frontend with hot reload and proxies /webchat/api requests to the Android app's local service.
8899, but always use the address shown by the app./webchat):cd webchat
pnpm install --frozen-lockfile
VITE_WEBCHAT_PROXY_TARGET=http://192.168.1.20:8899 pnpm dev
On PowerShell, set the proxy target first:
$env:VITE_WEBCHAT_PROXY_TARGET = "http://192.168.1.20:8899"
pnpm dev
Open the URL printed by Vite (normally http://localhost:5173) and enter the Token copied from the app. Use pnpm dev for end-to-end API/SSE testing; the proxy keeps session cookies, realtime events, workspace access, and browser mirroring on the same local origin.
Before submitting WebUI changes, run:
cd webchat
pnpm run typecheck
pnpm run build
The production files are generated in webchat/dist/. Both dist/ and node_modules/ are local outputs and must not be committed.
Android builds handle the WebUI automatically: Gradle runs the locked pnpm install, executes the Vite production build, clears stale WebChat assets, and copies only dist/ into the APK. To verify this step without building the full app, run:
./gradlew :app:syncWebChatBundle -Ptarget=lib/main_standard.dart
Flutter Web is not part of this workflow.
Release APK builds use OMNIBOT_UPDATE_WORKER_URL as the default GUI VLM proxy
and receive the Gelab route from the update Worker. The upstream Gelab key stays
in the Worker. Debug APK builds use the OpenAI-compatible LLM API configured by
LLMTHU_API_BASE, LLMTHU_API_KEY, and LLMTHU_MODEL for normal LLM requests,
context compaction, and scene.vlm.operation.primary.
For local acceptance testing, Release builds can explicitly enable
-POOB_BUNDLE_LLMTHU_PROVIDER=1 to bundle the same LLMTHU_* configuration
for use out of the box. Regular Release and CI builds do not bundle this
configuration by default.
cd ..
./gradlew :app:installDevelopStandardDebug -Ptarget=lib/main_standard.dart
For acceptance testing on a physical device, use the repository's LLMTHU
installation script. It enables the LLMTHU provider by default and reads the
API key from LLMTHU_API_KEY in the current shell. If the key is missing, the
script fails immediately instead of producing an unusable test APK. Regular
Release and CI builds still do not automatically bundle the key.
export LLMTHU_API_KEY='your-api-key'
./scripts/install_release_llmthu_device.sh
OpenOmniBot/
├── app/ # Android host app: entry point, agent orchestration, system abilities, MCP, services
├── ui/ # Flutter Android UI: chat, settings, tasks, and memory
├── webchat/ # React + TypeScript WebUI; Vite builds the static bundle packaged by Android
├── baselib/ # Shared core libraries: database, storage, networking, model config, permissions
├── assists/ # Shared task lifecycle and chat/model coordination
├── uikit/ # Native overlay UI: floating ball, overlay panels, half-screen surfaces
└── ReTerminal/core/ # Embedded terminal experience modules
Thanks to developers from LINUX.DO and other communities for supporting OpenOmniBot.
Special thanks to these open-source projects:
|
WeChat Group Join the Discord community |
Dart
46.3%
Kotlin
43.5%
Java
3.9%
JavaScript
3.2%