English |
简体中文
你的端侧 AI 助手
|
Demo
|
Quick Start
|
Release
|
Issues
|
> OmniBot 直接运行在 Android 设备上,将聊天、Agent 工具、本地工作区与系统级集成整合在一个应用中。
> 🎉我们的iOS&macOS版本:https://github.com/omnimind-ai/ViaVera
OmniBot 是一个基于 Android 原生 Kotlin 与 Flutter 构建的端侧 AI Agent。与传统 AI Chat 不同,它关注的是 **从理解 -> 决策 -> 执行 -> 反馈的完整闭环**。
核心能力
- **工具生态扩展**:Skills、Alpine 环境、浏览器、MCP、安卓系统级工具等。
- **系统级能力**:支持定时任务、闹钟提醒、日历创建/查询/修改、音频播放控制。
- **个人上下文**:无需 root,按授权查询日历、联系人、通知、应用使用情况、位置、媒体文件、文档、短信与通话记录,并支持日程和联系人管理。
- **记忆系统**:支持短期与长期记忆嵌入。
- **生产力工具**:支持读写文件、浏览工作区、调用浏览器、调用终端。
快速开始
### 配置应用
从左侧栏打开设置页面:
然后前往场景模型配置:
说明:除了 `Memory embedding` 强制需要嵌入模型之外,其他场景为了获得更好的体验,建议优先使用多模态或视觉模型。
一般情况下,应用启动时会自动初始化 Alpine 环境,你也可以在这里自行管理环境。
使用场景
### 个人上下文
在“设置 → 应用权限授权 → 个人上下文”逐项开启。AI 使用共享的设备工具按需查询,查询结果可能发送给当前配置的模型,不会自动建立长期记忆。日历与通讯录的读取、写入分别授权;后台查询位置还需单独选择“始终允许”。大致位置及仅选定照片也可使用。
通知访问与接收小万消息通知的开关独立。授权后观察到的通知在本地保留最多 7 天、10000 条,排除系统备份,可手动清空;无法恢复授权前已消失的通知或系统遮蔽的内容。撤销授权后停止记录和查询,聊天记录不受影响。
文件查询先返回元数据,读取内容时才导入已有文件收件箱。可通过系统选择器授权文件或文件夹,并在同一入口撤销。短信和通话记录仅支持读取,能否授权取决于安装器和系统限制;不会申请默认短信、电话或助理身份。本功能不需要 Shizuku、root 或无障碍,也不读取其他应用的私有数据库。
设备 MCP 与内置 Agent 共用工具定义和执行服务。`context_capabilities` 返回真实授权状态;缺少权限不会自动弹窗或终止普通聊天。联系人修改使用查询返回的 `rawContactId` 和 `version`,只修改选定账户记录;日历查询支持 `offset` 分页,全天日程使用 UTC 日期和不含结束日的区间。
### Skills
你可以直接把 skills 仓库链接发给小万,让她帮你安装。推荐仓库:https://github.com/OpenMinis/MinisSkills
在技能仓库中可以选择开启或关闭某项技能:
### 定时任务
定时任务用于执行 subagent 流程;闹钟仅用于提醒。你也可以把一个完整任务交给 subagent,它会像完整 agent 一样执行。
### 浏览器
### Workspace
### Remote Codex bridge
如果希望在手机端使用运行在电脑上的 Codex 模式,请在已安装并登录 Codex CLI 的电脑上启动 `codex-bridge`:
```bash
npx @thuocean/codex-bridge
```
在终端交互中选择监听的局域网地址和 token 模式,然后在 OpenOmniBot 的 Codex 设置中扫码连接。更多选项和排障说明见 [codex-bridge README](tools/codex-bridge/README.md)。
开发指南
### 环境要求
- Flutter SDK `3.47.2+`
- JDK `17+`
- Node.js `20.19+` 或 `22.12+`、pnpm `10.28.0`(用于 WebUI 开发)
### 获取代码
```bash
git clone https://github.com/omnimind-ai/OpenOmniBot.git
cd OpenOmniBot
cd ui
flutter pub get
```
如果 Flutter 提示 `Could not read script '.../ui/.android/include_flutter.groovy'`,可以执行:
```bash
flutter clean
flutter pub get
```
### 本地开发 WebUI
`webchat/` 是独立的 React + TypeScript + Vite 项目。本地开发时由 Vite 提供热更新,并将 `/webchat/api` 请求代理到 Android 应用提供的本地服务。
1. 在 Android 设备上安装并启动 OpenOmniBot,确保电脑和设备位于同一个可信局域网。
2. 在应用中打开 **设置 > 本地服务**,启用服务并复制地址和 Token。默认端口是 `8899`,但应以应用实际显示的地址为准。
3. 从仓库根目录启动 WebUI 开发服务器。将下面的示例地址替换为 Android 本地服务地址,地址末尾不要添加 `/webchat`:
```bash
cd webchat
pnpm install --frozen-lockfile
VITE_WEBCHAT_PROXY_TARGET=http://192.168.1.20:8899 pnpm dev
```
PowerShell 使用以下方式设置代理地址:
```powershell
$env:VITE_WEBCHAT_PROXY_TARGET = "http://192.168.1.20:8899"
pnpm dev
```
打开 Vite 输出的地址(通常为 `http://localhost:5173`),输入从应用复制的 Token。端到端调试 API、SSE 实时事件、工作区和浏览器镜像时应使用 `pnpm dev`,开发代理会让这些请求和会话 Cookie 保持在同一本地域名下。
提交 WebUI 修改前执行:
```bash
cd webchat
pnpm run typecheck
pnpm run build
```
生产静态文件会生成到 `webchat/dist/`。`dist/` 和 `node_modules/` 都是本地产物,不应提交到仓库。
Android 构建会自动处理 WebUI:Gradle 使用锁文件安装依赖、执行 Vite 生产构建、清除旧 WebChat 资源,并且只将 `dist/` 复制进 APK。如需跳过完整 APK 构建、单独验证该流程,可以执行:
```bash
./gradlew :app:syncWebChatBundle -Ptarget=lib/main_standard.dart
```
此流程不再使用 Flutter Web。
### 构建并安装
安卓版本通过 `OMNIBOT_UPDATE_WORKER_URL` 访问网站后端,统一完成更新检查、
匿名统计、云服务门禁和官方视觉模型代理配置。默认地址为
`https://omnibot.omnimind.com.cn`,上游代理 Key 只保存在后端。
设置 → 关于小万 → 我要反馈使用同一网站表单,支持选择附件和可选联系方式;
迁移与发布配置见[集成说明](docs/website-backend-migration.md)。
Debug APK 统一使用 `LLMTHU_API_BASE`、`LLMTHU_API_KEY` 和
`LLMTHU_MODEL` 配置的 OpenAI-compatible LLM API,覆盖普通 LLM、上下文压缩
和 `scene.vlm.operation.primary`。
本地验收 Release 可显式传入 `-POOB_BUNDLE_LLMTHU_PROVIDER=1`,使用同一组
`LLMTHU_*` 配置完成开箱即用验收;普通 Release 和 CI 默认不内置该配置。
```bash
cd ..
./gradlew :app:installDevelopStandardDebug -Ptarget=lib/main_standard.dart
```
真机验收可以使用仓库提供的 LLMTHU 安装入口。它默认启用 LLMTHU
Provider,并从当前 shell 的 `LLMTHU_API_KEY` 读取密钥;未配置密钥时会直接
失败,不会生成无效的验收包。普通 Release 和 CI 仍不会自动内置密钥。
```bash
export LLMTHU_API_KEY='你的密钥'
./scripts/install_release_llmthu_device.sh
```
架构概览
```text
OpenOmniBot/
├── app/ # Android 主宿主模块:入口、Agent 编排、系统能力、MCP、前台服务
├── ui/ # Flutter Android UI 模块:聊天、设置、任务和记忆
├── webchat/ # React + TypeScript WebUI;由 Vite 构建并通过 Android 打包静态产物
├── baselib/ # 基础核心库:数据库、存储、网络、模型配置、权限等
├── assists/ # 公共任务生命周期与聊天/模型协调
├── uikit/ # 原生浮层 UI:悬浮球、覆盖层面板、半屏界面
└── ReTerminal/core/ # 内嵌终端体验相关模块
```
感谢 [LINUX.DO](linux.do) 等社区开发者对 OpenOmniBot 的支持。
特别感谢这些优秀的开源项目:
- https://github.com/RohitKushvaha01/ReTerminal
- https://github.com/OpenMinis