面向 Android 的移动端 GUI Agent 框架。
OpenGUI 让 AI Agent 能够看懂、理解并操作真实 Android 设备上的 App 界面。
## Demo Demo 视频即将补充。 第一版 Demo 会展示 OpenGUI 在真实 Android 设备上操作真实 App,包括屏幕理解、点击、输入和返回结构化结果。 ## Quick Start 最快的试用方式,是让 Claude Code 或 Codex 帮你完成启动。 ```text Read ./skills/open-gui-bootstrap/SKILL.md and help me run OpenGUI. Only ask me for phone-side actions. ``` 你需要准备: - 一台 Android 手机或模拟器 - 已开启 USB 调试 - 已开启 AccessibilityService - 用于真实任务执行的模型 API Key OpenGUI 会使用仓库内脚本启动后端,并安装 Android 客户端: ```bash cd server ./start.sh ``` ```bash cd client ./start.sh ``` 后端和 Android 客户端都跑起来后,发送第一个任务: ```bash cd server pnpm opengui -- devices --json pnpm opengui -- do "观察当前手机屏幕,简要描述你看到了什么,然后结束" --json ``` 手动安装指南:[`docs/get-started.md`](./docs/get-started.md)。 ## 近期更新 - `[2026.5.16]` 新增 [Codex / Claude Code 远程控制](./docs/codex-remote-control.zh-CN.md),提供本地 REST API、`pnpm opengui -- ...` CLI,以及 [`open-gui-remote-control`](./skills/open-gui-remote-control/SKILL.md) Skill,可从编码 Agent 下发 Android App 任务。 - `[2026.5.9]` 新增 [Discord IM 入口](./docs/DISCORD.zh-CN.md),支持前缀命令、Slash 命令、安全白名单和 guild-scoped 命令注册,可从 Discord 频道远程下发 Android 任务。 - `[2026.5.7]` 本地启动流程增强,Docker 方式启动后端时会避开常见的 PostgreSQL 和 Redis 端口冲突。 - `[2026.5.1]` 后端上手流程补齐 `.env.example`、启动检查提示和 graph agent 的 VLM 环境变量配置。 ## 你可以用 OpenGUI 做什么 OpenGUI 让 AI 操作真实的 Android 手机。 同一个仓库里,你可以直接做四类事情: - **操作主流 Android App**:让 AI 在真实手机上执行 X、Reddit、Hacker News、Telegram、微信、微博、小红书等移动任务。 - **运行现成工作流**:仓库已经包含可直接启动的后端、Android 客户端、待命派发链路,以及部分预置任务能力。 - **让 Claude 或 Codex 帮你跑起来**:把 [`skills/open-gui-bootstrap/SKILL.md`](./skills/open-gui-bootstrap/SKILL.md) 交给模型,直接用自然语言描述目标,让它处理安装、构建、安装 APK 和本地排障。 - **让 Codex 控制 Android App**:OpenGUI 启动后,把 [`skills/open-gui-remote-control/SKILL.md`](./skills/open-gui-remote-control/SKILL.md) 交给 Codex 或 Claude Code,用本地 CLI 列设备、下发任务并查询 execution 状态。 - **把手机当成远程 worker 使用**:通过飞书、Telegram、Discord 或 REST API 下发任务,让设备保持待命,并从后端拿回结构化结果。 - [加入 Discord 社区](https://discord.gg/pqHHw7XgJ3) ## 亮点 - **适合长时任务**:OpenGUI 面向长时移动工作流,任务可以持续运行数小时,并在过程中继续推进、复核和恢复。 - **任务能持续跑下去**:`Plan Supervisor` 维护任务列表和继续执行状态,`Executor Graph` 围绕当前设备状态运行截图、视觉分析、动作执行和 call-user 循环,`Summarizer` 在任务结束时输出结构化结果。 - **手机可以保持待命**:待命派发链路让设备可以通过飞书、Telegram、Discord 或 REST 入口接收远程任务。 - **模型可以按角色分工**:模型路由把规划侧和 VLM 执行侧拆开,便于按角色选择 provider。 - **整套系统围绕真实移动工作流组织**:graph、设备执行链路和模型分工已经在源码里落地。 ## 为什么 OpenGUI 不一样 OpenGUI 采用的是一套分层清晰的移动 operator system。 当前源码里可以直接看到这些关键部分: - `server/apps/backend/src/modules/graph-agent/graph/mobile-agent.graph.ts` 主图 - `server/apps/backend/src/modules/graph-agent/graph/executor.graph.ts` 设备执行子图 - `server/apps/backend/src/common/ws/standby.gateway.ts` 待命设备派发 - `client/core_network/.../StandbySocketManager.kt` 设备待命连接 - `client/core_accessibility/.../GestureService.kt` Android 侧动作执行 | 维度 | 典型手机 Agent Demo | OpenGUI | |---|---|---| | **执行模型** | 短时交互循环 | 主图 + executor 子图 | | **任务状态** | 常常停留在本地会话里 | 任务状态由后端 graph 持有 | | **设备链路** | 常见是电脑侧驱动手机 | Android 客户端自带待命与执行连接 | | **模型使用** | 一个主模型承担大部分工作 | 规划和 VLM 执行可以拆给不同 provider | | **远程运行** | 往往是附加能力 | 飞书、Telegram、Discord、REST API、待命派发已经在后端里 | ## 典型使用场景 - 打开 X 并采集某个主题的近期内容 - 在真实手机上阅读并总结 Reddit 或 Hacker News 帖子 - 从飞书、Telegram、Discord 或 REST API 远程触发手机任务 - 在 Android 设备上执行重复性的移动工作流 - 运行需要状态管理、复核和恢复机制的长时移动工作流 ## 当前限制 - 需要 Android 真机或模拟器。 - 需要开启 USB 调试和 AccessibilityService 权限。 - 执行质量会受到模型能力、App UI、网络状态和任务长度影响。 - 目前还不是 OS 级常驻助手;任务需要手动触发,或通过已配置的派发入口触发。 - 系统设计支持长时任务,但可靠性仍需要更多真实场景测试。 - 还需要补充更多可直接运行的任务示例和 benchmark。 ## Roadmap - 补充短 Demo 视频和更多真实 App 示例。 - 优化一键本地启动流程。 - 增加更多可直接运行的 phone-use 任务模板。 - 提升执行恢复和失败反馈能力。 - 增加 Android GUI Agent 可靠性 benchmark 任务。 - 完善模型配置和省钱混用方案文档。 ## 怎么使用 OpenGUI ### 1. 用 Claude 或 Codex 帮你跑起来 优先从 [`skills/open-gui-bootstrap/SKILL.md`](./skills/open-gui-bootstrap/SKILL.md) 开始。 推荐流程很简单: 1. 把 skill 交给 Claude 或 Codex 2. 直接用自然语言描述目标 3. 让模型处理后端 bootstrap、APK 构建、安装和本地排障 模型只应该在这些事情上打断你: - 连接手机或启动模拟器 - 允许 USB 调试 - 开启 AccessibilityService - 授予悬浮窗或电池权限 - 提供 API Key 或机器人密钥 后端和 Android client 跑起来后,可以继续使用 [`skills/open-gui-remote-control/SKILL.md`](./skills/open-gui-remote-control/SKILL.md),让 Codex 或 Claude Code 通过本地 CLI 控制手机: ```bash cd server pnpm opengui -- devices --json pnpm opengui -- do "观察当前手机屏幕,简要描述你看到了什么,然后结束" --json pnpm opengui -- status